?? flightscheduler.java
字號:
package com.toa.abs.model;
import java.util.*;
/**
* 航班計劃類型,用來描述由某個航空公司執行的某個定期航班
* 的計劃表。例如:由中國國際航空公司執行的每天早上8:00從
* 北京起飛,上午10:00到達上海的CA1202就是一個航班計劃。
* @author tangliang
*
*/
public class FlightScheduler implements java.io.Serializable{
private String flightNumber;//航班號
private Calendar startDate;//開始執行日期
private Calendar endDate;//結束執行日期
private String fromAddress;//起飛地
private String toAddress;//目的地
private Time fromTime;//起飛時間
private Time toTime;//到達時間
private int length;//總航程
private PlaneModel plane;//執行飛機型號
private byte schedular;//班期表
private double price;//基準價格
//構造方法1
public FlightScheduler(String flightNumber,Calendar startDate,
Calendar endDate,String fromAddress,String toAddress,
Time fromTime,Time toTime,int length,PlaneModel plane,
double price) {
this.flightNumber = flightNumber;
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 FlightScheduler(String flightNumber){
this.flightNumber=flightNumber;
}
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 double getPrice() {
return price;
}
public Calendar getEndDate() {
return endDate;
}
public String getFlightNumber() {
return flightNumber;
}
public String getFromAddress() {
return fromAddress;
}
public Time getFromTime() {
return fromTime;
}
public int getLength() {
return length;
}
public PlaneModel getPlane() {
return plane;
}
public byte getSchedular() {
return schedular;
}
public Calendar getStartDate() {
return startDate;
}
public String getToAddress() {
return toAddress;
}
public Time getToTime() {
return toTime;
}
public void setEndDate(Calendar endDate) {
this.endDate = endDate;
}
public void setFlightNumber(String flightNumber) {
this.flightNumber = flightNumber;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public void setFromTime(Time 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(Calendar startDate) {
this.startDate = startDate;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public void setToTime(Time toTime) {
this.toTime = toTime;
}
/**
* 該方法根據給定的日期和折扣生成一個航班對象。
* @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){
int weekDay=date.get(Calendar.DAY_OF_WEEK);
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(Calendar startDate,Calendar endDate){
HashSet<Flight> hs=new HashSet<Flight>();
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()==FlightScheduler.class){
FlightScheduler fls=(FlightScheduler)obj;
if(fls.getFlightNumber().equals(this.getFlightNumber())){
return true;
}
}
return false;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -