自己做的飞机订票系统不知道哪里错了。。。一直中断。。
程序代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct FLIGHT { char plane_num[10];//航班号 char city1[20];//起飞城市 char city2[20];//抵达城市 char time1[20]; char time2[20]; int plane_room;//空座数 float price; float zhekou; int sit;//满仓否 struct FLIGHT *next; }fly; typedef struct CUSTOMEER { char name[10]; char ID[20]; char flight_num[10];//航班号 int ticket_num;//票数 int order_num;//订单号 struct CUSTOMEER *next; }cus; typedef struct costomers { cus *head; cus*rear; }customers; //储存客户节点的链表 void init_fly(fly *P) { P = (fly*)malloc(sizeof(fly)); if (P == NULL)exit(0); P->next = NULL; } void init_customers(customers *Q) { Q = (customers*)malloc(sizeof(customers)); Q->head = (cus*)malloc(sizeof(cus)); Q->rear = Q->head; Q->rear->order_num = 0; Q->head->next = NULL; } void insert_flight(fly *P, char *plane_num, char *city1, char *city2, char *time1, char *time2, int plane_room, float price, float zhekou, int sit) { fly *q; q = (fly*)malloc(sizeof(fly)); strcpy_s(q->plane_num, plane_num); strcpy_s(q->city1, city1); strcpy_s(q->city2, city2); strcpy_s(q->time1, time1); strcpy_s(q->time2, time2); q->plane_room = plane_room; q->price = price; q->zhekou = zhekou; q->sit = sit; q->next = NULL; P->next = q; P = P->next; } void insert_customers(fly *P, customers *Q, char *name, char *ID, char *flight_num, int ticket_num) { fly *h = (P)->next; for (; h != NULL; h = h->next) { if (strcmp(flight_num, h->plane_num) == 0) { h->plane_room = h->plane_room - ticket_num; if (h->plane_num == 0) h->sit = 1; } } cus *q; q = (cus*)malloc(sizeof(cus)); strcpy_s(q->name, name); strcpy_s(q->ID, ID); strcpy_s(q->flight_num, flight_num); q->ticket_num = ticket_num; q->next = NULL; Q->rear->next = q; q->order_num = Q->rear->next->order_num + 1;//生成订单号 Q->rear = q; } void delate_flight(fly *P) { fly *p, *pr; char flight_num[10]; int mark = 1; pr = P; p = pr->next; printf("请输入你要删除的航班号:"); scanf_s("%s", flight_num,sizeof(flight_num)); while (p != NULL) { if (strcmp(flight_num, p->plane_num) == 0) { pr->next = p->next; free(p); printf("删除航班%s成功!\n", flight_num); mark = 0; p = NULL; } if (pr->next != NULL) { pr = pr->next; p = pr->next; } if (mark == 1) printf("没有要删除的航班\n"); } } int delate_customer(customers *Q, fly *P, char *name, char *ID) { cus *p, *pr; fly *q; pr = Q->head; p = pr->next; while (p != NULL) { if (strcmp(name, p->name) == 0 && strcmp(ID, p->ID) == 0) { for (q = P->next; q != NULL; q = q->next) { if (strcmp(p->flight_num, q->plane_num) == 0) { q->plane_room = q->plane_room + p->ticket_num; q->sit = 0; break; } } pr->next = p->next; free(p); printf("顾客%s,%s退票成功\n", name, ID); return 1; } pr = pr->next; p = pr->next; } printf("没有要操作的客户!\n"); return 0; } void creat_fly(fly *P) { fly *p; p=P; char plane_num[10], city1[20], city2[20], time1[20], time2[20]; int plane_room, sit, mark = 1; float price, zhekou; if (p != NULL) p = p->next; while (mark == 1) { printf("请输入航班号:"); scanf_s("%s", plane_num, sizeof(plane_num)); printf("请输入出发地:"); scanf_s("%s",city1,sizeof(city1)); printf("请输入终点站:"); scanf_s("%s", city2, sizeof(city2)); printf("请输入起飞时间:"); scanf_s("%s",time1,sizeof(time1)); printf("请输入抵达时间:"); scanf_s("%s",time2,sizeof(time2)); printf("请输入票价:"); scanf_s("%f",&price); printf("请输入折扣:"); scanf_s("%f",&zhekou); printf("请输入座位数:"); scanf_s("%d",&plane_room); printf("请输入是否满仓(0表示未满,1表示满仓):"); scanf_s("%d",&sit); insert_flight(p, plane_num, city1, city2, time1, time2, plane_room, price, zhekou, sit); printf("增加航班成功!\n"); printf("是否继续增加航班(1表示继续,0表示停止):"); scanf_s("%d", &mark); } } int city_chaxun(fly *P, char *city1, char *city2) { fly *p = P; int mark = 0; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n", "航班号", "起飞城市", "终点城市", "起飞时间", "抵达时间", "价格", "折扣", "空座数", "满仓否" ); for (; p != NULL; p = p->next) { if (strcmp(p->city1, city1) == 0 && strcmp(p->city2, city2) == 0) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n", p->plane_num, p->city1, p->city2, p->time1, p->time2, p->price, p->zhekou, p->plane_room, p->sit); mark = 1; } } if (mark == 0) { printf("抱歉没有找到相应航班信息\n"); return 0; } return 1; } int num_cahxun(fly *P, char *plane_num) { fly *p = P; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-8s%-10s\n", "航班号", "起飞城市", "终点城市", "起飞时间", "抵达时间", "价格", "折扣", "空座数", "满仓否"); for (; p != NULL; p = p->next) { if (strcmp(p->plane_num, plane_num) == 0) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n", p->plane_num, p->city1, p->city2, p->time1, p->time2, p->price, p->zhekou, p->plane_room, p->sit); return 1; } } printf("sorry,没有要查询的航班!\n"); return 0; } void xianshi_plane(fly *P) { fly*p = P; int i = 0; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n", "航班号", "起飞城市", "终点城市", "起飞时间", "抵达时间", "价格", "折扣", "空座数", "满仓否"); for (; p != NULL; p = p->next) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n", p->plane_num, p->city1, p->city2, p->time1, p->time2, p->price, p->zhekou, p->plane_room, p->sit); i = 1; } if (i == 0) printf("航班信息为空!\n"); } int same_plane(fly *P, char *plane_num) { fly *p = P->next, *q = P->next; int mark = 0; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n", "航班号", "起飞城市", "终点城市", "起飞时间", "抵达时间", "价格", "折扣", "空座数", "是否满仓"); while (p != NULL&&strcmp(p->plane_num,plane_num)!=0) { p = p->next; } while (q != NULL) { if (strcmp(p->city1, q->city1) == 0 && strcmp(p->city2, q->city2) == 0 && strcmp(p->plane_num, q->plane_num) != 0) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n", p->plane_num, p->city1, p->city2, p->time1, p->time2, p->price, p->zhekou, p->plane_room, p->sit); mark = 1; } q = q->next; } if (mark == 0) { printf("sorry,没有您要找的航班!\n"); return 0; } return 1; } int dingpiao(fly *P, customers *Q) { char name[10]; char ID[20]; char flight_num[10]; char city1[20]; char city2[20]; int ticket_num; int i; fly *p = P->next; printf("请输入信息:\n"); printf("请输入起飞城市:"); scanf_s("%s", city1,sizeof(city1)); printf("请输入终点城市:"); scanf_s("%s", city2, sizeof(city2)); if (city_chaxun(P, city1, city2) == 1) { printf("请选择航班号:\n"); printf("航班号:"); scanf_s("%s",flight_num,sizeof(flight_num)); getchar(); while (flight_num == NULL); { printf("航班号不能为空!\n"); printf("请重新输入航班号:"); scanf_s("%s", flight_num,sizeof(flight_num)); } while (p != NULL) { if (strcmp(p->plane_num, flight_num) == 0) { printf("请输入:\n"); printf(" 姓名:"); scanf_s("%s", name,sizeof(name)); printf(" 证件号码:"); scanf_s("%s", ID,sizeof(ID)); printf(" 订票数量:"); scanf_s("%d", &ticket_num); while (name == NULL) { printf("对不起,名字不能为空!\n"); printf(" 姓名:"); scanf_s("%s", name,sizeof(name)); } while (ID == NULL) { printf("对不起,证件号不能为空!\n"); printf(" 证件号码:"); scanf_s("%s", ID,sizeof(ID)); } while (ticket_num == 0) { printf("对不起,订票数量不能为0!\n"); printf(" 订票数量:"); scanf_s("%d", &ticket_num); } if (p->plane_room > 0 && p->plane_room >= ticket_num) { insert_customers(P, Q, name, ID, flight_num, ticket_num); printf("你应该支付 %6.2f 元\n", p->price*p->zhekou*ticket_num); printf("恭喜!订票成功!\n"); return 1; } else { printf("sorry,该航班已满!\n"); printf("若选择其他航班请输入1,取消则输入0\n"); scanf_s("%d", &i); if (i == 1) { if (same_plane(P, flight_num) == 1) { printf("请输入您选择的航班:"); scanf_s("%s", flight_num,sizeof(flight_num)); insert_customers(P, Q, name, ID, flight_num, ticket_num); printf("恭喜!订票成功!\n"); return 1; } } } } else p = p->next; } if (p == NULL) printf("对不起,您输入的航班不存在!\n"); } return 0; } void plane_chaxun(fly *P) { fly *p = P->next; char plane_num[10], city1[20], city2[20]; int a; printf("请选择查询方式:\n"); printf(" 1.航班号查询:\n"); printf(" 2.起飞抵达城市查询:\n"); printf(" 3.显示所有信息:\n"); printf("请选择查询方式:"); scanf_s("%d",&a); getchar(); if (a == 1) { printf("请输入航班号:"); scanf_s("%s", plane_num,sizeof(plane_num)); getchar(); num_cahxun(p, plane_num); } else if (a == 2) { printf("请输入出发地:"); scanf_s("%s", city1,sizeof(city1)); printf("请输入终点站:"); scanf_s("%s", city2, sizeof(city2)); getchar(); city_chaxun(p, city1, city2); } else if (a == 3) xianshi_plane(p); else if (a != 1 && a != 2 && a != 3) return; } void xiugai_plane(fly *P, customers *Q) { fly *p = P->next; char plane_num[10], time1[20], time2[20]; int a; printf("\n*------------------------------*\n"); printf("*-------航线信息修改:---------- *\n"); printf("* 1. 增加航班号 *\n"); printf("* 2. 删除航班号 *\n"); printf("* 3. 修改起飞抵达时间 *\n"); printf("* 4. 退出航线修改 *\n"); printf("*------------------------------ *\n"); printf("请选择: "); scanf_s("%d", &a); getchar(); if (a ==1) creat_fly(P); else if (a ==2) delate_flight(P); else if (a ==3) { printf("请输入要修改的航班号:"); scanf_s("%s", plane_num,sizeof(plane_num)); if (num_cahxun(p, plane_num) == 1) { printf("请输入修改后的起飞时间"); scanf_s("%s", time1,sizeof(time1)); printf("请输入修改后的抵达时间:"); scanf_s("%s", time2,sizeof(time2)); while (p) { p = p->next; if (strcmp(p->plane_num, plane_num) == 0) { strcpy_s(p->time1, time1); strcpy_s(p->time2, time2); printf("修改成功!\n"); } } } } else if (a ==4) { return; } } int name_id_chaxun(customers *Q, char *name, char *ID) { cus *p = Q->head->next; int mark = 0; printf("%-8s%-20s%-20s%-10s%-8s", "订单号", "姓名", "证件号码", "航班号", "订票数"); while (p) { p = p->next; if (strcmp(p->ID, ID) == 0 && strcmp(p->name, name) == 0) { printf("%-8s%-20s%-20s%-10s%-8d\n", p->order_num, p->name, p->ID, p->flight_num, p->ticket_num); mark = 1; } } if (mark == 0) { printf("sorry,没有您的订单信息!\n"); return 0; } return 1; } int order_num_chaxun(customers *Q, int order_num) { cus *p = Q->head->next; printf("%-8s%-20s%-20s%-10s%-8s", "订单号", "姓名", "证件号码", "航班号", "订票数"); for (; p != NULL; p = p->next) { if (p->order_num == order_num) { printf("%-8s%-20s%-20s%-10s%-8d\n", p->order_num, p->name, p->ID, p->flight_num, p->ticket_num); return 1; } } printf("sorry,没有该订单信息!\n"); return 0; } void xianshi_dingdan(customers *Q) { cus *p = Q->head->next; int i = 0; printf("%-8s%-20s%-20s%-10s%-8s", "订单号", "姓名", "证件号码", "航班号", "订票数"); for (; p != NULL; p = p->next) { printf("%-8s%-20s%-20s%-10s%-8d\n", p->order_num, p->name, p->ID, p->flight_num, p->ticket_num); i = 1; } if (i == 0) printf("当前没有订单!\n"); } void customer_chaxun(customers *Q) { char name[20], ID[20]; int order_num, a; printf("\n*------------------------------*\n"); printf("*-------查询方式:----------*\n"); printf("* 1. 按客户姓名和证件号查询: *\n"); printf("* 2. 按订单号查询: *\n"); printf("* 3. 查看全部订单信息: *\n"); printf("* 4. 退出查询 *\n"); printf("*------------------------------*\n"); printf("请选择: "); scanf_s("%d", &a); if (a == 1) { printf("请输入姓名:"); scanf_s("%s", name,sizeof(name)); printf("请输入证件号码:"); scanf_s("%s", ID,sizeof(ID)); name_id_chaxun(Q, name, ID); } else if (a == 2) { printf("请输入您的订单号:"); scanf_s("%d",&order_num); order_num_chaxun(Q, order_num); } else if (a == 3) { xianshi_dingdan(Q); } else if (a == 4) return; } void tuipiao(customers *Q, fly *P) { char name[20], ID[20]; printf("请输入姓名:"); scanf_s("%s", name,sizeof(name)); printf("请输入证件号码:"); scanf_s("%s", ID,sizeof(ID)); delate_customer(Q, P, name, ID); } int menu() { int a; do { system("cls"); 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("请选择:"); scanf_s("%d", &a); } while (a<0 || a>6); return a; } void main() { fly *P; customers *Q; P = (fly*)malloc(sizeof(fly)); Q = (customers*)malloc(sizeof(customers)); init_fly(P); init_customers(Q); for (;;) { switch (menu()) { case 1: creat_fly(P); getchar(); break; case 2: dingpiao(P, Q); getchar(); break; case 3: tuipiao(Q, P); getchar(); break; case 4: plane_chaxun(P); getchar(); break; case 5: customer_chaxun(Q); getchar(); break; case 6: xiugai_plane(P, Q); getchar(); break; case 0: getchar(); printf("谢谢使用!再见!\n"); exit(0); } } }