当前位置:文档之家› 航空客运订票系统

航空客运订票系统

洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目航空客运订票系统专课程设计任务书设计题目:航空客运订票系统__________________________________ _________________________________________________________ 设计内容与要求:内容:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

课程设计评语成绩:指导教师:_______________年月日目录一.问题描述 (2)二.基本要求 (2)三.数据结构 (2)四.总体设计 (3)五.详细设计 (4)5.1录入功能 void lurugongneng() (4)5.2查询功能 void chaxungongnen() (4)5.3订票功能 void dingpiaogongnen() (6)5.4退票功能 void tuipiaogongnen() (7)5.5修改功能 void xiugaigongnen() (8)六.测试与调试 (9)6.1 程序的模块 (9)6.2 程序的调试 (9)6.3 测试结果 (9)七.源程序清单 (16)一.问题描述通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件二.基本要求根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

三.数据结构typedef struct Yidingkehu //单链表{char name[15];//已订票的客户姓名char ID[15];//已订票的客户证件号int dingpiaoshu;//已订票数量struct Yidingkehu *next1;}Yidingkehu,*Link;typedef struct Weidingkehu//单链队{char name[15];//预订票的客户姓名char ID[15];//预订票的客户证件号int yudingpiao;//要订票数量struct Weidingkehu *next2;//下一个链队结点指针}Weidingkehu,*Qptr;typedef struct{Qptr front;//单链队头结点Qptr rear;//单链队尾结点}linkQueue;typedef struct Hangxian//创建一个航线的结构体{char hangbanhao[15];//航班号char feijihao[15];//飞机号int qifeishijian;//起飞时间int jiangluoshijian;int level;//仓位int yupiao;//余票int piaojia;//票价int zhekou;//折扣char zhongdianzhan[15];//降落城市struct Hangxian *next;//指向下一个链结点的指针struct Yidingkehu *yiding;//定义一个指向已订票客户的头结点指针struct Weidingkehu *yudingqueue;}Hangxian,*Linklist;四.总体设计五.详细设计5.1录入功能 void lurugongneng()通过调用Linklist InitLinklist()和int InsertLinklist(Linklist &L)函数录入航线信息,通过1或者2来控制是否继续输入,输入的航线信息包括航班号,飞机号,终点站,起飞时间,降落时间,仓位,票价,折扣和余票数。

5 .2查询功能 void chaxungongnen()查询分为按目的地查询和按航班号查询,通过void chaxungongnen()函数调用voidmddchaxun()//通过目的地查询函数和void hbhchaxun()//通过航班号查询函数。

通过n控制功能选择,通过输入的目的地和航班号查询是否有该航班信息,若找到,则输出该航班信息,否则提示用户没找到,退出。

5.3订票功能 void dingpiaogongnen()定义Linklist类型的L来指向链表头Yidingkehu *h=H,*h1定义客户的结点,方便插入与删除,int m=1,piao,n(票数); int ydpiao=0,yd=0; 订票时输入终点站,,如果找到,输入用户姓名,证件号和票数,如果余票不足,提醒用户重新订票,否则订票成功,否则提示用户无此航班。

5.4退票功能 void tuipiaogongnen()int m=1,piao定义相应变量,通过输入航班号查找是否有退票的航班,如果有,输出该航班的信息并输入用户的姓名和订票数,如果符合,使余票数减一,退票成功,如果没有,提示用户输入有误,退出。

5.5修改功能 void xiugaigongnen()定义Linklist p=L;int m,输入要修改的飞机号,如果找到,输出该航班信息并且输入修改后的航班信息,如果没找到,提示用户无此航班,退出。

六.测试与调试6.1 程序的模块录入功能:原始数据的输入。

查询功能:根据客户需要,查询相关航线。

订票功能:满足客户的订票任务。

退票功能:根据客户的不同情况,支持客户的退票请求。

修改功能:根据要求修改航班信息。

