[Java] 用泛型数组实现基于控制台的航班信息查询|增添程序

来源:互联网 发布:绿茶软件园源码 编辑:程序博客网 时间:2024/05/18 03:22

OOP(机试)


程序基本要求

一、项目名称: Air Infomation Programming 基于控制台的航班信息程序,简称AIP

二、具体要求如下:

(1)显示航班信息程序主菜单,如图-1所示,包括:

  • 1)列出所有航班
  • 2)按起飞时间查询
  • 3)按目的地查询
  • 4)删除航班
  • 5)更新航班
  • 6)退出系统

(2)列出所有航班:查出所有航班的信息,以列表形式显示,包括:编号,航班号,目的地,起飞日期。

(3)按起飞时间查询:输入起飞时间(格式如2011-2-25),查出所有这一天的航班。

(4)按目的地查询:输入目的地,查出所有飞往此地的航班。

(5)删除航班:删除指定编号的航班。

(6)更新航班:更新指定编号的航班。

(7)退出系统。

三、类的设计

需要定义如下类

  • 航班信息实体类(AirInfo)

    • 航班编号(id)
    • 航班号(flight_number)
    • 目的地(destination)
    • 起飞日期(flight_date)
  • 航班信息管理类AirInfoManager类
  • 程序入口类TestAirInfo类

四、具体要求及推荐实现步骤

  1. 创建实体类AirInfo,属性私有化,根据业务提供需要的构造方法和setter/getter方法。
  2. 创建航班管理AirInfoManager类,在类中提供列出所有航班的方法,按起飞时间查询的方法、按目的地查询的方法、删除航班的方法、更新航班的方法、退出程序的方法。
  3. 创建TestAirInfo类,启动和运行程序。
  4. 航班的信息用ArrayList(或数组)保存。
  5. 要求代码规范,命名正确。

源代码

// AirInfo.javapublic class AirInfo {        /**航班编号(id)          *航班号(flight_number)          *目的地(destination)          *起飞日期(flight_date)          */    private int id;    private String flight_number;    private String destination;    private String flight_date;    public AirInfo(int id, String flight_number, String destination, String flight_date){        this.id=id;        this.flight_number=flight_number;        this.destination=destination;        this.flight_date=flight_date;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getFlight_number() {        return flight_number;    }    public void setFlight_number(String flight_number) {        this.flight_number = flight_number;    }    public String getDestination() {        return destination;    }    public void setDestination(String destination) {        this.destination = destination;    }    public String getFlight_date() {        return flight_date;    }    public void setFlight_date(String flight_date) {        this.flight_date = flight_date;    }}

