📄 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 static final long serialVersionUID = 6550197647448364406L;
private String flightNumber;//航班号
private AirlineCompany company;//所属航空公司
private MyDate startDate;//开始执行日期
private MyDate 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,AirlineCompany company,MyDate startDate,
MyDate 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;
}
// 构造方法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()方法
public AirlineCompany getCompany() {
return company;
}
public double getPrice() {
return price;
}
public MyDate getEndDate() {
return endDate;
}
public String getFlightNumber() {
return flightNumber;
}
public String getFromAddress() {
return fromAddress;
}
public MyTime getFromTime() {
return fromTime;
}
public int getLength() {
return length;
}
public PlaneModel getPlane() {
return plane;
}
public byte getSchedular() {
return schedular;
}
public MyDate getStartDate() {
return startDate;
}
public String getToAddress() {
return toAddress;
}
public MyTime getToTime() {
return toTime;
}
public void setCompany(AirlineCompany company) {
this.company = company;
}
public void setEndDate(MyDate endDate) {
this.endDate = endDate;
}
public void setFlightNumber(String flightNumber) {
this.flightNumber = flightNumber;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public void setFromTime(MyTime fromTime) {
this.fromTime = fromTime;
}
public void setLength(int length) {
this.length = length;
}
public void setPrice(double price) {
this.price = price;
}
public void setSchedular(byte schedular) {
this.schedular = schedular;
}
public void setStartDate(MyDate startDate) {
this.startDate = startDate;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public void setToTime(MyTime toTime) {
this.toTime = toTime;
}
/**
* 该方法根据给定的日期和折扣生成一个航班对象。
* @param date 航班日期
* @param priceOff 折扣
* @return 生成的航班对象
*/
public Flight createNewFlight(MyDate 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(MyDate date){
return createNewFlight(date,1.0);
}
/**
* 该方法用来判断在当前航班计划下给定的日期是否有航班。
* @param date 日期
* @return 如果该日期有航班,则返回true,否则返回false。
*/
public boolean hasFlight(MyDate date){
int weekDay=date.getWeekDay();
if(date.before(this.startDate)|| date.after(this.endDate)){
return false;
}
if((this.schedular & (1<<(7-weekDay)))!=0){
return true;
}
return false;
}
/**
* 该方法返回给定起始日期和结束日期之间的所有航班。
* @param startDate 起始日期
* @param endDate 结束日期
* @return 航班集合
*/
public Set<Flight> getAllFlights(MyDate startDate,MyDate endDate){
HashSet<Flight> hs=new HashSet<Flight>();
MyDate day=(MyDate)startDate.clone();
for(;day.compareTo(endDate)<=0;day.add(Calendar.DAY_OF_MONTH,1)){
if(hasFlight(day)){
MyDate tempDay=(MyDate)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(MyDate start,MyDate 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;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -