数据结构报告_第1页
数据结构报告_第2页
数据结构报告_第3页
数据结构报告_第4页
数据结构报告_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

数据结构报告PAGEPAGE0目录一、航空客运订票系统基本要求 2二、问题描述 2三、需求分析 2四、概要设计 31、系统的抽象数据类型 32、程序中用到的库函数 33、程序的四大模块 44、函数间调用关系 45、算法设计:(每个模块的算法设计说明如下:) 56、存储结构设计: 5五、详细设计 71、主程序中需要的全程量 72.部分函数模块以及流程图: 71)主函数模块 72).录入信息函数模块: 93).查询航班信息函数模块 104).订票功能函数模块: 125).退票功能函数模块 146)显示信息函数模块: 16六、测试分析 171.数据测试 172.测试评价: 223.遇到的问题及解决方法 22七、数据结构实习心得体会 22八、参考文献: 24九、附录:源程序 24数据结构报告全文共40页,当前为第1页。数据结构报告全文共40页,当前为第1页。一、航空客运订票系统基本要求每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。系统能实现的操作和功能如下:查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。若需要,可登记排队候补;承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。实现提示:两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。由于预约人数无法预计,队列也应以链表作为存储结构。二、问题描述设计一个航班信息查询与订票系统程序,要求设计航班信息,订票信息的存储结构,并实现以下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件三、需求分析数据结构报告全文共40页,当前为第2页。1.本程序以动态链表为数据结构报告全文共40页,当前为第2页。2.本程序有五大模块组成,分别为基本信息输入模块(包括航班信息输入和客户信息输入),信息查询模块,订票模块,修改模块(包括退票模块及修改航班信息模块)。信息输入模块的功能是录入各航班的基本信息;信息查询模块的功能为提供各种信息查询的操作;订票模块是录入各订票人的基本信息;信息修改模块是退票和修改航班信息。3.程序执行的命令:1.录入信息2.查询3.订票4.退票5.修改6.显示航班信息7.显示客户信息8.退出4.测试数据:航班数据库中的数据。以xiaying.txt文件保存。(附在源程序中)四、概要设计1、系统的抽象数据类型设定民航航班信息查询与客票发售服务系统的抽象数据类型定义:ADThanban{数据对象:D={ai|ai∈CharSet,i=1,2,,…,n,n>=0}数据关系:R={<c1,c2>c1c2}基本操作:creat();操作结果:录入航班信息。search();操作结果:进入航班查询系统。order();操作结果:进行订票。quit();操作结果:进行退票。revise();操作结果:修改航班信息。print();操作结果:显示航班信息。print2();操作结果:显示客户资料。Clear();操作结果:清除记录。数据结构报告全文共40页,当前为第3页。数据结构报告全文共40页,当前为第3页。2、程序中用到的库函数#include<stdio.h>#include<string.h>#include<conio.h>#include<ctype.h>#include<math.h>#include<stdlib.h>#include<malloc.h>3、程序的四大模块(1)主程序模块:Voidmain(){do{接受命令;处理命令;}while(命令!=退出);}(2)信息输入模块——完成基本信息的输入和修改;(3)实现功能模块——实现信息查询、订票和退票功能操作;(4)信息显示模块——实现录入信息的显示。4、函数间调用关系数据结构报告全文共40页,当前为第4页。主函数数据结构报告全文共40页,当前为第4页。主函数录入信息航班查询修改信息订票退票航班信息客户信息退出航班号查询起落地查询图1整体思想方框图5、算法设计:(每个模块的算法设计说明如下:)(1)录入模块:查找单链表的链尾,在链尾插入一个“航班信息”的新结点。(2)查询模块:提供两种查方式:按航号和按航线查询,1代表按航号查询,2代表按航线查询。0则表示退出查询。顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。(3)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。(4)退票模块:输入要退票的乘客姓名以及证件号码,查找乘客资料的链表中是否有这位乘客,有则删去此结点,并在空位加上1,无则退票失败。(5)修改模块:输入密码,确认是否有权限对航班信息进行修改,有则在航班信息链表中查找要修改的结点,进行修改,否则不能修改。6、存储结构设计:航班的信息:为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、余票和出发地、目的地、票价以及总票数八个数据项:航班号起飞时间达到时间出发地目的地总票数余票票价数据结构报告全文共40页,当前为第5页。单链表如下:数据结构报告全文共40页,当前为第5页。DD1D2D3h每个结点包括数据域和指针域:数据域指针域C语言描述如下:typedefstructPlane{/*航班信息*/charplaneNo[10];/*航班号*/charstart[30];/*起飞时间*/charend_time[30];/*到达时间*/charstartplace[30];/*起飞城市*/charend_place[30];/*到达城市*/intprice;/*机票价格*/intdiscount;/*折后价格*/inttotal;/*机票总数*/inttamount;/*剩余票数*/structPlane*next;}Plane;旅客的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号码、航班号和座位号四个数据项:旅客姓名证件号码航班号C语言描述如下:typedefstructpassengernode{/*定义乘客资料结点*/charname[20];charID_num[20];charair_num[20];structpassengernode*next;数据结构报告全文共40页,当前为第6页。}passengernode;数据结构报告全文共40页,当前为第6页。五、详细设计1、主程序中需要的全程量structPlane{/*航班信息*/charplaneNo[10];/*航班号*/charstart[30];/*起飞时间*/charend_time[30];/*降落时间?*/charstartplace[30];/*起飞城市*/charend_place[30];/*降落城市*/intprice;/*机票价格*/intdiscount;/*折后价格*/inttotal;/*总机票数*/inttamount/*剩余机票数*/structPlane*next;}Plane;structcustomer/*客户资料*/{charname[30];/*客户姓名*/charID[30];/*证件号*/inttamount;/*订票数量*/charplane[30];/*航班号*/charno[30];/*订单编号*/structcustomer*next;}customer;Structplane*head=NULL;structcustomer*glist=NULL;2.部分函数模块以及流程图:1)主函数模块main(){inti;while(1){system(“cls”);printf("\n");printf("\n\t\****************定**票**系**统**************");printf("\n");printf("\n\t\********1.录入信息*");数据结构报告全文共40页,当前为第7页。printf("\n");数据结构报告全文共40页,当前为第7页。printf("\n\t\*******2.查询**");printf("\n");printf("\n\t\******3.订票***");printf("\n");printf("\n\t\*****4.退票****");printf("\n");printf("\n\t\****5.修改*****");printf("\n");printf("\n\t\***6.显示航班信息******");printf("\n");printf("\n\t\**7.显示客户信息*******");printf("\n");printf("\n\t\*8.退出********");printf("\n");printf("\n\n ********************************************");printf("\n请选择操作命令:");while(1){scanf("%d",&i);if(i>=1&&i<=8)break;elseprintf("\nchoose1,2,3,4,5,6,7,8");}switch(i){case1:system(“cls”);creat();break;case2:system(“cls”);search();break;case3:system(“cls”);order();break;case4:system(“cls”);quit();break;case5:system(“cls”);revise();break;case6:system(“cls”);print();break;case7:system(“cls”);print2();break;case8:exit(0);default:break;}}}数据结构报告全文共40页,当前为第8页。主函数流程图数据结构报告全文共40页,当前为第8页。图2主函数流程图2).录入信息函数模块:void*creat(){Plane*info;while(1){info=(Plane*)malloc(sizeof(Plane));/*建立新结点*/if(!info){printf("EMShasbeenfull!!\n");returnNULL;}printf("\n输入航班号:");scanf("%s",info->planeNo);printf("输入起飞时间:");scanf("%s",info->start);printf("输入到达时间:");scanf("%s",info->end_time);printf("输入起飞地点:");scanf("%s",info->startplace);printf("输入到达地点:");scanf("%s",info->end_place);printf("输入机票价格:");scanf("%d",&info->price);printf("输入折后价格:");数据结构报告全文共40页,当前为第9页。scanf("%d",&info->discount);数据结构报告全文共40页,当前为第9页。printf("输入总机票数:");scanf("%d",&info->total);printf("输入剩余票数:");scanf("%d",&info->tamount);info->next=head;head=info;system("cls");printf("是否继续?y/n");if(getch()=='n'||getch()=='N')break;}save1(head);}输入信息函数流程图图3输入信息函数流程图3).查询航班信息函数模块voidsearch(){chars1[30],s2[30];Plane*p;inti=0,ch;while(1){p=head;printf("请选择\n");数据结构报告全文共40页,当前为第10页。printf("1.按航班号查询\n");数据结构报告全文共40页,当前为第10页。printf("2.按起落城市查询\n");printf("3.退出\n");scanf("%d",&ch);if(ch==1){printf("\n请输入航班号\n");scanf("%s",s1);/*读如航班号*/while(p){if(!strcmp(s1,p->planeNo)){printf("\n起飞地点:%s",p->startplace);printf("\n起飞时间:%s",p->start);printf("\n到达地点:%s",p->end_place);printf("\n到达时间:%s",p->end_time);printf("\n机票价格:%d",p->price);printf("\n折后价格:%d",p->discount);printf("\n总机票数:%d",p->total);printf("\n剩余票数:%d\n\n",p->tamount);if(p->tamount==0)printf("\n此航班已满!\n");/*提示此航班已满*/p=p->next;i++;}elsep=p->next;}if(!i)printf("无此航班\n");i=0;}if(ch==2){printf("输入起飞地点:");scanf("%s",s1)/printf("\n输入到达地点:");scanf("%s",s2);while(p){if(!strcmp(s1,p->startplace)&&!strcmp(s2,p->end_place)){printf("起飞地点:%s",p->startplace);printf("\n起飞时间:%s",p->start);printf("\n到达地点:%s",p->end_place);printf("\n到达时间:%s",p->end_time);printf("\n机票价格:%d",p->price);printf("\n折后价格:%d",p->discount);printf("\n总机票数:%d",p->total);数据结构报告全文共40页,当前为第11页。printf("\n剩余票数:%d\n\n",p->tamount);数据结构报告全文共40页,当前为第11页。if(p->tamount==0)printf("\n此航班已满!\n");p=p->next; i++;}elsep=p->next;}if(!i)printf("无此航班\n");i=0;}if(ch==3)break;}}查询函数流程图图4查询函数流程图4).订票功能函数模块:voidorder(){customer*info;Plane*p,*q;chars[30];intflag=0;while(1){p=q=head;printf("您想预定哪趟航班");scanf("%s",&s);if(strcmp(p->planeNo,s)!=0)/*判断*/数据结构报告全文共40页,当前为第12页。{数据结构报告全文共40页,当前为第12页。printf("无此航班");/*出错提示*/p=p->next;getch();break;}if(p->tamount==0){printf("此航班已满.\n是否需要预定其他到达该城市的航班:y/n\n");if(getch()=='n'||getch()=='N')break;elsewhile(q){if(!strcmp(p->end_place,q->end_place)&&p!=q){printf("您可以预定%s号航班到达该城市\n",q->planeNo);flag=1;}q=q->next;}if(flag==0){printf("没有到打该城市的其他航班");getch();break;}}else{printf("目前此航班还有%d张票",p->tamount);info=(customer*)malloc(sizeof(customer));if(!info){printf("EMShasbeenfull!!\n");exit(0);}printf("\n姓名:");scanf("%s",info->name);printf("\n身份证号码:");scanf("%s",info->ID);printf("\n航班号:");scanf("%s",info->planeNo);printf("\n订票数量(<=%d):",p->tamount);scanf("%d",&info->tamount);p->tamount=p->tamount-info->tamount;info->no=num;printf("\n您的订单号是%d\n",info->no);num++;info->next=glist;数据结构报告全文共40页,当前为第13页。glist=info;数据结构报告全文共40页,当前为第13页。printf("是否继续?y/n");if('n'==getch()||'N'==getch())break;system(“cls”);}save1(head);save2(glist);}}订票函数流程图图5订票函数流程图5).退票功能函数模块voidquit(){chars1[30],s2[30],s3[30];intm=0;Plane*p;customer*q,*r;while(1){p=head;r=q=glist;printf("输入姓名:\n");scanf("%s",s2);if(strcmp(s2,q->name)!=0)/*判断*/{数据结构报告全文共40页,当前为第14页。printf("您没有预定机票");getch();break;/*出错提示*/数据结构报告全文共40页,当前为第14页。}else{printf("您想退订哪趟航班:\n");scanf("%s",s1);if(strcmp(s1,q->planeNo)!=0)/*判断*/{printf("您没有预定此航班\n");getch();break;/*出错提示*/}}else{printf("输入身份证号:\n");scanf("%s",s3);if(strcmp(s3,q->ID)!=0)/*判断*/{printf("\n您输入的身份证号码有误\n");getch();break;/*出错提示*/}else{printf("想退几张机票:\n");scanf("%d",&m);while(strcmp(p->planeNo,s1))p=p->next;p->tamount=p->tamount+m;while(strcmp(q->name,s2))q=q->next;printf("\n姓名:%s",q->name);/*输出原始定单*/printf("\n身份证号码:%s",q->ID);printf("\n航班号:%s",q->planeNo);printf("\n订票数量:%d",q->tamount);printf("\n\n真的要退订吗?(Y/N)\n");if(getch()=='y'){q->tamount=q->tamount-m;printf("\n姓名:%s",q->name);/*打印新的定单*/printf("\n身份证号码:%s",q->ID);printf("\n航班号:%s",q->planeNo);printf("\n订票数量:%d",q->tamount);if(!q->tamount){q=q->next;while(r!=q){r->no--;r=r->next;数据结构报告全文共40页,当前为第15页。}数据结构报告全文共40页,当前为第15页。}printf("\n\n退票成功!\n\n");}printf("是否继续?y/n");if('n'==getch()||'N'==getch())break;}save1(head);save2(glist);}}}}退票函数流程图图6退票函数流程图6)显示信息函数模块:print(){structPlane*p;p=head->next;system(“cls”);if(!p){puts("\nNOanydata...");printf("\n请按任意键返回");getch();return;数据结构报告全文共40页,当前为第16页。}数据结构报告全文共40页,当前为第16页。printf("\n航班号起飞时间抵达时间出发城市目的地价格折扣总票数剩余票数\n");for(;p!=NULL;p=p->next){printf("%s%s%s%s%s%d%s%d%d\n",p->planeNo,p->start,p->end_time,p->startplace,p->end_place,p->price,p->discount,p->total,p->start);}printf("\n请按任意键返回");getch();}显示函数流程图图7显示函数流程图六、测试分析1.数据测试数据结构报告全文共40页,当前为第17页。主菜单界面数据结构报告全文共40页,当前为第17页。录入信息数据结构报告全文共40页,当前为第18页。查询数据结构报告全文共40页,当前为第18页。数据结构报告全文共40页,当前为第19页。订票数据结构报告全文共40页,当前为第19页。退票数据结构报告全文共40页,当前为第20页。数据结构报告全文共40页,当前为第20页。修改航班信息数据结构报告全文共40页,当前为第21页。显示客户信息数据结构报告全文共40页,当前为第21页。2.测试评价:该测试结果完全符合预计的结果,载入航班数据库信息,进而预订机票,仍后输出预订后航班信息。相应的信息应是原来的出去被预订的。由测试结果来看,输出结果完全真确。3.遇到的问题及解决方法(1)在输出数据时出现乱码,后来发现输出的参数个数与前面预想输出个数不同。保持个数一致就可以解决。(2)存盘时发现路径错误,输入真确的存盘路径即可。(3)最初完成程序的时候功能里的错误提示功能很弱,输入信息出错时不能很好的提示错误,在谨慎全面的考虑到出错情况之后经反复修改终于达到功能要求。七、数据结构实习心得体会经过短短两个星期的上机实践学习,使我对数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它。数据结构报告全文共40页,当前为第22页。这次实践的三个任务我全部是用链表来完成的,自己以前对链表和指针这部分的知识掌握不是很扎实,所以在实践中给自己设定了一个很大的挑战。用连表来实现功能方便又高效,但同时也复杂,更容易出错,从函数结构体的定义到调用,每个细节都要认真谨慎的编写程序,地址和数值的传递也非常重要,理解不透,运用不好就会出现很多奇怪的问题,无从下手。通过动手操作编程也确实让我对这部分的知识更深刻的理解、更好的掌握了。不在象以前那样害怕接触这方面的程序了。数据结构报告全文共40页,当前为第22页。由于这次的任务都是设计一些实用性很强的应用系统,对各方面要求都比较高,不仅是可以简单的实现要求的功能,同时要十分重要出错提示,即输入错误信息或者不存在想要查询的信息时候,系统要能够灵敏的报错,并且提供相关参考信息。这在以前的编程实习中是没有注意的强调的。虽然错误提示只是简单的几句控制语句和输出语句,但是却对系统的严密性非常重要,所以这次的实习还让我懂得要想让程序更有生命力一定要在功能实现的同时更加完善,综合全面的考虑各种可能的情况,并做出相应的提示信息和解决办法,尤其是飞机定票系统的定票功能,要求在满航的时候给出其他参考航班,这就提示我们不要满足于可以实现功能,而要追求全面和完善,编程与其他工作一样要精益求精。通过实践,还提高了我的自信心。从开始的害怕紧张到后来熟练应用程序,我对C语言和数据结构知识的了解进一步加深了。它使我认识到每个功能强大的系统都是由简单的小程序、子函数构成的,只要把层次关系弄清楚,调用关系弄明白,系统的框架就清晰的展现出来了,层层分析,层层编写,最后发现原来最简单的排序,输入,输出函数组合到一起就可以是功能强大的应用系统。所以我懂得了要用平和的心态去接受每个任务,自信可以完成,然后认真对待,是可以获得自己满意的结果的。在实践中提高了自己的动手能力,以前总是看别人的程序,很少自己真的动手去编程,所以在刚开始编程的时候经常犯一些不应该的错误,比如忘记;,输入不加&,缺少}等等。同时还增强了计算机方面的基础知识,比如一些软件操作和使用。学习在于实践,在学习过程中,我会更加注视实践操作,将理论知识与实践相结合,使自己更好地学好编程语言,各方面的知识都更加扎实和牢固。数据结构报告全文共40页,当前为第23页。数据结构报告全文共40页,当前为第23页。八、参考文献:严蔚敏、吴伟民《数据结构》2008.7严蔚敏《数据结构题集》2008.9王曙燕《C语言程序设计》2007.8耿国华《数据结构——C语言描述》2008.10数据结构报告全文共40页,当前为第24页。数据结构报告全文共40页,当前为第24页。九、附录:源程序#include<stdio.h>#include<string.h>#include<conio.h>#include<dos.h>#include<ctype.h>#include<math.h>#include<stdlib.h>#include<malloc.h>typedefstructPlane{/*航班信息*/charplaneNo[10];/*航班号*/charstart[30];/*起飞时间*/charend_time[30];/*到达时间*/charstartplace[30];/*起飞城市*/charend_place[30];/*到达城市*/intprice;/*机票价格*/intdiscount;/*折后价格*/inttotal;/*机票总数*/inttamount;/*剩余票数*/structPlane*next;}Plane;typedefstructcustomer{/*客户资料*/charname[30];/*客户姓名*/charID[30];/*证件号码*/inttamount;/*订票数量*/数据结构报告全文共40页,当前为第25页。charplaneNo[30];/*航班号*/数据结构报告全文共40页,当前为第25页。intno;/*定单号*/structcustomer*next;}customer;Plane*head=NULL;customer*glist=NULL;intnum=1;/***********************************************************************//*保存航班信息*/voidsave1(Plane*L){FILE*fp;Plane*p;if((fp=fopen("plane","wb"))==NULL){printf("不能打开此文件!!\n");exit(1);}printf("\n保存\n");p=L;while(p!=NULL){fwrite(p,sizeof(Plane),1,fp);p=p->next;}fclose(fp);printf("保存成功\n");}/************************************************************/数据结构报告全文共40页,当前为第26页。/*保存客户信息*/数据结构报告全文共40页,当前为第26页。voidsave2(customer*L){FILE*fp;customer*p;if((fp=fopen("customer","wb"))==NULL){printf("不能打开此文件!!\n");exit(1);}printf("\nSaving\n");p=L;while(p!=NULL){fwrite(p,sizeof(customer),1,fp);p=p->next;}fclose(fp);printf("保存成功\n");}/*****************************************************************//*录入航班信息*/void*creat(){Plane*info;while(1){info=(Plane*)malloc(sizeof(Plane));/*创建新结点*/if(!info){printf("EMShasbeenfull!!\n");returnNULL;}数据结构报告全文共40页,当前为第27页。printf("\n输入航班号:");数据结构报告全文共40页,当前为第27页。scanf("%s",info->planeNo);printf("输入起飞时间:");scanf("%s",info->start);printf("输入到达时间:");scanf("%s",info->end_time);printf("输入起飞地点:");scanf("%s",info->startplace);printf("输入到达地点:");scanf("%s",info->end_place);printf("输入机票价格:");scanf("%d",&info->price);printf("输入折后价格:");scanf("%d",&info->discount);printf("输入总机票数:");scanf("%d",&info->total);printf("输入剩余票数:");scanf("%d",&info->tamount);info->next=head;head=info;system("cls");printf("是否继续?y/n");/*一个信息输入结束,是否继续输入*/if(getch()=='n'||getch()=='N')break;}save1(head);}/*****************************************************************//*查询航班信息*/voidsearch(){chars1[30],s2[30];数据结构报告全文共40页,当前为第28页。Plane*p;数据结构报告全文共40页,当前为第28页。inti=0,ch;while(1){p=head;printf("请选择\n");printf("1.按航班号查询\n");printf("2.按起落城市查询\n");printf("3.退出\n");scanf("%d",&ch);if(ch==1){printf("\n请输入航班号\n");scanf("%s",s1);while(p){if(!strcmp(s1,p->planeNo)){printf("\n起飞地点:%s",p->startplace);printf("\n起飞时间:%s",p->start);printf("\n到达地点:%s",p->end_place);printf("\n到达时间:%s",p->end_time);printf("\n机票价格:%d",p->price);printf("\n折后价格:%d",p->discount);printf("\n总机票数:%d",p->total);printf("\n剩余票数:%d\n\n",p->tamount);if(p->tamount==0)printf("\n此航班已满!\n");/*满航判定*/p=p->next;i++;}elsep=p->next;}数据结构报告全文共40页,当前为第29页。if(!i)printf("无此航班\n");i=0;/*错误提示*/数据结构报告全文共40页,当前为第29页。}if(ch==2){printf("输入起飞地点:");scanf("%s",s1);printf("\n输入到达地点:");scanf("%s",s2);while(p){if(!strcmp(s1,p->startplace)&&!strcmp(s2,p->end_place)){printf("起飞地点:%s",p->startplace);printf("\n起飞时间:%s",p->start);printf("\n到达地点:%s",p->end_place);printf("\n到达时间:%s",p->end_time);printf("\n机票价格:%d",p->price);printf("\n折后价格:%d",p->discount);printf("\n总机票数:%d",p->total);printf("\n剩余票数:%d\n\n",p->tamount);if(p->tamount==0)printf("\n此航班已满!\n");p=p->next;i++;}elsep=p->next;}if(!i)printf("无此航班\n");i=0;}if(ch==3)break;}}/********************************************************************/数据结构报告全文共40页,当前为第30页。/*订票函数*/数据结构报告全文共40页,当前为第30页。voidorder(){customer*info;Plane*p,*q;chars[30];intflag=0;while(1){p=q=head;printf("您想预定哪趟航班");scanf("%s",&s);if(strcmp(p->planeNo,s)!=0){printf("无此航班");p=p->next;getch();break;}if(p->tamount==0){printf("此航班已满.\n是否需要预定其他到达该城市的航班:y/n\n");if(getch()=='n'||getch()=='N')break;elsewhile(q){if(!strcmp(p->end_place,q->end_place)&&p!=q){printf("您可以预定%s号航班到达该城市\n",q->planeNo);flag=1;}q=q->next;}数据结构报告全文共40页,当前为第31页。if(flag==0){printf("没有到打该城市的其他航班");数据结构报告全文共40页,当前为第31页。 getch(); break;}}else{printf("目前此航班还有%d张票",p->tamount);/*订票数量控制*/info=(customer*)malloc(sizeof(customer));if(!info){printf("EMShasbeenfull!!\n");exit(0);}printf("\n姓名:");scanf("%s",info->name);printf("\n身份证号码:");scanf("%s",info->ID);printf("\n航班号:");scanf("%s",info->planeNo);printf("\n订票数量(<=%d):",p->tamount);scanf("%d",&info->tamount);if(info->tamount>p->tamount){printf("此航班剩余机票不够");/*出错提示*/break;}else{p->tamount=p->tamount-info->tamount;/*打印定单*/info->no=num;数据结构报告全文共40页,当前为第32页。printf("\n您的订单号是%d\n",info->no);数据结构报告全文共40页,当前为第32页。num++;info->next=glist;glist=info;}printf("是否继续?y/n");if('n'==getch()||'N'==getch())break;system("cls");}save1(head);save2(glist);}}/****************************************************************//*退票函数*/voidquit(){chars1[30],s2[30],s3[30];intm=0;Plane*p;customer*q,*r;while(1){p=head;r=q=glist;printf("输入姓名:\n");scanf("%s",s2);if(strcmp(s2,q->name)!=0)/*判断*/{printf("您没有预定机票");getch();break;/*错误提示*/数据结构报告全文共40页,当前为第33页。}数据结构报告全文共40页,当前为第33页。else{printf("您想退订哪趟航班:\n");scanf("%s",s1);if(strcmp(s1,q->planeNo)!=0)/*判断*/{printf("您没有预定此航班\n");getch();break;/*错误提示*/}else{printf("输入身份证号:\n");scanf("%s",s3);if(strcmp(s3,q->ID)!=0)/*判断*/{printf("\n您输入的身份证号码有误\n");getch();break;/*错误提示*/}else{printf("想退几张机票:\n");scanf("%d",&m);while(strcmp(p->planeNo,s1))p=p->next;p->tamount=p->tamount+m;while(strcmp(q->name,s2))q=q->next;printf("\n姓名:%s",q->name);/*原始定单*/printf("\n身份证号码:%s",q->ID);printf("\n航班号:%s",q->planeNo);printf("\n订票数量:%d",q->tamount);printf("\n\n真的要退订吗?(Y/N)\n");if(getch()=='y')数据结构报告全文共40页,当前为第34页。{数据结构报告全文共40页,当前为第34页。q->tamount=q->tamount-m;/*打印新的定单*/printf("\n姓名:%s",q->name);printf("\n身份证号码:%s",q->ID);printf("\n航班号:%s",q->planeNo);printf("\n订票数量:%d",q->tamount);if(!q->tamount){q=q->next;while(r!=q){r->no--;r=r->next;}}printf("\n\n退票成功!\n\n");}printf("是否继续?y/n");if('n'==getch()||'N'==getch())break;}save1(head);save2(glist);}}}}/*************************************************************//*修改航班信息*/voidrevise(){Plane*p;数据结构报告全文共40页,当前为第35页。chars1[30];数据结构报告全文共40页,当前为第35页。while(1){p=head;printf("\n想要修改哪趟航班:");scanf("%s",s1);while(strcmp(p->planeNo,s1))p=p->next;printf("\n输入起飞时间:");scanf("%s",p->start);printf("输入到达时间:");scanf("%s",p->end_time);printf("输入起飞地点:");scanf("%s",p->startplace);printf("输入到达地点:");scanf("%s",p->end_place);printf("输入机票价格:");scanf("%d",&p->price);printf("输入折后价格:");scanf("%d",&p->discount);printf("输入总计票数:");scanf("%d",&p->total);printf("输入剩余票数:");scanf("%d",&p->tamount);printf("%s",p->start);printf("\n修改信息成功!\n");printf("是否继续?y/n");if('n'==getch()||'N'==getch())break;}save1(head);}数据结构报告全文共40页,当前为第36页。/**************************************************

温馨提示

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

评论

0/150

提交评论