退出功能:退出系统。

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

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

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

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

运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果,说明程序具有一定的可靠性和稳定性。

6.3 测试结果图 6-1 录入功能图 6-2 通过目的地查询图 6-3 通过航班号查询图 6-4 订票功能图 6-5 退票功能图 6-6 修改功能七.源程序清单#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#define ok 1typedef struct Yidingkehu //单链表{char name[15];//已订票的客户姓名char ID[15];//已订票的客户证件号int dingpiaoshu;//已订票数量struct Yidingkehu *next1;}Yidingkehu,*Link;typedef struct Weidingkehu//单链队{char name[15];//预订票的客户姓名char ID[15];//预订票的客户证件号int yudingpiao;//要订票数量struct Weidingkehu *next2;//下一个链队结点指针}Weidingkehu,*Qptr;typedef struct{Qptr front;//单链队头结点Qptr rear;//单链队尾结点}linkQueue;typedef struct Hangxian//创建一个航线的结构体{char hangbanhao[15];//航班号char feijihao[15];//飞机号int qifeishijian;//起飞时间int jiangluoshijian;int level;//仓位int yupiao;//余票int piaojia;//票价int zhekou;//折扣char zhongdianzhan[15];//降落城市struct Hangxian *next;//指向下一个链结点的指针struct Yidingkehu *yiding;//定义一个指向已订票客户的头结点指针struct Weidingkehu *yudingqueue;}Hangxian,*Linklist;struct Hangxian *L=NULL;//定义全局量struct Yidingkehu *H;//为已订票客户链队来申请空间linkQueue Q; //linkQueue类型的来申请空间Linklist InitLinklist();//声明int InsertLinklist(Linklist &head1);//声明void hbhchaxun();//通过航班号查询void mddchaxun(); //通过目的地查询void lurugongneng();//初始化录入功能void chaxungongnen();//查询功能void dingpiaogongnen();//订票功能void tuipiaogongnen();//退票功能void xiugaigongnen();//修改功能void main(){H=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));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("\t++++++++++++++++++++++++++++++\n");printf("\t请选择:");scanf("%d",&n);printf("\n");switch(n){case 1: lurugongneng();break; //录入功能case 2: chaxungongnen(); break; // 查询功能case 3: dingpiaogongnen(); break; // 订票功能case 4: tuipiaogongnen();break;//退票功能case 5: xiugaigongnen();break; //修改功能default :exit(0);}}while(n==1||n==2||n==3||n==4||n==5);}void lurugongneng(){int j=1,m;do{if(!InsertLinklist((Linklist) L))//向其中加入航班信息{printf("内存已满\n");exit(OVERFLOW);}//向链表中加一结点printf("\t是否要输入下一个航线记录?\n");printf("\t是请输入1\n");printf("\t否请输入2\n\t");scanf("%d",&m);//在这里依靠人来决定是否输入下一条航线记}while(m==1);}Linklist InitLinklist(){L=(Linklist)malloc(sizeof(Hangxian));if(!L) exit(OVERFLOW);L->next=NULL;//建立一个带有头结点的单链表return (L);}int InsertLinklist(Linklist &L)//向航线链表添加新的结点{Linklist p;p=(Linklist)malloc(sizeof(Hangxian));//为一个新的结点分配空间if(!p) exit(OVERFLOW);printf("\t请依次输入下面几项内容:\n\n");printf("航班号:");scanf("%s",p->hangbanhao);printf("飞机号:");scanf("%s",p->feijihao);printf("终点站:");scanf("%s",p->zhongdianzhan);printf("起飞时间:");scanf("%d",&p->qifeishijian);printf("降落时间:");scanf("%d",&p->jiangluoshijian);printf("仓位:");scanf("%d",&p->level);printf("票价:");scanf("%d",&p->piaojia);printf("折扣:");scanf("%d",&p->zhekou);printf("余票数:");scanf("%d",&p->yupiao);p->yiding=(Yidingkehu*)malloc(sizeof(Yidingkehu));//为它申请空间p->yudingqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));//为它申请空间p->next=L->next;L->next=p;//链表中的插入一个结点return (ok);}void chaxungongnen(){int n;printf("\t 查找航班信息 \n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t==>1. 通过目的地查询 ==\n");printf("\t==>2. 通过航班号查询 ==\n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t请选择:");scanf("%d",&n);switch(n){case 1:mddchaxun(); break;case 2:hbhchaxun(); break;default :break;}}void mddchaxun()//通过目的地查询{char c[15];Linklist p=L;int m;printf("\t请输入要查询的目的地:");scanf("%s",c);do{p=p->next;if(p){if(strcmpi((*p).zhongdianzhan,c)==0){printf("\t*航班信息*\n");printf("\t飞机号:%s\n",p->feijihao);printf("\t起飞时间:%d\n",p->qifeishijian);printf("\t降落时间:%d\n",p->jiangluoshijian);printf("\t余票:%d\n",p->yupiao);printf("\t票价:%d\n",p->piaojia);printf("\t折扣:%d\n",p->zhekou);break;}}else //如果不匹配的话{printf("\t对不起没有你要找的目的地:\n");m=0;}}while(m!=0);}void hbhchaxun()//通过航班号查询{char c[15];Linklist p=L;int m;printf("\t请输入要查询的航班号:");scanf("%s",c);do{p=p->next;if(p){if(strcmpi((*p).hangbanhao,c)==0){printf("\t*航班信息*\n");printf("\t航班号:%s\n",p->hangbanhao);printf("\t飞机号:%s\n",p->feijihao);printf("\t起飞时间:%d\n",p->qifeishijian);printf("\t降落时间:%d\n",p->jiangluoshijian);printf("\t余票:%d\n",p->yupiao);printf("\t票价:%d\n",p->piaojia);printf("\t折扣:%d\n",p->zhekou);break;}}else //如果不匹配的话printf("\t对不起没有你要找的航班号:\n");m=0;}}while(m!=0);}void dingpiaogongnen(){int i;Linklist p=L;//Linklist类型的L来指向链表头Yidingkehu *h=H,*h1;//Yidingkehu 定义客户的结点,方便插入与删除linkQueue q=Q;//linkQueue类型的来,方便插入与删除struct Weidingkehu *q3;char c[15];int m=1,piao,n;int ydpiao=0,yd=0;printf("请输入终点站名:\n");scanf("%s",c);p=L->next;if(p){do//查找一下,是否有这个航班{if(!p){printf("对不起没有你要找的航班:\n\n");}m=strcmpi(p->zhongdianzhan,c);//通过比较来判定if(m==0){printf("\t*航班信息*\n");printf("\t航班号:%s\n",p->hangbanhao);printf("\t飞机号:%s\n",p->feijihao);printf("\t起飞时间:%d\n",p->qifeishijian);printf("\t降落时间:%d\n",p->jiangluoshijian);printf("\t余票:%d\n",p->yupiao);printf("\t票价:%d\n",p->piaojia);printf("\t折扣:%d\n",p->zhekou);break;}else p=p->next;}while(m!=0);if(m==0) //当有该航班时,进行订票do{printf("\n请输入你要定的票数:\n");scanf("%d",&piao);if(piao<=p->yupiao){h=p->yiding;if(h){h1=h;h=h->next1;h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));for(i=0;i<piao;i++){printf("请输入你的名字:\n");scanf("%s",h->name);printf("请输入你的证件号:\n");scanf("%s",h->ID);h->dingpiaoshu=piao;h->next1=h1->next1;h1->next1=h;p->yupiao=p->yupiao-piao;printf("订票成功\n编号为%s\n",h->ID);}m=2;}}else //余票量不足时{printf("余票量:%d\n",p->yupiao);printf("对不起,余票%d张不足,不能完成订票\n",p->yupiao);printf("是否要重新订票?\n");printf("需要请输入1 否则请按2 预定请输入3 : \n");scanf("%d",&m);while(m==3){printf("对不起,该航班的票已售完\n");q.front=p->yudingqueue;if(q.front==q.rear)printf("没有人预定票,是否要预定?\n");else if(q.front!=q.rear)printf("已有人预定票,是否要预定?\n");printf("预定请输入1 否则请输入2 : \n");scanf("%d",&n);{q3=(Qptr)malloc(sizeof(Weidingkehu));printf("请输入你的姓名\n");scanf("%s",q3->name);printf("请输入你的证件号:\n");scanf("%s",h->ID);printf("请输入订票数\n");scanf("%d",&q3->yudingpiao);q3->next2=NULL;q.rear->next2=q3;q.rear=q3;printf("你已经预定了!\n");break;}}}}while(m==1);}}}void tuipiaogongnen(){Linklist p=L;Yidingkehu *h=H,*h1,*h2;//linkQueue q=Q;char c[15],name1[15];int m=1,piao;//定义相应变量printf("请输入航班号:\n");scanf("%s",c);p=L->next;if(p){do//使用do while来查找是否有此航班{if(!p) // 如果是到了表尾且没有匹配{printf("\n对不起,没有你要找的航班:\n");}if(strcmpi(p->hangbanhao,c)==0)//比较航班号输出信息{printf("\t*航班信息!*\n");printf("\t飞机号:%s\n",p->feijihao);printf("\t起飞时间:%d\n",p->qifeishijian);printf("\t降落时间:%d\n",p->jiangluoshijian);printf("\t余票:%d\n",p->yupiao);printf("\t票价:%d\n",p->piaojia);printf("\t折扣:%d\n",p->zhekou);m=0;}else p=p->next;}while(m!=0);if(m==0) //如果找到了,就来给他退票{do{h=p->yiding;if(h){printf("请输入你的姓名:\n");scanf("%s",name1);printf("请输入你定的票数:\n");scanf("%d",&piao);h1=h;h=h->next1;if(strcmpi(h->name,name1)==0&&h->dingpiaoshu==piao)//如果名字和订的票数相等,则就给他取消订票{p->yupiao+=h->dingpiaoshu;h2=h;h1->next1=h->next1;free(h2);printf("你取消订票成功\n");break;}}}while(m==1);}}}void xiugaigongnen(){char c[15];Linklist p=L;printf("\t请输入要修改的飞机号:");scanf("%s",&c);do{p=p->next;if(p){if(strcmpi((*p).feijihao,c)==0){printf("\t*航班信息*\n");printf("\t航班号:%s\n",p->hangbanhao);printf("\t飞机号:%s\n",p->feijihao);printf("\t起飞时间:%d\n",p->qifeishijian);printf("\t降落时间:%d\n",p->jiangluoshijian);printf("\t余票:%d\n",p->yupiao);printf("\t票价:%d\n",p->piaojia);printf("\t折扣:%d\n",p->zhekou);printf("\n\n");printf("修改为:");printf("\t请依次输入下面几项内容:\n\n");printf("航班号:");scanf("%s",p->hangbanhao);printf("飞机号:");scanf("%s",p->feijihao);printf("终点站:");scanf("%s",p->zhongdianzhan);printf("起飞时间:");scanf("%d",&p->qifeishijian);printf("降落时间:");scanf("%d",&p->jiangluoshijian);printf("仓位:");scanf("%d",&p->level);printf("票价:");scanf("%d",&p->piaojia);printf("折扣:");scanf("%d",&p->zhekou);printf("余票数:");scanf("%d",&p->yupiao);p->yiding=(Yidingkehu*)malloc(sizeof(Yidingkehu));p->yudingqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));p->next=L->next;printf("\t修改成功!\n");break;}}else{printf("\t对不起没有你要找的目的地:\n");m=0;}}while(m!=0);}。

相关主题