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

news2024/12/27 0:54:36

飞机售票系统

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.退出系统

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我爱学QT-QT上位机开发之串口助手-上

学习链接&#xff1a; QT上位机开发之串口助手&#xff08;上&#xff09;_哔哩哔哩_bilibili 一.QT下的串口编程 1.qt下的串口编程 2.qt下的网络编程 3.qt下操作GPIO 二.仿写串口助手 步骤一.做好UI界面 接收窗口组件&#xff1a; 选择窗口组件&#xff1a; 发送窗口组…

如何在Linux下搭建接口自动化测试平台

&#x1f4cc; 博客主页&#xff1a; 程序员念姐 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 如果你也想学习软件测试&#xff0c;文末卡片有我的交流群632880530&#xff0c;加入我们&…

【淘宝API接口开发系列】商品页面数据,接口可高并发,Python语言请求示例,其他语言请求示例可进参考

首先以taobao商品数据为例 item_get-获得taobao商品详情 taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;注册Key和secret接入secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址…

【软件测试】Windows下同一电脑配置多个Git公钥(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先在配置多个本…

数据备份和还原的简单操作

两个表如图所示&#xff0c;完成一下操作 1、使用mysqldump命令备份数据库中的所有表 先创建存储数据的目录 使用mysqldump命令备份数据库中的所有表 去查看已经备份 2、备份booksDB数据库中的books表 备份数据库中的某些表&#xff0c;在库后面空格间隔 备份完毕 3、使用…

紫光展锐CEO任奇伟博士:用芯赋能,共建XR新生态

7月6日&#xff0c;2023世界人工智能大会在上海世博中心及世博展览馆盛大开幕。紫光集团高级副总裁、紫光展锐CEO任奇伟博士受邀出席芯片主题论坛&#xff0c;并发表题为《用芯赋能&#xff0c;共建XR新生态》的演讲。 世界人工智能大会自2018年创办以来已成功举办五届&#xf…

力扣332. 重新安排行程 Java dfs回溯

给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 JFK 开始。如果存在多种…

AutoDL使用教程

AutoDl是一个租用GPU显卡的平台&#xff0c;我们可以在上面租用显卡。我训练模型的时候租用了一块V100。 下面介绍一下使用AutoDL 来租用GPU显卡&#xff0c;并将自己的代码上传&#xff0c;运行代码。 目录&#xff1a; 创建实例配置环境 pytorch环境上传文件运行代码 一、…

DAY11_RequestResponse

目录 1 Request和Response的概述2 Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式 2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请求解决方案2.4.2 GET请求…

flutter图片添加水印

flutter为图片右下角添加上水印 //制造字符串水印图片_makeStrMarkImage(String str, double fontSize) async {final picRecorder ui.PictureRecorder();final paragraphBuilder ui.ParagraphBuilder(ui.ParagraphStyle(textAlign: TextAlign.left,fontSize: fontSize,),)…

C#winform电脑关机实例

本篇实例演示C#winform电脑关机 创建winform添加一个按钮 Cs文件代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.T…

ThreadLocal学习

1、threadLocal图解 java.lang.ThreadLocal类实现了线程的本地存储。 ThreadLocal的内部实现&#xff1a; ThreadLocal的内部实现包括一个类似HashMap的对象&#xff0c;这里称之ThreadLocalMap。 ThreadLocalMap的key会持有对ThreadLocal实例的弱引用&#xff08;Weak Refer…

Perfectly Clear Workbench for Mac/Windows(智能图像清晰度处理软件)

Perfectly Clear Workbench是一款用于图像处理和修复的软件工具&#xff0c;它提供了一套强大的功能&#xff0c;旨在自动优化照片质量并消除常见的图像缺陷。这个工作台是Perfectly Clear家族的一部分&#xff0c;由Athentech Imaging开发和维护。 Perfectly Clear Workbench…

第一章:光纤通信概述

第一节&#xff1a;通信基本概念 1.1光纤通信基本概念 1.1.1光纤通信的概念 利用光导纤维传输广播信号的通信方式称为光纤通信。光波主要包括紫外线、可见光和红外线。光纤通信工作波长在近红外区&#xff0c;0.8um~1.8um的波长区&#xff0c;频率为167THz~375THz。光纤基础…

JWT跨域认证解决方案

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案&#xff0c;本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证 一般流程是&#xff1a; 1、用户向服务器发送用户名和密码 2、服务器验证通过后&#xff0c;在当前对话…

【SpringBoot】SpringBoot-Admin 服务监控 + 告警通知

简单介绍 Spring Boot Actuator 是 Spring Boot 自带的一个功能模块&#xff0c; 提供了一组已经开箱即用的生产环境下常用的特性和服务&#xff0c;比如应用程序的健康检查、信息暴露、度量收集、日志记录等。 在实际项目中&#xff0c;Actuator 可以帮助我们快速了解应用程序…

三维重建以及神经渲染中的学习(一)

三维重建以及神经渲染中的学习 公众号AI知识物语 本文内容为参加过去一次暑期课程学习时的笔记&#xff0c;浅浅记录下。 显示表征&#xff1a; 点云points&#xff1a;由一组离散三维点表征物体表面 推理速度快&#xff0c;容易获取 -离散表征&#xff0c;无拓扑关系 [Fa…

mysql的聚簇索引和非聚簇索引的区别

MySQL InnoDB存储引擎时&#xff0c;索引类型可分为聚簇索引和非聚簇索引&#xff0c;有时候也通俗的称为主键索引和普通索引。MyISAM的引擎只有非聚簇索引&#xff0c;所以MYSIAM的引擎在查询的时候非主键索引的时候特别快 接下来讨论一下几个问题&#xff1a; 什么是聚簇索…

linux搭建vsftpd服务使用filezilla连接服务

背景&#xff1a;支持使用filezilla上传文件到公司的服务机器上&#xff0c;所以搭建vsftpd支持filezilla进行上传 一、linux机器搭建vsftpd服务 1、先看看自己的机器属于什么发行版&#xff0c;不同的发行版命令不一样 我的是centos&#xff0c;其他发行版命令不一样&#xf…

架构训练营笔记:高可用设计

2-3高可用设计 高可用复杂度模型 分为计算高可用&#xff0c;存储高可用&#xff0c;高可用本质上需要冗余&#xff0c;这里是集群&#xff0c;没有单机。 计算高可用&#xff1a;分为任务分配与任务分解。 计算高可用对比之前的高性能&#xff0c;就是多了状态检测。 任务…