C语言航空订票系统方案_第1页
C语言航空订票系统方案_第2页
C语言航空订票系统方案_第3页
C语言航空订票系统方案_第4页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、航空客运订票系统姓名:xxx班级:xxxx学号: xxxxxxxxx目录一、 问题描述 .1二、 设计要求 .1三、数据结构设计 .2四、 详细设计程序 .3五、 运行与测试 .9六、收获及体会 .13一、问题描述设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。二、 设计要求1 每条航线所涉及的信息有:终点站名 、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单 (包括姓名 、订票量、舱位等级 1, 2 或 3)以及等候替补的客户名单 (包括姓名 、所需票量 );2 系统能实现的操作和功能如下:a) 查询航线 :根据旅客提出的终点站名输出下列信息:航班号、飞机号、

2、星期几飞行 ,最近一天航班的日期和余票额 ;b) 承办订票业务 :.根据客户提出的要求 (航班号、订票数额 )查询该航班票额情况 ,若尚有余票 ,则为客户办理订票手续 ,输出座位号 ;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补;c) 承办退票业务 :根据客户提供的情况 (日期、航班),为客户办理退票手续 ,然后查询该航班是否有人排队候补 ,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续 ,否则依次询问其他排队候补的客户。三、 数据结构设计a)等候替补的客户名单 (包括姓名 、所需票量 )typedef struct wat_ros char

3、name10;/*姓名 */int req_amt;/*订票量 */struct wat_ros *next;qnode,*qptr;typedef struct pqueu qptr front;/*等候替补客户名单域的头指针*/qptr rear;/*等候替补客户名单域的属指针*/linkqueue;b )订票的客户名单 (包括姓名 、订票量 、舱位等级 1, 2 或 3)typedef struct ord_ros char name10;/*客户姓名 */专业技术资料.int ord_amt;/*订票量 */int grade;/*舱位等级 */struct ord_ros *next

