C语言实现如下要求:(1)查询航线:根据乘客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行、最近一天航班日期和余票量; (2)承办订票业务:根据客户提出的要求(航班号、订票量)查询该航班的余票量,如果尚有余票,则为客户办理手续,输出座位号;若已满员或者余票少于订票数,则需要重新咨询客户需求,若需要则为客户登记排队候补。 (3)承办退票业务:根据客户提供的情况(航班号、姓名)为客户办理退票手续。 (4)查询该航班是否有人排队候补,首先询问排在第一的客户,如果退票额能够满足他的要求,则为其办理订票,否则一次询问其他候补客户是否订票。
时间: 2023-06-26 22:06:06 浏览: 172
以下是C语言实现上述要求的示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
// 定义航班信息结构体
struct Flight {
char flightNum[20]; // 航班号
char planeNum[20]; // 飞机号
char destination[50]; // 终点站
char weekday[10]; // 星期几飞行
char date[20]; // 最近一天航班日期
int remainingSeats; // 余票量
};
// 定义乘客信息结构体
struct Passenger {
char name[50]; // 姓名
char flightNum[20]; // 航班号
int ticketNum; // 订票量
int queueNum; // 排队号码
};
// 定义航班信息数组和乘客信息数组
struct Flight flights[10];
struct Passenger passengers[50];
int flightNum = 0; // 航班数量
int passengerNum = 0; // 乘客数量
// 查询航线函数
void queryFlight(char *destination) {
bool found = false;
for (int i = 0; i < flightNum; i++) {
if (strcmp(flights[i].destination, destination) == 0) {
printf("航班号:%s,飞机号:%s,星期几飞行:%s,最近一天航班日期:%s,余票量:%d\n", flights[i].flightNum, flights[i].planeNum, flights[i].weekday, flights[i].date, flights[i].remainingSeats);
found = true;
}
}
if (!found) {
printf("未找到该航线的航班信息。\n");
}
}
// 订票函数
void bookTicket(char *flightNum, int ticketNum) {
// 查找航班信息
int index = -1;
for (int i = 0; i < flightNum; i++) {
if (strcmp(flights[i].flightNum, flightNum) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到该航班的航班信息。\n");
return;
}
// 检查余票量是否足够
if (flights[index].remainingSeats < ticketNum) {
printf("该航班余票不足,是否排队等候?(Y/N)\n");
char choice;
scanf("%c", &choice);
if (choice == 'Y') {
// 加入排队队列
passengers[passengerNum].flightNum = flightNum;
passengers[passengerNum].ticketNum = ticketNum;
passengers[passengerNum].queueNum = passengerNum + 1;
passengerNum++;
printf("已加入排队队列,排队号码为:%d\n", passengerNum);
return;
} else {
return;
}
}
// 扣除余票量并分配座位号
flights[index].remainingSeats -= ticketNum;
for (int i = 0; i < ticketNum; i++) {
printf("请输入第%d个乘客的姓名:\n", i+1);
scanf("%s", passengers[passengerNum].name);
printf("为第%d个乘客分配座位号:%d\n", i+1, 100 - flights[index].remainingSeats + i);
}
}
// 退票函数
void cancelTicket(char *flightNum, char *name) {
bool found = false;
for (int i = 0; i < passengerNum; i++) {
if (strcmp(passengers[i].flightNum, flightNum) == 0 && strcmp(passengers[i].name, name) == 0) {
// 归还余票量并删除乘客信息
int index = -1;
for (int j = 0; j < flightNum; j++) {
if (strcmp(flights[j].flightNum, flightNum) == 0) {
index = j;
break;
}
}
flights[index].remainingSeats += passengers[i].ticketNum;
for (int j = i; j < passengerNum - 1; j++) {
passengers[j] = passengers[j+1];
}
passengerNum--;
printf("已成功为%s办理退票手续。\n", name);
found = true;
break;
}
}
if (!found) {
printf("未找到该乘客的订票信息。\n");
}
}
// 查询候补队列函数
void queryQueue(char *flightNum) {
bool found = false;
for (int i = 0; i < passengerNum; i++) {
if (strcmp(passengers[i].flightNum, flightNum) == 0) {
printf("排在第%d位的乘客:%s,订票量:%d\n", passengers[i].queueNum, passengers[i].name, passengers[i].ticketNum);
found = true;
}
}
if (!found) {
printf("该航班没有人排队候补。\n");
}
}
int main() {
while (true) {
printf("请输入您要进行的操作:\n");
printf("1.查询航线\n");
printf("2.订票\n");
printf("3.退票\n");
printf("4.查询候补队列\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: {
printf("请输入您要查询的终点站名:\n");
char destination[50];
scanf("%s", destination);
queryFlight(destination);
break;
}
case 2: {
printf("请输入您要订票的航班号:\n");
char flightNum[20];
scanf("%s", flightNum);
printf("请输入您要订票的数量:\n");
int ticketNum;
scanf("%d", &ticketNum);
bookTicket(flightNum, ticketNum);
break;
}
case 3: {
printf("请输入您要退票的航班号:\n");
char flightNum[20];
scanf("%s", flightNum);
printf("请输入您的姓名:\n");
char name[50];
scanf("%s", name);
cancelTicket(flightNum, name);
break;
}
case 4: {
printf("请输入您要查询的航班号:\n");
char flightNum[20];
scanf("%s", flightNum);
queryQueue(flightNum);
break;
}
default: {
printf("输入错误,请重新输入。\n");
break;
}
}
}
return 0;
}
```
阅读全文