还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
安徽建筑工业学院课程设计报告课程名称数据结构与算法课程设计题目订票系统院系数理系专业信息与计算数学班级一班学号姓名蔡会丽时间
2013.6目录TOC\o1-3\h\z1问题描述12基本功能要求13概要设计
13.1程序设计思路
23.2存储结构设计
23.3主要算法设计2链表数据类型的定义3本程序的结构
33.4测试用例设计64详细设计——原程序代码65调试分析206程序说明207经验和体会
207.1经验
207.2体会218程序结果219附录27订票系统1问题描述设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改__情况,完成用户订票和退票功能,并且可以保存客户和__的资料2基本功能要求设计__信息,订票信息的存储结构,设计程序完成如下功能
1.录入__信息可以录入__情况__号,起飞、抵达城市,座位总数,剩余座位数数据可以存储在一个数据文件___中,采用线性表的链式结构、具体数据用户输入
2.加载__与客户信息可以自动加载保存在___文件中的__与客户的信息
3.查询__信息可以输入__号,查询该航线的情况起降时间,起飞抵达城市,__票价,票价折扣,确定__是否满仓;可以输入起飞抵达城市,查询飞机__情况;
4.订票____包括姓名,证件号,订票数量及__情况,座位号订单要有订单号用户输入要订票的__号,如果该__有余票,则订票成功,并记录客户的信息如果该__已经无票,则订票失败输出所有有余票的__信息,提供用户可以选择的__
5.退票删除退票用户的订票信息,相应的__的余票数量增加
16.修改__信息用户输入要修改的__号,和要修改的内容,修改该__的相应信息
7.保存数据文件把当前的__信息,和用户信息分别保存在___文件中
8.输出所有客户信息按一定的格式输出用户的姓名,证件号码,订票数量及__情况,座位号
9.输出所有__信息按一定的格式输出所有的__的__号,起飞抵达城市,座位总数,剩余座位数
0.退出系统3概要设计
3.1程序设计说明图.主菜单1234567890录入__的信息加载__与客户信息查询__信息订票退票修改__信息保存数据文件输出所有客户信息输出所有__信息退出
3.2程序设计思路.对于__和用户分别定义不同的数据结构,并且采用线性表的链式结构进行存储所用到的算法包括链表的创建,增加,遍历,插入和删除
3.3存储结构设计由于__公司的__保持基本不变,所以应该采用顺序存储结构将各条航线的基本情况登陆在一张线性表上,按照终点站名有序排列在客票预定这一环节里将出现两个客户__已定票客户__和需定票客户__两客户__可分别由线性表和队列实现为查找方便,已定票客户的线性表应按姓名有序,同时为了插入和删除方便,,应以链表作为存储结构由于无法知道预约的人数,队列也应该以链表作为存储结构我们需要做的是建立一个可以插入和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中
3.3主要算法设计
3.
3.1链表数据类型的定义:因为采用的逻辑结构是线性结构,存储结构是链式结构//航线结构体typedefstructairline{charline_num
[10];//__号charstart_pla__
[20];//起飞地charend_pla__
[20];//目的地inttotal;//座位总数intleft;//剩余座位structairline*next;//下一个节点}airline;//航线结构体的头结点typedefstructairlinehead{intcount;airline*next;}airlinehead;//客户结构体typedefstructclient{charname
[20];//乘客姓名charid
[10];//乘客证件号charline_num;//__号intseat_num;//座位号structclient*next;//下一个节点}client;//客户结构体的头结点typedefstructclienthead{intcount;client*next;}clienthead;1主程序模块:void__in{初始化;向屏幕输出输入提示;选择输入要进行操作的菜单项(1,2,3,4,5,6,7,8,9,0);
1、输入录入的__信息,输出__信息录入成功
2、加载__与客户信息,加载成功
3、查询__信息, 输出显示__信息
4、订票, 输出订票成功
5、退票,输出退票成功
6、修改__信息,输出修改成功
7、保存数据文件, 输出保存成功
8、输出所有客户信息, 输出显示所有客户信息
9、输出所有__信息, 输出显示所有__信息
0、退出系统,退出界面}2对__的操作;airlinehead*importintnairlinehead*pheadline//录入__函数,n为所要录入__的数量{airline*queryairlinehead*phead//查询__情况voiddisplay_lineairline*node//输出一个__节点的所有信息到屏幕上voiddisplay_all_lineairlinehead*headline//输出所有__的所有信息到屏幕上intchange_lineairlinehead*headline//修改__的信息}3对客户的操作voiddisplay_clientclient*node=null//输出一个客户节点的信息到屏幕voiddisplay_all_clientclienthead*headclient//输出所有客户的信息到屏幕intbookticketairlinehead*headlineclienthead*headclient//订票intreturnticketairlinehead*headlineclienthead*headclient//退票4)对文件的操作ints__emessageairlinehead*headlineclienthead*headclient//保存__和客户信息到相应的___文件中intloadmessageairlinehead*headlineclienthead*headclient//加载保存在文件中的信息5)函数模块之间的调用图6)程序流程图
3.4测试用例设计__号起飞地目的地座位总数123ChinaAmerica30456Bei___gShanghai307__JapanBei___g30101AustraliaBei___g50姓名证件号码__蔡会丽2012123张长德2013456李毓芬20147__钱玉芬2015101单丹宇20161234详细设计——原程序代码#includeiostream#includefstreamusingnamespa__std;#includestdlib.h#includestring.htypedefstructclient{charname
[20];//乘客名charid
[10];//乘客证件号charline_num
[10];//__号intseat_num;//座位号structclient*next;//下一个结点}client;typedefstructclienthead{intcount;client*next;}clienthead;typedefstructairline{charline_num
[10];//__号charstart_pla__
[20];//起飞地charend_pla__
[20];//目的地inttotal;//座位总数intleft;//剩余座位structairline*next;//下一个结点}airline;typedefstructairlinehead{intcount;airline*next;}airlinehead;airlinehead*importintnairlinehead*pheadline//录入__函数,n为所要录入__的数量;{airline*temp=newairline;temp-next=NULL;pheadline-next=temp;pheadline-count=n;forinti=0;in;i++{cout请输入第i+1个__的__号:;cintemp-line_num;cout请输入第i+1个__的起飞地:;cintemp-start_pla__;cout请输入第i+1个__的目的地:;cintemp-end_pla__;cout请输入第i+1个__的座位总数:;cintemp-total;temp-left=temp-total;cout第i+1个__成功录入.endl;ifin-1{temp-next=newairline;iftemp-next==NULL{cout分配内存失败endl;exit1;}temp-next-next=NULL;temp=temp-next;}}returnpheadline;}airline*queryairlinehead*phead//查询__情况{airline*find=NULL;airline*temp;cout******************************************************endl;cout*1按航线查询__情况*endl;cout2按起飞抵达城市查询__情况*endl;cout******************************************************endl;cout请选择;intselect;cinselect;coutendl;switchselect{case1:{cout请输入__号;charline_num
[10];cinline_num;temp=phead-next;whiletemp{ifstrcmptemp-line_numline_num==0{find=temp;//display—linefind;returntemp;break;}else{temp=temp-next;}}if!temp{cout没有找到该__的信息endl;returnNULL;}break;}case2:{charstart_pla__
[20];//起飞地charend_pla__
[20];//目的地cout请输入起飞地址:;cinstart_pla__;cout请输入目的地:;cinend_pla__;//airline*temp;temp=phead-next;whiletemp{ifstrcmptemp-start_pla__start_pla__==0strcmptemp-end_pla__end_pla__==0{find=temp;//returntemp;break;}temp=temp-next;}if!temp{cout没有找到该__的信息endl;returnNULL;}break;}default:cout输入错误endl;break;}returnfind;}voiddisplay_lineairline*node//输出一个__结点的所有信息到屏幕{ifnode==NULL{cout参数为空,输出失败endl;return;}coutendl;cout__号\t\t起飞地\t\t目的地\t\t座位总数\t剩余座位\tendl;coutnode-line_num\t\tnode-start_pla__\t\tnode-end_pla__\t\tnode-total\tnode-left\tendl;}voiddisplay_all_lineairlinehead*headline//输出所有__的信息到屏幕{coutendl;airline*node;node=headline-next;if!node{cout当前没有__信息endl;return;}cout__数目:headline-countendl;whilenode{display_linenode;node=node-next;}}intchange_lineairlinehead*headline//修改__信息{cout当前所有__的信息为endl;airline*temp;temp=headline-next;whiletemp{display_linetemp;temp=temp-next;}coutendl;cout请选择你要进行的操作endl;cout1,增加__endl;cout2,删除__endl;cout3,修改当前__的信息endl;intselect;cinselect;coutendl;ifselect3||select1{cout输入错误endl;return0;}switchselect{case1:{//temp-next=airline__llocsizeofairlinetemp-next=newairline;temp=temp-next;cout请输入要增加的__号:;cintemp-line_num;cout请输入__的起飞地:;cintemp-start_pla__;cout请输入__的目的地:;cintemp-end_pla__;cout请输入__的座位总数;cintemp-total;temp-left=temp-total;temp-next=NULL;headline-count++;cout增加成功endl;break;}case2:{cout请输入您要删除的__的__号;charline_num
[10];cinline_num;airline*delline;delline=headline-next;whiledelline{ifstrcmpdelline-next-line_numline_num==0{airline*plink;plink=delline-next-next;//freedelline-next;deletedelline-next;delline-next=plink;headline-count--;}delline=delline-next;}ifdelline==0{cout没有找到输入的__号endl;return0;}break;}case3:{cout请输入您要修改的__的__号;charline_num3
[10];cinline_num3;temp=headline-next;whiletemp{ifstrcmptemp-next-line_numline_num3==0{cout请选择要修改的内容endl;cout--1座位总数--endl;cout--2起始地址--endl;cout--3目的地址--endl;}temp=temp-next;}iftemp==0{cout没有找到输入的__号endl;return0;}break;}}return1;}voiddisplay_clientclient*node=NULL//输出一个客户节点的信息到屏幕{ifnode==NULL{cout参数为空,输出失败endl;return;}coutendl;cout姓名\t\t证件号码\t座号\t__\t\tendlendl;coutnode-name\t\tnode-id\t\tnode-seat_num\t\tnode-line_num\t\tendl;}voiddisplay_all_clientclienthead*headclient//输出所有客户信息到屏幕{client*node=headclient-next;if!node{cout当前没有客户信息endl;return;}whilenode{display_clientnode;node=node-next;}}voiddisplay_left_airlineairlinehead*headline//输出未售完票的__的信息{airline*node=headline-next;if!node{cout当前没有__endl;}for;node-left!=node-total;node=node-next{display_linenode;}}intbookticketairlinehead*headlineclienthead*headclient//订票{//headclient-count=0;cout请输入__号:;charline_num
[10];cinline_num;airline*temp;temp=headline-next;whiletemp{ifstrcmptemp-line_numline_num==0{break;}temp=temp-next;}if!temp{cout未找到该__endl;return0;}iftemp-left==0{cout对不起,该__票已经售完endl;cout请选择其他合适的__;}client*custom=newclient;cout请输入你的证件号码:;cincustom-id;coutendl;cout请输入你的姓名;cincustom-name;coutendl;custom-seat_num=temp-total-temp-left+1;custom-next=NULL;strcpycustom-line_numline_num;/*client*clienttemp=NULL;clienttemp=headclient-next;ifclienttemp==NULL//线性表为空表的时候{headclient-next=custom;temp-left--;headclient-count++;cout”订票成功,祝您旅途愉快”endl;return1;}whiIecIienttemp-next//线性表不为空表时,寻找最后结点{}clienttemp-next=custom;temp-left--;headclient-count++;cout订票成功,祝您旅途愉快endl;*/temp-left--;headclient-count++;custom-next=headclient-next;headclient-next=custom;cout订票成功,祝您旅途愉快;return1;}intreturnticketairlinehead*headlineclienthead*headclient//退票{cout请输入顾客的证件号码id:;charid
[10];cinid;airline*airlinetemp=headline-next;client*clienttemp=headclient-next;ifNULL==airlinetemp{cout当前没有__信息endl;return0;}charline_num
[10];client*delnext;ifstrcmpclienttemp-idid==0//要删除的节点为第一个时…{strcpyline_numclienttemp-line_num;headclient-next=clienttemp-next;deleteclienttemp;whileairlinetemp//修改对票客户所对应的__的售票信息{ifstrcmpline_numairlinetemp-line_num==0{airlinetemp-left++;break;}airlinetemp=airlinetemp-next;}cout退票成功欢迎下次合作!;return1;}whileclienttemp-next//要删除的节点不是第一个时…{ifstrcmpclienttemp-next-idid==0{strcpyline_numclienttemp-next-line_num;delnext=clienttemp-next-next;deleteclienttemp-next;clienttemp-next=delnext;//whileairlinetemp//修改对票客户所对应的__的售票信息{ifstrcpyline_numairlinetemp-line_num==0{airlinetemp-left++;break;}airlinetemp=airlinetemp-next;}cout退票成功欢迎下次合作!endlendl;return1;break;}clienttemp=clienttemp-next;}cout未找到该客户的信息endl;return0;}ints__emessageairlinehead*headlineclienthead*headclient//保存__和客户的信息到相应的___文件中{ofstreamoutlineairline.___;if!outline{cout__信息文件打开失败endl;return0;}cout正在保存__信息…endl;outlineheadline-countendl;airline*linetemp=headline-next;whilelinetemp{outlinelinetemp-line_numlinetemp-start_pla__linetemp-end_pla__linetemp-totallinetemp-leftendl;linetemp=linetemp-next;}outline.close;cout__信息保存成功endl;ofstreamoutclientclient.___;if!outclient{cout客户信息文件打开失败endl;return0;}cout正在保存客户信息文件…endl;outclientheadclient-countendl;client*clienttemp=headclient-next;whileclienttemp{outclientclienttemp-nameclienttemp-idclienttemp-line_numclienttemp-seat_numendl;clienttemp=clienttemp-next;}outclient.close;cout客户信息保存成功endl;return1;}intloadmessageairlinehead*headlineclienthead*headclient//加载保存在文件中的信息{headline-next=NULL;headclient-next=NULL;ifstreaminairairline.___;if!inair{cout__文件不能打开,信息加载失败…endl;return0;}cout正在加载__信息…endl;inairheadline-count;forinti=0;iheadline-count;i++{airline*nodeline=newairline;inairnodeline-line_numnodeline-start_pla__nodeline-end_pla__nodeline-totalnodeline-left;nodeline-next=headline-next;headline-next=nodeline;}inair.close;cout__信息加载完毕…endl;ifstreaminclientclient.___;if!inclient{cout客户文件不能打开,信息加载失败…endl;return0;}cout正在加载客户信息…endl;inclientheadclient-count;fori=0;iheadclient-count;i++{client*nodeline=newclient;inclientnodeline-namenodeline-idnodeline-line_numnodeline-seat_num;nodeline-next=headclient-next;headclient-next=nodeline;}inclient.close;cout客户信息加载完毕…endl;return1;}void__in_menu{cout***************************欢迎使用飞机售票系统**********************endlendl;cout***1…录入航班信息***endlendl;cout***2…加载航班信息***endlendl;cout***3…查询航线信息***endlendl;cout***4…客户订票***endlendl;cout***5…客户退票***endlendl;cout***6…保存操作***endlendl;cout***7…输出所有__信息***endlendl;cout***8…输出所有顾客信息***endlendl;cout***0…退出系统***endlendl;cout***************************************************************************************endlendl;}void__in{airlinehead*headline=newairlinehead;headline-count=0;headline-next=NULL;clienthead*headclient=newclienthead;headclient-count=0;headclient-next=NULL;while1{__in_menu;intn;cout请选择您要进行的操作:;cinn;coutendl;switchn{case1:intnum;cout请选择您要录入的__的数目;cinnum;coutendl;importnumheadline;coutendl;//display_all_1ineheadline;cout__信息成功录入;coutendlendl;break;case2:loadmessageheadlineheadclient;break;case3:airline*find;find=queryheadline;iffind{display_linefind;}break;case4:bookticketheadlineheadclient;//display_all_cIientheadcIient;break;case5:returnticketheadlineheadclient;break;case6:s__emessageheadlineheadclient;break;case7:display_all_lineheadline;break;case8:display_all_clientheadclient;break;case0:exit1;break;}}}5调试分析
1、实际完成的情况说明完成的功能完成了所有预设的功能,可以实现__的录入、查询、修改,和客户的订票、退票,保存信息的功能
2、程序的性能分析,包括时空分析;时间复杂度分析在订票和退票的函数中,都用到了链表的查询算法,时间复杂度为logn
3、上机调试过程中出现的问题及其解决方案调试过程中经常出现大量的语法小错误,像标点符号、大小写、0与o的相似处,虽然很小的问题,如果不仔细的话,就很难找出来,这培养了我写算法严谨、认真的态度还有就是逻辑错误,比如指针的声明和内存分配问题6程序说明1录入__信息打开系统会出现主界面,输入1后回车,系统会出现要输入的__数、__号、起飞地、目的地、总座位数2加载__信息打开系统,在主界面输入2,系统会自动加载上次保存的__和客户信息3查询__信息选择查询功能后,会出现2个选择
1、按航线查询,
2.按起飞抵达城市查询__情况4客户订票选择4,依次输入__号、证件号码和姓名订票5客户退票选择5,然后输入证件号,退票6保存操作输出所有__信息和客户信息选择保存操作后,系统会覆盖源文件的信息,保存信息7经验和体会
7.1经验通过这段时间的课程设计,本人对计算机的应用,数据结构的作用以及C语言的使用都有了更深的了解尤其是C语言的进步让我深刻的__到任何所学的知识都需要实践,没有实践就无法真正理解这些知识以及掌握它们,使其成为自己的财富在理论学习和上机实践的各个环节中,通过自主学习和请教老师,我收获了不少当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不只如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高在这段时间里,我对for、while等的循环函数用法更加熟悉,逐渐形成了较好的编程习惯在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决在程序的调试能力上,无形中得到了许多的提高例如头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础
7.2体会我觉得编程过程中,语法的问题一定要注意,如果编写的过程中注意到了,编译就很可能会快一些通过,这样我们有更多的时间来检查程序中的其它问题其次我感觉一个好的程序并不只是可以运行,他还可以满足一大堆的条件,如健壮性,可读性,可维护性,高效性,等等要提高自己的编程能力,你必须亲自去体验、去设计、编辑、编译、调试、运行开始的时候没有认识到算法的重要性,以为语言是程序设计的基础和核心,随着学习的深入,我渐渐认识到,只要好的算法才能写出出类拔萃的程序只有对算法的深入理解,和知道如何应用相应的算法设计相应的程序,才能完成程序设计8程序结果1)测试用例12)测试用例23)测试用例34)测试用例45)测试用例56)测试用例67)测试用例78)测试用例89)测试用例910)测试用例1011)测试用例119附录报告所附源文件在文件夹中。