JAVA数据结构—飞机售票系统

飞机售票系统

1. 题目要求:

1.1 通过该系统可以实现如下功能。

  1. 录入功能:可以录入航班情况。

  2. 查询功能:可以查询某个航线的情况,如输入航班号,可以查询起降时间、起飞抵达城市、航班票价、票价折扣、确定航班是否满员等;可以输入起飞抵达城市,查询飞机航班情况。

  3. 订票功能:可以订票,如果该航班已经无票,可以提供相关可选择航班,订票时客户资料有姓名、证件号、订票数量及航班情况,另外要对订单进行编号。

  4. 退票功能:可退票,退票后修改相关数据文件。

  5. 修改航班信息:当航班信息改变,可以修改航班数据文件。

  6. 数据存放在文件中,对数据进行使用时,一次性从文件读入到内存储器中,退出程序时可以将数据存放到磁盘中。

  7. 输入输出形式:输入输出时有中文提示。

  8. 界面要求:有合理的提示。每个功能可以设立菜单,根据提示可以完成相关的功能要求。

  9. 存储结构:学生根据系统功能要求设计,并在实训报告中指明自己用到的存储结构。

  10. 测试数据:要求使用合法数据、整体非法和局部非法数据,进行程序测试,以保证程序的稳定。测试数据及测试结果需在实训报告中写明。

2. 逻辑分析图

使用对象数组

  • 对象数组是由多个对象组成的数组。每个对象都是数组的一个元素,可以使用索引来访问和操作这些对象。 对象数组可以包含不同类型的对象,也可以包含相同类型的对象。每个对象都有自己的属性和方法,可以通过对象数组来访问和调用这些属性和方法。 对象数组可以用于存储和处理大量的数据,方便进行查找、排序和过滤等操作,根据索引访问时间复杂度为O(1).

  • 数据结构图如下图所示:

在这里插入图片描述

  • **Flight数组和Booking数组的组合表 **
PassengerIDFlightIDNumseatsID
111
222
313
  • 在这个索引表格中,每一行代表一个订票信息,每列分别表示乘客姓名的ID(PassengerID)、航班号的ID(FlightID)和订票座位的ID(NumseatsID)。通过这个索引表格,可以通过票的ID查找到对应的航班信息和购票人信息。
  • 例如,第一行的数据表示乘客姓名的ID为1,对应的航班号ID为1,订票座位ID为1。通过这个索引,您可以在其他数据表中查找到对应的航班信息和购票人信息。

2. 系统功能需求图

系统功能需求图:系统功能需求图是一种用于描述系统功能需求的图形化表示方法。它主要由功能模块(Function Module)、功能需求(Functional Requirement)和关系(Relationship)三个元素组成。

在飞机售票系统中实现三大功能分别是

1、 录入功能,包括两个子功能客户信息录入和航班信息录入;

2、 查询功能,包括两个子功能按航线查询和按航号查询;

3、订票功能和退票功能,包括两个子功能添加客户信息和删除客户信息。

综上,系统总体的功能需求框图如图所示

在这里插入图片描述

3. UML用例图

用例图是一种用于描述系统功能和用户之间交互的图形化表示方法。它主要由参与者(Actor)、用例(Use Case)和关系(Relationship)三个元素组成。在此系统中:

管理员:主要实现录入航班信息、查询航班信息、修改航班信息、退出系统功能。

用户:主要实现查询航班信息、订票、退票、退出系统功能。

在这里插入图片描述

4. 类图

4.1 Flight类图

  • Flight类 ,有六个属性,flightNumber表示航班号;route表示航线price表示价格;departureTime表示出发时间;arrivalTime表示到达时间;availableSeats表示可用座位数。有get和set方法用来获取航班号,航线,价格,出发时间,到达时间,可用座位数。

在这里插入图片描述

4.2 Booking类图

  • Booking类,有5个属性flightNumber表示航班号;passengerName表示用户姓名;numSeats表示座位号;passnegerld表示顾客身份证;phoneNumber表示顾客电话号。有get方法用来获取航班号,用户姓名,座位号,顾客身份证,顾客电话号。

在这里插入图片描述

4.3 FlightSystem类图

  • FlightSystem类,MAX_FLIGHTS和 MAX_BOOKINGS表示最大航班数和最大预订数。
  • flights和 numFlights表示航班数组和航班数量用于存储所有的航班信息。
  • bookings和numBookings表示预订数组和预订数量,用于存储所有的预订信息。
  • ADMIN_USERNAMES和ADMIN_PASSWORD用于设置管理员账号和密码。
  • main(args: String[])作为程序的入口点。
  • showMainMenu()用于显示主菜单。
  • adminMenu()用于显示管理员操作菜单。
  • authenticateAdmin()用于验证管理员账号密码是否正确。
  • addFlight()用于添加航班。
  • showQueryMenu()用于显示查询菜单。
  • searchFlightsByRoute()用于根据航线查询航班。
  • searchFlightByNumber()用于根据航班号查询航班。
  • printFlightInfo(flight: Flight)用于打印航班信息。
  • modifyFlight()用于修改航班信息。bookFlight()用于预订航班。
  • cancelBooking()用于取消预订。
  • printBookings()用于打印所有的预订信息。

在这里插入图片描述

4.4 类与类关系图

  • Flight类和Booking类之间存在关联关系,表示一个Booking对象与一个Flight对象相关联,表示一个预订(Booking)是与一个航班(Flight)相关联的。
  • FlightSystem类与Flight和Booking类之间存在依赖关系,表示FlightSystem类依赖于Flight和Booking类来完成其功能。FlightSystem类中的方法需要使用Flight和Booking类的对象来执行相应的操作,例如添加航班、查询航班、预订航班等。

在这里插入图片描述

顺序图

  • 顺序图:顺序图(Sequence Diagram)是一种用于描述对象之间交互的图形化表示方法。它主要由参与者(Actor)、对象(Object)、消息(Message)和生命线(Lifeline)等元素组成。

  • 参与者(Actor)表示与系统进行交互的外部实体,可以是人、其他系统或者外部设备等。

  • 对象(Object)表示系统中的一个具体实例,可以是类的实例、模块的实例或者其他系统的实例。

  • 消息(Message)表示对象之间的交互行为,包括方法调用、信号发送等。

  • 生命线(Lifeline)表示对象的生命周期,用于展示对象在交互过程中的状态变化。

  • 飞机售票系统主要包括以下步骤:

用户选择订票管理员进入菜单登录验证选择录入航班输入航班信息进行创建
返回航班信息选择修改航班根据航号选择要修改的航班录入新的信息返回修改结果
用户进入菜单页面选择查询航班信息输入航班号返回航班信息
选择订票输入订票信息返回订票结果
选择退票输入个人订票信息

在这里插入图片描述

活动图

  • 活动图:活动图(Activity Diagram)是一种用于描述系统或业务流程中活动和流程之间关系的图形化工具。它是一种行为建模工具,用于展示系统中的活动、行为和控制流程。

在这里插入图片描述

5. 代码体现:

  • Flight类
package demo.data.demo04;
public class Flight {
    private String flightNumber;
    private String route;
    private double price;
    private String departureTime;
    private String arrivalTime;
    private int availableSeats;

    public Flight(String flightNumber, String route, double price, String departureTime, String arrivalTime, int availableSeats) {
        this.flightNumber = flightNumber;
        this.route = route;
        this.price = price;
        this.departureTime = departureTime;
        this.arrivalTime = arrivalTime;
        this.availableSeats = availableSeats;
    }

    public String getFlightNumber() {

        return flightNumber;
    }

    public String getRoute() {

        return route;
    }

    public double getPrice() {

        return price;
    }

    public String getDepartureTime() {

        return departureTime;
    }

    public String getArrivalTime() {

        return arrivalTime;
    }

    public int getAvailableSeats() {

        return availableSeats;
    }

    public void setPrice(double price) {

        this.price = price;
    }

    public void setDepartureTime(String departureTime) {

        this.departureTime = departureTime;
    }

    public void setArrivalTime(String arrivalTime) {
        this.arrivalTime = arrivalTime;
    }

    public void setAvailableSeats(int availableSeats) {
        this.availableSeats = availableSeats;
    }
}
  • Booking类
package demo.data.demo04;
public class Booking {
    private String passengerName;
    private String flightNumber;
    private int numSeats;
    private String passengerId;
    private String phoneNumber;

    public Booking(String passengerName, String flightNumber, int numSeats, String passengerId, String phoneNumber) {
        this.passengerName = passengerName;
        this.flightNumber = flightNumber;
        this.numSeats = numSeats;
        this.passengerId = passengerId;
        this.phoneNumber = phoneNumber;
    }

    public String getPassengerName() {
        return passengerName;
    }

    public String getFlightNumber() {
        return flightNumber;
    }

    public int getNumSeats() {
        return numSeats;
    }

    public void setNumSeats(int numSeats) {
        this.numSeats = numSeats;
    }

    public String getPassengerId() {
        return passengerId;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }
}
  • FlightSystem类
package demo.data.demo04;

import java.util.Scanner;
public class FlightSystem {
    private static final int MAX_FLIGHTS = 3;
    private static final int MAX_BOOKINGS = 1000;
    private static Flight[] flights = new Flight[MAX_FLIGHTS];
    private static int numFlights = 0;
    private static Booking[] bookings = new Booking[MAX_BOOKINGS];
    private static int numBookings = 0;
    private static final String ADMIN_USERNAME = "SJJG";
    private static final String ADMIN_PASSWORD = "123456";

    public static void main(String[] args) {
        showMainMenu();
    }
    private static void showMainMenu() {
        Scanner scanner = new Scanner(System.in);
        int choice = 0;
        while (choice != 6) {
            System.out.println("**************航班系统主菜单****************");
            System.out.println("1. 管理员登录");
            System.out.println("2. 查询航班信息");
            System.out.println("3. 订票 ");
            System.out.println("4. 退票");
            System.out.println("5. 退出程序 ");
            System.out.println("*****************************************");
            System.out.print("请选择菜单选项:");
            choice = scanner.nextInt();
            scanner.nextLine();

            switch (choice) {
                case 1:
                    if (authenticateAdmin()) {
                        System.out.println("登陆成功,进入管理员界面");
                        adminMenu();
                    } else {
                        System.out.println("管理员账号或密码错误,无权限进行此操作。");
                    }
                    break;
                case 2:
                    showQueryMenu();
                    break;
                case 3:
                    bookFlight();
                    break;
                case 4:
                    cancelBooking();
                    break;
                case 5:
                    System.out.println("感谢使用航班系统,再见!");
                    return;
                default:
                    System.out.println("无效选项,请重新选择。");
                    break;
            }
        }
        scanner.close();
    }
    private static void adminMenu() {
        Scanner scanner = new Scanner(System.in);
        int choice = 0;
        while (choice != 4) {
            System.out.println("**************管理员菜单****************");
            System.out.println("1. 录入航班信息");
            System.out.println("2. 修改航班信息");
            System.out.println("3. 返回主菜单");
            System.out.println("*****************************************");
            System.out.print("请选择菜单选项:");
            choice = scanner.nextInt();
            scanner.nextLine();

            switch (choice) {
                case 1:
                    addFlight();
                    break;
                case 2:
                    modifyFlight();
                    break;
                case 3:
                    showMainMenu();
                    break;
                default:
                    System.out.println("无效选项,请重新选择。");
                    break;
            }
        }
        scanner.close();
    }
    private static boolean authenticateAdmin() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入管理员账号:");
        String username = scanner.nextLine();
        System.out.print("请输入管理员密码:");
        String password = scanner.nextLine();

