




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计一、 设计题目1 航空订票系统任务:航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。功能要求:1) 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2) 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4) 退票: 可退票,退票后修改相关数据文件;5) 客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号;6) 修改航班信息:当航班信息改变可以修改航班数据文件。2 Joseph环任务:编号是1,2,,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。功能要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。二、需求分析1 航空订票系统 1 每条航线所涉及的信息有:起飞时间、降落时间、航班号、始发地、目的地、余票量、价格、折扣、已订票的客户名单(包括姓名、订票量、证件号); 2 全部数据可以只放在内存中; 3 系统能实现的操作和功能如下: 1) 录入:可以录入航班情况(航班号、时间、价格、折扣、票余量)2) 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3) 订票:可以订票,如果该航班已经无票,可以提供相关可选择航班;4) 退票: 可退票,退票后修改相关数据文件;5) 客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号;6) 修改航班信息:当航班信息改变可以修改航班数据文件。2 Joseph环输入的形式和输入值的范围:本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。 输出的形式:从屏幕显示出列顺序。程序功能:提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。三、概要设计1 航空订票系统typedef struct Customer/乘客信息 char CustomerName20;/乘客名字 int ID; /乘客证件号 int TicketsCount; /定票数量 int CheckNo; /订单号 struct Customer *next; /下一个乘客结点指针 Customer;typedef struct Flight/航班信息int FlightNo; /航班号char Time200; /起降时间char City100; /起飞抵达城市int Price; /机票价格float Discount; /票价折扣int SeatsAmount; /航班总票数int FreeAmount; /剩余机票数struct Flight *next; /下一个航班结点指针Customer *CustList; /定该航班的乘客链表的头指针Flight;Flight *Head;/航班链表头指针Flight *p;/航班链表的尾指针Flight *q;/在执行查找操作后,指向所找到的航班结点Customer *CustMAX;/对应于各个航班的乘客链表的尾指针int ChecksCount;/订单总数char Iscontinue;/全局变量,用于在用户判断是否执行一项操作后,存储用户的输入(y/n)void Menu();/主菜单函数void FlightAdd();/航班添加函数void FlightSearch();/航班查找函数Status FlightExist(int);/按航班号查找航班的函数Status FlightCitySearch(Flight *y,char *city);/按起飞抵达城市查找航班的函数void CustomerReserve();/定票操作函数void CustomerCancel();/退票操作函数void CustomerSearch();/按航班号查找此航班的乘客信息函数void FlightModify();/修改航班信息函数void FlightPrint(Flight *r);/输出航班信息函数,用于其他函数调用以便输出航班信息void main()/主函数系统结构图(功能模块图)主程序模块录入航班信息 查询航班信息 客户订票系统 客户退票系统 客户资料查询 修改航班信息 退出系统2 Joseph环struct ManNode int Number; struct ManNode * Next; int Password;四、详细设计1航空订票系统/*头文件声明*/#include #include #include#include #include #include #include #include/* 函数结果状态代码 */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define MAX 100/航班最大数量,也是航班号最大值#define NULL 0typedef int Status; / Status是函数的类型,其值是函数结果状态代码,如OK等 typedef struct Customer/乘客信息 char CustomerName20;/乘客名字 int ID; /乘客证件号 int TicketsCount; /定票数量 int CheckNo; /订单号 struct Customer *next; /下一个乘客结点指针 Customer;typedef struct Flight/航班信息int FlightNo; /航班号char Time200; /起降时间char City100; /起飞抵达城市int Price; /机票价格float Discount; /票价折扣int SeatsAmount; /航班总票数int FreeAmount; /剩余机票数struct Flight *next; /下一个航班结点指针Customer *CustList; /定该航班的乘客链表的头指针Flight;Flight *Head;/航班链表头指针Flight *p;/航班链表的尾指针Flight *q;/在执行查找操作后,指向所找到的航班结点Customer *CustMAX;/对应于各个航班的乘客链表的尾指针int ChecksCount;/订单总数char Iscontinue;/全局变量,用于在用户判断是否执行一项操作后,存储用户的输入(y/n)void Menu();/主菜单函数void FlightAdd();/航班添加函数void FlightSearch();/航班查找函数Status FlightExist(int);/按航班号查找航班的函数Status FlightCitySearch(Flight *y,char *city);/按起飞抵达城市查找航班的函数void CustomerReserve();/定票操作函数void CustomerCancel();/退票操作函数void CustomerSearch();/按航班号查找此航班的乘客信息函数void FlightModify();/修改航班信息函数void FlightPrint(Flight *r);/输出航班信息函数,用于其他函数调用以便输出航班信息void main()/主函数 system(cls);Menu();void Menu()/主菜单函数 system(cls);int a=0;coutnttt=;coutnnttt 欢迎进入航空票务系统;coutnntttt 1.录入航班信息;coutnntttt 2.查询航班信息;coutnntttt 3.客户定票系统;coutnntttt 4.客户退票系统;coutnntttt 5.客户资料查询;coutnntttt 6.修改航班信息;coutnntttt 7.退出系统;coutnttt=;couta;switch(a)/判断用户的选择case 1:FlightAdd();break;case 2:FlightSearch();break;case 3:CustomerReserve();break;case 4:CustomerCancel();break;case 5:CustomerSearch();break;case 6:FlightModify();break;case 7:break;default:coutntttt输入错误!请重新输入endl;Sleep(1000);/延时一秒Menu();void FlightAdd()/输入航班函数 system(cls);int flightNo;/临时存放用户输入的航班号Flight *t;/临时航班结点,用于添加到航班链表中coutflightNo;while(FlightExist(flightNo)/航班号要唯一,先判断此航班是否存在,若无重复再存入系统coutflightNo;if(Head=NULL)/航线为空t=p=new Flight;/建立首个航线p-next=NULL;Head=p;elset=new Flight; /建立航线结点t-next=NULL;p-next=t; /前一航线结点指向当前航班结点p=t; /P仍指向航班链表的尾结点p-FlightNo=flightNo;coutp-Time;coutB的格式输入,便于查询):;cinp-City;coutp-Price;coutp-Discount;coutp-SeatsAmount;p-FreeAmount=p-SeatsAmount;p-CustList=NULL;coutIscontinue;if(Iscontinue=y)/判断用户的选择FlightAdd();elsep-next=NULL;coutIscontinue;if(Iscontinue=y)/判断用户是否要返回上级菜单Menu();void FlightSearch()/航班查找函数 system(cls);int a=0,b;int flightNo;/临时存放用户输入的航班号char city40;/临时存放用户输入的起飞抵达城市coutnttt=;coutntttt查询项目;coutntttt1.按航班号查询;coutntttt2.按起飞抵达城市查询;coutnttt=;couta;switch(a)/判断用户的选择case 1:/按航班号查询coutflightNo;b=FlightExist(flightNo);if(b)/若航班号存在,则输出此航班信息,否则告诉用户没有找到此航班FlightPrint(q);elsecoutntt对不起,此航班不存在!请核实航班号或选择其他航班;break;case 2:/按起飞抵达城市查找coutB的格式):;cincity;b=FlightCitySearch(Head,city);if(b)/若有此航线上的航班,则逐个查找并输出此航线上所有航班的信息,/否则告诉用户没有找到此航班FlightPrint(q);b=FlightCitySearch(q-next,city);while(b)FlightPrint(q);b=FlightCitySearch(q-next,city);elsecoutnttt对不起,此航班不存在!请核实航班号或选择其他航班;break;default:coutntttt输入错误!endl;coutIscontinue;if(Iscontinue=y)/判断用户的选择FlightSearch();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否要返回上级菜单Menu();Status FlightExist(int flightNo)/按航班号查找航班的函数 system(cls);Flight *x;/指向正在被查找的结点x=Head;/从头开始查找while(x!=NULL)if(x-FlightNo=flightNo)/找到相应的航班,使得q指向此航班结点q=x;return TRUE;x=x-next;/指针下移,逐个向后查找return FALSE;Status FlightCitySearch(Flight *y,char *city)/按起飞抵达城市查找航班的函数while(y!=NULL)/从提供的航班结点开始查找if(strcmp(y-City,city)=0)/找到相应的航班,使得q指向此航班结点q=y;return TRUE;y=y-next;/指针下移,逐个向后查找return FALSE;void CustomerReserve()/定票操作函数 system(cls);int flightNo;/临时存放用户输入的航班号int ticketsCount;/临时存放用户输入的定票数Customer *n;/存放建立的乘客临时结点coutflightNo;if(FlightExist(flightNo)/找到此航班coutticketsCount;if(ticketsCountFreeAmount)/当剩余票数大于客户所定的票数if(q-CustList=NULL)/此航班的乘客头指针为空n=new Customer;/建立乘客头结点n-next=NULL;q-CustList=CustflightNo=n;/头指针尾指针都指向这个结点elsen=new Customer;/建立乘客结点n-next=NULL;CustflightNo-next=n;/上一个乘客结点指向下一个乘客结点CustflightNo=n;/尾结点指向建立的这个结点q-FreeAmount-=ticketsCount;/此航班的剩余机票数要减少,即减去此乘客需要定的票数ChecksCount+;/订单数加一n-CheckNo=ChecksCount;/乘客的订单号有序,即为此时的订单数n-TicketsCount=ticketsCount;coutn-CustomerName;coutn-ID;coutFreeAmount=0)/当此航班为剩余机票时coutntttt对不起,该航班的机票已全部售完!;coutIscontinue;if(Iscontinue=y)/当用户需要此航线上其他航班的信息时,查找是否有符合的航班int a;Flight *z=q;a=FlightCitySearch(Head,z-City);if(z=q)a=FlightCitySearch(z-next,z-City); if(a)if(z!=q)/若此航线上还有其他航班,则输出其他航班信息FlightPrint(q);a=FlightCitySearch(q-next,z-City);while(a)FlightPrint(q);a=FlightCitySearch(q-next,z-City);elsecoutnttttt没有找到此航线上其他航班!;else/当用户需要的定的机票数大于剩余机票数时coutntttt对不起,该航班的剩余票数少于您的定票数!;coutIscontinue;if(Iscontinue=y)/当用户需要此航线上其他航班的信息时,查找是否有符合的航班int a;Flight *z=q;a=FlightCitySearch(Head,z-City);if(z=q)a=FlightCitySearch(z-next,z-City); if(a)if(z!=q)/若此航线上还有其他航班,则输出其他航班信息FlightPrint(q);a=FlightCitySearch(q-next,z-City);while(a)FlightPrint(q);a=FlightCitySearch(q-next,z-City);elsecoutnttt对不起,没有找到此航线上其他航班!;elsecoutntttt对不起,此航班不存在!请核实航班号或选择其他航班;coutIscontinue;if(Iscontinue=y)/判断用户的选择CustomerReserve();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否返回上级菜单Menu();void CustomerCancel()/退票操作函数 system(cls);int flightNo;/临时存放用户输入的航班号int id;/临时存放用户输入的证件号Customer *s;/用于查找乘客结点时coutflightNo;if(FlightExist(flightNo)/找到用户输入的航班s=q-CustList;coutid;if(s=NULL)/航班乘客链表为空coutntttt该航班无人定票,无法进行退票操作!;coutIscontinue;if(Iscontinue=y)/判断用户的选择CustomerCancel();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否返回上级菜单Menu();elsereturn;else if(s-ID=id)/若此乘客即为该航班的第一个乘客char a;couta;if(a=y)q-FreeAmount+=s-TicketsCount;/该航班的剩余机票数增加,即加上此客户原定票数q-CustList=s-next;/删除此乘客结点coutntttt退票成功!;coutIscontinue;if(Iscontinue=y)/判断用户的选择CustomerCancel();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否返回上级菜单Menu();elsereturn;else/若此乘客不是该航班的第一个乘客while(s!=NULL) if(s-next!=NULL) if(s-next-ID=id)/找到此乘客char a;couta;if(a=y)q-FreeAmount+=s-TicketsCount;/该航班的剩余机票数增加,即加上此客户原定票数s-next=s-next-next;/删除此乘客结点coutntttt退票成功!;elsecoutnext;/指针下移,逐个向后查找if(s=NULL)/若指针已移动到链表的尾部仍没找到此乘客coutntttt对不起,在此航班中未找到此乘客!;coutIscontinue;if(Iscontinue=y)/判断用户的选择CustomerCancel();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否返回上级菜单Menu();elsereturn;else/若没有找到用户输入的航班coutntttt对不起,没有此航班!;coutIscontinue;if(Iscontinue=y)/判断用户的选择CustomerCancel();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否要返回上级菜单Menu();void CustomerSearch()/按航班号查找此航班的乘客信息函数 system(cls);int flightNo;/临时存放用户输入的航班号Customer *f;/用于查找乘客结点时coutflightNo;if(FlightExist(flightNo)/找到该航班f=q-CustList;/从头结点开始if(f=NULL)coutnttt对不起,此航班暂时无人定票!;else/若乘客链表不为空,则输出航班信息和乘客信息FlightPrint(q);coutnttt客户信息如下;while(f!=NULL)/若链表未结束,则逐个输出乘客信息coutnttt客户姓名:;coutCustomerName;coutnttt客户证件号:;coutID;coutnttt定票数量:;coutTicketsCount;coutnttt订单号:;coutCheckNo;f=f-next;else/没有找到此航班coutntttt对不起,没有此航班!;coutIscontinue;if(Iscontinue=y)/判断用户的输入CustomerSearch();elsecoutIscontinue;if(Iscontinue=y)/判断用户是否返回上级菜单Menu();void FlightModify()/修改航班信息函数 system(cls);int flightNo;/临时存放用户输入的航班号coutflightNo;if(FlightExist(flightNo)/找到此航班,提供原航班信息,并且存储用户新输入的航班信息coutn原航班起降时间为:;coutTime;coutq-Time;coutn原起飞抵达时间为:;coutCity;coutB的格式):;cinq-City;coutn原航班票价为:;coutPrice;coutq-Price;coutn原票价折扣为:;coutDiscount;coutq-Discount;coutn航班信息修改完毕!;coutIscontinue;if(Iscontinue=y)/判断用户的选择FlightModify();elsep-next=NULL;coutIscontinue;if(Iscontinue=y)/判断用户是否返回上级菜单Menu();void FlightPrint(Flight *r)/输出航班信息函数 system(cls);coutntttt航班信息如下;coutnttt航班号:;coutFlightNo;coutnttt起降时间:;coutTime;coutnttt起飞抵达城市:;coutCity;coutnttt航班票价:;coutPrice;coutnttt票价折扣:;coutDiscount;coutnttt航班总票数:;coutSeatsAmount;coutnttt剩余机票数:;coutFreeAmount;2 Joseph环#include #include #include /*建立结构*/struct ManNode int Number; struct ManNode * Next; int Password;void main() int m; int NumMan; struct ManNode * Head; void DeleteNode(int ManNumber,int number,struct ManNode * head); struct ManNode * CreateList(int NumOfMan); printf(请输入参加的人数:n); scanf(%d,&NumMan); Head=CreateList(NumMan); printf(请输入刚开始任选的人数m:n); scanf(%d,&m); DeleteNode(NumMan,m,Head); free(Head);struct ManNode *CreateList (int NumOfMan) struct ManNode * head,*ManNodePtr1,*ManNodePtr2; int Num=1; head=NULL; ManNodePtr2=(struct ManNode *)malloc(sizeof(struct ManNode); /*分配存储单元*/ printf(请输入用户所持有的密码:); scanf(%d,&ManNodePtr2-Password); ManNodePtr2-Number=Num; head=ManNodePtr2; while(Num!=NumOfMan) Num+; ManNodePtr1=(struct ManNode *)malloc(sizeof(struct ManNode); printf(请输入用户所持有的密码:); scanf(%d,&ManNodePtr1-Password); ManNodePtr1-Number =Num; ManNodePtr2-Next =ManNodePtr1; ManNodePtr2=ManNodePtr1; ManNodePtr2-Next =head; printf(输入结束!n); return head;void DeleteNode (int ManNumber,int number,struct ManNode * head) int num=1; struct ManNode *ManNodePtr1; struct ManNode *ManNodePtr2; ManNodePtr1=ManNodePtr2=head; while(ManNumber0) while(num!=number) ManNodePtr2=ManNodePtr1; ManNodePtr1=ManNodePtr1-Next ; number-; number=ManNodePtr1-Password; printf(出列人的编号:%dn,ManNodePtr1-Number) ; ManNodePtr2-Next =ManNodePtr1-Next ; ManNodePtr1=ManNodePtr1-Next ; ManNumber-; printf(n运行结束!n);五、调试分析1、航空订票系统(1)由于在windows7下运行Microsoft Visual C+ 6.0,兼容性不是很好,经常无法正常打开,所以操作起来比较麻烦。(2)程序在起初设计的时候,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全钒液流储能电池研发与技术提升方案
- 挖机租赁合同书3篇
- 2025中国人民大学哲学院招聘1人备考练习试题及答案解析
- 2025日语高考真题及答案
- 2025年甘肃省白银市靖远县兴隆乡选聘专职化村文书备考练习试题及答案解析
- 2025年8月福建厦门市农业农村局所属事业单位厦门市农业技术推广中心简化程序招聘事业单位专业技术岗位人员1人备考练习试题及答案解析
- 2025四川成都市崇州市人民医院医共体单位自主招聘27人(第四批)备考练习试题及答案解析
- 岩板知识考试题及答案
- 2025年大蜻蜓益虫题目及答案
- 建筑考试的题库及答案
- 初高中衔接数学教学的心得
- 2023-2024学年湖南省耒阳市小学语文六年级下册期末自测测试题
- 12YJ4-1 常用门窗标准图集
- GB/T 12190-1990高性能屏蔽室屏蔽效能的测量方法
- 高血压的危害-课件
- ISO15189医学实验室认可概况课件
- 轻钢龙骨、双层石膏板吊顶施工方案
- 安全网(平网)张挂安全技术要求
- 危险品管理台帐
- 政务云收费标准 云托管收费标准
- 计算机辅助翻译实用教程ppt课件(完整版)
评论
0/150
提交评论