航空客运订票系统(数据结构与算法课设)(C语言版)
本文为数据结构与算法课设《航空客运订票系统》的分享与实践,采用了顺序表和链表两种数据结构。贴近生活采用了系统选择来区别用户和管理员。
目录
1.设计内容与要求
| 设计内容: 飞机订票系统包括:查询航线、客票预订和办理退票等。具体功能有: (1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据结合实际情况自定); (2)修改航班信息:可以修改航班数据文件。 (3)客户资料:包括姓名,证件号,订票数量及航班情况,订单要有编号; (4) 查询:可以查询某趟航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况; (5)订票:订票情况可以存在一个数据文件中,结构自己设定;如果该航班已经无票,可以提供相关可选择航班; (6)退票:退票后修改相关数据文件; 设计要求: (1) 符合课题要求,实现相应功能; (2) 要求界面友好美观,操作方便易行; (3) 注意程序的实用性、安全性; |
2.功能实现和程序调试
功能实现

该流程图主要在区分系统工作的流程。具体功能实现参照代码展示。
函数原型清单
/*函数声明部分*/
void Choice();
void security();
void Register();
void Menu();
void Menu_1();
void Menu_2();
void Menuport_1(Parent* current);
void Menuport_2();
void flie_Flight();
void Printf_flight();
void file_parent();
void Printdf_parent();
void Amend();
int Search_flightID(int ID);
void Out_file_1();
void Out_file_2();
void Search_flight();
void Search_parent(Parent* current);
void Reserve(Parent* current);
void Cancel(Parent* current);
程序调试
进入主菜单选择

管理员系统










3.代码实现
(1)结构体定义
typedef struct {
int flightID; // 航班号
char departureCity[50]; // 起飞城市
char arrivalCity[50]; // 抵达城市
char departureTime[20]; // 起飞时间
char arrivalTime[20]; // 抵达时间
int ticketPrice; // 票价
float discount; // 折扣
int totalSeats; // 总座位数
int bookedSeats; // 已预订座位数
} Flight;
typedef struct p {
char name[50];
char Id[20];
int num_flight = 0;
int arr_flight[2][N]; //存储该用户的订单信息 乘坐的航班和订单编号
struct p* next;
}Parent;
Flight fli[N]; // 全局变量数组存储航班信息
int num_fli = 0;
Parent* head = NULL; //存储乘客信息的链表
Parent* Float = head; //存储乘客信息的链表
Parent* tail = NULL;
int Max_sum = 0;
程序主体的函数是通过调用的全局变量信息。
(2)管理员菜单和密码识别
这里的密码识别是不完善的,只能提前存储修改密码。只是贴合实际的设计了一个页面。
void security() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 管理员密码验证 **\n");
printf(" ** **\n");
printf(" ***********************************\n");
char Sec[10] = { "050501" };
char Key[10];
int sum = 0;
while (1) {
printf("请输入密码:");
scanf("%s",Key);
if (strcmp(Sec, Key) == 0) { printf(" 密码正确 !!!\n\n 欢迎使用管理员系统\n"); printf(" 正在加载。"); for (int i = 0; i < 4; i++) { Sleep(1000); printf("。"); }system("cls"); Menu_2(); Menuport_2(); return; }
else { printf("密码错误 请重新输入\n\n"); sum++;
if (sum == 3) { printf("错误次数已达上限\n已退出系统\n"); break; }
printf("(还有%d次输入机会)\n",3-sum); }
}
}
分两个菜单是考虑到不是所有用户都可以进行航班信息修改和导入以及所有用户信息的查找和显示。所以设计了管理源系统来实现这些功能。
void Menu_2() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 管理员系统 **\n");
printf(" ** **\n");
printf(" ** 1.导入航班信息 **\n");
printf(" ** 2.显示航班信息 **\n");
printf(" ** 3.修改航班信息 **\n");
printf(" ** 4.导入乘客信息 **\n");
printf(" ** 5.显示当前订单 **\n");
printf(" ** 6.导出当前信息 **\n");
printf(" ** 0.退出管理员系统 **\n");
printf(" ** **\n");
printf(" ** **\n");
printf(" ***********************************\n");
}
void Menuport_2() {
int input;
while (1) {
printf("请选择你的操作:");
scanf("%d", &input);
switch (input) {
case 1: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班导入窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
file_Flight();
break;
}
case 2: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班显示窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Print_flight();
break;
}
case 3: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班修改窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Amend();
break;
}
case 4: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客导入窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
file_parent();
break;
}
case 5: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客显示窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Printf_parent();
break;
}
case 6: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班信息导出窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Out_file_1();
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客信息导出窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Out_file_2();
break;
}
case 0: {
printf("系统已成功退出,感谢您的使用\n");
return;
}
default: {
printf("无效的选择,请重新输入\n");
}
}
}
}
(3)航班信息导入
文件中信息存储格式以 “,”为分割符,按照顺序逐个读取。函数开头的getchar()函数是为了吸收之前在菜单选择时的换行符。避免缓冲区等待数据对于文件名的输入产生影响。