        return username.equals(ADMIN_USERNAME) && password.equals(ADMIN_PASSWORD);
    }

    private static void addFlight() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n录入航班信息");

        String flightNumber;
        do {
            System.out.print("请输入航班号:");
            flightNumber = scanner.nextLine();
            if (flightNumber.isEmpty()) {
                System.out.println("航班号不能为空,请重新输入!");
            }
        } while (flightNumber.isEmpty());

        String route;
        do {
            System.out.print("请输入航线:");
            route = scanner.nextLine();
            if (route.isEmpty()) {
                System.out.println("航线不能为空,请重新输入!");
            }
        } while (route.isEmpty());

        double price = 0;
        boolean validPrice = false;
        do {
            System.out.print("请输入票价:");
            String priceString = scanner.nextLine();
            if (priceString.isEmpty()) {
                System.out.println("票价不能为空,请重新输入!");
                continue;
            }
            try {
                price = Double.parseDouble(priceString);
                if (price <= 0) {
                    System.out.println("票价不能为负数,请重新输入!");
                } else {
                    validPrice = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("票价格式不正确,请重新输入!");
            }
        } while (!validPrice);

        String departureTime;
        do {
            System.out.print("请输入起飞时间:");
            departureTime = scanner.nextLine();
            if (departureTime.isEmpty()) {
                System.out.println("起飞时间不能为空,请重新输入!");
            }
        } while (departureTime.isEmpty());

        String arrivalTime;
        do {
            System.out.print("请输入抵达时间:");
            arrivalTime = scanner.nextLine();
            if (arrivalTime.isEmpty()) {
                System.out.println("抵达时间不能为空,请重新输入!");
            }
        } while (arrivalTime.isEmpty());

        int availableSeats=0;
        do {
            System.out.print("请输入座位数量:");
            String seatsString = scanner.nextLine();
            if (seatsString.isEmpty()) {
                System.out.println("座位数量不能为空,请重新输入!");
                continue;
            }
            try {
                availableSeats = Integer.parseInt(seatsString);
                if (availableSeats <= 0) {
                    System.out.println("座位数量不能为0或负数,请重新输入!");
                }
            } catch (NumberFormatException e) {
                System.out.println("座位数量格式不正确,请重新输入!");
                availableSeats = -1;
            }
        } while (availableSeats <= 0);

        Flight flight = new Flight(flightNumber, route, price, departureTime, arrivalTime, availableSeats);
        flights[numFlights] = flight;
        numFlights++;
        System.out.println("航班信息已录入成功!");
    }
    private static void showQueryMenu() {

        int choice = 0;
        while (choice != 3) {
            System.out.println("\n查询航班信息");
            System.out.println("1. 按航线查询");
            System.out.println("2. 按航班号查询");
            System.out.println("3. 返回主菜单");
            System.out.print("请选择菜单选项:");
            Scanner scanner = new Scanner(System.in);
            choice = scanner.nextInt();
            scanner.nextLine();

            switch (choice) {
                case 1:
                    searchFlightsByRoute();
                    break;
                case 2:
                    searchFlightByNumber();
                    break;
                case 3:
                    showMainMenu();
                    break;
                default:
                    System.out.println("无效选项,请重新选择。");
                    break;
            }
        }
    }

    private static void searchFlightsByRoute() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n按航线查询航班信息");
        System.out.print("请输入航线:");
        String route = scanner.nextLine();

        boolean found = false;
        for (int i = 0; i < numFlights; i++) {
            if (flights[i].getRoute().equalsIgnoreCase(route)) {
                printFlightInfo(flights[i]);
                found = true;
            }
        }

        if (!found) {
            System.out.println("未找到符合条件的航班信息。");
        }
    }

    private static void searchFlightByNumber() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n按航班号查询航班信息");
        System.out.print("请输入航班号:");
        String flightNumber = scanner.nextLine();

        boolean found = false;
        for (int i = 0; i < numFlights; i++) {
            if (flights[i].getFlightNumber().equalsIgnoreCase(flightNumber)) {
                printFlightInfo(flights[i]);
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("未找到符合条件的航班信息。");
        }
    }

    private static void printFlightInfo(Flight flight) {
        System.out.println("航班号:" + flight.getFlightNumber());
        System.out.println("航线:" + flight.getRoute());
        System.out.println("票价:" + flight.getPrice());
        System.out.println("起降时间:" + flight.getDepartureTime());
        System.out.println("抵达时间:" + flight.getArrivalTime());
        System.out.println("座位数量:" + flight.getAvailableSeats());
    }

    private static void modifyFlight() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n修改航班信息");
        System.out.print("请输入要修改的航班号:");
        String flightNumber = scanner.nextLine();

        boolean found = false;
        for (int i = 0; i < numFlights; i++) {
            if (flights[i].getFlightNumber().equalsIgnoreCase(flightNumber)) {
                double price = 0;
                String departureTime = "";
                String arrivalTime = "";
                int availableSeats = 0;

                boolean validInput = false;
                while (!validInput) {
                    System.out.print("请输入新票价:");
                    String priceString = scanner.nextLine();
                    if (priceString.isEmpty()) {
                        System.out.println("票价不能为空,请重新输入!");
                        continue;
                    }
                    try {
                        price = Double.parseDouble(priceString);
                        if (price <=0) {
                            System.out.println("票价不能0为负数,请重新输入!");
                            continue;
                        }
                        validInput = true;
                    } catch (NumberFormatException e) {
                        System.out.println("票价格式不正确,请重新输入!");
                    }
                }

                validInput = false;
                while (!validInput) {
                    System.out.print("请输入新起降时间:");
                    departureTime = scanner.nextLine();
                    if (departureTime.isEmpty()) {
                        System.out.println("起降时间不能为空,请重新输入!");
                        continue;
                    }
                    validInput = true;
                }

                validInput = false;
                while (!validInput) {
                    System.out.print("请输入新抵达时间:");
                    arrivalTime = scanner.nextLine();
                    if (arrivalTime.isEmpty()) {
                        System.out.println("抵达时间不能为空,请重新输入!");
                        continue;
                    }
                    validInput = true;
                }

                validInput = false;
                while (!validInput) {
                    System.out.print("请输入新座位数量:");
                    String seatsString = scanner.nextLine();
                    if (seatsString.isEmpty()) {
                        System.out.println("座位数量不能为空,请重新输入!");
                        continue;
                    }
                    try {
                        availableSeats = Integer.parseInt(seatsString);
                        if (availableSeats <=0) {
                            System.out.println("座位数量不能0为负数,请重新输入!");
                            continue;
                        }
                        validInput = true;
                    } catch (NumberFormatException e) {
                        System.out.println("座位数量格式不正确,请重新输入!");
                    }
                }

                flights[i].setPrice(price);
                flights[i].setDepartureTime(departureTime);
                flights[i].setArrivalTime(arrivalTime);
                flights[i].setAvailableSeats(availableSeats);

                System.out.println("航班信息已修改成功!");
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("未找到指定航班信息,无法修改。");
        }
    }

    private static void bookFlight() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n订票");
        System.out.print("请输入乘客姓名:");
        String passengerName = scanner.nextLine();
        System.out.print("请输入乘客身份证号码:");
        String passengerId = scanner.nextLine();
        if (passengerId.length() != 18) {
            System.out.println("身份证号码必须为18位");
            System.out.print("请重新输入乘客身份证号码:");
            passengerId = scanner.nextLine();
        }
        System.out.print("请输入乘客电话号码:");
        String phoneNumber = scanner.nextLine();
        if (phoneNumber.length() != 11) {
            System.out.println("电话号码必须为11位");
            System.out.print("请重新输入乘客电话号码:");
            phoneNumber = scanner.nextLine();
        }
        System.out.print("请输入航班号:");
        String flightNumber = scanner.nextLine();
        System.out.print("请输入订票数量:");
        int numSeats = scanner.nextInt();
        scanner.nextLine();

        boolean found = false;
        for (int i = 0; i < numFlights; i++) {
            if (flights[i].getFlightNumber().equalsIgnoreCase(flightNumber)) {
                if (flights[i].getAvailableSeats() >= numSeats) {
                    Booking booking = new Booking(passengerName, flightNumber, numSeats, passengerId, phoneNumber);
                    bookings[numBookings] = booking;
                    numBookings++;
                    flights[i].setAvailableSeats(flights[i].getAvailableSeats() - numSeats);
                    System.out.println("订票成功!");
                    printBookings();
                } else {
                    System.out.println("座位不足,无法订票。");
                }
                found = true;
                break;
            }
        }
        if (!found) {
            System.out.println("未找到指定航班信息,无法订票。");
        }
    }

    private static void cancelBooking() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n取消订票");
        System.out.print("请输入乘客姓名:");
        String passengerName = scanner.nextLine();
        System.out.print("请输入乘客身份证号码:");
        String passengerId = scanner.nextLine();
        System.out.print("请输入乘客电话号码:");
        String phoneNumber = scanner.nextLine();
        System.out.print("请输入航班号:");
        String flightNumber = scanner.nextLine();
        boolean found = false;
        for (int i = 0; i < numBookings; i++) {
            if (bookings[i].getPassengerName().equalsIgnoreCase(passengerName) && bookings[i].getFlightNumber().equalsIgnoreCase(flightNumber)) {
                if (!bookings[i].getPassengerId().equalsIgnoreCase(passengerId) || !bookings[i].getPhoneNumber().equalsIgnoreCase(phoneNumber)) {
                    System.out.println("乘客身份证号码或电话号码不匹配,无法取消订票。");
                    return;
                }

                for (int j = 0; j < numFlights; j++) {
                    if (flights[j].getFlightNumber().equalsIgnoreCase(flightNumber)) {
                        flights[j].setAvailableSeats(flights[j].getAvailableSeats() + bookings[i].getNumSeats());
                        break;
                    }
                }
                found = true;
                break;
            }
        }

        if (found) {
            System.out.println("取消订票成功!");
        } else {
            System.out.println("未找到指定订票信息,无法取消订票。");
        }
    }

    private static void printBookings() {
        System.out.println("\n已订票信息");
        for (int i = 0; i < numBookings; i++) {
            System.out.println("乘客姓名:" + bookings[i].getPassengerName());
            System.out.println("航班号:" + bookings[i].getFlightNumber());
            System.out.println("订票数量:" + bookings[i].getNumSeats());
            System.out.println();
        }
    }
}

