?? flightschedular.java
字號(hào):
package com.tarena.abs.model;
import java.util.*;
import java.io.Serializable;
/**航班計(jì)劃類用來描述一個(gè)航班計(jì)劃,該類不包含具體的航班日期,
* 只給一個(gè)周計(jì)劃表。
*/
public class FlightSchedular implements Serializable{
private String number;//航班號(hào)
private String fromAdd;//出發(fā)地
private String toAdd;//目的地
private MyDate startDate;
private MyDate endDate;
private MyTime fromTime;//起飛時(shí)間
private MyTime toTime;//到達(dá)時(shí)間
private int length;//總里程
private PlaneModel plane;//執(zhí)行機(jī)型
private int schedular;//周計(jì)劃表
private int totalPrice;//全價(jià)
private static final long serialVersionUID = 585764319801237L;
/**
* 構(gòu)造方法,該構(gòu)造方法通過屬性來構(gòu)造航班計(jì)劃對(duì)象。
*/
public FlightSchedular( String number,String fromAdd, String toAdd,
MyDate startDate,MyDate endDate,MyTime fromTime, MyTime toTime,
int length, PlaneModel plane, int schedular, int price) {
this.number = number;
this.fromAdd = fromAdd;
this.toAdd = toAdd;
this.startDate=startDate;
this.endDate=endDate;
this.fromTime = fromTime;
this.toTime = toTime;
this.length = length;
this.setPlane(plane);
this.schedular = schedular;
totalPrice = price;
}
public PlaneModel getPlane() {
return plane;
}
/**
* 該方法負(fù)責(zé)為航班計(jì)劃設(shè)置執(zhí)行的飛機(jī)機(jī)型,該方法檢查機(jī)型的最大航程
* 是否大于航班的里程。
* @return void
*/
public void setPlane(PlaneModel plane) {
if(plane.getMaxLine()>this.length){
this.plane =plane;
}
else{
System.out.println("不能將此型號(hào)飛機(jī)設(shè)為本航班的執(zhí)行飛機(jī)!");
System.out.println("飛機(jī)型號(hào):"+plane.getModel()+" 最大續(xù)飛里程:"+plane.getMaxLine());
System.out.println("航班編號(hào):"+this.number+" 航班里程:"+this.length);
}
}
public String getFromAdd() {
return fromAdd;
}
public MyTime getFromTime() {
return fromTime;
}
public int getLength() {
return length;
}
public String getNumber() {
return number;
}
public String getToAdd() {
return toAdd;
}
public int getTotalPrice() {
return totalPrice;
}
public MyTime getToTime() {
return toTime;
}
public int getSchedular() {
return schedular;
}
public void setSchedular(int schedular) {
this.schedular = schedular;
}
public MyDate getEndDate() {
return endDate;
}
public MyDate getStartDate() {
return startDate;
}
/**
* 該方法用來判斷某天是否有航班。
* @param day WeekDay對(duì)象,用來代表一周的某一天。
* @return 如果周
*/
public boolean hasFlight(WeekDay day){
int flag=0;
flag=this.schedular & (1<<day.getDay()-1);
return flag!=0;
}
public boolean hasFlight(int day){
return (this.schedular & (1<<day-1))!=0;
}
public boolean hasFlight(MyDate date){
return (this.schedular &(1<<date.get(Calendar.DAY_OF_WEEK)-1))!=0;
}
/**
* 該方法用來生成一個(gè)當(dāng)前航班計(jì)劃下的航班對(duì)象。通過兩個(gè)參數(shù)來確定
* 航班,日期(MyDate date)和折扣(double off)。
* @param date
* @param off
* @return 返回一個(gè)Flight對(duì)象或返回null
*/
public Flight createNewFlight(MyDate date,double off){
if(hasFlight(date)){
MyDate tmp=(MyDate)date.clone();
return this.new Flight(tmp,off);
}
else{
System.out.println("對(duì)不起,日期與航班計(jì)劃的班期不符");
return null;
}
}
/**
* 僅通過date來生成一個(gè)航班對(duì)象并返回。
* @param date
* @return
*/
public Flight createNewFlight(MyDate date){
return createNewFlight(date,1.0);
}
/**
* 覆蓋的equals方法,認(rèn)為當(dāng)兩個(gè)航班計(jì)劃對(duì)象
* 的航班號(hào)相同的時(shí)候,這兩個(gè)對(duì)象就相同。
*/
public boolean equals(Object o){
if(o instanceof FlightSchedular){
FlightSchedular fs=(FlightSchedular)o;
return fs.number.equalsIgnoreCase(this.number);
}
return false;
}
/**
* 覆蓋的hashCode方法,返回航班計(jì)劃對(duì)象的航班號(hào)的hashCode().
*/
public int hashCode(){
return number.hashCode();
}
/**
* 返回該航班計(jì)劃下的某段時(shí)間內(nèi)的所有航班的集合。
* @param start
* @param end
* @return
*/
public HashSet<Flight> allFlightSet(MyDate start,MyDate end){
HashSet<Flight> hs=new HashSet<Flight>();
MyDate day;
for(day=start;day.compareTo(end)<=0;day.add(Calendar.DAY_OF_MONTH,1)){
if(hasFlight(day)){
hs.add(this.createNewFlight(day));
}
}
return hs;
}
public HashSet<Flight> allFlightSet(){
return allFlightSet(this.startDate,this.endDate);
}
/**
* 返回該航班計(jì)劃下的某段時(shí)間的所有航班的集合,并按航班的日期來排序。
* @param start
* @param end
* @return
*/
public TreeSet<Flight> allFightSorted(MyDate start,MyDate end,Comparator<Flight> com){
TreeSet<Flight> ts=new TreeSet<Flight>(com);
ts.addAll(allFlightSet(start,end));
return ts;
}
public TreeSet<Flight> allFightSorted(Comparator<Flight> com){
TreeSet<Flight> ts=new TreeSet<Flight>(com);
ts.addAll(allFlightSet());
return ts;
}
/**
* Flight類是一個(gè)內(nèi)部類,用來描述一個(gè)確定日期的航班對(duì)象。
* @author tony.tang
*
*/
public class Flight implements Comparable{
private FlightSchedular schedular;//航班所屬的航班計(jì)劃。
private MyDate date;//航班的日期。
private int remainSeat;//航班的剩余座位數(shù)
private double priceOff;//航班的折扣
/**
* 構(gòu)造方法,使用一個(gè)日期和一個(gè)折扣值來構(gòu)造一個(gè)航班對(duì)象。
* 該航班對(duì)象使用外部類的當(dāng)前對(duì)象作為其航班計(jì)劃屬性。
* @param date
* @param off
*/
private Flight(MyDate date,double off){
this.date=date;
this.priceOff=off;
this.schedular=FlightSchedular.this;
this.remainSeat=this.schedular.getPlane().getMaxSeat();
}
/**
* 實(shí)現(xiàn)的compareTo方法,用來比較兩個(gè)航班對(duì)象的大小,
* @param
* @return
*/
public int compareTo(Object o){
Flight f=(Flight)o;
return this.date.compareTo(f.date);
}
/**
* 覆蓋的equals方法,當(dāng)兩個(gè)航班對(duì)象的航班計(jì)劃和日期都相同時(shí),它們相同。
*/
public boolean equals(Object o){
if(o instanceof Flight){
Flight f=(Flight)o;
return (f.schedular.equals(this.schedular) &&
f.date.equals(this.date));
}
return false;
}
/**
* 覆蓋的hashCode方法。
*/
public int hashCode(){
return this.date.hashCode()^this.schedular.hashCode();
}
public String toString(){
return this.schedular.number+":"+this.date;
}
public double getPriceOff() {
return priceOff;
}
public void setPriceOff(double priceOff) {
this.priceOff = priceOff;
}
public FlightSchedular getSchedular() {
return schedular;
}
public Calendar getDate() {
return date;
}
public int getRemainSeat() {
return remainSeat;
}
public void setRemainSeat(int remainSeat) {
this.remainSeat = remainSeat;
}
}//Flight類結(jié)束
}//FlightSchedular類結(jié)束。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -