当前位置:文档之家› 数据结构课程设计(C语言版)飞机订票系统

数据结构课程设计(C语言版)飞机订票系统

———C语言版课题:飞机订票系统和图的遍历的动态演示姓名:学号:班级:指导教师:订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:B:各分块模板的构造流程图:3:功能函数设计:(1):订票系统主菜单函数menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。

其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。

(2):工作人员管理函数enter()&change()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。

enter()函数的构造就是为了解决这个问题。

而有可能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change()函数。

(3):列出航班信息的函数list()乘客需要查询各个航班的信息,所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。

(4)乘客具体查询函数search()本函数分两个分函数:search1()和search2(),它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。

(5)票务管理函数book()&quit()通过book()函数可以实现乘客的订票操作,通过quit()可以实现乘客的退票操作。

(6)文件操作函数save()&load()3.源程序代码:(WIN TC下运行)#include<dos.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 20#define Q 40/*定义数据结构*//*乘客信息*/typedef struct{char number[10];/*编号*/char id[20]; /*证件号*/char name[10]; /*姓名*/int count; /*订票数*/char flightname[10];/*乘坐航班号*/}GUEST;/*航班信息*/typedef struct{char planenumber[10];/*航班号*/char Take_off_city[20];/*起飞城市*/char Arrived_in_city[20];/*抵达城市*/char takeoff_time[20];/*起飞时间*/char Landing_time[20];/*降落时间*/int shipping; /*舱位数*/char price[5]; /*票价*/char discount[5]; /*折扣*/GUEST guest[20];int sit;}FLY;/*菜单函数,函数返回值为整数,代表所选的菜单项*/ menu_select(){int c;printf("按任意键返回主菜单\n");/*提示压任意键继续*/getch(); /*读入任意字符*/printf(" Welcome to\n\n");printf(" Tickets Booking System\n\n");printf(" ********************MENU****************\n\n");printf(" 0. 输入航班信息\n");printf(" 1. 列出航班的信息\n");printf(" 2. 按航班号查询航班信息\n");printf(" 3. 按城市来查询航班\n");printf(" 4. 订票程序\n");printf(" 5. 退票系统\n");printf(" 6. 修改飞机航班的信息\n");printf(" 7. 保存文件\n");printf(" 8. 读取和下载文件\n");printf(" 9. 退出\n");printf(" *****************************************\n\n");do{printf("\n 输入你的选择项(0~9):"); /*提示输入选项*/scanf("%d",&c); /*输入选择项*/}while(c<0||c>9); /*选择项不在~9之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/}/*输入函数*/int enter(FLY t[]){int i,k,n,m,w,j;char *s;printf("输入航线总数(n<=40):");/*输入航线总数*/scanf("%d",&n);while(n>40||n<0){printf("输入错误!!再次输入(0<n<=40):");/*输入航线总数*/scanf("%d",&n);}printf(" 输入航班的信息\n\n");/*提示信息*/printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");printf("------------------------------------------------------------------------------\n");for(i=0;i<n;i++){scanf("%s",t[i].planenumber);/*输入姓名*/scanf("%s",t[i].Take_off_city);/*输入起飞城市*/scanf("%s",t[i].Arrived_in_city);/*输入降落城市*/scanf("%s",t[i].takeoff_time);/*输入起飞时间*/scanf("%s",t[i].Landing_time);/*输入降落时间*/scanf("%d",&t[i].shipping);/*输入舱位数*/scanf("%s",t[i].price);/*输入票价*/scanf("%s",t[i].discount);/*输入折扣*/}printf("-----------------------------------------------------------------------------\n"); for(i=0;i<n;i++)t[i].sit=0;return n; /*返回记录条数*/}/*显示记录,参数为记录数组和记录条数*/void list(FLY t[],int n){int i;printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");printf("------------------------------------------------------------------------------\n");for(i=0;i<n;i++)printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Ar rived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount); printf(" ************************end*******************\n");}/*按航班号查找记录*/void search1(FLY t[],int n){char s[20]; /*保存待查找航班名字符串*/int i;printf("输入你想查找的航班名:");scanf("%s",s); /*输入待查找航班名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].planenumber)==0) /*记录中的航班名和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/}if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("没有找到\n");else{printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n"); /*显示记录*/printf("------------------------------------------------------------------------------\n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Ar rived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount); }}/*按起降城市查找记录*/void search2(FLY t[],int n){char s1[20];char s2[20];int i;printf("输入起飞城市名称:");scanf("%s",s1); /*输入起飞城市名*/printf("输入降落城市名称:");scanf("%s",s2); /*输入降落城市名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if((strcmp(s1,t[i].Take_off_city)==0)&&(strcmp(s2,t[i].Arrived_in_city)==0)) /*记录中的城市和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/}if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("没有找到\n");else{printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n"); /*找到,显示记录*/printf("------------------------------------------------------------------------------\n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Ar rived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount); }}/*订票*/void book(FLY t[],int n){char s[20],number1[10],name1[10],id1[20],flightname1[10];int i,j=0,m,k,count1;printf("输入你想预订的票数:");scanf("%d",&m);printf("号码姓名证件号订的票数航班号\n"); /*提示信息*/printf("------------------------------------------------------------\n");for(k=0;k<m;k++){scanf("%s",number1);scanf("%s",name1);/*输入订票客户姓名*/scanf("%s",id1);/*输入证件号*/scanf("%d",&count1);/*输入订票票数*/scanf("%s",flightname1);/*输入航班号*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(flightname1,t[i].planenumber)==0) /*记录中的航班名和待比较的是否相等*/ {j=t[i].sit;strcpy(t[i].guest[j].number,number1);strcpy(t[i].guest[j].name,name1);strcpy(t[i].guest[j].id,id1);t[i].guest[j].count=count1;strcpy(t[i].guest[j].flightname,flightname1);t[i].shipping=t[i].shipping-count1;t[i].sit++;break; /*相等,则返回该记录的下标号,程序提前结结束*/}}if(i>n-1) /*如果整数i值大于n-1,说明没找到*/{printf("对不起!没有此航班\n");m=m+2;k++;}}}/*退票*/void quit(FLY t[],int n){char s1[20],s2[20]; /*保存待查找航班名和证件号字符串*/int i,k,j,h,l,ch;printf("请输入你想退订的航班号:");scanf("%s",s1); /*输入待查找航班名*/printf("请输入你的证件号:");scanf("%s",s2); /*输入待查找证件号*/printf("号码姓名证件号订的票数航班号\n"); /*显示提示*/printf("------------------------------------------------------------\n");for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{for(j=0;j<t[i].sit;j++)if((strcmp(s1,t[i].guest[j].flightname)==0)&&(strcmp(s2,t[i].guest[j].id)==0)){printf("%-11s%-16s%-16s%-14d%-10s\n",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].i d,t[i].guest[j].count,t[i].guest[j].flightname);t[i].shipping=t[i].shipping+t[i].guest[j].count;l=j;h=i;break;}}i=h;if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("没有找到\n");else{printf("你是否确认删除(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数或*/if(ch==1) /*如果确认删除整数为*/{for(k=l+1;k<t[i].sit;k++){strcpy(t[i].guest[k-1].number,t[i].guest[k].number); /*将后一条记录的姓名拷贝到前一条*/ strcpy(t[i].guest[k-1].name,t[i].guest[k].name);strcpy(t[i].guest[k-1].id,t[i].guest[k].id);t[i].guest[k-1].count=t[i].guest[k].count;strcpy(t[i].guest[k-1].flightname,t[i].guest[k].flightname);}t[i].sit--;}printf("退票成功!!\n");/*提示退票成功*/}}/*修改航班信息*/void channge(FLY t[],int n){char s[20]; /*要删除记录的姓名*/int i,j;printf("请输入你要修改的航班号:"); /*提示信息*/scanf("%s",s);/*输入航班名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].planenumber)==0) /*记录中的航班名和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/}if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("没有找到\n");else{printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n"); /*找到,显示原先记录*/printf("------------------------------------------------------------------------------\n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Ar rived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount); printf("please input the new information:\n");scanf("%s",t[i].planenumber);/*输入航班名*/scanf("%s",t[i].Take_off_city);/*输入起始城市*/scanf("%s",t[i].Arrived_in_city);/*输入终点城市*/scanf("%s",t[i].takeoff_time);/*输入起飞时间*/scanf("%s",t[i].Landing_time);/*输入降落时间*/scanf("%d",t[i].shipping);/*输入座位号*/scanf("%s",t[i].price);/*输入票价*/scanf("%s",t[i].discount);/*输入折扣*/}}/*保存资料*/void save(FLY t[],int n){int i,j;FILE *fp; /*指向文件的指针*/if((fp=fopen("record1.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/{printf("can not open file\n");/*没打开*/exit(1); /*退出*/}printf("\n保存文件\n"); /*输出提示信息*/fprintf(fp,"%d",n); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(i=0;i<n;i++){fprintf(fp,"%s %s %s %s %s %d %s%s",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_ time,t[i].shipping,t[i].price,t[i].discount);fprintf(fp,"\r\n"); /*将换行符号写入文件*/fprintf(fp,"%d",t[i].sit); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(j=0;j<t[i].sit;j++){fprintf(fp,"%s %s %s %d%s",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,t[i].guest[j].count,t[i].guest[ j].flightname);/*格式写入记录*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/}}fclose(fp);/*关闭文件*/printf("****恭喜!保存成功***\n"); /*显示保存成功*/}/*读入函数,参数为结构体数组*/int load(FLY t[]){int i,n,j;FILE *fp; /*指向文件的指针*/if((fp=fopen("record1.txt","rb"))==NULL)/*打开文件*/{printf("不能打开\n"); /*不能打开*/exit(1); /*退出*/}fscanf(fp,"%d",&n); /*读入记录数*/for(i=0;i<n;i++){fscanf(fp,"%s %s %s %s %s %d %s%s",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_ time,&t[i].shipping,t[i].price,t[i].discount);fscanf(fp,"%d",&t[i].sit); /*读入记录数*/for(j=0;j<t[i].sit;j++)fscanf(fp,"%s %s %s %d%s",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,&t[i].guest[j].count,t[i].guest [j].flightname); /*按格式读入记录*/}fclose(fp); /*关闭文件*/printf("你已经成功从文件读取数据\n\n\n\n"); /*显示读取成功*/return n; /*返回记录数*/}/*主函数*/main(){ int i;FLY flight[Q];int length; /*保存记录长度*/for(;;)/*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/ {case 0:length=enter(flight);break;/*输入记录*/case 1:list(flight,length);break; /*显示全部记录*/case 2:search1(flight,length);break; /*查找记录*/case 3:search2(flight,length);break; /*查找记录*/case 4:book(flight,length);break; /*订票*/case 5:quit(flight,length);break; /*退票*/case 6:channge(flight,length);break; /*修改航班信息*/ case 7:save(flight,length);break; /*保存文件*/case 8:length=load(flight); break; /*读文件*/case 9:exit(0); /*如返回值为则程序结束*/}}}4.系统运行时窗口截图:(VC6.0下的运行结果)订票系统菜单窗口0.输入航班的信息1.列出航班的信息2.按航班号查询航班信息3.按城市来查询航班4.订票程序5.退票系统6.修改飞机航班的信息7.保存文件8.读取文件、下载文件图的遍历过程演示一.需求分析:设计程序完成如下功能:对给定的图的结构和起点,产生深度优先遍历和广度优先遍历,并列出求解的过程动态演示。

相关主题