6. 测试分析

6.1测试用例目的

测试用例主要用于验证航班系统的各个功能是否能够正常运行,包括录入航班信息、修改航班信息、查询航班信息、订票和退票等。通过不同的测试用例能够全面覆盖这些功能,帮助开发团队发现潜在的问题并进行修复,确保系统能够稳定可靠地运行。

6.2测试阶段

测试用例α:

进入系统:用户成功进入航班系统。

显示航班系统主菜单菜单:航班系统成功显示主菜单。

选择录入航班信息:用户成功选择录入航班信息功能。

录入信息请求:航班系统成功收到录入信息请求。

录入航班信息:管理员成功录入航班信息。

返回录入结果:航班系统成功返回录入结果。

选择修改航班信息:用户成功选择修改航班信息功能。

修改信息请求:航班系统成功收到修改信息请求。

修改航班信息:管理员成功修改航班信息。

返回修改结果:航班系统成功返回修改结果。

测试用例β:

选择查询航班信息:用户成功选择查询航班信息功能。

按航线查询:航班系统成功按照用户指定的航线进行查询。

按航号查询:航班系统成功按照用户指定的航号进行查询。

返回查询结果:航班系统成功返回查询结果。

选择订票:用户成功选择订票功能。

输入订票信息:用户成功输入订票信息。

