📄 flightschedular.java
字号:
package com.tarena.abs.model;
import java.util.*;
/**
* 航班计划类型,用来描述由某个航空公司执行的某个定期航班
* 的计划表。例如:由中国国际航空公司执行的每天早上8:00从
* 北京起飞,上午10:00到达上海的CA1202就是一个航班计划。
* @author tangliang
*
*/
public class FlightSchedular implements java.io.Serializable{
private Long oid;
private String flightNumber;//航班号
private Calendar startDate;//开始执行日期
private Calendar endDate;//结束执行日期
private String fromAddress;//起飞地
private String toAddress;//目的地
private MyTime fromTime;//起飞时间
private MyTime toTime;//到达时间
private int length;//总航程
private PlaneModel plane;//执行飞机型号
private byte schedular;//班期表
private double price;//基准价格
//构造方法1
public FlightSchedular(String flightNumber,Calendar startDate,
Calendar endDate,String fromAddress,String toAddress,
MyTime fromTime,MyTime toTime,int length,PlaneModel plane,
double price) {
this.flightNumber = flightNumber;
//this.company=company;
this.startDate = startDate;
this.endDate = endDate;
this.fromAddress = fromAddress;
this.toAddress = toAddress;
this.fromTime = fromTime;
this.toTime = toTime;
this.length = length;
setPlane(plane);
this.price = price;
}
public FlightSchedular() {
super();
}
// 构造方法2
public FlightSchedular(String flightNumber){
this.flightNumber=flightNumber;
//company=new AirlineCompany("CA","100");
}
public void setPlane(PlaneModel p){
if(p.getMaxLength()<this.length){
System.out.println("对不起,不能将 "+p.getModel()+" 型号的飞机设置为"+this.flightNumber+"("+this.fromAddress+"--"+this.toAddress+") 的执行飞机。");
System.out.println("--最大航程不够!");
return;
}
this.plane=p;
}
//以下为setXXX()和getXXX()方法
/**
* 该方法根据给定的日期和折扣生成一个航班对象。
* @param date 航班日期
* @param priceOff 折扣
* @return 生成的航班对象
*/
public Flight createNewFlight(Calendar date,double priceOff){
//指定日期有,则创建
if(hasFlight(date)){
return new Flight(this,date,priceOff);
}
System.out.println("对不起,给定的日期没有航班!");
return null;
}
/**
* 该方法根据给定的日期生成一个航班对象,折扣默认为1.0。
* @param date 航班日期
* @return 生成的航班对象
*/
public Flight createNewFlight(Calendar date){
return createNewFlight(date,1.0);
}
/**
* 该方法用来判断在当前航班计划下给定的日期是否有航班。
* @param date 日期
* @return 如果该日期有航班,则返回true,否则返回false。
*/
public boolean hasFlight(Calendar date){
// 星期7123456,
//对应值1234567
int weekDay=date.get(Calendar.DAY_OF_WEEK);
//1.时间在此航班计划时间段外,before是Date类的方法
if(date.before(this.startDate)|| date.after(this.endDate)){
return false;
}
//
//星期4,weekday=5,1<<(7-5)=000.0100
//2.航班星期是否包含于航班计划
if((this.schedular & (1<<(7-weekDay)))!=0){
return true;
}
return false;
}
/**
* 该方法返回给定起始日期和结束日期之间的所有航班。
* @param startDate 起始日期
* @param endDate 结束日期
* @return 航班集合
*/
public Set<Flight> getAllFlights(Calendar startDate,Calendar endDate){
HashSet<Flight> hs=new HashSet<Flight>();
//中间日期day
Calendar day=(Calendar)startDate.clone();
for(;day.compareTo(endDate)<=0;day.add(Calendar.DAY_OF_MONTH,1)){
if(hasFlight(day)){
Calendar tempDay=(Calendar)day.clone();
hs.add(this.createNewFlight(tempDay));
}
}
return hs;
}
/**
* 该方法返回本航班计划下的所有航班。
* @return 所有航班集合
*/
public Set<Flight> getAllFlights(){
return getAllFlights(this.startDate,this.endDate);
}
/**
* 该方法返回给定日期范围内的所有航班,并按给定的比较规则排序。
* @param start 起始日期
* @param end 结束日期
* @param com 比较器
* @return 所有航班的集合
*/
public SortedSet<Flight> allFightsSorted(Calendar start,Calendar end,Comparator<Flight> com){
TreeSet<Flight> ts=new TreeSet<Flight>(com);
ts.addAll(getAllFlights(start,end));
return ts;
}
/**
* 该方法返回本航班计划下的所有航班对象的集合,并按给定的比较规则排序。
* @param com 比较规则
* @return 所有航班的集合
*/
public SortedSet<Flight> allFightsSorted(Comparator<Flight> com){
TreeSet<Flight> ts=new TreeSet<Flight>(com);
ts.addAll(getAllFlights());
return ts;
}
//hashCode() and equals()
public int hashCode(){
return flightNumber.hashCode();
}
public boolean equals(Object obj){
if(obj.getClass()==FlightSchedular.class){
FlightSchedular fls=(FlightSchedular)obj;
if(fls.getFlightNumber().equals(this.getFlightNumber())){
return true;
}
}
return false;
}
public Long getOid() {
return oid;
}
public void setOid(Long oid) {
this.oid = oid;
}
public String getFlightNumber() {
return flightNumber;
}
public void setFlightNumber(String flightNumber) {
this.flightNumber = flightNumber;
}
public Calendar getStartDate() {
return startDate;
}
public void setStartDate(Calendar startDate) {
this.startDate = startDate;
}
public Calendar getEndDate() {
return endDate;
}
public void setEndDate(Calendar endDate) {
this.endDate = endDate;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public MyTime getFromTime() {
return fromTime;
}
public void setFromTime(MyTime fromTime) {
this.fromTime = fromTime;
}
public MyTime getToTime() {
return toTime;
}
public void setToTime(MyTime toTime) {
this.toTime = toTime;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public byte getSchedular() {
return schedular;
}
public void setSchedular(byte schedular) {
this.schedular = schedular;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public PlaneModel getPlane() {
return plane;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -