数据结构课程设计航空订票系统

合集下载

C++数据结构课程设计订票系统

C++数据结构课程设计订票系统

XXXXXXXXXX项目名称:航空信息管理系统学生姓名:XXXXXX 学号:XXXXXXXXX 班级:XXXXXX 指导教师:XXX目录1.系统需求分析 (1)2.数据结构设计及用法说明 (2)3.详细设计和编码 (3)3.1订票模块 (3)3.2退票模块 (6)3.3录入模块 (7)3.4查询模块 (8)4.实验结果 (9)4.1主菜单界面 (9)4.2查询功能模块 (9)4.3订票功能模块 (10)4.4退票功能模块 (10)4.5录入航班信息模块 (10)5.体会 (11)参考文献 (12)附录:源程序清单 (13)1.系统需求分析本次课程设计要求使用C语言编写一个航空客运订票系统程序,根据所有内容都可以只在内存中运行可得知该模拟的航空客运订票系统不需要用文件保存相关输入,运行过程中的数据。

同时该航空客运订票系统要求模拟实际航空订票系统,具有查询航线,客票预订,办理退票,录入航班信息等基本功能。

查询航线功能根据实际分析应该具有通过用户输入的要查询终点站名输出该终点站的终点站,航班号,飞机号,飞行日期,剩余票量的功能。

订票功能应当设计能够根据用户输入的姓名和终点站,查询该终点站的余票并提示剩余票数,之后让用户输入需要订购的票数并执行相关操作。

退票功能可设计成要求用户输入姓名和航班号来查找该用户的的订票信息并打印,再询问是否退票。

录入功能是必要的,用来录入航班节点信息。

2.数据结构设计及用法说明根据该航空信息管理系统的功能要求,应当设计菜单模块,查询模块,订票模块,退票模块,录入信息模块等几个基本模块,main函数里调用菜单模块打印选项菜单,然后用switch case 接收用户选择,并依此跳转到相应模块执行。

同时,为达到能够执行一个模块后继续返回主菜单执行而不是直接退出的目的设计将菜单模块及相应子功能模块放入for死循环里,当输入5则直接退出程序。

按该系统的功能分析得出存放在系统中各项数据不需要使用排序功能,因而使用链表保存数据比用顺序表和数组要便捷并且占用内存少,所以定义linklist类型,内部有data,next 指针2个数据。

数据结构课程设计航空订票系统

数据结构课程设计航空订票系统

目录总体设计 (2)概要设计 (2)详细设计 (3)调试分析 (7)测试数据及截图 (7)时间复杂度分析 (11)问题思考 (11)算法的改进设想 (11)课设总结体会 (11)附录 (13)程序说明 (13)源代码 (13)主要参考文献 (26)总体设计通过此系统可以实现如下功能:1).录入:可以录入航班情况(数据存储在一个数据文件中)2).查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3).订票:(订票情况存在一个数据文件中)可以订票,如果该航班已经无票,可以提供相关可选择航班;4).退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

5).修改航班信息:当航班信息改变可以修改航班数据文件概要设计每个模块的算法设计说明如下:(1)录入模块:查找单链表的链尾,在链头插入一个“航班信息”的新结点。

(2)浏览模块:顺着单链表输出航班信息。

(3)修改模块:输入密码,确认是否有权限对航班信息进行修改,有则进行修改,否则不能修改。

提供两种修改方式:添加航班和对已有的航班信息进行改动(修改和删除),1添加航线,0对已有的航班信息进行改动(修改和删除)。

对已有的航班信息进行改动(修改和删除):顺着单链表查找,若找到则进行相关操作。

(4)查询模块:提供两种查方式:按航号和起飞抵达城市查询,0代表按航号查询,1代表按起飞抵达城市查询。

顺着单链表查找,如果与航班号(起飞抵达城市)一致,输出相关信息并询问乘客是否要订票,若订进入订票模块;否则,查询不成功。

(5)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功;否则查找这个月此乘客起飞城市和降落城市的有空位航班,供乘客选择,若有则订票,若无则订票不成功并把此乘客的信息录入此航班等候订票队列中,退出订票。

数据结构课程设计 航空订票系统(C++)