4、;linklist;c)每条航线所涉及的信息:终点站名 、航班号 、飞机号 、飞行日 (星期几 )、乘员定额 、余票量、已订票的客户名单 、以及等候替补的客户名单struct airlinechar zong_name10;/*终点站名 */char air_num10;/*航班号 */char plane_num10;/*飞机号 */char date7;/*飞行日期 (星期几 ) */int tkt_amt;/*乘员定额 */int tkt_sur;/*余票量 */linklist *order;/*乘员名单域 ,指向乘员名单链表的头指针*/linkqueue wait;/*等候替补的客户

5、名单域,分别指向排队等候名单队头队尾的指针*/lineinfo;四、详细设计程序主函数 :int menu_select()/* 菜单界面 */ int c;char s20;printf("ntt航空客运订票系统n");专业技术资料.printf("*n");printf("1.浏览航线信息 n");printf("2.浏览已订票客户信息n");printf("3.查询航线 n");printf("4.办理订票业务 n");printf("5.办理退票业务 n&q

6、uot;);printf("6.查看剩余票数并排序n");printf("0.退出系统 n");printf("*n");doprintf(" 请选择 :");scanf("%s",s);c=atoi(s);while(c<0|c>7);return c;void main()start=air;for(;)switch(menu_select()专业技术资料.case 1:list();break;case 2:prtlink();break;case 3:search();bre

7、ak;case 4:order();break;case 5:return_tkt();break;case 6:sort_tkt();break;case 0:printf("n欢迎使用本系统,再见 ! n");exit(0);printf("nPress any key to continue!n");getch();航线信息 :struct airlinechar zong_name10;/*终点站名 */char air_num10;/*航班号 */char plane_num10;/*飞机号 */char date7;/*飞行日期 (星期几 )

8、 */int tkt_amt;/*乘员定额 */int tkt_sur;/*余票量 */linklist *order;/*乘员名单域 ,指向乘员名单链表的头指针*/linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/专业技术资料.lineinfo;struct airline *start;struct airline airMAXSIZE="aaa","1","001","SUN",30,15,"bbb","2","00

9、2","MON",40,10,"ccc","3","003","FRI",50,14,"ddd","4","004","TUE",60,20;void display(struct airline *info)/* 打印每条航线的基本信息*/printf("%8st%3st%st%4stt%3dt%10dn",info->ter_name,info->air_num,info

10、->plane_num,info->date,info->tkt_amt,info->tkt_sur);void list()/*打印全部航线信息*/ struct airline *info; int i=0; info=start;printf(" 终点站名 t 航班号 t 飞机号 t 飞行日期 t 乘员定额 t 余票量 n"); while(i<MAXSIZE)display(info);info+;i+;专业技术资料.printf("nn");查询航线 :void search()/* 根据客户提出的终点站名输出航线

11、信息*/ struct airline *info,*find(); char name10;int i=0;info=start;printf(" 请输入终点站名:");scanf("%s",name);while(i<MAXSIZE)if(!strcmp(name,info->zong_name) break;info+;i+;if(i>=MAXSIZE)printf(" 对不起 ,该航线未找到!n");elseprintf(" 终点站名 t航班号 t飞机号 t飞行日期 t乘员定额 t余票量 n&quo

12、t;);专业技术资料.display(info);struct airline *find()/* 根据系统提出的航班号查询并以指针形式返回*/ struct airline *info; char number10;int i=0;info=start;printf(" 请输入航班号 :");scanf("%s",number);while(i<MAXSIZE)if(!strcmp(number,info->air_num) return info;info+;i+;printf(" 对不起 ,该航线末找到 !n");r

13、eturn NULL;客户信息 :void prtlink()专业技术资料./* 打印订票乘员名单域的客户名单信息*/ linklist *p;struct airline *info;info=find();p=info->order;if(p!=NULL)printf(" 客户姓名订票数额舱位等级 n");while(p)printf("%stt%dt%dn",p->name,p->ord_amt,p->grade);p=p->next;elseprintf(" 该航线没有客户信息!n");linkl

14、ist *insertlink(linklist *head,int amount,char name,int grade)/* 增加订票乘员名单域的客户信息*/ linklist *p1,*new1; p1=head;new1=(linklist *)malloc(sizeof(linklist);if(!new1) printf("nOut of memory!n");return NULL; strcpy(new1->name,name);专业技术资料.new1->ord_amt=amount;new1->grade=grade;new1->n

15、ext=NULL;if(head=NULL)/*若原无订票客户信息*/head=new1;new1->next=NULL;elsehead=new1;new1->next=p1;return head;linkqueue appendqueue(linkqueue q,char name,int amount)/* 增加排队等候的客户名单域*/ qptr new1; new1=(qptr)malloc(sizeof(qnode); strcpy(new1->name,name); new1->req_amt=amount;new1->next=NULL;if(q.

16、front=NULL)/*若原排队等候客户名单域为空*/q.front=new1;elseq.rear->next=new1;q.rear=new1;专业技术资料.return q;订票业务 :void order()/* 办理订票业务 */ struct airline *info; int amount,grade;char name10;info=start;if(!(info=find() return;/*根据客户提供的航班号进行查询,如为空 ,退出该模块 */printf(" 请输入你订票所需要的数量:");scanf("%d",&am

17、p;amount);if(amount>info->tkt_amt)/*若客户订票额超过乘员定票总额,退出 */ printf("n对不起 ,您输入的票的数量已经超过乘员定额!");return;if(amount<=info->tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/int i;printf(" 请输入您的姓名(订票客户 ):");scanf("%s",name);printf(" 请输入 %s 票的舱位等级 :",name);专业技术资料.scanf(&quo

18、t;%d",&grade);info->order=insertlink(info->order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/for(i=0;i<amount;i+)/*依次输出该订票客户的座位号*/printf("%s的座位号是 :%dn",name,info->tkt_amt-info->tkt_sur+i+1);info->tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/printf("n祝您乘坐愉快! n");else/

19、* 若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r;printf("n已经没有更多的票,您需要排队等候吗?(Y/N)");r=getch();printf("%c",r);if(r='Y'|r='y') printf("n请输入您的姓名 (排队订票客户 ) :"); scanf("%s",name);info->wait=appendqueue(info->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/printf

20、("n注册成功 !n");else printf("n欢迎您下次再次订购!n");退票业务 :void return_tkt()专业技术资料./* 退票模块 */ struct airline *info; qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname10;if(!(info=find() return;/*调用查询函数,根据客户提供的航线进行搜索*/head=info->order;p1=head;printf(" 请输入你的姓名(退票客户 ) :&

21、quot;);scanf("%s",cusname);while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/if(!strcmp(cusname,p1->name) break;p2=p1;p1=p1->next;if(p1=NULL) printf("对不起 ,你没有订过票!n");return;/*若未找到 ,退出本模块 */else/* 若信息查询成功,删除订票客户名单域中的信息*/if(p1=head) head=p1->next;else p2->next=p1->next;info-&

22、gt;tkt_sur+=p1->ord_amt;grade=p1->grade;printf("%s成功退票 ! n",p1->name);专业技术资料.free(p1);info->order=head;/*重新将航线名单域指向订票单链表的头指针*/f=(info->wait).front;/*f指向排队等候名单队列的头结点*/r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/t=f;/*t为当前满点条件的排队候补名单域*/while(t)if(info->tkt_sur=info->wait.f

23、ront->req_amt)/* 若满足条件者为头结点*/int i;info->wait.front=t->next;printf("%s订票成功 ! n",t->name);for(i=0;i<t->req_amt;i+)/*输出座位号 */printf("%s的座位号是 :%dn",t->name,(info->tkt_sur)-i);info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_a

24、mt,t->name,grade);/*插入到订票客户名单链表中 */free(t);break;back=t;t=t->next;专业技术资料.if(info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若满足条件者不为头结点*/ int i;back->next=t->next;printf("%s订票成功 ! n",t->name);for(i=0;i<t->req_amt;i+)/*输出座位号 */printf("<%s>'s seat number is:%dn",t->name,(info->tkt_sur)-i);info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/free(t);break;if(f=r) break;剩票排序 :void sort_tkt()/* 按剩余票数排序*/int j;str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论