问题描述:
航空客运订票的业务活动包括添加航班、查询航班、旅客订票和办理退票等,设计航班信息、订票系统的存储结构,完成下面功能要求。
基本功能要求:
程序至少采用所学过的一种数据结构(链表、栈、队列、树等)实现,不能全部只使用数组。
(1)添加航班:每个航班信息包括航班号、出发站、终点站、起飞日期和时间、航线时长、总票额、余票额等。具体可根据实际合理设计。
(2)查询航班:根据多种不同条件查询输出信息(例如航班号、出发站、终点站起飞日期、最近一天航班的日期和余票额等);
(3) 为旅客订票:根据旅客提出的要求(航班号、订票数额),查询该航班票额情况,若尚有余票,为旅客办理订票手续;若已满员或剩余票额少于定票额,则重新询问旅客要求。
(4)退票:根据旅客提供的情况(航班号、日期),为旅客办理退票手续,可设置一些限制例如根据当前日期只允许提前三天以上退票等,自行设计。
扩展功能要求:
(1)排序功能:根据不同的信息排序,例如航班号、终点站、日期等。
(2)设置多种角色:在基本功能中,所有操作可都有管理员完成。而扩展功能可设置多种角色,把添加航班由管理员角色负责,而旅客角色可查询航班、订票、退票,申请退票要由管理员审核通过。
(3)可注册多位新旅客,并保存每位旅客个人信息,设置个人账户充值、记录余额。航班信息中增加机票价格,旅客使用账户余额支付。
(4)若无票,可登记排队候补或提供相关可选择航班;有旅客退票后查询该航班是否有人排队候补,首先查询排在第一的旅客,若所退票能满足他的要求,则为他办理订票手续,否则依次查询其他排队候补的旅客;
(5)文件读写功能:退出系统时把信息保存到文件、打开系统时从文件导入信息。
部分代码:
// 定义航班信息结构体
typedef struct Flight {
char flightNumber[20];
char departure[50];
char destination[50];
char departureDate[20];
char departureTime[20];
int totalSeats;
int remainingSeats;
int price; // 添加机票价格字段
Queue *queueHead; // 排队候补的头指针
struct Flight *next;
} Flight;
//加载flight.txt中的文本数据
loadFight();
//加载user.txt中的文本数据
loadUser();
int choice;
printf("欢迎来到航班在线系统,请您先进行登录!\n");
Passenger *loggedInPassenger;
do {
loggedInPassenger = login(); // 登录
if (strcmp(loggedInPassenger->username, "admin") == 0) {
//设置角色
setUserRole(0);
} else {
setUserRole(1);
}
} while (loggedInPassenger == NULL); // 重复登录直到登录成功
do {
printf("\n====== 航班订票系统 ======\n");
printf("1. 添加航班\n");
printf("2. 查询航班\n");
printf("3. 订票\n");
printf("4. 退票\n");
printf("5. 排序\n");
printf("6. 注册新旅客\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
addFlight();
break;
case 2:
displayFlights();
break;
case 3:
bookTicket(loggedInPassenger);
break;
case 4:
cancelTicket(loggedInPassenger);
break;
case 5:
sortFlights();
break;
case 6:
registerPassenger();
break;
case 0:
saveFile();
saveUsers();
printf("谢谢使用,再见!\n");
break;
default:
printf("无效选项,请重新输入。\n");
}
} while (choice != 0);
return 0;
}
效果演示:
源码:
百度链接
https://pan.baidu.com/s/1xaSJSxDELF5T-v6AkTnvxA?pwd=fs5d
提取码:fs5d