//AirInfoManager.javaimport java.util.*;public class AirInfoManager {    //列出所有航班的方法    public void all_flight(ArrayList<AirInfo> flight){        System.out.println("编号\t 航班号\t目的地\t\t起飞日期");        for(AirInfo e:flight)        System.out.println(e.getId()+"\t"+e.getFlight_number()+"\t"+e.getDestination()+"        "+e.getFlight_date());    }    //按起飞时间查询的方法    public void inquiry_date(ArrayList<AirInfo> flight){        System.out.print("请输入日期:");        Scanner in=new Scanner(System.in);        String date=in.next();        for(AirInfo e:flight)        {            if(e.getFlight_date().equals(date)){            System.out.println("编号\t 航班号\t目的地\t\t起飞日期");            System.out.println(e.getId()+"\t"+e.getFlight_number()+"\t"+e.getDestination()+"        "+e.getFlight_date());            }        }    }    //按目的地查询的方法    public void inquiry_destination(ArrayList<AirInfo> flight){        System.out.print("请输入目的地:");        Scanner in=new Scanner(System.in);        String destination=in.next();        for(AirInfo e:flight)        {            if(e.getDestination().equals(destination)){            System.out.println("编号\t 航班号\t目的地\t\t起飞日期");                System.out.println(e.getId()+"\t"+e.getFlight_number()+"\t"+e.getDestination()+"        "+e.getFlight_date());            }        }    }    //删除航班的方法    /*     * 方法一:用remove(index)方式删除记录,此处需要注意的是调用Iterator方法,     * 避免产生ConcurrentModificationException异常     *    public void delete_flight(ArrayList<AirInfo> flight){        System.out.print("请输入需要删除的航班编号:");        Scanner in=new Scanner(System.in);        int id=in.nextInt();        Iterator<AirInfo> iterator = flight.iterator();        while(iterator.hasNext()){            AirInfo e = iterator.next();            if(e.getId()==id){            iterator.remove();            System.out.println("删除成功!");            }        }    }    */    /*     * 方法二:将需要删除的记录用一个ArrayList()类包装起来,     * 用removeAll(Collection<?> c)方法将其删除     */    public void delete_flight(ArrayList<AirInfo> flight){        System.out.print("请输入需要删除的航班编号:");        Scanner in=new Scanner(System.in);        List delList = new ArrayList();        int id=in.nextInt();        for(AirInfo e:flight)        {            if(e.getId()==(id))                delList.add(e);        }        flight.removeAll(delList);        System.out.println("删除成功!");    }    //更新航班的方法    public void update_flight(ArrayList<AirInfo> flight){        Scanner in=new Scanner(System.in);        int id;        String flight_number,destinaton,flight_date;        System.out.print("请输入需要更新的航班编码:");        id=in.nextInt();        System.out.print("请输入新的航班号:");        flight_number=in.next();        System.out.print("请输入新的目的地:");        destinaton=in.next();        System.out.print("请输入新的起飞时间:");        flight_date=in.next();        flight.add(new AirInfo(id,flight_number,destinaton,flight_date));        System.out.println("更新成功!");    }    //退出系统的方法        public void exit(){        System.out.println("成功退出系统!");        System.exit(0);       }}

//TestAirInfo.javaimport java.util.ArrayList;import java.util.Scanner;//启动和运行程序public class TestAirInfo {    public static void main(String[] args) {        AirInfoManager airInfoManager=new AirInfoManager();            //用Arraylist表示航班信息            ArrayList<AirInfo> flight=new ArrayList<>();            //为数组增加记录            flight.add(new AirInfo(1,"001","beijing","2016-1-1"));            flight.add(new AirInfo(2,"002","shanghai","2016-2-20"));            flight.add(new AirInfo(3,"003","guangzhou","2016-2-24"));        Scanner in=new Scanner(System.in);        while(true){        System.out.print("请选择操作(1.列出所有航班,2.按起飞时间查询,3.按目的地查询,4.删除航班,5.更新航班,6.退出系统)");        switch(in.nextInt()){        case 1:            airInfoManager.all_flight(flight);            break;        case 2:            airInfoManager.inquiry_date(flight);            break;        case 3:            airInfoManager.inquiry_destination(flight);            break;        case 4:            airInfoManager.delete_flight(flight);            break;        case 5:            airInfoManager.update_flight(flight);            break;        case 6:            airInfoManager.exit();            default:System.out.println("对不起,您输入的数字无效。请输入1~6之间的数字:");        }        System.out.println();        }    }}

程序运行截图

1

1

1

1

1

1

1


学习总结:

  1. 在Eclipse控制台下,光标不能自动定位到下一行,需手动按下Enter键,跳转到下一行,再输入。
  2. 对于ArrayList<>泛型数组,remove()和removeall()方法在实际使用中的区别:

    • remove(Object o)移除此列表中首次出现的指定元素(如果存在)。如果列表不包含此元素,则列表不做改动。
    • removeAll(Collection

仍需改进的地方:

  • 将航班信息列表以表格的形式存储在数据库中。
  • 将控制台交互升级为应用程序的窗体交互。

存在的问题:

  • AirInfoManager.java的删除航班的方法中,将flight.removeAll(delList)方法改为flight.remove(delList)时程序无法进行删除操作,但不会报错,只是该条记录未被删除。

参考资料:

  • Java ConcurrentModificationException异常原因和解决方法
    http://www.cnblogs.com/dolphin0520/p/3933551.html
  • Java™ Platform, Standard Edition 8 API Specification
0 0
原创粉丝点击