⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flightschedular.java

📁 航空售票系统的代码
💻 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 + -