目录
实现功能
部分功能测试截图
代码展示
实现功能
1.订票
2.退票
3.查询航班信息
4.修改航班信息
5.录入航班信息
6.打印订票信息
部分功能测试截图
功能选择界面
查询航班功能测试
订票功能测试
打印订票信息
代码展示
代码中需要的二个文件内容如下
第一个是代码中的《新建文档文本2.txt》,第二个是《新建文本文档.txt》,,,建立二个txt文件夹,将下面二个内容复制粘贴,注意文件名中的空格。然后将其放在和代码文件同一个根目录下,或者你也可以自己设置文件的路径
12:3616:1436908:3013:4269906:5811:3669921:3223:5679911:0019:3689909:3615:5536609:3314:4536612:1214:3019908:0012:30899
123456西安北京 200 369369宝鸡北京 220 148758上海北京 120 789456成都南京 220 484565南京揭阳 120 889834咸阳武汉 300 588685长春沈阳 210 789468九州台湾 100 556266香港黄冈 200
-
#include
#include #include #include #define T1 p->data.fNumber //宏定义其中常用变量,便于书写 #define T2 p->data.place_go #define T3 p->data.place_to #define T4 p->data.seat_total #define T5 p->data.seat_remainder #define T6 p->data.goTime #define T7 p->data.toTime #define T8 p->data.price #define R1 p->data.name #define R2 p->data.fNumber #define R3 p->data.id #define R4 p->data.number #define R5 p->data.Votes typedef struct //航班结点定义 { char place_go[20]; //始发地 char place_to[20]; //目的地 int seat_total; //座位总数 int seat_remainder; //剩余座位数 int fNumber; //航班号 char goTime[6]; //起飞时间 char toTime[6]; //抵达时间 char price[6]; //票价 }plane; typedef struct PNode //航班结构体定义 { plane data; struct PNode *next; }PNode,*PlaneList; typedef struct //乘客结点定义 { char name[14]; //姓名 char id[30]; //身份证号码 int number; //购票数 int Votes; //订单号 int fNumber; //航班号 }passenger; typedef struct RNode { passenger data; struct RNode *next; }RNode,*RenList; void input(PNode* head){ //用文件输入航班信息的方法 FILE *fp,*fp1; PlaneList p,r; char qq[3]; int i,m; r = head; if((fp=fopen("新建文本文档.txt","r"))==NULL){ printf("航空基本信息文件打开失败!"); } if((fp1=fopen("新建文本文档2.txt","r"))==NULL){ printf("航空补充信息文件打开失败!"); } for(i=1;i<=9;i++) //自定义了9个航班信息,所以这里循环9次 { p = (PlaneList)malloc(sizeof(PNode)); p->next = NULL; fscanf(fp,"%d",&p->data.fNumber); fgets(p->data.place_go,5,fp); fgets(p->data.place_to,5,fp); fscanf(fp,"%d",&m); fgets(p->data.goTime,6,fp1); fgets(p->data.toTime,6,fp1); fgets(p->data.price,4,fp1); p->data.seat_total = m; p->data.seat_remainder = m; r->next = p; r = p; } } void input_1(PNode* head){ //由控制台输入航班信息的方法 PlaneList p,t; int m,x; int fn; char go[20],to[20]; p = head; while(p->next!=NULL){ p=p->next; //将p指向head最后一个航班,方便在其后面链上其他航班信息 } //也防止新录入的信息顶掉已有信息 printf("请输入需要输入的航班数:"); scanf("%d",&x); printf(".......................................开始录入.......................................n"); for(int i=1;i<=x;i++) { printf("***********开始输入第%d个航班信息***********n",i); t = (PlaneList)malloc(sizeof(PNode)); t->next=NULL; printf("请输入航班号:"); scanf("%d",&fn); in: while(1){ PlaneList p; p = head; int tip = 1; while(p->next!=NULL){ p=p->next; if(fn==p->data.fNumber){ printf("输入错误!该航班已存在!n"); printf("请重新输入航班号:"); scanf("%d",&fn); tip = 2; break; } } if(tip==2){ goto in; }else{ t->data.fNumber = fn; break; } } printf("请输入始发地:"); scanf("%s",go); while(1){ if(strlen(go)<=8&&strlen(go)>=2){ strcpy(t->data.place_go,go); break; } else { printf("请重新输入始发地(1至4个汉字或2至8个英文字符):"); scanf("%s",go); } } printf("请输入目的地:"); scanf("%s",to); while(1){ if(strlen(to)<=8&&strlen(to)>=2){ strcpy(t->data.place_to,to); break; } else { printf("请重新输入目的地(1至4个汉字或2至8个英文字符):"); scanf("%s",to); } } printf("请输入机票总数:"); scanf("%d",&m); t->data.seat_total = m; t->data.seat_remainder = m; printf("请输入飞机起飞时间:"); scanf("%s",t->data.goTime); printf("请输入飞机抵达时间:"); scanf("%s",t->data.toTime); printf("请输入该航班票价:"); scanf("%s",t->data.price); p->next = t; p = t; } printf(".......................................录入完成.......................................n"); } void inout(PNode* head) //查看所有航班信息的方法 { PlaneList p; p = head; int i=0; printf(".........................咸阳机场欢迎你.........................n"); printf(" 航班号 始发地 目的地 机票总数 剩余票数 出发时间 抵达时间 价格n"); while(p->next!=NULL){ p = p->next; printf("%9d %10s %8s %d %d %10s %6s %4sn",T1,T2,T3,T4,T5,T6,T7,T8); } } void inout_1(RNode* rhead) //查看乘客订单信息的方法 { RenList p; p = rhead; if(p->next==NULL){ printf("没有订单信息!n"); }else{ printf(".........................咸阳机场欢迎你.........................n"); printf(" 姓名 航班 身份证号码 订单号 票数 n"); } while(p->next!=NULL){ p = p->next; printf("%8s %d %18s %8d %dn",R1,R2,R3,R4,R5); } } void research_1(PNode* head) //通过航班号查看航班信息的方法 { int x,tip; PlaneList p; p = head; tip = 1; printf("请输入要查找的航班号:"); scanf("%d",&x); printf("开始查找n"); while(p->next!=NULL) { p = p->next; if(p->data.fNumber==x) { printf(" 航班号 始发地 目的地 机票总数 剩余票数 出发时间 抵达时间 价格n"); printf("%9d %10s %8s %d %d %10s %6s %4sn",T1,T2,T3,T4,T5,T6,T7,T8); tip = 2; break; } } if(tip==1){ printf("该航班不存在n"); } } void research_2(PNode* head) //通过目的地和始发地查看航班信息的方法 { char str1[20],str2[20]; PlaneList p; int tip; tip = 1; p = head; printf("请输入要查找的始发地:"); scanf("%s",str1); printf("请输入要查找的目的地:"); scanf("%s",str2); printf("开始查找n"); while(p->next!=NULL){ p = p->next; if(!strcmp(str1, p->data.place_go)&&!strcmp(str2, p->data.place_to)){ printf(" 航班号 始发地 目的地 机票总数 剩余票数 出发时间 抵达时间 价格n"); printf("%9d %10s %8s %d %d %10s %6s %4sn",T1,T2,T3,T4,T5,T6,T7,T8); tip = 2; break; } } if(tip==1){ printf("未找到该航班or该航班不存在n"); } } void revise(PNode* head) //修改航班信息的方法 { //别问我为什么航空客运订票系统还可以修改航班信息,问就是题目要求的 PlaneList p; int x,tip; p = head; printf("请输入要修改的航班号:"); scanf("%d",&x); printf("开始修改n"); while(p->next!=NULL) { p = p->next; if(p->data.fNumber==x) { printf("请输入要修改的信息n"); printf("请输入航班号:"); scanf("%d",&p->data.fNumber); fflush(stdin); printf("请输入始发地:"); scanf("%s",p->data.place_go); printf("请输入目的地:"); scanf("%s",p->data.place_to); printf("请输入机票总数:"); scanf("%d",&p->data.seat_total); tip = 2; break; } } if(tip==1){ printf("未找到该航班or该航班不存在n"); } } void purchase (PNode* head,RNode* rhead) //乘客买票的方法 { PlaneList p; RenList r,h; r = (RenList)malloc(sizeof(RNode)); r->next = NULL; int x,t,tip,tip1; p = head; h = rhead; tip = 1; tip1 = 1; char name[14]; char id[30]; if(h->next!=NULL){ //让h指向rhead表尾,防止新输入信息替换掉已有信息 h = h->next; } printf("请输入真实姓名:"); scanf("%s",name); while(1){ if(strlen(name)<=14&&strlen(name)>=4){ strcpy(r->data.name,name); //对信息筛选后赋给新申请的乘客信息结点 break; //以下大致相同,不在赘述 } else { printf("请重新输入姓名(2-7个汉字):"); scanf("%s",name); } } printf("请输入身份证号:"); scanf("%s",id); while(1){ if(strlen(id)==18){ for(int i=1;i<=18;i++) { if(id[i]<='0'&&id[i]>='9') { break; } } strcpy(r->data.id,id); break; } else { printf("请输入合法身份证号码:"); scanf("%s",id); } } printf("请选择乘坐航班:"); scanf("%d",&x); while(1){ while(p->next!=NULL) { p = p->next; if(p->data.fNumber==x) { tip1 = 2; break; } } if( tip1 != 2 ) { printf("该航班不存在,请重新输入:"); p = head; scanf("%d",&x); } else break; } printf("请输入需要购买的票数;"); scanf("%d",&t); while(1) { while(p!=NULL) { if(p->data.seat_remainder>=t) { p->data.seat_remainder-=t; //购票成功则修改剩余机票信息 tip = 2; r->data.number = x-123; //依据航班号生成订单号 r->data.Votes = t; r->data.fNumber = x; printf("购票成功!n"); } break; } if(tip!=2) { printf("还要%d张票n",p->data.seat_remainder); printf("机票不足,请重新输入:n"); scanf("%d",&t); } else break; } h->next=r; //让h指向新申请并已赋值的乘客结点 h = r; //其实就是乘客链表的创建过程,只不过中间掺杂了对输入信息的筛选语句 //所以比较分散 } void quash(PNode* head,RNode* rhead) //乘客退票方法 { PlaneList p; RenList r; int x,t,tip; p = head; r = rhead; tip = 1; char name[14]; char id[18]; qq: for(int i=1;i<=3;i++){ printf("请输入身份证号:"); scanf("%s",id); while(r->next!=NULL){ r=r->next; if(!strcmp(id,r->data.id)){ printf("请选择航班:"); scanf("%d",&x); if(r->data.fNumber!=x){ printf("你没有购买过该航班的票!"); break; } else{ while(p->next!=NULL) { p = p->next; if(p->data.fNumber==x) //找到航班信息,并修改票数 { printf("请输入需要退票的票数;"); scanf("%d",&t); if(t>=r->data.number){ p->data.seat_remainder+=t; tip = 2; printf("退票成功!"); break; }else{ printf("票数异常!!!n"); } } } } } } printf("身份信息验证错误!您还有%d次机会!!n!",3-i); } if(tip==1){ printf("退票失败n"); } } void print() //优化界面,也便于后期维护 { printf(" ******************************************************************************** n"); printf(" ****************************欢迎进入航空订票系统******************************** n"); printf("n"); printf(" 1 订票 n"); printf("n"); printf(" 2 退票 n"); printf("n"); printf(" 3 查询航班信息 n"); printf("n"); printf(" 4 修改航班信息 n"); printf("n"); printf(" 5 录入航班信息 n"); printf("n"); printf(" 6 打印订票信息 n"); printf("n"); printf(" 7 退出程序 n"); printf("n"); printf(" ******************************************************************************** n"); } void print1() //优化界面,也便于后期维护 { printf(" ******************************************************************************** n"); printf(" ****************************欢迎进入航空订票系统******************************** n"); printf("n"); printf("n"); printf(" 1 查询所有航班 n"); printf("n"); printf(" 2 按航班号查询航班 n"); printf("n"); printf(" 3 按航程查询航班 n"); printf("n"); printf(" 4 返回 n"); printf("n"); printf("n"); printf(" ******************************************************************************** n"); } int main() { PNode *head; //定义航班链表和乘客链表并进行初始化 RNode *rhead; int select; head = (PlaneList)malloc(sizeof(PNode)); head->next = NULL; rhead = (RenList)malloc(sizeof(RNode)); rhead->next = NULL; input(head); //直接从文件中读取航班信息,这样就可直接测试系统, //不用在输入大量航班才能进行测试 to: while(1){ system("cls"); printf("n"); printf("n"); print(); printf("请输入要进行的操作:"); scanf("%d",&select); switch (select) { case 1: purchase(head,rhead); printf("三秒后程序将返回......."); Sleep(3*1000); //让程序停止运行三秒 system("cls"); //清除界面,配合break达到自动返回的目的 break; case 2: quash(head,rhead); printf("三秒后程序将返回......."); Sleep(3*1000); system("cls"); break; case 3: while(1){ system("cls"); print1(); printf("请选择查询方式:"); scanf("%d",&select); switch (select) { case 1: inout(head); printf("五秒后程序将返回......."); Sleep(5*1000); system("cls"); break; case 2: research_1(head); printf("五秒后程序将返回......."); Sleep(5*1000); system("cls"); break; case 3: research_2(head); printf("五秒后程序将返回......."); Sleep(5*1000); system("cls"); break; case 4: goto to; default: printf(" 错误指令 #304 "); break; } } case 4: revise(head); printf("五秒后程序将返回......."); Sleep(5*1000); system("cls"); break; case 5: input_1(head); printf("五秒后程序将返回......."); Sleep(5*1000); system("cls"); break; case 6: inout_1(rhead); printf("五秒后程序将返回......."); Sleep(5*1000); //system("cls"); break; case 7: exit(0); default: printf(" 错误指令 #304 "); break; } } return 0; //复制粘贴后麻烦大家点个免费的赞哦! //复制粘贴后麻烦大家点个免费的赞哦! //复制粘贴后麻烦大家点个免费的赞哦! }



