1、课程设计航空客运订票系统 数据结构课程设计报告 课程名称_数据结构题目名称 航空客运订票系统 学生学院 计算机学院专业班级 11级软件1班 2012年 6月 29日一需求分析设计一个航空客运订票系统基本要求:1.每条航线所涉及的信息有:终点站名、航班号、飞机好、飞行周日、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、仓位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);2.作为示意系统 ,全部数据可以只放在内存中;3.系统能实现的操作和功能如下:(1)查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机好、星期几飞行,最近一天航班的日期和与票额;(2)承办订票业务:根
2、据客户提出的要求(航班号,订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员活余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;(3)承办退票业务:根据客户提供的情况(日期、航班)。为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则一次询问其他排队候补的客户。2概要设计 用链队储存客户信息,用线性表储存航线函数声明void fromAirlineNum();/通过航班号查询void fromEndCity();/通过目的地查询void fromDay();/通过时间查询v
3、oid Initialize();/初始化录入功能void airLineCheck();/查询功能void customerBooking();/订票功能void cancelFuntion();/退票功能void customerInformation();/用户信息查询三详细设计 #include #include #include #include #define ok 1 typedef struct Booking/单链表 char name15;/已订票的客户姓名 int ticket;/已订票数量 struct Booking *next1;Booking,*Link;type
4、def struct yetBooking/单链队 char name15;/预订票的客户姓名 int moreticket;/ 要订票数量 struct yetBooking *next2;/下一个链队结点指针yetBooking,*Qptr;typedef struct Qptr front;/单链队头结点 Qptr rear;/单链队尾结点linkQueue; typedef struct airLine/创建一个航线的结构体 char fightNum15;/航班号- char planeNum15;/飞机号 int fightTime;/起飞时间 int level;/舱位等级 in
5、t moreTicket;/余票 char endCity15;/降落城市 int totalTicket;/票数总额 struct airLine *next;/指向下一个链结点的指针 struct Booking *bookingedList;/定义一个指向已订票客户的头结点指针 struct yetBooking *bookdingQueue; linkQueue Q;airLine,*Linklist;struct airLine *L=NULL;/定义全局量struct Booking *H;/为已订票客户链队来申请空间/linkQueue Q;/linkQueue类型的来申请空间L
6、inklist InitLinklist();/声明int InsertLinklist(Linklist &head1);/声明void fromAirlineNum();/通过航班号查询void fromEndCity();/通过目的地查询void fromDay();/通过时间查询void Initialize();/初始化录入功能void airLineCheck();/查询功能void customerBooking();/订票功能void cancelFuntion();/退票功能void customerInformation();/用户信息查询void main() H=(st
7、ruct Booking*)malloc(sizeof(Booking); /Q.front=Q.rear=(Qptr)malloc(sizeof(yetBooking); InitLinklist(); int n; do /打印主界面 printf(t 欢迎使用航空客运订票系统n); printf(t+n); printf(t=1. 录入航班功能 =n); printf(t=2. 航班查询功能 =n); printf(t=3. 订票功能 =n); printf(t=4. 退票功能 =n); printf(t=5. 用户信息查询 =n); printf(t=6. 退出 =n); printf
8、(t+n); printf(t请选择:); scanf(%d,&n);printf(n); switch(n) case 1: Initialize();/录入功能 break; case 2: airLineCheck();/查询功能 break; case 3: customerBooking();/订票功能 break; case 4: cancelFuntion();/退票功能 break; case 5: customerInformation(); break; default :exit(0);/退出 while(n=1|n=2|n=3|n=4|n=5);void Initial
9、ize()/航班录入功能 int j=1,m; do if(!InsertLinklist(Linklist) L) /向其中加入航班信息 printf(内存已满n); exit(OVERFLOW); /向链表中加一结点 printf(t是否要输入下一个航线记录?n); printf(t是请输入1n); printf(t否请输入2nt); scanf(%d,&m); /在这里依靠人来决定是否输入下一条航线记 while(m=1);Linklist InitLinklist() L=(Linklist)malloc(sizeof(airLine); if(!L) exit(OVERFLOW);
10、L-next=NULL;/建立一个带有头结点的单链表 return (L);int InsertLinklist(Linklist &L)/向航线链表添加新的结点 Linklist p; p=(Linklist)malloc(sizeof(airLine);/为一个新的结点分配空间 if(!p) exit(OVERFLOW); printf(t请依次输入下面几项内容:nn);/这里的输入采用一个个单独输入,避免了乱赋值的现象 printf(航班号n); scanf(%s,p-fightNum); printf(飞机号n); scanf(%s,p-planeNum); printf(终点站n);
11、 scanf(%s,p-endCity); printf(飞行日期(星期)n); scanf(%d,&p-fightTime); printf(舱位等级n); scanf(%d,&p-level); printf(票数总额n); scanf(%d,&p-totalTicket); p-moreTicket=p-totalTicket; p-bookingedList=(Booking*)malloc(sizeof(Booking);/为它申请空间 p-bookdingQueue=p-Q.front=p-Q.rear=(Qptr)malloc(sizeof(yetBooking);/为它申请空间
12、 p-next=L-next; L-next=p;/这二句是链表中的插入一个结点 p-Q.front-next2=NULL; return ok;void airLineCheck()/查询功能 int n; printf(t 查 找 航 线 信 息 n); printf(t+n); printf(t=1. 通过目的地查询 =n); printf(t=2. 通过航班号查询 =n); printf(t=3. 通过日期查询 =n); printf(t+n); printf(t请选择:n); scanf(%d,&n); switch(n) case 1:fromEndCity(); break; c
13、ase 2:fromAirlineNum(); break; case 3:fromDay(); break; default :break; void fromEndCity()/通过目的地查询 char c15; Linklist p=L; int m=1; printf(t请输入要查询的目的地:n); scanf(%s,c); do p=p-next; if(p) if(strcmpi(*p).endCity,c)=0) printf(t航班号:%sn,p-fightNum); printf(t飞机号:%sn,p-planeNum); printf(t飞行时间:周%dn,p-fightT
14、ime); printf(t票数总额%dn,p-totalTicket); printf(t余票量:%dnnn,p-moreTicket); m=0; else m=1; while(m!=1); if(m=1)printf(t对不起没有你要找的航班号:n);void fromAirlineNum()/通过航班号查询 char c15; Linklist p=L; int m=1; printf(t请输入要查询的航班号:n); scanf(%s,c); do p=p-next; if(p) if(strcmpi(*p).fightNum,c)=0) printf(t航班信息:n); print
15、f(t航班号:%sn,p-fightNum); printf(t飞机号:%sn,p-planeNum); printf(t飞行时间:周%dn,p-fightTime); printf(t票数总额%dn,p-totalTicket); printf(t余票量:%dnn,p-moreTicket); m=0; else /如果不匹配的话就做 printf(t对不起没有你要找的航班号:n); m=0; while(m!=0);void fromDay()/通过日期查询航班 int i; Linklist p=L; int m=2; printf(t请输入日期:n); scanf(%d,&i); pr
16、intf(t航班信息:n); do p=p-next; if(p) if(*p).fightTime=i) printf(t航班号:%sn,p-fightNum); printf(t飞机号:%sn,p-planeNum); printf(t飞行时间:周%dn,p-fightTime); printf(t票数总额%dn,p-totalTicket); printf(t余票量:%dnnn,p-moreTicket); m=0; else m=1; while(m!=1); if(m=1)printf(t对不起没有你要找的航班号:n);void customerBooking()/订票功能 Link
17、list p=L;/Linklist类型的L来指向链表头 Booking *h,*h1;/Booking 定义客户的结点,方便插入与删除 / linkQueue q;/linkQueue类型的来 ,方便插入与删除 struct yetBooking *q3; char c15; int m=1,ticket,n; int ydticket=0,yd=0; printf(请输入航班号:n); scanf(%s,c); /p=L-next; if(p) do/查找一下,是否有这个航班 if(!p) printf(对不起,没有你要找的航班:nn); m=-1; break; /goto loop1;
18、 m=strcmpi(p-fightNum,c); /通过比较来判定 if(m=0) printf(航班信息:n); printf(航班号:%sn,p-fightNum); printf(飞机号:%sn,p-planeNum); printf(飞行时间:周%dn,p-fightTime); printf(票数总额%dn,p-totalTicket); printf(余票量:%dn,p-moreTicket); else p=p-next; while(m!=0); if(m=0) /当有该航班时,进行订票 do printf(n请输入你要订的票数:n); scanf(%d,&ticket);
19、while(ticket=0) printf(票数应该大于0n); scanf(%d,&ticket); if(ticketmoreTicket) h=p-bookingedList; if(h) h1=h; h=h-next1; h=(struct Booking*)malloc(sizeof(Booking); printf(请输入你的名字:n); scanf(%s,h-name); h-ticket=ticket; h-next1=h1-next1; h1-next1=h; p-moreTicket=p-moreTicket-ticket; printf(订票成功:n); m=2; el
20、se /余票量不足时 printf(余票量:%dn,p-moreTicket); printf(对不起,余票 %d 张不足,不能完成订票n,p-moreTicket); printf( 是否要重新订票?n); printf(需要请输入1n); printf(取消请按2: n); printf(预订请输入3 : n); scanf(%d,&m); if(m=3) q3=(yetBooking*)malloc(sizeof(yetBooking); printf(请输入你的姓名n); scanf(%s,q3-name); q3-moreticket=ticket; q3-next2=NULL; p
21、-Q.rear-next2=q3; p-Q.rear=q3; printf(恭喜,预订成功!n); while(m=1); void cancelFuntion()/*退票功能 Linklist p=L; Booking *h=H,*h1,*h2; / linkQueue q=Q; char c15,name115; int m=1,ticket,n;/定义相应变量 printf(请输入航班号:n); scanf(%s,c); p=L-next; if(p) do /使用do while来查找是否有此航班 if(!p) /如果是到了表尾且没有匹配, printf(n对不起,没有你要找的航班:n
22、); m=-1; if(strcmpi(p-fightNum,c)=0)/比较航班号 输出信息 printf(t航班信息:n); printf(航班号:%sn,p-fightNum); printf(飞机号:%sn,p-planeNum); printf(飞行时间:周%dn,p-fightTime); printf(票数总额%dn,p-totalTicket); printf(余票量:%dn,p-moreTicket); m=0; else p=p-next; while(m0); if(m=0) /如果找到了,则退票 int i=1; do h=p-bookingedList; printf
23、(请输入你的姓名:n); scanf(%s,name1); printf(请输入你订的票数:n); scanf(%d,&ticket); while(ticketticket=ticket)/如果名字和订的票数相等,则就给他取消订票 p-moreTicket+=h-ticket; h2=h; if(i=1) h=h-next1; free(h2); else h1-next1=h-next1; free(h2); printf(你取消订票成功n); struct yetBooking *q3; if(p-Q.front=p-Q.rear) printf(没有人预订票:n); break; if
24、(p-moreTicket)=(p-Q.front-next2-moreticket) h2=(Booking*)malloc(sizeof(Booking); strcpy(h2-name,p-Q.front-next2-name); h2-ticket=p-Q.front-next2-moreticket; n=p-moreTicket-p-Q.front-next2-moreticket; p-moreTicket=n; q3=p-Q.front;/ if(p-Q.rear=q3) free(q3);p-Q.front=p-Q.rear=NULL; else p-Q.front=p-Q.front-next2;/这二语句来删除结点 free(q3); printf(链队中删除成功n); h2-next1=p-bookingedList-next1; p-bookingedList-next1=h2;/为之插入进已订票客户链表中 printf(为预订的客户订票成功n); break; else printf(余票数不够,不能为预订客户订票!n); else h1=h; h=h-next1; if(!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1