数据结构课程设计航空订票系统 下载_第1页
数据结构课程设计航空订票系统 下载_第2页
数据结构课程设计航空订票系统 下载_第3页
数据结构课程设计航空订票系统 下载_第4页
数据结构课程设计航空订票系统 下载_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计——订票系统目录总设..................................................................................................................................................概设..................................................................................................................................................详设..................................................................................................................................................调分................................................................................................................................................测试数据及图................................................................................................................................时间复杂度析................................................................................................................................问题思考............................................................................................................................................算法的改进想................................................................................................................................课总体........................................................................................................................................15附........................................................................................................................................................17程序说明............................................................................................................................................源代码...............................................................................................................................................17主参文........................................................................................................................................30第1页

共30页

数据结构课程设计——订票系统总体设计通过此系统可以实现如下功能:入可以录航班情况(数据存储在一个数据文件中)询可以查某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓可以输入起飞抵达城市,查询飞机航班情况;票票情存在一个数据文件中)可以订票,如果该航班已经无票,可以提供相关可选择航班;票可退票退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。改班信息当航班信息改变可以修改航班数据文件概要设计主函数录入航线信息

浏览航线信息

修改航线信息

查询航线信息

办理订票业务

办理退票业务

退出系统将航线信息和乘客信息写入文件提供两方:添加航班和对已有的航班信息进行改动(修改和删除添航线,0对有的航班信息进行改动(修改和删除对已有的航班信息进行改(修改和删除提供两种查方式:按航号和起飞抵达城市查询0代表按航号查询,代表按起飞抵达第2页

共30页

数据结构课程设计——订票系统城市查询。飞抵达城(详细设计开始Np!=NULLY所指向的航信息写入文件

N

开始p!=NULLYp=p->next

结束

p=p->nextq!=NULLY

N将航线息写入文件

将q所指向的乘客信息写入文件q=q->next结束将乘客息写入文件第3页

共30页

数据结构课程设计——订票系统开始设置管理员密码NY输入

Y

进入录入航线

文件操作N

Y

进入浏览航线N

Y

Y

Y

进入修改航线

文件操作N

N

Y

Y

进入查询航线

文件操作N

N

Y

Y

进入订票

文件操作N

N

Y

进入退票

文件操作结束

NYN提示没有您选择的操作主数

第4页

共30页

开始参数H入输入要插入的信息

数据结构课程设计——订票系统开始传入参数H输入要查找的信息sp->next=H->next结束插入操开始传入参数H输入要修改的信息查找p输入p修改后信息结束修改操

p=p->next

N

NYYq=p结束查找操开始传入参数H输入要删除的信息p查找并记p前一个点q->next=p->next释放p的空间结束删除操第5页

共30页

数据结构课程设计——订票系统开始初始化

开始N

N

p=!NULLi<nY输入i航班信息将信息插入链表中

结束

ˆY输出航线信息p=p->next结束录操

浏操开始输入订单编号查找此编号所在航班

说明:此流程图中的查找编号所在的航班为上面已画出的查找操作的流程是否找到此航班

Y

删除此编号N

N此航班是否有等候订票乘客Y通知等候订票乘客进入订票

余票量加退票乘客的退票量退操

结束第6页

共30页

说明:为选择添加航线操作还是改动航班信息

数据结构课程设计——订票系统开始参数H入并输入密码S为添加航班信息c=0时为改动航班信息。d选择修改航班信

Y

N息操作还是删除航班信息,为修改航班信息,

输入d=1为删除航班信息

YN

N输入添加的航线条数n

Y输入di=0

Yi<n

N

NY输入航班信息将

d=0Y

N其插入链表中

输入要修改的航班条数i=0

输入要修改的航班条数ni<n

N

i=0Y输入要修改的航班信息

i<nY

N查找此航班修改此航班信息

输入要删除的航班信息查找此航班删除此航班修改航信息

结束第7页

共30页

数据结构课程设计——订票系统开始选择查询方式cNc=0||c=1YNY输入查询的航班号查找航班输出航班号的详细信息k=0

说明:此流程图中的查找航班为上面已画出的查找操作的流程输入起飞和抵达的城市查找航班输出航班信息YK=0N进入Dinpiao(H)结束查操第8页

共30页

数据结构课程设计——订票系统开始输入订票日期和航班号查找此日期和航班记为

说明:此流程图找的查找航班和修改航班的相关数据分别为上面已画出的查找操作和修改操作的流程。Y是否找到

N

是否重输信

NY是否有余票Y输出余票量输入订票量cY修改此航班的相关数据输出此订单的编号

NN

查找与p班到达相同目的地并且在这个月的航班输出这些航班信息是否有想订票的航班Y

N将此乘客的信息填入航班等候乘客队列中结束订操第9页

共30页

数据结构课程设计——订票系统开始参数H、t、j传入

NN

J=1?Y将航线信息写入文件

Y将乘客信息写入文件结束文件操由于此系统流程图太多,流程图所对应的源代码较长,所占篇幅也较大,并且流程图所对应的源程序在订票系统源程序中都有,这里就不再赘述要明的是插入查找、修改和删除这些线性表的基本操作的流程图在订票系统源程序中没有单独函数此系统主要是运用线性表的基本操作解决实际问题体问题所对应的基本操作代码有所不同思维是相同的以这几个操作的源代码已经对应写入了其他具体操作的函数中里不再给出。根据订票系统功能的需要定义了如下的结构体:struct/*候订票乘客的信息*{name[20];/*姓名*phone[15];/*等候订乘客的联系方式*struct*next;struct{front;/*等候替补客户名单域的头指针*等候替补客户名单域的属指针*}linkqueue;structord_ros{name[20];/*客户姓名*IDnum[20];/*客户有效证件的编号*airnum[7];/*航号*int订票量*piaohaio[20];//的编号,由航班号起飞日期此航班订票前的余票量structord_ros*next;}Lnodestructairline{起点站名*终点站名*/航班号*第10

共30页

数据结构课程设计——订票系统飞机型号*year[5];month[3];day[3];/*飞日期*qhour[3];qminute[3];/*起时间*jhour[3];jminute[3];/*降时间*floatzhekou;/*有折扣为十折*floatprice;/*价*inttkt_amt;/*乘员定额*int余票量*Lnode*order;/*航班乘客名单域,指向乘客名单链表的头指针*linkqueue*wait;/*本航班等候替的客户名单域,分别指向排队等候名单队头队尾的指针*structairline指向下一个结点*}lineinfo,*lineair;调试分析测数及图第11

共30页

数据结构课程设计——订票系统第12

共30页

数据结构课程设计——订票系统第13

共30页

数据结构课程设计——订票系统第14

共30页

数据结构课程设计——订票系统时复度析录入为线性表的初始化,所以时间复杂度)浏览遍历整张线性表所以时间复杂度修改航班信息为线性表的查找、线性表的插入和线性表的删除操作,其平均移动元素个数分别为n+1)、n/2、,所以时间杂度On);查询为线性表的查找,所以时间复杂度(订票为线性表的查找所以时间复杂度退票是查找两张线性表,所以时间复杂度n*e);其中的航班总数e为应航班已定票人数。问思(1在事先就把航班信息写入文件,从文件中获取信息,但取数时怎样控制文件指针,也就是怎样取数的问题。(2输入密码时像平时在上网登录某一账号时输入密码一样显示*********(3管理员能够在系统上浏览乘客信息。解决第一个问题需要在读取文件信息时与灵活运用文件的指针的定位,在写入文件信息需严格按照一定的格式,不然文件指针不好定位;解决第二个问题用不回显接收函数getch(),然后调用printf()数打印出一号;第三个问题只需在浏览操作时,设立一个管理员入口,输入管理员密码就对每条航线的乘客信息进行遍历,并把每条航班和对应的乘客信息输出。算的进想(1)在算法效率,由于此课程计所用到的是线性表的建立、查找、插入、删除和队列的建立插、删除,所涉及是查找和排序问题,所以可以在建立插入时按照起飞和抵达城市进行排序若起飞和抵达市相同则再按日期进行排序找时采用分块查找当然要实现这些操作,对航班信息的存储应采指针数组存储。(2)在函数重组,把处理不同题相同算法思想(如线性表的插入、删除、查找等等写一个函数中其他函数用到这种操作时只需调用这些函数少整个程序的代码量,方便理解、阅读和使用。课设总结会此次课程设计我们组选了订票系统这个选题了实现某个功能须使用相应的结构体们先在网上搜索了几套人所做订票系统的课程设计了下他们所定义的结构体和我们课程设计选题所要实现的功能他们的结构体相对于我们的选题来说还是有一定的缺陷。我们的选题主要运用线性结构来存储数据,进行线性表、队列的一些基本操作。根据选题要实现的功能和链式存储结构的优点最终决定队列和线性表都采用链式存储结构存储,并定义相应的结构体。在敲源代码时航结构体的已定票乘客信息和等待订票乘客信息的结构不太好操作经过一番思考最终改为源码中所定义的结构体中道了结构体的定义决定了源程序的难易。在打程序时没有把文件操作的码打进源程序调试没有文件操作的代码时有很多错误但犯了一个大错就是在有一个字符串的复制中使用了赋值调试过程指出错错误半天都不知道改来了个程序才反应过来运行调试过程中浏览信息没有输出第15

共30页

数据结构课程设计——订票系统想要的输出结果查序原来格式控制字符串中的一个字符打成了大写询信息只能查询链表中的第一条航线,检查程序原来是多用了break造过早跳出循环,不能查找后面的航线客多张票后浏览信发现余票只减了一张查序发现乘客订票后只对余票做了自减在运行调试过程中就现了这么些大的错误这过程中还对输出窗口界面做了一些调整。加入文件操作代码后进行调试有现什么错误终运行时老在文件操作时终止程序经调试和自己的摸索原来是文件检测函数运用错误正后程序正常运行运行程序后打开所写的文件发航班信的余票量没有随乘客的订票而减少还是初始值这才发现每进行一次订票后都要重新对航班信息的文件重新写入,改后最终就确定了上交源代码。在敲代码和在程序的调试行程中我们发现我们半天才能想出几句语句个码敲了二十几个小时调调了二十个小时主要原因使我们练得还不够C言功底还不是很扎实,要增加敲的代码量。数据结构是为了解决实际问题出一些结构些东西是我们以后解决一些问题时所要用到的,所以一定要熟练掌握,要多敲代码。此次课程设计我们对链表和链队列的基本操作更加熟练我深深地体会到要学好数据结构需要多练。第16

共30页

数据结构课程设计——订票系统附录程说此课程设计程序无需安装,只需打开在V编译、连、运行即可。程序的源代码在本模块中。源码#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructwat_ros等订票乘客的信*{charname[20];/*名charphone[15];/*等候订票乘客的联系方*structwat_ros*next;}qnode,*qptr;typedefstructpqueue{front;/*等补客户名单的头指*rear;/*等候替补客户名域的属指*/}linkqueue;typedefstructord_ros{charname[20];/*户姓*charIDnum[20];/*客户有效证件的编*char航班号/intdpl;/*票量*char票的编号,由航班号起日期此航班订票前的余票量structord_ros}Lnode,*linklist;typedefstructairline{charqdname[20];/*点站*charzhname[20];/*终站名*/char航号/charplane_num[10];/*飞号/charcharmonth[3];char飞日*/charqhour[3];char起*charjhour[3];char降落时*floatzhekou;/*没有折扣为十*floatprice;/*票价*/inttkt_amt;/*乘定额*/inttkt_sur;/*票量*Lnode*order;/*本航班乘客名单域,指向乘客名单链表的指linkqueue本等候替补的客户名域,分别指向排队等候名单队头队尾的指*/structairline指下一个结*第17

共30页

数据结构课程设计——订票系统}lineinfo,*lineair;voidH)浏览航线*{lineinfo*p;p=H->next;航号起终机飞日期

起、降时间

票价折成员额余量n");while(p){%s%s%s%.2s:%.2s%.2s:%.2s%5.1f%3.1f%d\n",p->air_num,p->qdname,p->zhname,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_amt,p->tkt_sur);p=p->next;}}intGreatelist(lineair&H,intn)/*录入*/{charinti;lineinfo*p;if(!(H=(lineair)malloc(sizeof(lineinfo)))){分空间出错");a=getchar();return(0);}H->next=NULL;if(!(H->order=(linklist)malloc(sizeof(lineinfo)))){分空间出错");a=getchar();return}H->order->next=NULL;if(!(H->wait=(linkqueue*)malloc(sizeof(lineinfo)))){分空间出错");a=getchar();return}H->wait->rear=H->wait->front=NULL;printf("\n开录班信息\n");起终点航班机for(i=0;i<n;i++){

月日

起降时间折票价乘定\n");/*起时间和降落时间包含时*/if(!(p=(lineair)malloc(sizeof(lineinfo)))){printf("配空间出错);a=getchar();return}scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);第18