void file_Flight() {
getchar();
char filename[50];
printf("请输入导入文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0'; // 去除换行符
}
strcat(filename, ".txt"); // 添加扩展名
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
char line[1256];
while (fgets(line, sizeof(line), file) && num_fli < N) {
line[strcspn(line, "\n")] = 0; // 去除行尾换行符
char* token = strtok(line, ",");
int fieldIndex = 0; // 用于记录字段索引
while (token != NULL && fieldIndex < 9) {
switch (fieldIndex) {
case 0: sscanf(token, "%d", &fli[num_fli].flightID); break;
case 1: strncpy(fli[num_fli].departureCity, token, 50); break;
case 2: strncpy(fli[num_fli].departureTime, token, 20); break;
case 3: sscanf(token, "%50s", fli[num_fli].arrivalCity); break;
case 4: sscanf(token, "%20s", fli[num_fli].arrivalTime);break;
case 5: sscanf(token, "%d", &fli[num_fli].ticketPrice); break;
case 6: sscanf(token, "%f", &fli[num_fli].discount); break;
case 7: sscanf(token, "%d", &fli[num_fli].totalSeats); break;
case 8: sscanf(token, "%d", &fli[num_fli].bookedSeats); break;
}
fieldIndex++;
token = strtok(NULL, ",");
}
num_fli++;
}
fclose(file);
printf("成功从文件 %s 导入数据!\n", filename);
}
else {
printf("读取文件名失败\n");
}
}
(4)乘客信息导入
void file_parent() {
getchar();
char filename[50];
printf("请输入导入文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0';
}
strcat(filename, ".txt");
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
char line[1256];
Parent* head = NULL, * newparent;
while (fgets(line, sizeof(line), file)) {
line[strcspn(line, "\n")] = 0; // 去除行尾换行符
newparent = (Parent*)malloc(sizeof(Parent));
newparent->next = NULL;
if (!newparent) {
perror("Memory allocation failed");
fclose(file);
return;
}
char* token = strtok(line, ",");
int fieldIndex = 0;
while (token != NULL && fieldIndex < 3) {
switch (fieldIndex) {
case 0: sscanf(token, "%20s", newparent->name);break;
case 1: sscanf(token, "%s", newparent->Id); break;
case 2: {
sscanf(token, "%d", &newparent->num_flight);
if (newparent->num_flight > Max_sum) {
Max_sum = newparent->num_flight;
}
for (int i = 0; i < newparent->num_flight && token != NULL; i++) {
token = strtok(NULL, ",");
if (token) {
sscanf(token, "%d", &newparent->arr_flight[0][i]);
token = strtok(NULL, ",");
if (token) {
sscanf(token, "%d", &newparent->arr_flight[1][i]);
}
}
}
break;
}
}
fieldIndex++;
token = strtok(NULL, ",");
}
if (!head) {
head = newparent;
tail = newparent;
}
else {
tail->next = newparent;
tail = newparent;
}
}
Float = head; // 更新全局链表头
printf("已由文件成功导入\n");
fclose(file);
}
}
(5)航班信息修改
void Amend() {
int newname;
int input;
printf("\n请输入要修改的航班编号\n");
scanf("%d",&newname);
int wei = Search_flightID(newname);
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班修改窗口 **\n");
printf(" ** **\n");
printf(" ** 1.航班起飞时间 **\n");
printf(" ** 2.航班抵达时间 **\n");
printf(" ** 3.航班荷载人数 **\n");
printf(" ** 0.退出修改窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
while (1) {
printf("请选择修改内容\n");
scanf("%d", &input);
switch (input) {
case 1: {char time[20]; printf("请输入修改后的时间:"); scanf("%s", time); strcpy(fli[wei].departureTime, time); break; }
case 2: {char time[20]; printf("请输入修改后的时间:"); scanf("%s", time); strcpy(fli[wei].arrivalTime, time); break; }
case 3: {int num; printf("请输入当前所荷载人数:"); scanf("%d", &num); fli[wei].totalSeats = num; break; }
case 0: {printf("\n已退出航班修改\n"); return;}
}
}
}
(6)信息显示函数
void Print_flight() {
if (num_fli == 0) { printf("当前无航班信息 请导入\n"); return;}
printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
printf("│ 编号 │ 起飞城市 │ 起飞时间 │ 抵达城市 │ 抵达时间 │ 总座位数 │ 已预订座位数 │\n");
printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
for (int i = 0; i < num_fli; i++) {
printf("│");
int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
printf("%d", fli[i].flightID); for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }
printf("│");
int padd = (length_2 - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s",fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s",fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalCity)) / 2; for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
printf("%s", fli[i].arrivalCity); for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalTime)) / 2; for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
printf("%s", fli[i].arrivalTime); for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].totalSeats > 9) { padding++; if (fli[i].totalSeats > 99) { if (fli[i].totalSeats > 999) { padding++; } padding++; } }
printf("%d", fli[i].totalSeats);for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].bookedSeats > 9) { padding++; if (fli[i].bookedSeats > 99) { if (fli[i].bookedSeats > 999) { padding++; } padding++; } }
printf("%d", fli[i].bookedSeats); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│\n");
if (i + 1 == num_fli) { printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n"); }
else { printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n"); }
}
printf("\n显示完成\n");
}
void Printf_parent() {
Parent* current = Float; if (current == NULL) { printf("当前无乘客信息 请导入\n"); return;}
printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < Max_sum-1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行
printf("│ 姓名 │ 证件号 │ 航班数量 │");
int padding = ((length_2+1) * Max_sum -1- strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2+1) * Max_sum -1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行
printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < Max_sum-1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行
while (current != NULL) {
int padding, padd;
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│"); for (int ko = 0; ko < length_2; ko++) { printf(" "); }
}
}printf("│\n");
//数据输出第一行
printf("│");
padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }
printf("├");
for (int as = 0; as < Max_sum - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
//数据输出第二行
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[1][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│ "); /*for (int ko = 0; ko < length_2; ko++) { printf(" "); }*/
}
}printf("│\n");
//数据输出第三行
current = current->next;
if (current == NULL) { printf("└─────────────────────┴─────────────────────┴─────────────────────"); for (int i = 0; i < Max_sum; i++) { printf("┴─────────────────────"); } printf("┘\n"); }
else { printf("├─────────────────────┼─────────────────────┼─────────────────────"); for (int i = 0; i < Max_sum; i++) { printf("┼─────────────────────"); }printf("┤\n"); }
}
printf("\n显示完成\n");
}
(7)信息导入文件
void Out_file_1() {
getchar();
char filename[50];
printf("请输入导出文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0';
}
strcat(filename, ".txt");
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
for (int i = 0; i < num_fli; i++) {
fprintf(file, "%d", fli[i].flightID); fprintf(file, ",");
fprintf(file, "%50s", fli[i].departureCity); fprintf(file, ",");
fprintf(file, "%20s", fli[i].departureTime); fprintf(file, ",");
fprintf(file, "%50s", fli[i].arrivalCity); fprintf(file, ",");
fprintf(file, "%20s", fli[i].arrivalTime); fprintf(file, ",");
fprintf(file, "%d", fli[i].ticketPrice); fprintf(file, ",");
fprintf(file, "%f", fli[i].discount); fprintf(file, ",");
fprintf(file, "%d", fli[i].totalSeats); fprintf(file, ",");
fprintf(file, "%d", fli[i].bookedSeats); fprintf(file, ",");
fprintf(file, "\n");
}
fclose(file);
printf("航班信息已成功导出\n");
}
}
void Out_file_2() {
char filename[50];
printf("请输入导出文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0';
}
strcat(filename, ".txt");
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
Parent* current = Float;
while (current) {
fprintf(file,"%50s",current->name); fprintf(file, ",");
fprintf(file,"%20s",current->Id); fprintf(file, ",");
fprintf(file,"%d",current->num_flight); fprintf(file, ",");
for (int i = 0; i < current->num_flight; i++) {
fprintf(file, "%d", current->arr_flight[0][i]); fprintf(file, ",");
fprintf(file, "%d", current->arr_flight[1][i]);
if (i + 1 != current->num_flight) {fprintf(file, ",");}
}
current = current->next;
}
fclose(file);
printf("乘客信息已成功导出\n");
}
}
(8)用户菜单和证件号识别
其实这里 的身份识别并不合理,在管理员导入前无法进入系统操作。
void Register() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 用户系统登录 **\n");
printf(" ** **\n");
printf(" ***********************************\n");
char newname[50];
printf("\n请输入您的证件号\n");
scanf("%s", newname);
Parent* current = Float; if (current == NULL) { printf("当前无乘客信息 请等待管理员导入\n"); printf("正在回到上一页。"); for (int i = 0; i < 3; i++) { Sleep(1000); printf("。"); } return; }
while (current != NULL) { if (strcmp(newname, current->Id) == 0) { break; } else { current = current->next; } }
if (current == NULL) {
printf("当前系统中没有您的信息\n开始创建新乘客信息\n");
Parent* newparent = (Parent*)malloc(sizeof(Parent));
newparent->next = NULL;
strcpy(newparent->Id, newname);
printf("请输入您的姓名:");
scanf("%s", newname);
strcpy(newparent->name, newname);
current = Float;
while (current->next != NULL) { current = current->next; }
current->next = newparent;
current = current->next;
}
printf("尊敬的%s欢迎您使用本系统",current->name);
printf("正在为你载入系统。");
for (int i = 0; i < 3; i++) { Sleep(1000); printf("。"); }
printf("\n载入成功\n");
system("cls");
Menu_1();
Menuport_1(current);
}
void Menu_1() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 航空客运订票系统 **\n");
printf(" ** **\n");
printf(" ** 1.查询航班信息 **\n");
printf(" ** 2.查询个人信息 **\n");
printf(" ** 3.进行订票服务 **\n");
printf(" ** 4.进行退票服务 **\n");
printf(" ** 0.退出订票系统 **\n");
printf(" ** **\n");
printf(" ** **\n");
printf(" ***********************************\n");
}
void Menuport_1(Parent *current) {
int input;
while (1) {
printf("请选择你的操作:");
scanf("%d", &input);
switch (input) {
case 1: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班查询窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Search_flight();
break;
}
case 2: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客查询窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Search_parent(current);
break;
}
case 3: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客订票窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Reserve(current);
break;
}
case 4: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客退票窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Cancel(current);
break;
}
case 0: {printf("系统已成功退出,感谢您的使用\n"); return; }
default: {printf("无效的选择,请重新输入\n");}
}
}
}
(9)航班情况查询
int Search_flightID(int ID) {
for (int i = 0; i < N; i++) {
if (ID == fli[i].flightID) {
return i;
}
}
return -1;
}
void Search_flight() {
int newname;
int input;
printf("\n请输入您要查询的航班编号\n");
scanf("%d", &newname);
int i = Search_flightID(newname);
if (i == -1) { printf("信息有误 航班不存在\n"); return; }
printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
printf("│ 编号 │ 起飞城市 │ 起飞时间 │ 抵达城市 │ 抵达时间 │ 票价 │ 折扣 │ 是否满仓 │\n");
printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
printf("│");
int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
printf("%d", fli[i].flightID); for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }
printf("│");
int padd = (length_2 - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalCity)) / 2; for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
printf("%s", fli[i].arrivalCity); for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalTime)) / 2; for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
printf("%s", fli[i].arrivalTime); for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].ticketPrice > 9) { padding++; if (fli[i].ticketPrice > 99) { if (fli[i].ticketPrice > 999) { padding++; } padding++; } }
printf("%d", fli[i].ticketPrice); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│");
padding = (length_2 - 2) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /* if (fli[i].discount> 9) { padding++; if (fli[i].discount > 99) { padding++; } }*/
printf("%.1f", fli[i].discount); for (int j5 = 0; j5 < length_2 - 2 - padding; j5++) { printf(" "); }
printf("│");
if (fli[i].bookedSeats < fli[i].totalSeats) {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
else {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
printf("│\n");
printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n");
printf("查询完毕\n");
}
(10)用户情况显示
void Search_parent(Parent *current) {
printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < current->num_flight - 1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行
printf("│ 姓名 │ 证件号 │ 航班数量 │");
int padding = ((length_2 + 1) * current->num_flight - 1 - strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2 + 1) * current->num_flight - 1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行
printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < current->num_flight - 1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行
int padd;
printf("│ │ │ ");
for (int i = 0; i < current->num_flight; i++) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
printf("│\n");
//数据输出第一行
printf("│");
padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }
printf("├");
for (int as = 0; as < current->num_flight - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
//数据输出第二行
printf("│ │ │ ");
for (int i = 0; i < current->num_flight; i++) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[1][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
printf("│\n");
//数据输出第三行
printf("└─────────────────────┴─────────────────────┴─────────────────────"); for (int i = 0; i < current->num_flight; i++) { printf("┴─────────────────────"); } printf("┘\n");
printf("\n显示完成\n");
}
(11)用户订票操作
关于订票和退票的操作,实际是对两个表的数据修改,只要分析清楚数据间的对应关系就OK了。实际比较麻烦的对于各种错误操作的判断,比如购买已经买过的航班,购买没有出现的航班,重复退票,输入错误等等....
void Reserve(Parent *current) {
int choice;
printf("下面是本次的所有航班信息\n");
Print_flight(); printf("\n");
while (1) {
printf("请您选择要购买的航班(请输入航班编号):");
scanf("%d", &choice);
int wei = Search_flightID(choice);
if (wei == -1) { printf("信息有误 请重新输入"); }
else {
for (int i = 0; i < current->num_flight; i++) { if (current->arr_flight[0][i] == choice) { printf("该趟航班您已购买\n"); printf("已退出购票窗口\n"); return; } }
if (fli[wei].bookedSeats < fli[wei].totalSeats) {
fli[wei].bookedSeats++;
current->arr_flight[0][current->num_flight] = fli[wei].flightID;
printf("请输入您的订单号:");
scanf("%d",¤t->arr_flight[1][current->num_flight++]);
if (current->num_flight > Max_sum) {
Max_sum = current->num_flight;
}
printf("\n购票成功\n"); return;
}
else {
printf("航班%d已经满仓\n",choice);
printf("下面是与您所选航班行程一致的航班 您可以继续进行选择\n");
for (int i = 0; i < num_fli; i++) {
if (strcmp(fli[wei].departureCity,fli[i].departureCity) == 0 && strcmp(fli[wei].arrivalCity, fli[i].arrivalCity) == 0) {
printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
printf("│ 编号 │ 起飞城市 │ 起飞时间 │ 抵达城市 │ 抵达时间 │ 票价 │ 折扣 │ 是否满仓 │\n");
printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
printf("│");
int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
printf("%d", fli[i].flightID); for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }
printf("│");
int padd = (length_2 - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalCity)) / 2; for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
printf("%s", fli[i].arrivalCity); for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalTime)) / 2; for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
printf("%s", fli[i].arrivalTime); for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].ticketPrice > 9) { padding++; if (fli[i].ticketPrice > 99) { if (fli[i].ticketPrice > 999) { padding++; } padding++; } }
printf("%d", fli[i].ticketPrice); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│");
padding = (length_2 - 2) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].discount > 9) { padding++; if (fli[i].discount > 99) { padding++; } }
printf("%.1f", fli[i].discount); for (int j5 = 0; j5 < length_2 - 2 - padding; j5++) { printf(" "); }
printf("│");
if (fli[i].bookedSeats < fli[i].totalSeats) {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
else {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
printf("│\n");
printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n");
}
}
printf("如果您想结束购票 请输入0结束本次购票,继续请输入任意数字\n");
printf("请输入:"); scanf("%d", &choice); if (choice == 0) { printf("已退出本次购票\n"); return; }
}
}
}
}
(12)用户退票操作
void Cancel(Parent* current) {
if (current == NULL || current->num_flight == 0) { printf("您还没有已购机票 请您先进行购票\n"); return;}
else {
printf("下面是您的订购信息\n");
printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < Max_sum - 1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行
printf("│ 姓名 │ 证件号 │ 航班数量 │");
int padding = ((length_2 + 1) * Max_sum - 1 - strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2 + 1) * Max_sum - 1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行
printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < Max_sum - 1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行
int padd;
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│"); for (int ko = 0; ko < length_2; ko++) { printf(" "); }
}
}printf("│\n");
//数据输出第一行
printf("│");
padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }
printf("├");
for (int as = 0; as < Max_sum - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
//数据输出第二行
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[1][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│ "); /*for (int ko = 0; ko < length_2; ko++) { printf(" "); }*/
}
}printf("│\n");
//数据输出第三行
printf("└─────────────────────┴─────────────────────┴─────────────────────"); for (int i = 0; i < Max_sum; i++) { printf("┴─────────────────────"); } printf("┘\n");
int choice;
while (1) {
printf("请选择您要退票的航班:");
scanf("%d", &choice);
int wei = Search_flightID(choice);
for (int j = 0; j < current->num_flight; j++) {
if (current->arr_flight[0][j] == choice) {
fli[wei].bookedSeats--;
current->num_flight--;
for (int k = j; k < N; k++) {
current->arr_flight[0][k] = current->arr_flight[0][k + 1];
}
printf("退票中。");
for (int i = 0; i < 4; i++) { Sleep(1000); printf("。"); }
printf("\n退票成功\n"); return;
}
}
printf("您选择的航班并没有购买 请重新选择\n");
}
}
}
(*13)完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include<string.h>
#include <locale.h>
#include<windows.h>
#define N 10 //设置系统的最大航班数量
#define length_1 15
#define length_2 21
typedef struct {
int flightID; // 航班号
char departureCity[50]; // 起飞城市
char arrivalCity[50]; // 抵达城市
char departureTime[20]; // 起飞时间
char arrivalTime[20]; // 抵达时间
int ticketPrice; // 票价
float discount; // 折扣
int totalSeats; // 总座位数
int bookedSeats; // 已预订座位数
} Flight;
typedef struct p {
char name[50];
char Id[20];
int num_flight = 0;
int arr_flight[2][N]; //存储该用户的订单信息 乘坐的航班和订单编号
struct p* next;
}Parent;
Flight fli[N]; // 全局变量数组存储航班信息
int num_fli = 0;
Parent* head = NULL; //存储乘客信息的链表
Parent* Float = head; //存储乘客信息的链表
Parent* tail = NULL;
int Max_sum = 0;
/*函数声明部分*/
void Choice();
void security();
void Register();
void Menu();
void Menu_1();
void Menu_2();
void Menuport_1(Parent* current);
void Menuport_2();
void flie_Flight();
void Printf_flight();
void file_parent();
void Printdf_parent();
void Amend();
int Search_flightID(int ID);
void Out_file_1();
void Out_file_2();
void Search_flight();
void Search_parent(Parent* current);
void Reserve(Parent* current);
void Cancel(Parent* current);
/*功能实现部分*/
void file_Flight() {
getchar();
char filename[50];
printf("请输入导入文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0'; // 去除换行符
}
strcat(filename, ".txt"); // 添加扩展名
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
char line[1256];
while (fgets(line, sizeof(line), file) && num_fli < N) {
line[strcspn(line, "\n")] = 0; // 去除行尾换行符
char* token = strtok(line, ",");
int fieldIndex = 0; // 用于记录字段索引
while (token != NULL && fieldIndex < 9) {
switch (fieldIndex) {
case 0: sscanf(token, "%d", &fli[num_fli].flightID); break;
case 1: strncpy(fli[num_fli].departureCity, token, 50); break;
case 2: strncpy(fli[num_fli].departureTime, token, 20); break;
case 3: sscanf(token, "%50s", fli[num_fli].arrivalCity); break;
case 4: sscanf(token, "%20s", fli[num_fli].arrivalTime);break;
case 5: sscanf(token, "%d", &fli[num_fli].ticketPrice); break;
case 6: sscanf(token, "%f", &fli[num_fli].discount); break;
case 7: sscanf(token, "%d", &fli[num_fli].totalSeats); break;
case 8: sscanf(token, "%d", &fli[num_fli].bookedSeats); break;
}
fieldIndex++;
token = strtok(NULL, ",");
}
num_fli++;
}
fclose(file);
printf("成功从文件 %s 导入数据!\n", filename);
}
else {
printf("读取文件名失败\n");
}
}
void Print_flight() {
if (num_fli == 0) { printf("当前无航班信息 请导入\n"); return;}
printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
printf("│ 编号 │ 起飞城市 │ 起飞时间 │ 抵达城市 │ 抵达时间 │ 总座位数 │ 已预订座位数 │\n");
printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
for (int i = 0; i < num_fli; i++) {
printf("│");
int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
printf("%d", fli[i].flightID); for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }
printf("│");
int padd = (length_2 - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s",fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s",fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalCity)) / 2; for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
printf("%s", fli[i].arrivalCity); for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalTime)) / 2; for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
printf("%s", fli[i].arrivalTime); for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].totalSeats > 9) { padding++; if (fli[i].totalSeats > 99) { if (fli[i].totalSeats > 999) { padding++; } padding++; } }
printf("%d", fli[i].totalSeats);for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].bookedSeats > 9) { padding++; if (fli[i].bookedSeats > 99) { if (fli[i].bookedSeats > 999) { padding++; } padding++; } }
printf("%d", fli[i].bookedSeats); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│\n");
if (i + 1 == num_fli) { printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n"); }
else { printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n"); }
}
printf("\n显示完成\n");
}
void file_parent() {
getchar();
char filename[50];
printf("请输入导入文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0';
}
strcat(filename, ".txt");
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
char line[1256];
Parent* head = NULL, * newparent;
while (fgets(line, sizeof(line), file)) {
line[strcspn(line, "\n")] = 0; // 去除行尾换行符
newparent = (Parent*)malloc(sizeof(Parent));
newparent->next = NULL;
if (!newparent) {
perror("Memory allocation failed");
fclose(file);
return;
}
char* token = strtok(line, ",");
int fieldIndex = 0;
while (token != NULL && fieldIndex < 3) {
switch (fieldIndex) {
case 0: sscanf(token, "%20s", newparent->name);break;
case 1: sscanf(token, "%s", newparent->Id); break;
case 2: {
sscanf(token, "%d", &newparent->num_flight);
if (newparent->num_flight > Max_sum) {
Max_sum = newparent->num_flight;
}
for (int i = 0; i < newparent->num_flight && token != NULL; i++) {
token = strtok(NULL, ",");
if (token) {
sscanf(token, "%d", &newparent->arr_flight[0][i]);
token = strtok(NULL, ",");
if (token) {
sscanf(token, "%d", &newparent->arr_flight[1][i]);
}
}
}
break;
}
}
fieldIndex++;
token = strtok(NULL, ",");
}
if (!head) {
head = newparent;
tail = newparent;
}
else {
tail->next = newparent;
tail = newparent;
}
}
Float = head; // 更新全局链表头
printf("已由文件成功导入\n");
fclose(file);
}
}
void Printf_parent() {
Parent* current = Float; if (current == NULL) { printf("当前无乘客信息 请导入\n"); return;}
printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < Max_sum-1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行
printf("│ 姓名 │ 证件号 │ 航班数量 │");
int padding = ((length_2+1) * Max_sum -1- strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2+1) * Max_sum -1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行
printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < Max_sum-1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行
while (current != NULL) {
int padding, padd;
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│"); for (int ko = 0; ko < length_2; ko++) { printf(" "); }
}
}printf("│\n");
//数据输出第一行
printf("│");
padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }
printf("├");
for (int as = 0; as < Max_sum - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
//数据输出第二行
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[1][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│ "); /*for (int ko = 0; ko < length_2; ko++) { printf(" "); }*/
}
}printf("│\n");
//数据输出第三行
current = current->next;
if (current == NULL) { printf("└─────────────────────┴─────────────────────┴─────────────────────"); for (int i = 0; i < Max_sum; i++) { printf("┴─────────────────────"); } printf("┘\n"); }
else { printf("├─────────────────────┼─────────────────────┼─────────────────────"); for (int i = 0; i < Max_sum; i++) { printf("┼─────────────────────"); }printf("┤\n"); }
}
printf("\n显示完成\n");
}
int Search_flightID(int ID) {
for (int i = 0; i < N; i++) {
if (ID == fli[i].flightID) {
return i;
}
}
return -1;
}
void Amend() {
int newname;
int input;
printf("\n请输入要修改的航班编号\n");
scanf("%d",&newname);
int wei = Search_flightID(newname);
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班修改窗口 **\n");
printf(" ** **\n");
printf(" ** 1.航班起飞时间 **\n");
printf(" ** 2.航班抵达时间 **\n");
printf(" ** 3.航班荷载人数 **\n");
printf(" ** 0.退出修改窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
while (1) {
printf("请选择修改内容\n");
scanf("%d", &input);
switch (input) {
case 1: {char time[20]; printf("请输入修改后的时间:"); scanf("%s", time); strcpy(fli[wei].departureTime, time); break; }
case 2: {char time[20]; printf("请输入修改后的时间:"); scanf("%s", time); strcpy(fli[wei].arrivalTime, time); break; }
case 3: {int num; printf("请输入当前所荷载人数:"); scanf("%d", &num); fli[wei].totalSeats = num; break; }
case 0: {printf("\n已退出航班修改\n"); return;}
}
}
}
void Out_file_1() {
getchar();
char filename[50];
printf("请输入导出文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0';
}
strcat(filename, ".txt");
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
for (int i = 0; i < num_fli; i++) {
fprintf(file, "%d", fli[i].flightID); fprintf(file, ",");
fprintf(file, "%50s", fli[i].departureCity); fprintf(file, ",");
fprintf(file, "%20s", fli[i].departureTime); fprintf(file, ",");
fprintf(file, "%50s", fli[i].arrivalCity); fprintf(file, ",");
fprintf(file, "%20s", fli[i].arrivalTime); fprintf(file, ",");
fprintf(file, "%d", fli[i].ticketPrice); fprintf(file, ",");
fprintf(file, "%f", fli[i].discount); fprintf(file, ",");
fprintf(file, "%d", fli[i].totalSeats); fprintf(file, ",");
fprintf(file, "%d", fli[i].bookedSeats); fprintf(file, ",");
fprintf(file, "\n");
}
fclose(file);
printf("航班信息已成功导出\n");
}
}
void Out_file_2() {
char filename[50];
printf("请输入导出文件的名称(不含扩展名): ");
if (fgets(filename, sizeof(filename), stdin) != NULL) {
size_t len = strlen(filename);
if (len > 0 && filename[len - 1] == '\n') {
filename[len - 1] = '\0';
}
strcat(filename, ".txt");
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s!\a\n", filename);
return;
}
Parent* current = Float;
while (current) {
fprintf(file,"%50s",current->name); fprintf(file, ",");
fprintf(file,"%20s",current->Id); fprintf(file, ",");
fprintf(file,"%d",current->num_flight); fprintf(file, ",");
for (int i = 0; i < current->num_flight; i++) {
fprintf(file, "%d", current->arr_flight[0][i]); fprintf(file, ",");
fprintf(file, "%d", current->arr_flight[1][i]);
if (i + 1 != current->num_flight) {fprintf(file, ",");}
}
current = current->next;
}
fclose(file);
printf("乘客信息已成功导出\n");
}
}
void Search_flight() {
int newname;
int input;
printf("\n请输入您要查询的航班编号\n");
scanf("%d", &newname);
int i = Search_flightID(newname);
if (i == -1) { printf("信息有误 航班不存在\n"); return; }
printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
printf("│ 编号 │ 起飞城市 │ 起飞时间 │ 抵达城市 │ 抵达时间 │ 票价 │ 折扣 │ 是否满仓 │\n");
printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
printf("│");
int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
printf("%d", fli[i].flightID); for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }
printf("│");
int padd = (length_2 - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalCity)) / 2; for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
printf("%s", fli[i].arrivalCity); for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalTime)) / 2; for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
printf("%s", fli[i].arrivalTime); for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].ticketPrice > 9) { padding++; if (fli[i].ticketPrice > 99) { if (fli[i].ticketPrice > 999) { padding++; } padding++; } }
printf("%d", fli[i].ticketPrice); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│");
padding = (length_2 - 2) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /* if (fli[i].discount> 9) { padding++; if (fli[i].discount > 99) { padding++; } }*/
printf("%.1f", fli[i].discount); for (int j5 = 0; j5 < length_2 - 2 - padding; j5++) { printf(" "); }
printf("│");
if (fli[i].bookedSeats < fli[i].totalSeats) {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
else {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
printf("│\n");
printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n");
printf("查询完毕\n");
}
void Search_parent(Parent *current) {
printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < current->num_flight - 1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行
printf("│ 姓名 │ 证件号 │ 航班数量 │");
int padding = ((length_2 + 1) * current->num_flight - 1 - strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2 + 1) * current->num_flight - 1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行
printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < current->num_flight - 1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行
int padd;
printf("│ │ │ ");
for (int i = 0; i < current->num_flight; i++) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
printf("│\n");
//数据输出第一行
printf("│");
padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }
printf("├");
for (int as = 0; as < current->num_flight - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
//数据输出第二行
printf("│ │ │ ");
for (int i = 0; i < current->num_flight; i++) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[1][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
printf("│\n");
//数据输出第三行
printf("└─────────────────────┴─────────────────────┴─────────────────────"); for (int i = 0; i < current->num_flight; i++) { printf("┴─────────────────────"); } printf("┘\n");
printf("\n显示完成\n");
}
void Reserve(Parent *current) {
int choice;
printf("下面是本次的所有航班信息\n");
Print_flight(); printf("\n");
while (1) {
printf("请您选择要购买的航班(请输入航班编号):");
scanf("%d", &choice);
int wei = Search_flightID(choice);
if (wei == -1) { printf("信息有误 请重新输入"); }
else {
for (int i = 0; i < current->num_flight; i++) { if (current->arr_flight[0][i] == choice) { printf("该趟航班您已购买\n"); printf("已退出购票窗口\n"); return; } }
if (fli[wei].bookedSeats < fli[wei].totalSeats) {
fli[wei].bookedSeats++;
current->arr_flight[0][current->num_flight] = fli[wei].flightID;
printf("请输入您的订单号:");
scanf("%d",¤t->arr_flight[1][current->num_flight++]);
if (current->num_flight > Max_sum) {
Max_sum = current->num_flight;
}
printf("\n购票成功\n"); return;
}
else {
printf("航班%d已经满仓\n",choice);
printf("下面是与您所选航班行程一致的航班 您可以继续进行选择\n");
for (int i = 0; i < num_fli; i++) {
if (strcmp(fli[wei].departureCity,fli[i].departureCity) == 0 && strcmp(fli[wei].arrivalCity, fli[i].arrivalCity) == 0) {
printf("┌───────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┐\n");
printf("│ 编号 │ 起飞城市 │ 起飞时间 │ 抵达城市 │ 抵达时间 │ 票价 │ 折扣 │ 是否满仓 │\n");
printf("├───────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤\n");
printf("│");
int padding = (length_1 - 8) / 2; for (int i = 0; i < padding; i++) { printf(" "); } /*if (fli[i].flightID > 9) { padding++; if (fli[i].flightID > 99) { padding++; } }*/
printf("%d", fli[i].flightID); for (int i = 0; i < length_1 - 8 - padding; i++) { printf(" "); }
printf("│");
int padd = (length_2 - strlen(fli[i].departureCity)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", fli[i].departureCity); for (int j1 = 0; j1 < (length_2 - padd - strlen(fli[i].departureCity)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].departureTime)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", fli[i].departureTime); for (int j2 = 0; j2 < (length_2 - padd - strlen(fli[i].departureTime)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalCity)) / 2; for (int k3 = 0; k3 < padd; k3++) { printf(" "); }
printf("%s", fli[i].arrivalCity); for (int j3 = 0; j3 < (length_2 - padd - strlen(fli[i].arrivalCity)); j3++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(fli[i].arrivalTime)) / 2; for (int k4 = 0; k4 < padd; k4++) { printf(" "); }
printf("%s", fli[i].arrivalTime); for (int j4 = 0; j4 < (length_2 - padd - strlen(fli[i].arrivalTime)); j4++) { printf(" "); }
printf("│");
padding = (length_2 - 1) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].ticketPrice > 9) { padding++; if (fli[i].ticketPrice > 99) { if (fli[i].ticketPrice > 999) { padding++; } padding++; } }
printf("%d", fli[i].ticketPrice); for (int j5 = 0; j5 < length_2 - 1 - padding; j5++) { printf(" "); }
printf("│");
padding = (length_2 - 2) / 2; for (int i = 0; i < padding; i++) { printf(" "); } if (fli[i].discount > 9) { padding++; if (fli[i].discount > 99) { padding++; } }
printf("%.1f", fli[i].discount); for (int j5 = 0; j5 < length_2 - 2 - padding; j5++) { printf(" "); }
printf("│");
if (fli[i].bookedSeats < fli[i].totalSeats) {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
else {
padding = (length_2 - strlen("未满仓")) / 2; for (int i = 0; i < padding; i++) { printf(" "); }
printf("未满仓"); for (int j5 = 0; j5 < length_2 - strlen("未满仓") - padding; j5++) { printf(" "); }
}
printf("│\n");
printf("└───────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘\n");
}
}
printf("如果您想结束购票 请输入0结束本次购票,继续请输入任意数字\n");
printf("请输入:"); scanf("%d", &choice); if (choice == 0) { printf("已退出本次购票\n"); return; }
}
}
}
}
void Cancel(Parent* current) {
if (current == NULL || current->num_flight == 0) { printf("您还没有已购机票 请您先进行购票\n"); return;}
else {
printf("下面是您的订购信息\n");
printf("┌─────────────────────┬─────────────────────┬─────────────────────┬"); for (int i = 0; i < Max_sum - 1; i++) { printf("──────────────────────"); } printf("─────────────────────┐\n"); //表头第一行
printf("│ 姓名 │ 证件号 │ 航班数量 │");
int padding = ((length_2 + 1) * Max_sum - 1 - strlen("航班订单")) / 2; for (int ki = 0; ki < padding; ki++) { printf(" "); } printf("航班信息"); for (int kp = 0; kp < ((length_2 + 1) * Max_sum - 1 - padding - strlen("航班订单")); kp++) { printf(" "); }printf("│\n");//表头第二行
printf("├─────────────────────┼─────────────────────┼─────────────────────┼"); for (int i = 0; i < Max_sum - 1; i++) { printf("─────────────────────┬"); }printf("─────────────────────┤\n");//表头第三行
int padd;
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[0][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│"); for (int ko = 0; ko < length_2; ko++) { printf(" "); }
}
}printf("│\n");
//数据输出第一行
printf("│");
padd = (length_2 - strlen(current->name)) / 2; for (int k1 = 0; k1 < padd; k1++) { printf(" "); }
printf("%s", current->name); for (int j1 = 0; j1 < (length_2 - padd - strlen(current->name)); j1++) { printf(" "); }
printf("│");
padd = (length_2 - strlen(current->Id)) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%s", current->Id); for (int j2 = 0; j2 < (length_2 - padd - strlen(current->Id)); j2++) { printf(" "); }
printf("│");
padd = (length_2 - 1) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }if (current->num_flight > 9) { padd++; if (current->num_flight > 99) { padd++; } }
printf("%d", current->num_flight); for (int j2 = 0; j2 < (length_2 - padd - 1); j2++) { printf(" "); }
printf("├");
for (int as = 0; as < Max_sum - 1; as++) { printf("─────────────────────┼"); }printf("─────────────────────┤\n");
//数据输出第二行
printf("│ │ │ ");
for (int i = 0; i < Max_sum; i++) {
if (i < current->num_flight) {
printf("│");
padd = (length_2 - 8) / 2; for (int k2 = 0; k2 < padd; k2++) { printf(" "); }
printf("%d", current->arr_flight[1][i]); for (int j2 = 0; j2 < (length_2 - padd - 8); j2++) { printf(" "); }
}
else {
printf("│ "); /*for (int ko = 0; ko < length_2; ko++) { printf(" "); }*/
}
}printf("│\n");
//数据输出第三行
printf("└─────────────────────┴─────────────────────┴─────────────────────"); for (int i = 0; i < Max_sum; i++) { printf("┴─────────────────────"); } printf("┘\n");
int choice;
while (1) {
printf("请选择您要退票的航班:");
scanf("%d", &choice);
int wei = Search_flightID(choice);
for (int j = 0; j < current->num_flight; j++) {
if (current->arr_flight[0][j] == choice) {
fli[wei].bookedSeats--;
current->num_flight--;
for (int k = j; k < N; k++) {
current->arr_flight[0][k] = current->arr_flight[0][k + 1];
}
printf("退票中。");
for (int i = 0; i < 4; i++) { Sleep(1000); printf("。"); }
printf("\n退票成功\n"); return;
}
}
printf("您选择的航班并没有购买 请重新选择\n");
}
}
}
void Register() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 用户系统登录 **\n");
printf(" ** **\n");
printf(" ***********************************\n");
char newname[50];
printf("\n请输入您的证件号\n");
scanf("%s", newname);
Parent* current = Float; if (current == NULL) { printf("当前无乘客信息 请等待管理员导入\n"); printf("正在回到上一页。"); for (int i = 0; i < 3; i++) { Sleep(1000); printf("。"); } return; }
while (current != NULL) { if (strcmp(newname, current->Id) == 0) { break; } else { current = current->next; } }
if (current == NULL) {
printf("当前系统中没有您的信息\n开始创建新乘客信息\n");
Parent* newparent = (Parent*)malloc(sizeof(Parent));
newparent->next = NULL;
strcpy(newparent->Id, newname);
printf("请输入您的姓名:");
scanf("%s", newname);
strcpy(newparent->name, newname);
current = Float;
while (current->next != NULL) { current = current->next; }
current->next = newparent;
current = current->next;
}
printf("尊敬的%s欢迎您使用本系统",current->name);
printf("正在为你载入系统。");
for (int i = 0; i < 3; i++) { Sleep(1000); printf("。"); }
printf("\n载入成功\n");
system("cls");
Menu_1();
Menuport_1(current);
}
void security() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 管理员密码验证 **\n");
printf(" ** **\n");
printf(" ***********************************\n");
char Sec[10] = { "050501" };
char Key[10];
int sum = 0;
while (1) {
printf("请输入密码:");
scanf("%s",Key);
if (strcmp(Sec, Key) == 0) { printf(" 密码正确 !!!\n\n 欢迎使用管理员系统\n"); printf(" 正在加载。"); for (int i = 0; i < 4; i++) { Sleep(1000); printf("。"); }system("cls"); Menu_2(); Menuport_2(); return; }
else { printf("密码错误 请重新输入\n\n"); sum++;
if (sum == 3) { printf("错误次数已达上限\n已退出系统\n"); break; }
printf("(还有%d次输入机会)\n",3-sum); }
}
}
void Menu() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 系统选择 **\n");
printf(" ** **\n");
printf(" ** 1.航空客运订票系统 **\n");
printf(" ** 2.管理员系统 **\n");
printf(" ** 0.退出系统 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
}
void Choice() {
int choice;
while (1) {
Menu();
printf(" 请选择要进入的系统\n");
scanf("%d",&choice);
if (choice == 1) { Register(); }
else if (choice == 2) { security(); }
else if (choice == 0) { printf("系统已全部退出 感谢您的使用\n"); exit(-339); }
else { printf("无效的选择,请重新输入\n"); }
}
}
void Menu_1() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 航空客运订票系统 **\n");
printf(" ** **\n");
printf(" ** 1.查询航班信息 **\n");
printf(" ** 2.查询个人信息 **\n");
printf(" ** 3.进行订票服务 **\n");
printf(" ** 4.进行退票服务 **\n");
printf(" ** 0.退出订票系统 **\n");
printf(" ** **\n");
printf(" ** **\n");
printf(" ***********************************\n");
}
void Menuport_1(Parent *current) {
int input;
while (1) {
printf("请选择你的操作:");
scanf("%d", &input);
switch (input) {
case 1: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班查询窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Search_flight();
break;
}
case 2: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客查询窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Search_parent(current);
break;
}
case 3: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客订票窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Reserve(current);
break;
}
case 4: {
Menu_1();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客退票窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Cancel(current);
break;
}
case 0: {printf("系统已成功退出,感谢您的使用\n"); return; }
default: {printf("无效的选择,请重新输入\n");}
}
}
}
void Menu_2() {
system("cls");
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 管理员系统 **\n");
printf(" ** **\n");
printf(" ** 1.导入航班信息 **\n");
printf(" ** 2.显示航班信息 **\n");
printf(" ** 3.修改航班信息 **\n");
printf(" ** 4.导入乘客信息 **\n");
printf(" ** 5.显示当前订单 **\n");
printf(" ** 6.导出当前信息 **\n");
printf(" ** 0.退出管理员系统 **\n");
printf(" ** **\n");
printf(" ** **\n");
printf(" ***********************************\n");
}
void Menuport_2() {
int input;
while (1) {
printf("请选择你的操作:");
scanf("%d", &input);
switch (input) {
case 1: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班导入窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
file_Flight();
break;
}
case 2: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班显示窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Print_flight();
break;
}
case 3: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班修改窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Amend();
break;
}
case 4: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客导入窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
file_parent();
break;
}
case 5: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客显示窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Printf_parent();
break;
}
case 6: {
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为航班信息导出窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Out_file_1();
Menu_2();
printf("\n ***********************************\n");
printf(" ** **\n");
printf(" ** 当前为乘客信息导出窗口 **\n");
printf(" ** **\n");
printf(" ***********************************\n\n");
Out_file_2();
break;
}
case 0: {
printf("系统已成功退出,感谢您的使用\n");
return;
}
default: {
printf("无效的选择,请重新输入\n");
}
}
}
}
void Logo() {
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.-@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % %@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@***@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + = @@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@****@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@# * # = = @@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@# * ***## % %%%%@ % %%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % *+# % +. = @@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@ * +@@@ % # = :*@ % ## % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % *+% @# = -*@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@++@@@@@ % +. + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@# * *%@@ += +% @@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@ % %%#@ % # == @@ %= = % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@# * #@@@ %= **%@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@ % %@@@ % # * +-@@@@# = +#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % **%@@@@ * -##@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@ % %%%%# * *# % @@#. * @@@@@ % ++#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % *+*%@@@@@ == % #@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@ % %%%%%### % @@@@@@@ % : #@@@@@@@# + *# % %*# % %%%%%# * # % @@@@@@@@@@@@@@@@@#++#@@@@@@ % -*%#@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@ % ##### % %@@@@@@@@@@@@@@ = #@@@@@@@@ % # *= -## % @@@ % +-. + @@@@@@@@@@@@#++# % @@@@@@@# = % %%@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("* ## % %@@@@@@@@@@@@@@@@@@@ * *%**### % %@@@@ % ### * *+-:.. + *### % %%%#++ * %@@@@@@@@@@ % @# % @@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@ + -% @@@@@@@@@@@@@@@@@@ % %# % %%%%### * *++####### % %%@@@ % +@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@# * # = --++ = +*%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % %%#### *= +*## % %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@ + @@@@@ % --:--.*@ % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % %### * ## % @@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@ * :#@@@.++# % @.# % @@ % %@@@@@@@ % += @@ % %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % # + *%@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@ * . :+. - @. - += :. + *+. -= +# % %%*+@ %= = @#++@@ % %@@@@@@@@@@@@@@@@@@@ % %%# % *:*# % @@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@ % +-.. == -@ % *-.::-- == +*#@ % +*@@ + : % # -= @ % **@@@@@@@@@@@ * -*+*%# = +-+% @@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % %*### % @@@@ * ..:---- = +*# * += = :: -= = *##@ % *#@ % += @@@@@@@@@@@@ % %# * # % %%@@# + *%@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % *= -+% @@@@ % # * ++#@@# = . :--+ *## % %@@@@@@@@@@@@@@@@@@@@ = ++@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % *+= *%@@@@@@@@@@ % +-:::: -= == -- -= += -:. .:: : ---= == ++ * *####### * +: #@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % *++# % @@@@@@@@ % *= -::: -= == = ++# % @@@@@@@@@@@ % %%## * *++ += == ---- - :::::-+*+#\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@ % # * **%@@@@@@@ % # *= -::-- == +**# % @@@@@@@@@@@@@@@@@@@@@@@@@@@@ % %%%######### % @@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@@@@@ % # * *#@@@@@@@@@# += -- -= +*## % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@@@@ % #### % @@@@@@@@@ % #++ + **# % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@@@@@@@@@@@@@ % ### % @@@@@@@ % # * ++ + *# % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("::#@@@@@@@@@@ % ### % @@@@@@ % # * ***# % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@ + :-#@@@ % #### % @@@@ % ## * **## % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@ %= : == = *%@@@ % # * **## % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
printf("@@@@@ *= == +***# % @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); Sleep(500);
}
int main() {
Logo();
Choice();
return 0;
}
4.问题反思与总结
本次课题耗时比较久,一方面是两个表的逻辑需要理清,另一方面是显示输出的信息比较多,绘制表格和控制细节比较耗时。
存在问题:
1.从文件读取信息时,读取到中文字符为乱码。(这个问题并没有得到解决)开始认为是宽字符和编码问题,后续尝试后发现并不是。如果,你有好的建议和想法,诚挚欢迎在评论和私信留言。
2.一点细节的小问题:关于折扣的输出,由于是小数,没有去调格式,可能会导致输出表格没有对齐。
总结:综合前几个课题,对于表这一结构基本熟悉,主要对于文件操作还存在一些陌生的库函数需要学习。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)