返回订票结果:航班系统成功返回订票结果。

选择退票:用户成功选择退票功能。

输入退票信息:用户成功输入退票信息。

返回退票结果:航班系统成功返回退票结果。

6.3用例设方法

1.边界值分析法:对于边界处的数据进行特殊考虑,因为边界处可能会出现错误。

2.错误推测法:根据程序结构、逻辑推测出可能发生的错误,并进行相应的测试。

6.4测试用例说明

用例编号测试内容优先级标准值判定测试用例输入预期结果测试输出
FJ001管理员登录P0在主菜单选“1”后,登录账号密码进入管理界面, 账号为SJJG 密码为123456成功正确的账号密码 账号为SJJG 密码为123456提示登陆成功进入管理员界面提示登陆成功进入管理员界面
FJ002管理员登录P0在主菜单选“1”后,登录账号密码进入管理界面 账号为sss 密码为123456失败错误的账号密码 账号为sss 密码为123456管理员账号或密码错误,无权限进行此操作。管理员账号或密码错误,无权限进行此操作。
FJ003录入航班信息P0在管理员菜单选“1”,进行录入航班信息成功正确的各项信息 航号C11;航线:陕西-西宁;票价:135;起飞时间:2023/07/10/13:00;到达时间:2023/07/10/14:00;座位数:100提示录入成功提示录入成功
FJ004录入航班信息P0在管理员菜单选“1”,进行录入航班信息 航班号为空失败航班号为: null提示航班号不能为空提示航班号不能为空
FJ005录入航班信息P0在管理员菜单选“1”,进行录入航班信息 航线为空失败航线为:null航线不能为空航线不能为空
FJ006录入航班信息P0在管理员菜单选“1”,进行录入航班信息 票价为空失败票价:null票价不能为空票价不能为空
FJ007录入航班信息P0在管理员菜单选“1”,进行录入航班信息 票价为0或负数失败票价为0或-1票价非正数,请重新输入!票价非正数,请重新输入!
FJ008录入航班信息P0在管理员菜单选“1”,进行录入航班信息 票价为任意字符失败票价为:XC||@票价格式不正确,请重新输入!票价格式不正确,请重新输入!
FJ009录入航班信息P0在管理员菜单选“1”,进行录入航班信息 起飞时间为空失败起飞时间为: null起飞时间不能为空起飞时间不能为空
FJ010录入航班信息P0在管理员菜单选“1”,进行录入航班信息 抵达时间为空失败抵达时间为: null抵达时间不能为空抵达时间不能为空
FJ011录入航班信息P0在管理员菜单选“1”,进行录入航班信息 座位数量失败座位数量为: null提示座位数量不能为空提示座位数量不能为空
FJ012录入航班信息P0在管理员菜单选“1”,进行录入航班信息 座位数量为非正数失败座位数量为:0或-1提示座位数量不能为0或负数提示座位数量不能为负数
FJ013录入航班信息P0在管理员菜单选“1”,进行录入航班信息 座位数量为任意字符失败座位数量为:ZS||#座位数量格式不正确,请重新输入!座位数量格式不正确,请重新输入!
FJ014修改航班信息P1在管理员菜单选“2”进行修改航班信息成功正确的航班号和修改后的各项信息 正确的各项信息 航号C11;票价:130;起飞时间:2023/07/10/14:00;到达时间:2023/07/10/15:00;座位数:102提示修改成功提示修改成功
FJ015修改航班信息P1在管理员菜单选“2”进行修改航班信息 航班号为空失败航班号:null航班号不能为空航班号不能为空
FJ016修改航班信息P1在管理员菜单选“2”进行修改航班信息 航线为空失败航线:null航线不能为空航线不能为空
FJ017修改航班信息P1在管理员菜单选“2”进行修改航班信息 票价为空失败票价:null票价不能为空票价不能为空
FJ018修改航班信息P1在管理员菜单选“2”进行修改航班信息 票价为非正数失败票价为:0或-9票价非正数,请重新输入!票价非正数,请重新输入!
FJ019修改航班信息P1在管理员菜单选“2”进行修改航班信息 票价为任意字符失败票价为:XO或$票价格式不正确,请重新输入!票价格式不正确,请重新输入!
FJ020修改航班信息P1在管理员菜单选“2”进行修改航班信息 起飞时间为空失败起飞时间:null起飞时间为不能空起飞时间为不能空
FJ021修改航班信息P1在管理员菜单选“2”进行修改航班信息 降落时间为空失败降落时间:null抵达时间为不能空抵达时间为不能空
FJ022修改航班信息P1在管理员菜单选“2”进行修改航班信息 座位数量为空失败座位数量:null座位数量为不能空
FJ023修改航班信息P1在管理员菜单选“2”进行修改航班信息 座位数量为非正数失败座位数量为:0||-8座位数量不能为0或负数座位数量不能为0或负数
FJ025查询航班信息P1在主菜单选“2”进入查询 选”2“ 进行按航号查询成功按航班号查询,正确的航班号C11显示该航班的详细信息显示该航班的详细信息
FJ026查询航班信息P1在主菜单选“2”进入查询 选”1“ 进行按航线查询成功按航线查询,正确的航线名 北京——西宁显示相应的航班信息列表显示相应的航班信息列表
FJ027查询航班信息P1在主菜单选“2”进入查询 选”1“ 错误的航线信息失败按航线查询,错误的航线名陕西——西宁提示未找到符合条件的航班信息提示未找到符合条件的航班信息
FJ028查询航班信息P1在主菜单选“2”进入查询 选”2“ 错误的航号信息失败按航班号查询,错误的航班号A11提示未找到符合条件的航班信息。提示未找到符合条件的航班信息。
FJ029查询航班信息P1在主菜单选“2”进入查询成功选“3”返回主菜单显示主菜单页面显示主菜单页面
FJ030订票P1在主菜单中选“3”订票成功正确的乘客姓名:马乐乐、航班号:C11和票数:105; 身份证号:6342122200003056846;电话号码:17697140297;提示订票成功提示订票成功
FJ031订票P1在主菜单中选“3”订票成功输入乘客姓名:马乐乐输入成功输入成功
FJ032订票P1在主菜单中选“3”订票 输入的身份证号不是18位失败输入身份证号63212219990身份证号不是18位身份证号码必须是18位,请重新输入乘客身份证号码
FJ033订票P1在主菜单中选“3”订票 输入的电话号码不是11位失败输入电话号码12344电话号码不是11位电话号码必须为11位,请重新输入乘客电话号码
FJ034订票P1在主菜单中选“3”订票 输入错误的航号失败输入航号F11提示未找到符合条件的航班信息提示未找到符合条件的航班信息,无法订票
FJ035订票P1在主菜单中选“3”订票 订票数量大于可用座位数失败订票数:105订票数>可用座位数座位不足无法订票
FJ036退票P1在主菜单选“4”进入退票成功正确的乘客姓名;马乐乐 航班号:C11提示取消订票成功提示取消订票成功
FJ037退票P1在主菜单选“4”进入退票失败输入乘客姓名:牛乐乐 航班号:C11未找到指定订票信息,无法取消订票未找到指定订票信息,无法取消订票
FJ038退票P1在主菜单选“4”进入退票 输入的身份证号不是18位失败输入身份证号632122200065身份证号不是18位身份证号码必须是18位,请重新输入乘客身份证号码
FJ039退票P1在主菜单选“4”进入退票 输入的电话号码不是11位失败输入电话号码3456电话号码不是11位电话号码必须为11位,请重新输入乘客电话号码

