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

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.java

public 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.java
import 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.java
import 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)时程序无法进行删除操作,但不会报错,只是该条记录未被删除。

参考资料:

OOP(机试)[具体要求在压缩文档中给出] 项目名称: Air Infomation System 基于控制台航班信息系统,简称AIS 具体要求如下: (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类 四、具体要求及推荐实现步骤 6.创建实体类AirInfo,属性私有化,根据业务提供需要的构造方法和setter/getter方法。 7.创建航班管理AirInfoManager类,在类中提供列出所有航班的方法,按起飞时间查询 的方法、按目的地查询的方法、删除航班的方法、更新航班的方法、退出系统的方法。 8.创建TestAirInfo类,启动和运行系统。 9.航班的信息用ArrayList(或数组)保存。 10.要求代码规范,命名正确。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值