飞机航班操作系统--运用集合与排序
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(); } }