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();
}
}