数据结构课程设计 航空订票系统(C++)
int remainber;//余票
struct booknode
{
public:
char name[10];//乘客姓名
int ticketnum;//票数
int rate;//舱位等级
}b[40];
struct sparenode
{
public:
char name[10];//乘客姓名
int ticketnum;//票数
char flightname[10];//航班名
int flightnum;//航班号
int day;//飞行日期
int limitednum;//乘员限额
int remainber;//余票
struct booknode
{
public:
char name[10];//乘客姓名
int ticketnum;//票数
class transportNode//航线类节点
{
friend class transport;
private:
char finish[10];//目的地
char flightname[10];//航班名
int flightnum;//航班号
int day;//飞行日期
int limitednum;//乘员限额
上海电力学院
数据结构C++课程设计
题 目:航空客运订票系统
学生姓名:范晓宁
学 号:20103285
院 系:计算机与信息工程学院
专业年级:信息安全2010级
2012 年 6 月 29 日
一、设计题目
航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。试设计一个航空客 运订票系统,以使上述业务可以借助计算机来完成。

数据结构课程设计飞机订票系统

数据结构课程设计飞机订票系统

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

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2.概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。

主菜单0 1 2 3 4 5 6 7 8 9输入航班的信息列出航班的信息按航班号查询航班信息按城市来查询航班订票程序退票系统修改飞机航班的信息保存文件读取文件、下载文件退出详细设计3.源程序/******头文件(.h)***********/#include <stdio.h> /*I/O函数*/#include <stdlib.h> /*其它说明*/#include <string.h> /*字符串函数*/#include <conio.h> /*屏幕操作函数*/ #include <ctype.h> /*字符操作函数*/#define N 20#define Q 40 /*定义常数表示记录数*//*定义数据结构*//*乘客信息*/typedef struct{char number[10];/*编号*/char name[10]; /*姓名*/char id[20]; /*证件号*/int count; /*订票数*/char flightname[10];/*乘坐航班号*/}GUEST;/*航班信息*/typedef struct{char planenumber[10];/*航班号*/char city1[20]; /*起飞城市*/char city2[20]; /*抵达城市*/char time1[20]; /*起飞时间*/char time2[20]; /*降落时间*/int room; /*舱位数*/char price[5]; /*票价*/char discount[5]; /*折扣*/GUEST guest[25];int sit;}FLY;/*菜单函数,函数返回值为整数,代表所选的菜单项*/ menu_select(){char s[80];int c;gotoxy(1,25);/*将光标定为在第25行,第1列*/printf("press any key enter menu......\n");/*提示压任意键继续*/getch(); /*读入任意字符*/clrscr(); /*清屏*/gotoxy(1,1);printf(" Welcome to\n\n");printf(" Tickets Booking System\n\n");printf("********************MENU*********************\n\n");printf(" 0. Enter flight record\n");printf(" 1. List the flight information\n");printf(" 2. Search flightnumber\n");printf(" 3. Search city\n");printf(" 4. Book the ticket\n");printf(" 5. Quit the ticket\n");printf(" 6. Channge the flight information\n");printf(" 7. Save the file\n");printf(" 8. Load the file\n");printf(" 9. exit\n");printf("***********************************************\n");do{printf("\n Enter you choice(0~9):"); /*提示输入选项*/scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整型数*/ }while(c<0||c>9); /*选择项不在0~9之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/ }/*输入函数*/int enter(FLY t[]){int i,k,n,m,w,j;char *s;clrscr(); /*清屏*/printf("input the flight's count(n<=40):");/*输入航线总数*/ scanf("%d",&n);while(n>40||n<0){clrscr();printf("input error!!!input again(0<n<=40):");/*输入航线总数*/scanf("%d",&n);}printf(" input the flight's information\n\n");/*提示信息*/printf("flightname start-city end-city start-time end-time room price discount\n");printf("------------------------------------------------------------------------------\ n");for(i=0;i<n;i++){scanf("%s",t[i].planenumber);/*输入姓名*/gotoxy(13,6+i);/*光标跳到地址栏*/scanf("%s",t[i].city1);/*输入起飞城市*/gotoxy(25,6+i);scanf("%s",t[i].city2);/*输入降落城市*/gotoxy(36,6+i);scanf("%s",t[i].time1);/*输入起飞时间*/gotoxy(47,6+i);scanf("%s",t[i].time2);/*输入降落时间*/gotoxy(57,6+i);scanf("%d",&t[i].room);/*输入舱位数*/gotoxy(64,6+i);scanf("%s",t[i].price);/*输入票价*/gotoxy(73,6+i);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;clrscr();printf("flightname start-city end-city start-time end-time room price discount\n");printf("------------------------------------------------------------------------------\ n");for(i=0;i<n;i++)printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumb er,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);printf("************************end*******************\n");}/*按航班号查找记录*/void search1(FLY t[],int n){char s[20]; /*保存待查找航班名字符串*/int i;clrscr(); /*清屏*/printf("please input the flightname that you want to search:");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("not found\n");else{printf("flightname start-city end-city start-time end-time room price discount\n"); /*显示记录*/printf("------------------------------------------------------------------------------\ n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumb er,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);}}/*按起降城市查找记录*/void search2(FLY t[],int n){char s1[20];char s2[20];int i;clrscr(); /*清屏*/printf("please input the start-city:");scanf("%s",s1); /*输入起飞城市名*/printf("please input the end-city:");scanf("%s",s2); /*输入降落城市名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if((strcmp(s1,t[i].city1)==0)&&(strcmp(s2,t[i].city2)==0)) /*记录中的城市和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/ }if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");else{printf("flightname start-city end-city start-time end-time room price discount\n"); /*找到,显示记录*/printf("------------------------------------------------------------------------------\n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumb er,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,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;clrscr(); /*清屏*/printf("How many tickets do you want to book:");scanf("%d",&m);printf("number name ID book-count flightname\n"); /*提示信息*/printf("------------------------------------------------------------\n");for(k=0;k<m;k++){scanf("%s",number1);gotoxy(13,4+k);/*光标跳到地址栏*/scanf("%s",name1);/*输入订票客户姓名*/gotoxy(25,4+k);scanf("%s",id1);/*输入证件号*/gotoxy(43,4+k);scanf("%d",&count1);/*输入订票票数*/gotoxy(53,4+k);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].room=t[i].room-count1;t[i].sit++;break; /*相等,则返回该记录的下标号,程序提前结结束*/}}if(i>n-1) /*如果整数i值大于n-1,说明没找到*/{printf("Sorry!No this flight\n");m=m+2;k++;}}}/*退票*/void quit(FLY t[],int n){char s1[20],s2[20]; /*保存待查找航班名和证件号字符串*/int i,k,j,h,l,ch;clrscr(); /*清屏*/printf("please input the flightname that you want to quit:");scanf("%s",s1); /*输入待查找航标名*/printf("please input the your id:");scanf("%s",s2); /*输入待查找证件号*/printf("number name ID book-count flightname\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].id,t[i].guest[j].count,t[i].guest[j].flightname);t[i].room=t[i].room+t[i].guest[j].count;l=j;h=i;break;}}i=h;if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");else{printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数0或1*/if(ch==1) /*如果确认删除整数为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("quit success!!\n");/*提示退票成功*/}}/*修改航班信息*/void channge(FLY t[],int n){char s[20]; /*要删除记录的姓名*/int i,j;clrscr(); /*清屏*/printf("please input the flightname that you want to channge:"); /*提示信息*/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("not found\n");else{printf("flightname start-city end-city start-time end-time room price discount\n"); /*找到,显示原先记录*/printf("------------------------------------------------------------------------------\ n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);printf("please input the new information:\n");scanf("%s",t[i].planenumber);/*输入航班名*/gotoxy(13,6+i);/*光标跳到地址栏*/scanf("%s",t[i].city1);/*输入起始城市*/gotoxy(25,6+i);scanf("%s",t[i].city2);/*输入终点城市*/gotoxy(35,6+i);scanf("%s",t[i].time1);/*输入起飞时间*/gotoxy(47,6+i);scanf("%s",t[i].time2);/*输入降落时间*/gotoxy(57,6+i);scanf("%d",t[i].room);/*输入座位号*/gotoxy(64,6+i);scanf("%s",t[i].price);/*输入票价*/gotoxy(71,6+i);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("\nSaving file\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].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,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].gu est[j].name,t[i].guest[j].id,t[i].guest[j].count,t[i].guest[j].flightname);/*格式写入记录*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/}}fclose(fp);/*关闭文件*/printf("****save success***\n"); /*显示保存成功*/}/*读入函数,参数为结构体数组*/int load(FLY t[]){int i,n,j;FILE *fp; /*指向文件的指针*/if((fp=fopen("record1.txt","rb"))==NULL)/*打开文件*/{printf("can not open file\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].city1,t[i].city2,t[i].time1,t[i].time2,&t[i].room,t[i].pric e,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].gues t[j].name,t[i].guest[j].id,&t[i].guest[j].count,t[i].guest[j].flightname); /*按格式读入记录*/}fclose(fp); /*关闭文件*/printf("You have success read data from file!!!\n\n\n\n"); /*显示保存成功*/return n; /*返回记录数*/}/*主函数*/main(){ int i;FLY flight[Q];int length; /*保存记录长度*/clrscr(); /*清屏*/textcolor(YELLOW); /*字体颜色*/textbackground(BLUE);/*背景颜色*/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); /*如返回值为9则程序结束*/}}}4.菜单窗口订票系统菜单窗口0.输入航班的信息1.列出航班的信息2.按航班号查询航班信息3.按城市来查询航班4.订票程序5.退票系统6.修改飞机航班的信息7.保存文件8.读取文件、下载文件。

数据结构课程设计航空订票系统

数据结构课程设计航空订票系统

航空客运订票系统的设计与实现一、设计目的:设计一个航班订票系统,提高对信息管理、信息查找和排序算法的应用能力。

二、问题的描述:航空客运订票的业务包括查询航线和客票预定的信、客票预定和办理退票等,设计一个程序以使上述任务借助计算机完成。

三、数据结构的设计://航线结构struct airline{char cityname[15]; //终点站char airnum[15]; //航班号char planenum[15]; //飞机号char qjtime[15]; //起降时间int price; //价格int disc; //折扣int num; //总座位数int rempla; //剩余位置(票数)linklist *order;linkqueue wait;}line;//定义链表队列typedef struct wait{char name[6];int ordnum;struct wait *next;} qnode,*qptr;//无票时其余等候买票队列typedef struct listqueue{qptr front; //对头qptr rear; //队尾}linkqueue;typedef struct order{char name[15]; //客户姓名char crenum[15]; //证件号char airnum[15]; //航班号char planenum[15]; //飞机号int ordnum; //订票数量int rempla; //剩余位置int num; //总座位数char qjtime[15]; //起降时间struct order *next;}linklist;建立了航班的终点站,航班号,飞机号,起降时间,价格,折扣,总座位数,剩余位置,指向客户信息truct order指针,等候买票的队列的结构体信息。

建立了客户的客户姓名,证件号,航班号,飞机号,订票数量,剩余位置,总座位数,起降时间,链接下一位的指针的结构体信息。

(完整版)数据结构课程设计-航空客运订票系统

(完整版)数据结构课程设计-航空客运订票系统

嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:1503指导老师:***实验题目:航空客运订票系统学号:姓名:上机时间:1.需求分析(1)航空管理。

每条航班所涉及的信息有:终点站名、航班号、飞机型号、飞行周日(星期几)、乘员定额、余票量。

(2)客户管理。

有关订票的客户信息(包括姓名、订票量、航位等级(1,2和3))以及等候替补的客户名单(包括姓名、所需票量)。

(3)系统实现的主要操作和功能。

系统实现的主要操作和功能如下:①查询航班。

根据旅客提出的终点站名输入下列信息:航班号、飞机型号、飞机日期、余票额。

②承办订票业务。

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队后补。

③承办退票业务。

根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先查询排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则询问其他排队候补的客户。

2.概要设计1)本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面2)存储结构设计本系统主要采用链表结构类型存储航班信息和订票的乘客信息。

航班信息链表结点由10个分量构成,乘客信息链表由5个分量构成。

3)系统功能设计本系统分为以下5个功能模块。

