飞机售票系统
1. 题目要求:
1.1 通过该系统可以实现如下功能。
-
录入功能:可以录入航班情况。
-
查询功能:可以查询某个航线的情况,如输入航班号,可以查询起降时间、起飞抵达城市、航班票价、票价折扣、确定航班是否满员等;可以输入起飞抵达城市,查询飞机航班情况。
-
订票功能:可以订票,如果该航班已经无票,可以提供相关可选择航班,订票时客户资料有姓名、证件号、订票数量及航班情况,另外要对订单进行编号。
-
退票功能:可退票,退票后修改相关数据文件。
-
修改航班信息:当航班信息改变,可以修改航班数据文件。
-
数据存放在文件中,对数据进行使用时,一次性从文件读入到内存储器中,退出程序时可以将数据存放到磁盘中。
-
输入输出形式:输入输出时有中文提示。
-
界面要求:有合理的提示。每个功能可以设立菜单,根据提示可以完成相关的功能要求。
-
存储结构:学生根据系统功能要求设计,并在实训报告中指明自己用到的存储结构。
-
测试数据:要求使用合法数据、整体非法和局部非法数据,进行程序测试,以保证程序的稳定。测试数据及测试结果需在实训报告中写明。
2. 逻辑分析图
使用对象数组
-
对象数组是由多个对象组成的数组。每个对象都是数组的一个元素,可以使用索引来访问和操作这些对象。 对象数组可以包含不同类型的对象,也可以包含相同类型的对象。每个对象都有自己的属性和方法,可以通过对象数组来访问和调用这些属性和方法。 对象数组可以用于存储和处理大量的数据,方便进行查找、排序和过滤等操作,根据索引访问时间复杂度为O(1).
-
数据结构图如下图所示:
- **Flight数组和Booking数组的组合表 **
PassengerID | FlightID | NumseatsID |
---|---|---|
1 | 1 | 1 |
2 | 2 | 2 |
3 | 1 | 3 |
- 在这个索引表格中,每一行代表一个订票信息,每列分别表示乘客姓名的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.退出系统