航空订票系统实习报告_第1页
航空订票系统实习报告_第2页
航空订票系统实习报告_第3页
航空订票系统实习报告_第4页
航空订票系统实习报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

实习报告 航空订票系统题目:航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。需求分析在测试程序中要求可以在用户端录入航班情况,包括:终点站点、航班号、飞机日期、航班票价、票价折扣、成员定额、余票量。要求程序能执行的命令:查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票;退票:可退票,退票后修改相关数据文件;客户资料:有姓名,证件号,航班情况,订单要有编号;修改航班信息:当航班信息改变可以修改航班数据文件。作为示意系统,全部数据只放在内存中,不存入硬盘。测试数据:、概要设计为实现上述程序功能,需要定义以下抽象数据类型。航班链表的抽象数据类型定义为ADTFlight{ 数据对象:D={to,FlightNumber,FlightDay,leave,arrive,prize,discount,capacity,booknum,*next|*next∈Flight}数据关系:R1={<fi-1,fi>|fi-1,fiÎD,i=2,3,...,N} 基本操作:InitList(&f) 操作结果:构造一个带头结点的空链表。AddToList(&f) 初始条件:链表f已存在。操作结果:构造一个空的单元加到链表中。LocateFlight(&f,a[])初始条件:链表f已存在,a[]为要寻找的航班的航班号。操作结果:返回找到航班的位序。若所寻航班不存在,则返回值为0。DestroyFlight(&f,&f0)初始条件:航班结点f已存在,f0为航班链表的头结点。操作结果:销毁航班结点f。}ADTFlight顾客链表的抽象数据类型定义为ADTCustomer{数据对象:D={name,ID,BookNumber,*fi,*next|*fi∈Flight,*next∈Customer}数据关系:R1={<ci-1,ci>|ci-1,ciÎD,i=2,3,...,N} 基本操作:InitCList(&c)操作结果:构造一个带头结点的空链表。AddCToList(&c1)操作结果:构造一个空的单元加到链表中。LocateCustomer(&c,a[]) 初始条件:链表f已存在,a[]为要寻找的订单号。 操作结果:返回找到订单的位序。 若所寻订单不存在,则返回值为0。DestroyCustomer(&c,&c0){ //初始条件:顾客结点c已存在,c0为顾客链表的头结点。 //操作结果:销毁顾客结点c。本程序包含三个模块:主程序模块:voidmain(){航班链表初始化;顾客链表初始化;进入mainmenu;}mainmenu模块——进入主页面进行选择;子程序模块——包括InputFlight模块、ModifyFlight模块、look模块、book模块、cancel模块各模块之间的调用关系如下:主程序模块mainmenu模块子程序模块(InputFlight模块、ModifyFlight模块、look模块、book模块、cancel模块)三.详细设计航班链表structFlight //航班链表(带头结点){ charto[N];//目的地 charFlightNumber[N];//航班号 DateFlightDay;//飞行日期 Timeleave;//起飞时间 Timearrive;//降落时间 intprize;//票价 intdiscount;//票价折扣 intcapacity;//成员定额 intbooknum;//订票数 Flight*next;};typedefFlight*flight;StatusInitList(flight&f){//操作结果:构造一个带头结点的空链表 f=(flight)malloc(sizeof(Flight)); f->booknum=0;f->next=NULL;}StatusAddToList(flight&f1){ //初始条件:链表f1已存在 //操作结果:构造一个空的单元加到链表中 flightf2;InitList(f2);f1->next=f2;f1=f2;}intLocateFlight(flight&f,chara[]){ //初始条件:链表f已存在,a[]为要寻找的航班的航班号 //操作结果:返回找到航班的位序 //若所寻航班不存在,则返回值为0 i=0;flightp=f->next; while(p){ i++;if(strcmp(p->FlightNumber,a)==0) returni; p=p->next;} return0;}StatusDestroyFlight(flight&f,flight&f0){ //初始条件:航班结点f已存在,f0为航班链表的头结点 //操作结果:销毁航班结点f flightq=f0;while(q->next!=f) q=q->next;q->next=f->next;f=q;}顾客链表structCustomer//客户资料{ charname[N];//姓名 charID[20];//证件号 charBookNumber[20];//订单号 Flight*fi;//航班信息 Customer*next;};typedefCustomer*customer;StatusInitCList(customer&c){//操作结果:构造一个带头结点的空链表 c=(customer)malloc(sizeof(Customer));c->next=NULL;}StatusAddCToList(customer&c1){//操作结果:构造一个空的单元加到链表中 customerc2;InitCList(c2); c1->next=c2;c1=c2;}intLocateCustomer(customer&c,chara[]){ //初始条件:链表f已存在,a[]为要寻找的订单号 //操作结果:返回找到订单的位序 //若所寻订单不存在,则返回值为0 i=0;customerp=c->next; while(p){ i++; if(strcmp(p->BookNumber,a)==0) returni; p=p->next;}}StatusDestroyCustomer(customer&c,customer&c0){ //初始条件:顾客结点c已存在,c0为顾客链表的头结点 //操作结果:销毁顾客结点c customerq=c0;while(q->next!=c) q=q->next; q->next=c->next;c=q;}主函数与其它函数的伪码算法voidmain(){ //主函数 flightff,f0;InitList(ff);f0=ff;//为航班链表初始化,f0为航班链表的头结点customercc,c0;InitCList(cc);c0=cc;//为顾客链表初始化,c0为顾客链表的头结点 head();mainmenu(ff,f0,cc,c0);}voidhead(){ //打印标题}voidmainmenu(flight&f,flight&f0,customer&c,customer&c0){ //打印主菜单}Statusmainchoice(flight&f,flight&f0,customer&c,customer&c0){ //主菜单选择项 scanf(a); //输入选择 switch(a) //进入子模块 { case1:InputFlight(f,f0,c,c0);break; case2:ModifyFlight(f,f0,c,c0);break; case3:look(f,f0,c,c0);break; case4:book(f,f0,c,c0);break; case5:cancel(f,f0,c,c0);break; case6:returnERROR; //退出系统 default:mainchoice(f,f0,c,c0); //输入有误,重新输入 }}StatusInputFlight(flight&f,flight&f0,customer&c,customer&c0){ //录入航班函数 AddToList(f); //增加一班航班 scanf(f->FlightNumber);scanf(f->to); scanf(f->FlightDay.year);scanf(f->FlightDay.month); scanf(f->FlightDay.day);scanf(f->leave.hour); scanf(f->leave.minute);scanf(f->arrive.hour); scanf(f->arrive.minute);scanf(f->prize); scanf(f->discount);scanf(f->capacity);}StatusModifyFlight(flight&f,flight&f0,customer&c,customer&c0){ chara[N];scanf(a); inti=LocateFlight(f0,a); //搜索需修改的航班在链表中的位序 if(i!=0) { printf("1.修改目的地2.修改飞行日期3.修改起飞时间4.修改降落时间5.修改航班票价6.修改航班折扣7.删除此航班"); scanf(d); switch(d) { case1:{for(intj=0;j<N;j++) f->to[j]=0;scanf("%s",f->to);break;} case2:{scanf(f->FlightDay.year);scanf(f->FlightDay.month);scanf("%d",&f->FlightDay.day);break;} case3:{scanf(f->leave.hour);scanf(f->leave.minute);break;} case4:{scanf(f->arrive.hour);scanf(f->arrive.minute);break;} case5: {scanf(f->prize);break;} case6:{scanf("%d",&f->discount);break;} case7:{j=0;flightp=f0;while(j<i){j++;p=p->next;} DestroyFlight(p,f0);} } }}Statuslook(flight&f,flight&f0,customer&c,customer&c0){ chara[N];scanf(a); i=LocateFlight(f0,a); //搜索需修改的航班在链表中的位序 if(i!=0) { j=0;flightp=f0;while(j<i){j++;p=p->next;} //找到该航班 printf(p->FlightNumber); printf(p->to); printf(p->FlightDay.year,p->FlightDay.month,p->FlightDay.day); printf(p->leave.hour,p->leave.minute); printf(p->arrive.hour,p->arrive.minute); printf(p->prize);printf(p->discount*10); printf(p->capacity,(p->capacity-p->booknum)); }}Statusbook(flight&f,flight&f0,customer&c,customer&c0){ AddCToList(c); //增加新顾客 scanf(c->name);scanf(c->ID);scanf(c->BookNumber); chara[N];scanf(a); i=LocateFlight(f0,a); //搜索航班在链表中的位序 if(i==0){DestroyCustomer(c,c0);} else { j=0;flightp=f0; while(j<i){j++;p=p->next;} //找到该航班 if(((p->capacity)-(p->booknum))>=1) //若余票多于1张 {(p->booknum)++;c->fi=p; //订票数增1 printf(付费p->prize*p->discount/10);} else{DestroyCustomer(c,c0);} }}Statuscancel(flight&f,flight&f0,customer&c,customer&c0){ chara[20];scanf(a); i=LocateCustomer(c0,a); //搜索需修改的航班在链表中的位序 if(i!=0) { j=0;customerp=c0; while(j<i){j++;p=p->next;} //找到该顾客 flightq=p->fi;(q->booknum)--; //订票数减1 DestroyCustomer(p,c0); }}函数的调用关系图反映了演示程序的层次结构:四.调试分析由于航班数未定,所以更适合用链表处理此问题。在Customer结构体中设置的航班信息,开始没有用指针处理,导致程序运行出错,总结可得,用指针处理,可使程序更为简便,运行顺畅。算法的时空分析对于航班链表的操作函数InitList与AddToList的时间复杂度分别为O(1),LocateFight与DestroyFlight函数的时间复杂度均为链表长度;对于顾客链表的操作函数与航班链表类似。录入函数InputFlight的时间复杂度为O(1),函数ModifyFlight与look的时间复杂度为航班链表长度,函数book与cancel的时间复杂度为顾客链表长度。五.用户手册本程序的运行环境为DOS操作系统,执行文件为main

温馨提示

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

评论

0/150

提交评论