(1)航班管理。

航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航班。

(2)订票办理。

在添加了航班的基础上可办理订票业务。

乘客根据所需航班输入终点站名和订票量订票。

如果订票量超过余票量,则会提示是否成为候补乘客;如果订票成功,则会要求输入订票乘客的姓名及所订票的舱位等级。

(3)退票办理。

已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。

、(4)乘客管理。

可以查看已经订票的乘客信息和候补乘客的信息。

航空客运订票系统课程设计(数据结构)

航空客运订票系统课程设计(数据结构)

XXXXXXXXX计算机技术系项目名称:航空客运订票系统学生姓名:XX学号:班级:10801指导教师:年月日目录1.系统需求分析 (3)1.1问题分析 (3)1.2任务意义 (3)2. 数据结构设计及用法说明 (4)3. 详细设计和编码 (5)3.1.主菜单 (5)3.2.录入航空信息 (5)3.3输出航空信息 (6)3.4订票 (7)3.5退票 (7)4. 实验结果 (9)4.1菜单函数的功能测试 (9)4.2录入函数的功能测试 (9)4.3查询航班函数的功能测试 (11)4.4订票功能地测试 (12)致谢 (17)参考文献 (18)附录:源程序清单 (19)1.系统需求分析1.1 问题分析这次的课程设计是设计一个航空系统。

