当前位置:文档之家› 航空客运订票系统的设计与实现

航空客运订票系统的设计与实现

课程设计说明书课程名称题目航空客运订票系统的设计与实现院系_电子信息工程学院____班级__计算机科学与技术__学生______________指导教师_____________日期_ 2011.12.19-2011.12.30__数据结构课程设计任务书指导教师:时间: 2011.12.8航空客运订票系统的设计与实现一、简介1.设计目的:1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。

航空空订票系统:(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。

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

二、数据结构的设计:(1)航班信息:飞机抵达城市、航班号、飞机号、起降时间、航班票价、票价折扣、总位置和剩余位置、以訂票的客户。

(2)客户信息:客户、证件号、座位号。

三、功能(函数)设计:1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、载客量、余票量、票价格,折扣,已订票的客户(包括、订票量、舱位等级1,2或3)以及等候替补的客户(包括、所需票量);2.全部数据可以只放在存中;3.系统能实现的操作和功能如下:a) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b) 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。

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

系统结构图(功能模块图)功能模块说明(1)显示已初始化的全部航线信息(2)浏览已订票客户信息(3)根据客户提出的终点站名,调用find()函数寻找航线信息,调用list ()函数输出航线信息(4)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。

(5)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的到订票客户域进行查询。

退票成功后,重新将航线域指向订票单链表的头指针。

根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。

(6)退出本系统四、界面设计:界面简洁易懂,包括1.浏览航线信息;2.浏览已订票客户信息;3.查询航线;4.办理订票业务;5.办理退票业务;6.查看剩余票数并排序。

五、程序设计:六、运行与测试:1、测试的数据及其结果:(1)通过按键“1”浏览航线信息,结果输出五行事先输入的数据。

(2)通过按键“3”查询航线,输入终点站名后,结果输出相关航线信息。

(3)通过按键“4”办理订票业务,依次输入航班号,订票数量,客户,证件号后,结果输出客户的座位号,订票成功。

(4)通过按键“2”浏览已定票客户信息,输入航班号后,结果显示客户信息。

(5)通过按键“5”办理退票业务,输入航班号,客户名后,结果退票成功。

(6)通过按键“6”查看剩余票数并排序,结果正确。

(7)通过按键“0”退出系统,结果正确。

2、运行与测试期间遇到的问题及其解决办法。

(1)因本人能力有限,在编写的时候只使用了相对较为简单的基础语言,代替了相对较为复杂的语言,降低了运行效率。

(2)程序在起初设计的时候,经常出现溢出错误,而且不只一处。

为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,(3)由于忘记了一些c语言的规使得在调试过程中一些错误没有发现。

例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。

(4)测试用例具有一定的广泛性。

运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。

说明程序具有一定的可靠性和稳定性。

七、设计后的思考:经过这次课程设计,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的规性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。

代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#define MAXSIZE 5typedef struct wat_ros{ char name[10];int req_amt;struct wat_ros *next;}qnode,*qptr;typedef struct pqueue{ qptr front;qptr rear;}linkqueue;typedef struct ord_ros{ char name[10];int ord_amt;int grade;struct ord_ros *next;}linklist;struct airline{ char ter_name[10];char air_num[10];char plane_num[10];char date[7];int tkt_amt;int tkt_sur;int tkt_pri;int tkt_reb;linklist *order;linkqueue wait;}lineinfo;struct airline *start;struct airline air[MAXSIZE]={{"","1","A1401","星期日",3,1,800,9},{"","2","H1102","星期一",2,5,600,6},{"","3","L1003","星期五",1,3,100,4},{"","4","H1035","星期三",5,4,700,5},{"呼和浩特","5","F1100","星期六",6,3,800,5}};void display(struct airline *info){printf("%8s\t%3s\t%s\t%7s\t%7d\t%10d\t%5d\t%3d\n",info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_amt,info->tkt_sur,info->tkt_pri,info->tkt_reb);}void list(){ struct airline *info;int i=0;info=start;printf("终点站\t\t航班号\t飞机号\t飞行日期\t载客量\t余票量\t票价格\t折扣\n");while(i<MAXSIZE){display(info);info++;i++;}printf("\n\n");}void search(){ struct airline *info,*find();char name[10];int i=0;info=start;printf("请输入终点站名:");scanf("%s",name);while(i<MAXSIZE){if(!strcmp(name,info->ter_name)) break;info++;i++;}if(i>=MAXSIZE)printf("对不起,该航线未找到!\n");else{printf("终点站\t\t航班号\t飞机号\t飞行日期\t载客量\t余票量\t票价格\t折扣\n");display(info);}}struct airline *find(){ struct airline *info;char number[10];int i=0;info=start;printf("请输入航班号:");scanf("%s",number);while(i<MAXSIZE){if(!strcmp(number,info->air_num)) return info;info++;i++;}printf("对不起,该航线末找到!\n");return NULL;void prtlink(){ linklist *p;struct airline *info;info=find();p=info->order;if(p!=NULL){printf("客户订票数额客户证件号\n");while(p){printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);p=p->next;}}elseprintf("该航线没有客户信息!!\n");}linklist *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->next=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.front==NULL)q.front=new1;elseq.rear->next=new1;q.rear=new1;return q;void order(){ struct airline *info;int amount,grade;char name[10];info=start;if(!(info=find())) return;printf("请输入你订票所需要的数量:");scanf("%d",&amount);if(amount>info->tkt_amt){ printf("\n对不起,您输入的票的数量已经超过乘员定额!");return;}if(amount<=info->tkt_sur){int i;printf("请输入您的(订票客户):");scanf("%s",name);printf("请输入%s票的证件号:",name);scanf("%d",&grade);info->order=insertlink(info->order,amount,name,grade);for(i=0;i<amount;i++)printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1); info->tkt_sur-=amount;printf("\n祝您乘坐愉快!\n");}else{ 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("\n注册成功!\n");}else printf("\n欢迎您下次再次订购!\n");}}void return_tkt(){ struct airline *info;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname[10];if(!(info=find())) return;head=info->order;p1=head;printf("请输入你的(退票客户):");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->tkt_sur+=p1->ord_amt;grade=p1->grade;printf("%s成功退票!\n",p1->name);free(p1);}info->order=head;f=(info->wait).front;r=(info->wait).rear;t=f;while(t){if(info->tkt_sur=info->wait.front->req_amt){int i;info->wait.front=t->next;printf("%s订票成功!\n",t->name);for(i=0;i<t->req_amt;i++)printf("%s的座位号是:%d\n",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;}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:%d\n",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;struct airline t,*info,*p,*q;p=info=air;for(p=info;(p+1)->tkt_sur;p++)for(q=p+1;q->tkt_sur;q++){if(p->tkt_sur<q->tkt_sur){t=*p;*p=*q;*q=t;}}printf("终点站\t\t航班号\t飞机号\t飞行日期\t载客量\t余票量\t票价格\t折扣\n"); for(j=0;j<MAXSIZE;j++){display(info);info++;}}int menu_select(){ int c;char s[20];printf("\n *航空客运订票系统*\n");printf("**************************************************************\n");printf(" 1.浏览航线信息 2.浏览已订票客户信息\n");printf(" 3.查询航线 4.办理订票业务\n");printf(" 5.办理退票业务 6.查看剩余票数并排序\n");printf(" 0.退出系统\n");printf("*********************************************************** *********************\n");do{printf("请选择:");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();break;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();}}电子信息工程学院数据结构课程设计指导教师评分表。

相关主题