共30页

数据结构课程设计——订票系统p->tkt_sur=p->tkt_amt;if(!(p->order=(linklist)malloc(sizeof(lineinfo)))){printf("分空间出错");a=getchar();return}p->order->next=NULL;if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo)))){printf("分空间出错");a=getchar();return}p->wait->rear=p->wait->front=NULL;p->next=H->next;H->next=p;}return}intH)/*订*{intm,k=0,x,v=0,c=1,d;lineinfo*p,*t;Lnodecharqnodecharcharmonth[3];char飞日*/char航号/p=H->next;t=H->next;请入所定的航班号,票的年、、日\n");scanf("%s",air_num);scanf("%s",year);scanf("%s",month);scanf("%s",day);while(p){if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day))){c=0;if(p->tkt_sur){此班还有d张可订,请输入您要订票的张",p->tkt_sur);scanf("%d",&m);if(m<=p->tkt_sur){printf("您成功订d张!\n请输入您的姓名",m);if(!(q=(linklist)malloc(sizeof(Lnode)))){printf("分空间出"a=getchar();第19

共30页

数据结构课程设计——订票系统return}scanf("%s",q->name);printf("请入您的身份证号码:");scanf("%s",q->IDnum);q->dpl=m;if(!(b=(char*)malloc(sizeof(char)))){分空出");a=getchar();return}strcpy(q->airnum,p->air_num);itoa(p->tkt_sur,b,10);strcpy(q->piaohaio,p->air_num);strcat(q->piaohaio,p->year);strcat(q->piaohaio,p->month);strcat(q->piaohaio,p->day);您订的:%s",q->piaohaio);p->tkt_sur-=m;q->next=p->order->next;p->order->next=q;return}else{printf("对起余票量不够,请选择其他航班");k=1;}}if(!p->tkt_sur||k==1){printf("航已经满仓,您可以选择以下相关航班\n");while(t){if(!(strcmp(t->year,p->year))&&!(strcmp(t->month,p->month))&&!(strcmp(p->qdname,t->qdname))&&!(strcmp(p->zhname,t->zhname))&&p->tkt_sur){航号机飞行日期

起降时间票折余票量\n%s%s%s/%s/%s%5.1f%3.1f%d\n",t->air_num,t->plane_num,t->year,t->month,t->day,t->qhour,t->qminute,t->jhour,t->jminute,t->price,t->zhekou,t->tkt_sur);}t=t->next;}printf("有有您可以乘坐的航\t0没\t非0整有t请选择:");scanf("%d",&x);if(!x){请入的、联系方\n");if(!(s=(qptr)malloc(sizeof(qnode)))){第20

共30页

数据结构课程设计——订票系统分空出!a=getchar();return}scanf("%s",s->name);scanf("%s",s->phone);s->next=NULL;if(p->wait->front==NULL&&p->wait->rear==NULL)等候订队列为*/p->wait->rear=p->wait->front=s;else{s->next=p->wait->rear->next;p->wait->rear->next=s;p->wait->rear=s;}如有退我们会在第一时联系您\n");return}elsereturnDinpiao(H);}}p=p->next;}if(c){没您所指定的航班0菜栏非0数字重新输入航班号,票的年、月、\n");scanf("%d",&d);if(d)returnDinpiao(H);elsereturn}return}intH)/*查询*/{intm,k=1,t;lineinfo*p;charqdname[20];/*点站名/charzhname[20];/*终站名*char航号/p=H->next;输0按航班号查询,入1按起飞抵达城市查询,输入您的选择");scanf("%d",&m);while(m<0||m>1){请重新选,输0按号查询,输入1按抵达城市查询");scanf("%d",&m);}if(m){第21

共30页

数据结构课程设计——订票系统请别输入起飞抵达城市\n");scanf("%s",qdname);scanf("%s",zhname);机航班

飞行日期

起降时间

票价折余票\n");while(p){if(!(strcmp(p->qdname,qdname))&&!(strcmp(p->zhname,zhname))){%s%.2s:%.2s%.2s:%.2s%5.1f%3.1f%d\n",p->plane_num,p->air_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_sur);k=0;}p=p->next;}}else{请入要查询的航班号");scanf("%s",air_num);while(p){if(!(strcmp(p->air_num,air_num))){printf("机航班起飞城市抵达城市飞日

起降时间票价折余票量\n%s%s%s%s%.2s:%.2s%.2s:%.2s%5.1f%3.1f%d\n",p->plane_num,p->air_num,p->qdname,p->zhname,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_sur);k=0;}p=p->next;}}if(k){没您要查询的航线\n");return}else{有有您要订票的航班\n");do{printf("1有0没请:scanf("%d",&t);}while(!(t==1)&&!(t==0));returnDinpiao(H);elsereturn}}第22

共30页

数据结构课程设计——订票系统intH)//票{lineinfo*p;intm=0,t;Lnode*q,*f;charscanf("%s",b);p=H->next;while(p){q=p->order->next;if(!(strcmp(b,q->piaohaio))){m=1;p->order->next=q->next;t=q->dpl;free(q);break;}while(q->next){{m=1;f=q->next;t=f->dpl;q->next=f->next;free(f);break;}q=q->next;}if(m)break;p=p->next;}if(!m){对起没有搜索到您的订单,请新输入订单编号");Tuipiao(H);}else{您成功退票\n");p->tkt_sur+=t;if(p->wait->rear==p->wait->front)returnelse{//场订票系统服务人员马上通本次航班等候订票乘客通等候订票的乘客,通知成功按任意\n");returnDinpiao(H);}第23

共30页

数据结构课程设计——订票系统}}intAlter(lineairH,charb[])修航*{lineinfo*p,*q;charchara,s[20];charmonth[3];char飞日*/char航号/intc,i,n,d,r=0;请入密码:scanf("%s",s);if(strcmp(s,b)){输密码错误");return}do{printf("1添加航线对已有的航班信息进行改动(修改和除择");scanf("%d",&c);}while(c!=1&&!(c==0));if(c){请入您要添加航班的条");scanf("%d",&n);起终点航号机

月日

起降时间折价乘\n");/*飞间和降落时间包含时分/for(i=0;i<n;i++){if(!(p=(lineair)malloc(sizeof(lineinfo)))){printf("分空间出错!");a=getchar();return}scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);if(!(p->order=(linklist)malloc(sizeof(lineinfo)))){printf("分空间出"a=getchar();return}p->order->next=NULL;if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo)))){printf("配空间出"a=getchar();return}第24

共30页

数据结构课程设计——订票系统p->tkt_sur=p->tkt_amt;p->wait->front=NULL;p->wait->rear=p->wait->front;p->next=H->next;H->next=p;}已功添d条\}else{do{printf("1删除航班修改航班信息,请选择");scanf("%d",&d);}while(d!=1&&d!=0);if(d){请入要删除的航班条数");scanf("%d",&n);for(i=1;i<=n;i++){printf("请入d条除航班的航班号和飞行日期(、月、日scanf("%s%s%s%s",air_num,year,month,day);p=H->next;q=H;while(p){if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))break;q=p;p=p->next;}if(!p){没您删航线,请核对后进行删除\n");r++;}else{q->next=p->next;已功除d条航线n",n);free(p);}}if(r<n)returnelsereturn}else{printf("输入要修改航班要修改航班的条数");scanf("%d",&n);第25

共30页

数据结构课程设计——订票系统for(i=1;i<=n;i++){printf("请入d条改航班的航班号和此航班的飞日期(年、月、日\n",i);scanf("%s%s%s%s",air_num,year,month,day);p=H->next;while(p){if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))break;p=p->next;}if(!p){没您要修改的航线,请核对后进行修改\n");r++;}else{printf("请入此修改航班的航班信息\n");printf("起终点航班号机型年、日

起降时间

折扣票价乘员定\n");/*起飞时间和降落时间包含时/scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);printf("您成功修改了d条航线n",i);}}if(r<n)returnelsereturn}}}intFile(lineairt,intj)/*文件操*{inta=1,b=1,c=0;FILE*fp;lineinfo*p;Lnode{c=1;p=H->next;班信.txt","w");fprintf(fp,"%s%c%s%c%s%c%c%s%c%s%c%s%c%s%c%s%s%c%s%s%c%s%c%s%c%s%c%s%c","班号",32,"起",32,"点,32,32,"型",32,"年",32,"月,32,"日",32,"时","分",32,"时,"分",32,"价,32,"折",32,"定员",32,"余量",32);while(p){第26

共30页

数据结构课程设计——订票系统%c%c%d%c",'\n',p->air_num,32,p->qdname,32,p->zhname,32,p->plane_num,32,p->year,

温馨提示

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

评论

0/150

提交评论