由于存储的数量较大且不固定,因此选择用链表来保存基本信息:终点站名、航班号、飞机号、飞行时间、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。

由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。

同时,由于预约人数无法预计,队列也应以链表作存储结构。

系统主要实现的操作和功能是:添加航线、查询航线、订票功能、退票功能。

要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。

1.2 任务意义飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。

软件至少需要具备的基本功能包括:接受订票,处理退票,查询航班信息等等。

面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。

在全面理解客户的需求下面,来进行设计出最能够满足客户的程序出来,并且能够根据不同的要求来将其进行改动,最能考察到对代码活用的程度。

数据结构课程设计---航空订票系统

数据结构课程设计---航空订票系统

数据结构课程设计报告1.航空订票系统1.需求分析试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。

采用链式存储结构。

系统能实现的操作和功能如下:(1)航班信息管理。

(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。

(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。

若需要,可登记排队候补。

(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

2.设计2.1 设计思想(1)数据结构设计typedefstruct keHu//客¨户信息{char nameofKeHu[20];//客户名字int numofPiao;//客¨户需要票的数量int type;//仓位等级1:头等Ì舱2:公务舱3:经济舱struct keHu* next;/下个客户};typedefstruct hangBan{int numofHangBan;//航班号char typeofHB[20];//航班机型¨char startFly[20];//起飞¦机场char endFly[20];//降¦落机场char DataofHB[20];//日期格式为(20120312星期¨一)char startTime[20];//起飞¦时间char endTime[20];//到达时À间float flyTime;//飞行时长float prise;//价格int largeNum;//成员定额int leaveNum;//余票数量keHu *custemer;//乘客信息名单keHu *orderofKeHu;//替补客户};typedefstruct Node{hangBan *exam;//航班信?息¡éint numofN;//航班数量struct Node *next;};(2)算法设计总体设计:在Fly.h文件中设计舱位的信息处理以及订票退票和对舱位信息的管理方面的功能然后在main,h中设计用户界面功能部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录总体设计 (2)概要设计 (2)详细设计 (3)调试分析 (11)测试数据及截图 (11)时间复杂度分析 (15)问题思考 (15)算法的改进设想 (15)课设总结体会 (15)附录 (17)程序说明 (17)源代码 (17)主要参考文献 (30)总体设计通过此系统可以实现如下功能:1).录入:可以录入航班情况(数据存储在一个数据文件中)2).查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3).订票:(订票情况存在一个数据文件中)可以订票,如果该航班已经无票,可以提供相关可选择航班;4).退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

5).修改航班信息:当航班信息改变可以修改航班数据文件概要设计每个模块的算法设计说明如下:(1)录入模块:查找单链表的链尾,在链头插入一个“航班信息”的新结点。

(2)浏览模块:顺着单链表输出航班信息。

(3)修改模块:输入密码,确认是否有权限对航班信息进行修改,有则进行修改,否则不能修改。

提供两种修改方式:添加航班和对已有的航班信息进行改动(修改和删除),1添加航线,0对已有的航班信息进行改动(修改和删除)。

对已有的航班信息进行改动(修改和删除):顺着单链表查找,若找到则进行相关操作。

(4)查询模块:提供两种查方式:按航号和起飞抵达城市查询,0代表按航号查询,1代表按起飞抵达城市查询。

顺着单链表查找,如果与航班号(起飞抵达城市)一致,输出相关信息并询问乘客是否要订票,若订进入订票模块;否则,查询不成功。

(5)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功;否则查找这个月此乘客起飞城市和降落城市的有空位航班,供乘客选择,若有则订票,若无则订票不成功并把此乘客的信息录入此航班等候订票队列中,退出订票。

(6)退票模块:输入要退票的乘客姓名以及所退票的编号,查找乘客资料的链表中是否有这位乘客,有则删去此结点,并判断是否有等候订票的乘客(有则通知等候订票乘客订票,无则余票加乘客所退票数);无则退票失败。

(7)文件模块:顺着单链表把链表的信息写入文件。

详细设计将航线信息写入文件将乘客信息写入文件修改操作删除操作查找操作录入操作浏览操作查询操作说明:订票操作文件操作由于此系统流程图太多,流程图所对应的源代码较长,所占篇幅也较大,并且流程图所对应的源程序在订票系统源程序中都有,这里就不再赘述。

需要说明的是插入、查找、修改和删除这些线性表的基本操作的流程图在订票系统源程序中没有单独函数,是因为此系统主要是运用线性表的基本操作解决实际问题,具体问题所对应的基本操作代码有所不同,但思维是相同的,所以这几个操作的源代码已经对应写入了其他具体操作的函数中,这里也不再给出。

根据订票系统功能的需要定义了如下的结构体:typedef struct wat_ros /*等候订票乘客的信息*/{ char name[20];/*姓名*/char phone[15];/*等候订票乘客的联系方式*/struct wat_ros *next;}qnode,*qptr;typedef struct pqueue{ qptr front;/*等候替补客户名单域的头指针*/qptr rear;/*等候替补客户名单域的属指针*/}linkqueue;typedef struct ord_ros{ char name[20];/*客户姓名*/char IDnum[20];/*客户有效证件的编号*/char airnum[7];/*航班号*/int dpl;/*订票量*/char piaohaio[20];//票的编号,由航班号起飞日期此航班订票前的余票量struct ord_ros *next;}Lnode ,*linklist;typedef struct airline{ char qdname[20];/*起点站名*/char zhname[20];/*终点站名*/char air_num[7];/*航班号*/char plane_num[10];/*飞机型号*/char year[5];char month[3];char day[3];/*飞行日期*/char qhour[3];char qminute[3];/*起飞时间*/char jhour[3];char jminute[3];/*降落时间*/float zhekou;/*没有折扣为十折*/float price;/*票价*/int tkt_amt;/*乘员定额*/int tkt_sur;/*余票量*/Lnode *order;/*本航班乘客名单域,指向乘客名单链表的头指针*/linkqueue *wait;/*本航班等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/struct airline *next;/*指向下一个结点*/}lineinfo,*lineair;调试分析测试数据及截图时间复杂度分析录入为线性表的初始化,所以时间复杂度:O(1);浏览遍历整张线性表所以时间复杂度:O(1);修改航班信息为线性表的查找、线性表的插入和线性表的删除操作,其平均移动元素个数分别为(n+1)/2、n/2、(n-1)/2,所以时间复杂度:O(n);查询为线性表的查找,所以时间复杂度:O(n);订票为线性表的查找所以时间复杂度:O(n);退票是查找两张线性表,所以时间复杂度:O(n*e);其中的n为航班总数,e为对应航班已定票人数。

问题思考(1)在事先就把航班信息写入文件,从文件中获取信息,但取数时怎样控制文件指针,也就是怎样取数的问题。

(2)输入密码时像平时在上网登录某一账号时输入密码一样显示“*********”。

(3)管理员能够在系统上浏览乘客信息。

解决第一个问题需要在读取文件信息时与灵活运用文件的指针的定位,在写入文件信息需严格按照一定的格式,不然文件指针不好定位;解决第二个问题用不回显接收函数getch(),然后调用printf()函数打印出一个*号;第三个问题只需在浏览操作时,设立一个管理员入口,输入管理员密码就对每条航线的乘客信息进行遍历,并把每条航班和对应的乘客信息输出。

算法的改进设想(1)在算法效率,由于此课程设计所用到的是线性表的建立、查找、插入、删除和队列的建立、插入、删除,所涉及的是查找和排序问题,所以可以在建立插入时按照起飞和抵达城市进行排序,若起飞和抵达城市相同则再按日期进行排序,查找时采用分块查找,当然要实现这些操作,对航班信息的存储应采指针数组存储。

(2)在函数重组,把处理不同问题相同算法思想(如线性表的插入、删除、查找等等)写在一个函数中,其他函数要用到这种操作时只需调用这些函数,减少整个程序的代码量,方便理解、阅读和使用。

课设总结体会此次课程设计我们组选了订票系统这个选题。

为了实现某个功能,必须使用相应的结构体,我们首先在网上搜索了几套别人所做订票系统的课程设计,看了一下他们所定义的结构体和我们课程设计选题所要实现的功能,觉得他们的结构体相对于我们的选题来说还是有一定的缺陷。

我们的选题主要运用线性结构来存储数据,进行线性表、队列的一些基本操作。

根据选题要实现的功能和链式存储结构的优点,我们最终决定队列和线性表都采用链式存储结构存储,并定义相应的结构体。

在敲源代码时,发现航班结构体中的已定票乘客信息和等待订票乘客信息的结构不太好操作,经过一番思考最终改为源代码中所定义的结构体。

从中知道了结构体的定义决定了源程序的难易。

在打程序时,没有把文件操作的代码打进源程序。

在调试没有文件操作的代码时,没有很多错误,但是犯了一个大错,就是在有一个字符串的复制中使用了赋值,调试过程指出错错误半天都不知道改,后来看了整个程序才反应过来。

在运行调试过程中浏览信息没有输出想要的输出结果,检查程序原来是格式控制字符串中的一个字符打成了大写;查询信息只能查询链表中的第一条航线,检查程序原来是多用了break造成过早跳出循环,不能查找后面的航线;乘客订多张票后浏览信息发现余票只减了一张,检查程序发现乘客订票后只对余票做了自减,在运行调试过程中就出现了这么些大的错误,在这过程中还对输出窗口界面做了一些调整。

加入文件操作代码后进行调试,没有出现什么错误。

最终运行时老在文件操作时终止程序,经过调试和自己的摸索原来是文件检测函数运用错误,改正后程序正常运行。

运行程序后打开所写的文件,发现航班信息的余票量没有随乘客的订票而减少,还是初始值,这时才发现每进行一次订票后都要重新对航班信息的文件重新写入,改后最终就确定了上交源代码。

在敲代码和在程序的调试、运行过程中我们发现我们半天才能想出几句语句,整个代码敲了二十几个小时,调试调了二三十个小时,主要原因使我们练得还不够,C语言功底还不是很扎实,要增加敲的代码量。

数据结构是为了解决实际问题,提出了一些结构,这些东西是我们以后解决一些问题时所要用到的,所以一定要熟练掌握,要多敲代码。

此次课程设计,使我们对链表和链队列的基本操作更加熟练,让我们深深地体会到要学好数据结构需要多练。

附录程序说明此课程设计程序无需安装,只需打开在VC++6.0上编译、连接、运行即可。

程序的源代码在本模块中。

源代码#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct wat_ros /*等候订票乘客的信息*/{ char name[20];/*姓名*/char phone[15];/*等候订票乘客的联系方式*/struct wat_ros *next;}qnode,*qptr;typedef struct pqueue{ qptr front;/*等候替补客户名单域的头指针*/qptr rear;/*等候替补客户名单域的属指针*/}linkqueue;typedef struct ord_ros{ char name[20];/*客户姓名*/char IDnum[20];/*客户有效证件的编号*/char airnum[7];/*航班号*/int dpl;/*订票量*/char piaohaio[20];//票的编号,由航班号起飞日期此航班订票前的余票量struct ord_ros *next;}Lnode ,*linklist;typedef struct airline{ char qdname[20];/*起点站名*/char zhname[20];/*终点站名*/char air_num[7];/*航班号*/char plane_num[10];/*飞机型号*/char year[5];char month[3];char day[3];/*飞行日期*/char qhour[3];char qminute[3];/*起飞时间*/char jhour[3];char jminute[3];/*降落时间*/float zhekou;/*没有折扣为十折*/float price;/*票价*/int tkt_amt;/*乘员定额*/int tkt_sur;/*余票量*/Lnode *order;/*本航班乘客名单域,指向乘客名单链表的头指针*/linkqueue *wait;/*本航班等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/struct airline *next;/*指向下一个结点*/}lineinfo,*lineair;void Explorer(lineair H) /*浏览航线信息*/{lineinfo *p;p=H->next;printf("航班号起飞站终点站机型飞行日期起、降时间票价折扣成员定额余票量\n");while(p){printf("%s %s %s %s %s/%s/%s %.2s:%.2s %.2s:%.2s %5.1f %3.1f %d %d\n",p->air_num,p->qdna me,p->zhname,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt _amt,p->tkt_sur);p=p->next;}}int Greatelist(lineair&H,int n) /*录入*/{ char a;int i;lineinfo *p;if(!(H=(lineair)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return(0);}H->next=NULL;if(!(H->order=(linklist)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return 0;}H->order->next=NULL;if(!(H->wait=(linkqueue*)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return 0;}H->wait->rear=H->wait->front=NULL;printf("\n开始录入航班信息:\n");printf("起点终点航班号机型年月日起降时间折扣票价乘员定额\n");/*起飞时间和降落时间包含时分*/ for(i=0;i<n;i++){if(!(p=(lineair)malloc(sizeof(lineinfo)))){ printf("分配空间出错");a=getchar();return 0;}scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->mon th,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);p->tkt_sur=p->tkt_amt;if(!(p->order=(linklist)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return 0;}p->order->next=NULL;if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return 0;}p->wait->rear=p->wait->front=NULL;p->next=H->next;H->next=p;}return 1;}int Dinpiao(lineair H) /*订票*/{int m,k=0,x,v=0,c=1,d;lineinfo *p,*t;Lnode *q;char a,*b;qnode *s;char year[5];char month[3];char day[3];/*飞行日期*/char air_num[7];/*航班号*/p=H->next;t=H->next;printf("请输入所定的航班号,票的年、月、日:\n");scanf("%s",air_num);scanf("%s",year);scanf("%s",month);scanf("%s",day);while(p){if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day))) {c=0;if(p->tkt_sur){printf("此航班还有%d张票可订,请输入您要订票的张数:",p->tkt_sur);scanf("%d",&m);if(m<=p->tkt_sur){printf("您已成功订到%d张票!\n请输入您的姓名:",m);if(!(q=(linklist)malloc(sizeof(Lnode)))){printf("分配空间出错");a=getchar();return 0;}scanf("%s",q->name);printf("请输入您的身份证号码:");scanf("%s",q->IDnum);q->dpl=m;if(!(b=(char*)malloc(sizeof(char)))){printf("分配空间出错");a=getchar();return 0;}strcpy(q->airnum,p->air_num);itoa(p->tkt_sur,b,10);strcpy(q->piaohaio,p->air_num);strcat(q->piaohaio,p->year);strcat(q->piaohaio,p->month);strcat(q->piaohaio,p->day);strcat(q->piaohaio,b);printf("您所订票的编号:%s",q->piaohaio);p->tkt_sur-=m;q->next=p->order->next;p->order->next=q;return 1;}else{printf("对不起余票量不够,请选择其他航班!");k=1;}}if(!p->tkt_sur||k==1){printf("航班已经满仓,您可以选择以下相关航班:\n");while(t){if(!(strcmp(t->year,p->year))&&!(strcmp(t->month,p->month))&&!(strcmp(p->qdname,t->qdname))&&!(strcmp(p->zhna me,t->zhname))&&p->tkt_sur){printf("航班号机型飞行日期起降时间票价折扣余票量\n%s %s %s/%s/%s %s:%s %s:%s %5.1f %3.1f %d\n",t->air_num,t->plane_num,t->year,t->month,t->day,t->qhour,t->qminute,t->jhour,t->jminute,t->price,t->zhekou,t->tkt_sur);}t=t->next;}printf("有没有您可以乘坐的航班\t0 没有\t 非0整数有\t请选择:");scanf("%d",&x);if(!x){printf("请输入您的姓名、联系方式\n");if(!(s=(qptr)malloc(sizeof(qnode)))){printf("分配空间出错!");a=getchar();return 0;}scanf("%s",s->name);scanf("%s",s->phone);s->next=NULL;if(p->wait->front==NULL&&p->wait->rear==NULL) /*等候订票队列为空*/p->wait->rear=p->wait->front=s;else{s->next=p->wait->rear->next;p->wait->rear->next=s;p->wait->rear=s;}printf("如果有人退票,我们会在第一时间联系您!\n");return 0;}elsereturn Dinpiao(H);}}p=p->next;}if(c){printf("没有您所指定的航班,0 菜单栏非0数字重新输入航班号,票的年、月、日\n");scanf("%d",&d);if(d)return Dinpiao(H);elsereturn 0;}return 1;}int Locateair(lineair H) /*查询*/{int m,k=1,t;lineinfo *p;char qdname[20];/*起点站名*/char zhname[20];/*终点站名*/char air_num[7];/*航班号*/p=H->next;printf("输入0按航班号查询,输入1按起飞抵达城市查询,请输入您的选择:");scanf("%d",&m);while(m<0||m>1){printf("请您重新选择,输入0按航班号查询,输入1按起飞抵达城市查询:");scanf("%d",&m);}if(m){printf("请分别输入起飞抵达城市:\n");scanf("%s",qdname);scanf("%s",zhname);printf("机型航班号飞行日期起降时间票价折扣余票量\n");while(p){if(!(strcmp(p->qdname,qdname))&&!(strcmp(p->zhname,zhname))){printf("%s %s %s/%s/%s %.2s:%.2s %.2s:%.2s %5.1f %3.1f %d\n",p->plane_num,p->air_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_s ur);k=0;}p=p->next;}}else{printf("请输入要查询的航班号:");scanf("%s",air_num);while(p){if(!(strcmp(p->air_num,air_num))){printf("机型航班号起飞城市抵达城市飞行日期起降时间票价折扣余票量\n%s %s %s %s %s /%s/%s %.2s:%.2s %.2s:%.2s %5.1f %3.1f %d\n",p->plane_num,p->air_num,p->qdname,p->zhname,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p-> price,p->zhekou,p->tkt_sur);k=0;}p=p->next;}}if(k){printf("没有您要查询的航线!\n");return 0;}else{printf("有没有您要订票的航班!\n");do{printf("1有0没有请选择:\n");scanf("%d",&t);}while(!(t==1)&&!(t==0));if(t)return Dinpiao(H);elsereturn 0;}}int Tuipiao(lineair H) //退票{lineinfo *p;int m=0,t;Lnode *q,*f;char b[20];scanf("%s",b);p=H->next;while(p){q=p->order->next;if(!(strcmp(b,q->piaohaio))){m=1;p->order->next=q->next;t=q->dpl;free(q);break;}while(q->next){if(!(strcmp(b,q->next->piaohaio))){m=1;f=q->next;t=f->dpl;q->next=f->next;free(f);break;}q=q->next;}if(m)break;p=p->next;}if(!m){printf("对不起没有搜索到您的订单,请重新输入订单编号!");Tuipiao(H);}else{printf("您已成功退票!\n");p->tkt_sur+=t;if(p->wait->rear==p->wait->front)return 1;else{//机场订票系统服务人员马上通知本次航班等候订票乘客printf("通知等候订票的乘客,通知成功后按任意键\n");getchar();return Dinpiao(H);}}}int Alter(lineair H,char b[]) /*修改航班*/{lineinfo *p,*q;char year[5];char a,s[20];char month[3];char day[3];/*飞行日期*/char air_num[7];/*航班号*/int c,i,n,d,r=0;printf("请输入密码:\n");scanf("%s",s);if(strcmp(s,b)){printf("输入密码错误!");return 0;}do{printf("1 添加航线0 对已有的航班信息进行改动(修改和删除),请选择:");scanf("%d",&c);}while(c!=1&&!(c==0));if(c){printf("请输入您要添加航班的条数");scanf("%d",&n);printf("起点终点航班号机型年月日起降时间折扣票价乘员定额\n");/*起飞时间和降落时间包含时分*/for(i=0;i<n;i++){if(!(p=(lineair)malloc(sizeof(lineinfo)))){printf("分配空间出错!");a=getchar();return 0;}scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->mon th,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);if(!(p->order=(linklist)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return 0;}p->order->next=NULL;if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo)))){printf("分配空间出错");a=getchar();return 0;}p->tkt_sur=p->tkt_amt;p->wait->front=NULL;p->wait->rear=p->wait->front;p->next=H->next;H->next=p;}printf("已成功添加%d条航线\n",n);}else{do{printf("1 删除航班0 修改航班信息,请选择:");scanf("%d",&d);}while(d!=1&&d!=0);if(d){printf("请输入要删除的航班条数:");scanf("%d",&n);for(i=1;i<=n;i++){printf("请输入第%d条要删除航班的航班号和飞行日期(年、月、日)!\n",i);scanf("%s%s%s%s",air_num,year,month,day);p=H->next;q=H;while(p){if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))break;q=p;p=p->next;}if(!p){printf("没有您要删除的航线,请核对后再进行删除!\n");r++;}else{q->next=p->next;printf("已成功删除第%d条航线\n",n);free(p);}}if(r<n)return 1;elsereturn 0;}else{printf("请输入要修改航班要修改航班的条数:");scanf("%d",&n);for(i=1;i<=n;i++){printf("请输入第%d条要修改航班的航班号和此航班的飞行日期(年、月、日)\n",i);scanf("%s%s%s%s",air_num,year,month,day);p=H->next;while(p){if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))break;p=p->next;}if(!p){printf("没有您要修改的航线,请核对后再进行修改!\n");r++;}else{printf("请输入此修改航班的航班信息!\n");printf("起点终点航班号机型年、月、日起降时间折扣票价乘员定额\n");/*起飞时间和降落时间包含时分*/scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p-> day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);printf("您已成功修改了第%d条航线\n",i);}}if(r<n)return 1;elsereturn 0;}}}int File(lineair H,int t,int j) /*文件操作*/{int a=1,b=1,c=0;FILE *fp;lineinfo *p;Lnode *q;if(t){c=1;p=H->next;fp=fopen("航班信息.txt","w");fprintf(fp,"%s%c%s%c%s%c%c%s%c%s%c%s%c%s%c%s%s%c%s%s%c%s%c%s%c%s%c%s%c","航班号",32,"起点",32,"终点",32,32,"机型",32,"年",32,"月",32,"日",32,"起时","分",32,"降时","分",32,"票价",32,"折扣",32,"定员",32,"余票量",32);while(p){fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%.2s%c%.2s%c%.2s%c%.2s%c%5.1f%c%3.1f%c%c%d%c%c%c%d%c",'\n',p->air_num,32,p->qdname,32,p->zhname,32,p->plane_num,32,p->year,'\\',p->month,'\\',p->day,32,p->qhour,':',p->qminute,32 ,p->jhour,':',p->jminute,32,p->price,32,p->zhekou,32,32,p->tkt_amt,32,32,32,p->tkt_sur,'\n');p=p->next;}a=ferror(fp);fclose(fp);}if(j){c=1;fp=fopen("订票信息.txt","w");p=H->next;fprintf(fp,"%s%c%s%c%s%c%s%c%s%c","姓名",'\t',"证件号码",'\t',"航班号",32,"订票量",32,"编号",'\n');while(p){if(p->order->next){q=p->order->next;while(q){fprintf(fp,"%c%s%c%s%c%s%c%d%c%s%c",'\n',q->name,32,q->IDnum,32,q->airnum,32,q->dpl,32,q->piaohaio,'\n');q=q->next;}}p=p->next;}b=ferror(fp);fclose(fp);}return (a&&b&&c);}void main(){int i,n,j,k,m=0,t=1;lineair H;char a[20];printf("请设置管理员密码:\n");scanf("%s",a);printf("\n 欢迎进入订票系统\n");do{j=0;k=0;printf("\n============订票系统菜单=============\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("请在0-6中选择您需要的服务按回车键结束:\n\n");scanf("%d",&i);switch(i){case 1:{printf("请输入要录入航线的条数:");scanf("%d",&n);if(Greatelist(H, n))m=1;if(File(H,m,j))printf("航班信息数据存储出错,请检查程序后重新录入信息!\n");break;}case 2:{if(m)Explorer(H);elseprintf("请录入航班信息!\n");break;}case 3:{if(m)k=Alter(H,a);elseprintf("请录入航班信息!\n");if(File(H,k,j))printf("航班信息数据存储出错,请检查程序后重新录入信息!\n");break;}case 4:{if(m)j=Locateair(H);elseprintf("请录入航班信息!\n");if(File(H,m,j))printf("数据存储出错,请检查程序!\n");break;}case 5:{if(m)j=Dinpiao(H);elseprintf("请录入航班信息!\n");if(File(H,m,j))printf("数据存储出错,请检查程序!\n");break;}case 6:{if(m){printf("请输入您所退票的订单编号:");j=Tuipiao(H);}elseprintf("请录入航班信息!\n");if(File(H,m,j))printf("数据存储出错,请检查程序!\n");break;}case 0:t=0;break;default:printf("对不起,没有您需要的服务,请重新选择!\n");}}while(t);printf("\n谢谢使用本系统,欢迎您下次再次使用!\n");free(H);}主要参考文献(1)《C语言程序设计(第三版)》冾汗•合孜尔编著北京:中国铁道出版社(2)《数据结构理论与实践》杨永斌编著天津:天津科学技术出版社。

相关文档
最新文档