飞机航班操作系统--运用集合与排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

/*    飞机航班操作系统
 *     1.添加航班    字段    起飞地、目的地、起飞时间、飞行时长、航班编号
 *     2.删除航班,输入编号,删除航班
 *     3.查询航班,按起飞地查询,按目的地查询
 *     4.显示所有航班,按起飞时间排序,按飞行时长排序,按编号排序
 */
public class FlightMenu {
    private ArrayList<Flight> list = new ArrayList<>();
    private Time time = new Time();
    Scanner in = new Scanner(System.in);
    {
        list.add(new Flight("云南", "阿姆斯特丹", "5:10", "5:20", "KB520"));
        list.add(new Flight("吉隆坡", "北京", "6:00", "6:20", "MH370"));
        list.add(new Flight("厦门", "西雅图", "8:40", "7:45", "ZB565"));
        list.add(new Flight("深圳", "北京", "11:30", "3:05", "XM315"));
    }

    public void menu() {

        String choose;
        System.out.println("**********航班管理**********");
        do {
            System.out.println("\t1.添加航班\n\t2.删除航班\n\t3.查询航班\n\t4.显示所有航班\n0.退出");
            System.out.print("请选择:");
            choose = in.next();
            switch (choose) {
            case "1":
                addFight();
                break;
            case "2":
                deleteFight();
                break;
            case "3":
                queryFight();
                break;
            case "4":
                showFight();
                break;
            case "0":
                System.out.println("over");
                break;
            default:
                System.out.println("输入错误!");
            }
        } while (!choose.equals("0"));
        in.close();
    }

    private void addFight() {
        System.out.print("请输入起飞地:");
        String str1 = in.next();
        System.out.print("请输入目的地:");
        String str2 = in.next();
        System.out.print("请输入起飞时间(00:00):");
        String str3 = in.next();
        time.convert(str3);
        System.out.print("请输入飞行时长(00:00):");
        String str4 = in.next();
        time.convert(str4);
        System.out.print("请输入航班编号:");
        String str5 = in.next();
        if (findNumber(str5) == -1) {
            list.add(new Flight(str1, str2, str3, str4, str5));
            System.out.println("添加成功!");
            Collections.sort(list, new CompareStartTime(time));
        } else
            System.out.println("该航班已存在");
    }

    private void deleteFight() {
        System.out.print("请输入要删除航班的编号:");
        int num = findNumber(in.next());
        if (num != -1) {
            list.remove(list.get(num));
            System.out.println("删除成功");
        } else
            System.out.println("没有找到该编号");
    }

    private void queryFight() {
        System.out.println("1.按起飞地查询\t2.按目的地查询");
        System.out.print("请选择:");
        String choose = in.next();
        if (choose.equals("1")) {
            System.out.print("请输入起飞地:");
            int num = findStart(in.next());
            if (num != -1)
                System.out.println("没找到起飞地");
        } else if (choose.equals("2")) {
            System.out.print("请输入目的地:");
            int num = findEnd(in.next());
            if (num != -1)
                System.out.println("没有找到目的地");
        } else
            System.out.println("输入错误");
    }

    private void showFight() {
        System.out.println("\t\t\t\t****按起飞时间排序****");
        ergodic();
        System.out.println("1.按飞行时长排序\t2.按编号排序");
        System.out.print("请选择:");
        String choose = in.next();
        switch (choose) {
        case "1":
            list.sort(new CompareFlyTime(time));
            System.out.println("\t\t\t\t****按起飞行时长排序****");
            ergodic();
            Collections.sort(list, new CompareStartTime(time));
            break;
        case "2":
            Collections.sort(list, new CompareNumber(time));
            System.out.println("\t\t\t\t****按起编号排序****");
            ergodic();
            Collections.sort(list, new CompareStartTime(time));
            break;
        default:
            System.out.println("输入错误");
        }
    }

    private void ergodic() {
        for (Flight flight : list) {
            System.out.println(flight.toString());
        }
    }

    private int findNumber(String number) {
        for (int i = 0; i < list.size(); i++) {
            Flight flight = list.get(i);
            if (flight.getNumber().equals(number))
                return i;
        }
        return -1;
    }

    private int findStart(String start) {
        int num = -1;
        for (int i = 0; i < list.size(); i++) {
            Flight flight = list.get(i);
            if (flight.getStartLand().equals(start)) {
                System.out.println(list.get(i).toString());
                num = i;
            }
        }
        return num;
    }

    private int findEnd(String end) {
        int num = -1;
        for (int i = 0; i < list.size(); i++) {
            Flight flight = list.get(i);
            if (flight.getEndLand().equals(end)) {
                System.out.println(list.get(i).toString());
                num = i;
            }
        }
        return num;
    }

}

class Time {
    public static int convert(String time) throws IllegalArgumentException {
        String[] str = time.split(":");
        int hour = 0;
        int minute = 0;
        if (str.length != 2)
            throw new IllegalArgumentException("时间错误");
        try {
            hour = Integer.parseInt(str[0]);
            minute = Integer.parseInt(str[1]);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("时间错误");
        }
        if (hour > 23 || hour < 0 || minute > 59 || minute < 0)
            throw new IllegalArgumentException("时间错误");
        return hour * 60 + minute;
    }
}

class CompareStartTime implements Comparator<Flight> {
    Time time;

    public CompareStartTime(Time time) {
        super();
        this.time = time;
    }

    @Override
    public int compare(Flight o1, Flight o2) {
        int num = time.convert(o1.getStartTime()) - time.convert(o2.getStartTime());
        return num == 0 ? 1 : num;
    }

}

class CompareFlyTime implements Comparator<Flight> {
    Time time;

    public CompareFlyTime(Time time) {
        super();
        this.time = time;
    }

    @Override
    public int compare(Flight o1, Flight o2) {
        int num = time.convert(o1.getFlyTime()) - time.convert(o2.getFlyTime());
        return num == 0 ? 1 : num;
    }

}

class CompareNumber implements Comparator<Flight> {
    Time time;

    public CompareNumber(Time time) {
        super();
        this.time = time;
    }

    @Override
    public int compare(Flight o1, Flight o2) {
        return o1.getNumber().compareTo(o2.getNumber());
    }

}

 

public class Flight {
    private String startLand;
    private String endLand;
    private String startTime;
    private String flyTime;
    private String number;

    public Flight(String startLand, String endLand, String startTime, String flyTime, String number) {
        super();
        this.startLand = startLand;
        this.endLand = endLand;
        this.startTime = startTime;
        this.flyTime = flyTime;
        this.number = number;
    }

    public String getStartLand() {
        return startLand;
    }

    public void setStartLand(String startLand) {
        this.startLand = startLand;
    }

    public String getEndLand() {
        return endLand;
    }

    public void setEndLand(String endLand) {
        this.endLand = endLand;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public String getFlyTime() {
        return flyTime;
    }

    public void setFlyTime(String flyTime) {
        this.flyTime = flyTime;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "起飞地:" + startLand + "\t 目的地:" + endLand + "\t起飞时间:" + startTime + "\t飞行时长:" + flyTime + "\t航班编号:"
                + number;
    }

}

 

public class Test {
    public static void main(String[] args) {
        FlightMenu fm = new FlightMenu();
        fm.menu();
    }
}

 

posted @ 2017-07-07 10:19  雲淡、風輕  阅读(575)  评论(0编辑  收藏  举报