7. 代码运行结果

1.航班系统主菜单

在这里插入图片描述

2.管理员登录

在这里插入图片描述

3.录入航班信息

在这里插入图片描述

4.修改航班信息

在这里插入图片描述

5.查询

  • 按航线查询信息

在这里插入图片描述

  • 按航号查询信息

在这里插入图片描述

6.订票

在这里插入图片描述

7.退票

在这里插入图片描述

8.退出系统

在这里插入图片描述

  • 11
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
航空客运订票系统 特点:超详细的JAVA代码注释,代码保护性,无论输入什么都不会崩溃; 【问题描述】航空客运订票的业务活动包括:查询航线、添加航班,客票预订和办理退票等七大功能,已实现操作文件。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。 【基本要求】 (1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量); (2)系统能实现的操作和功能如下: ①录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中; ②查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; ③承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; ④承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。 【测试数据】由读者自行指定。 【实现提示】两个客户名单可分别由线性表和队列实现。为找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。 【选作内容】当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其他航线情况。读者还可充分发挥自己的想象力,增加你的系统的功能和其他服务项目 I/O流操作时用到了GSON,解压即可看到,如果发现报错,读者可以配置一下Gson的路径,在属性,JAVA构建路径中删除原有的三个GSON库,添加外部,下载的GSON库。如果不用可以将Main类中new ReadFlightLine();注释掉即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值