数据结构课程设计(c语言版)飞机订票系统_第1页
数据结构课程设计(c语言版)飞机订票系统_第2页
数据结构课程设计(c语言版)飞机订票系统_第3页
数据结构课程设计(c语言版)飞机订票系统_第4页
数据结构课程设计(c语言版)飞机订票系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计C语言版飞机订票系统C语言版课题题目飞机订票系统和图的遍历的动态演示姓名学号班级指导教师订票系统1需求分析任务通过此系统可以实现如下功能录入可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息当航班信息改变可以修改航班数据文件要求根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2主要设计思路算法构造流程图A主菜单主菜单0123456789输入航班的信息列出航班的信息按航班号查询航班信息按城市来查询航班订票程序退票系统修改飞机航班的信息保存文件读取文件、下载文件退出B各分块模板的构造流程图0输入航班的信息航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣1列出航班的信息继续Y退出N2按航班号查询航班信息输入所需要查询的航班号显示这个航班的的信息3按城市来查询航班输入起飞城市输入降落城市显示这个航班的信息4订票程序输入号码输入名字输入ID需要定的票数航班号5退票系统输入航班号输入你ID确定退票1否定06修改飞机航班的信息输入要修改的航班号重新输入新的航班信息7保存文件显示保存成功3功能函数设计(1)订票系统主菜单函数MENU_SELECT本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。其实就是通过键盘输入选择项,然后通过SCANF接受,在通过SWTICH判断进入各个选择项。(2)工作人员管理函数ENTER/编号/CHARID20/证件号/CHARNAME10/姓名/INTCOUNT/订票数/CHARFLIGHTNAME10/乘坐航班号/GUEST/航班信息/TYPEDEFSTRUCTCHARPLANENUMBER10/航班号/CHARTAKE_OFF_CITY20/起飞城市/CHARARRIVED_IN_CITY20/抵达城市/CHARTAKEOFF_TIME20/起飞时间/CHARLANDING_TIME20/降落时间/INTSHIPPING/舱位数/CHARPRICE5/票价/CHARDISCOUNT5/折扣/GUESTGUEST20INTSITFLY/菜单函数,函数返回值为整数,代表所选的菜单项/MENU_SELECTINTCPRINTF“按任意键返回主菜单N“/提示压任意键继续/GETCH/读入任意字符/PRINTF“WELCOMETONN“PRINTF“TICKETSBOOKINGSYSTEMNN“PRINTF“MENUNN“PRINTF“0输入航班信息N“PRINTF“1列出航班的信息N“PRINTF“2按航班号查询航班信息N“PRINTF“3按城市来查询航班N“PRINTF“4订票程序N“PRINTF“5退票系统N“PRINTF“6修改飞机航班的信息N“PRINTF“7保存文件N“PRINTF“8读取和下载文件N“PRINTF“9退出N“PRINTF“NN“DOPRINTF“N输入你的选择项09“/提示输入选项/SCANF“D“,/输入选择项/WHILEC0|C9/选择项不在9之间重输/RETURNC/返回选择项,主程序根据该数调用相应的函数/输入函数/INTENTERFLYTINTI,K,N,M,W,JCHARSPRINTF“输入航线总数N40“/输入航线总数/SCANF“D“,WHILEN40|N0PRINTF“输入错误再次输入0N40“/输入航线总数/SCANF“D“,PRINTF“输入航班的信息NN“/提示信息/PRINTF“航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣N“PRINTF“FORI0INISCANF“S“,TIPLANENUMBER/输入姓名/SCANF“S“,TITAKE_OFF_CITY/输入起飞城市/SCANF“S“,TIARRIVED_IN_CITY/输入降落城市/SCANF“S“,TITAKEOFF_TIME/输入起飞时间/SCANF“S“,TILANDING_TIME/输入降落时间/SCANF“D“,/输入舱位数/SCANF“S“,TIPRICE/输入票价/SCANF“S“,TIDISCOUNT/输入折扣/PRINTF“FORI0INITISIT0RETURNN/返回记录条数/显示记录,参数为记录数组和记录条数/VOIDLISTFLYT,INTNINTIPRINTF“航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣N“PRINTF“FORI0INIPRINTF“12S12S10S12S10S7D7S7SN“,TIPLANENUMBER,TITAKE_OFF_CITY,TIARRIVED_IN_CITY,TITAKEOFF_TIME,TILANDING_TIME,TISHIPPING,TIPRICE,TIDISCOUNTPRINTF“ENDN“/按航班号查找记录/VOIDSEARCH1FLYT,INTNCHARS20/保存待查找航班名字符串/INTIPRINTF“输入你想查找的航班名“SCANF“S“,S/输入待查找航班名/FORI0INI/从第一条记录开始,直到最后一条/IFSTRCMPS,TIPLANENUMBER0/记录中的航班名和待比较的是否相等/BREAK/相等,则返回该记录的下标号,程序提前结结束/IFIN1/如果整数I值大于N1,说明没找到/PRINTF“没有找到N“ELSEPRINTF“航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣N“/显示记录/PRINTF“PRINTF“12S12S10S12S10S7D7S7SN“,TIPLANENUMBER,TITAKE_OFF_CITY,TIARRIVED_IN_CITY,TITAKEOFF_TIME,TILANDING_TIME,TISHIPPING,TIPRICE,TIDISCOUNT/按起降城市查找记录/VOIDSEARCH2FLYT,INTNCHARS120CHARS220INTIPRINTF“输入起飞城市名称“SCANF“S“,S1/输入起飞城市名/PRINTF“输入降落城市名称“SCANF“S“,S2/输入降落城市名/FORI0INI/从第一条记录开始,直到最后一条/IFSTRCMPS1,TITAKE_OFF_CITY0/相等,则返回该记录的下标号,程序提前结结束/IFIN1/如果整数I值大于N1,说明没找到/PRINTF“没有找到N“ELSEPRINTF“航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣N“/找到,显示记录/PRINTF“PRINTF“12S12S10S12S10S7D7S7SN“,TIPLANENUMBER,TITAKE_OFF_CITY,TIARRIVED_IN_CITY,TITAKEOFF_TIME,TILANDING_TIME,TISHIPPING,TIPRICE,TIDISCOUNT/订票/VOIDBOOKFLYT,INTNCHARS20,NUMBER110,NAME110,ID120,FLIGHTNAME110INTI,J0,M,K,COUNT1PRINTF“输入你想预订的票数“SCANF“D“,PRINTF“号码姓名证件号订的票数航班号N“/提示信息/PRINTF“FORK0KMKSCANF“S“,NUMBER1SCANF“S“,NAME1/输入订票客户姓名/SCANF“S“,ID1/输入证件号/SCANF“D“,/输入订票票数/SCANF“S“,FLIGHTNAME1/输入航班号/FORI0INI/从第一条记录开始,直到最后一条/IFSTRCMPFLIGHTNAME1,TIPLANENUMBER0/记录中的航班名和待比较的是否相等/JTISITSTRCPYTIGUESTJNUMBER,NUMBER1STRCPYTIGUESTJNAME,NAME1STRCPYTIGUESTJID,ID1TIGUESTJCOUNTCOUNT1STRCPYTIGUESTJFLIGHTNAME,FLIGHTNAME1TISHIPPINGTISHIPPINGCOUNT1TISITBREAK/相等,则返回该记录的下标号,程序提前结结束/IFIN1/如果整数I值大于N1,说明没找到/PRINTF“对不起没有此航班N“MM2K/退票/VOIDQUITFLYT,INTNCHARS120,S220/保存待查找航班名和证件号字符串/INTI,K,J,H,L,CHPRINTF“请输入你想退订的航班号“SCANF“S“,S1/输入待查找航班名/PRINTF“请输入你的证件号“SCANF“S“,S2/输入待查找证件号/PRINTF“号码姓名证件号订的票数航班号N“/显示提示/PRINTF“FORI0INI/从第一条记录开始,直到最后一条/FORJ0JTISITJIFSTRCMPS1,TIGUESTJFLIGHTNAME0TISHIPPINGTISHIPPINGTIGUESTJCOUNTLJHIBREAKIHIFIN1/如果整数I值大于N1,说明没找到/PRINTF“没有找到N“ELSEPRINTF“你是否确认删除1/0N“/确认是否要删除/SCANF“D“,/输入一个整数或/IFCH1/如果确认删除整数为/FORKL1KTISITKSTRCPYTIGUESTK1NUMBER,TIGUESTKNUMBER/将后一条记录的姓名拷贝到前一条/STRCPYTIGUESTK1NAME,TIGUESTKNAMESTRCPYTIGUESTK1ID,TIGUESTKIDTIGUESTK1COUNTTIGUESTKCOUNTSTRCPYTIGUESTK1FLIGHTNAME,TIGUESTKFLIGHTNAMETISITPRINTF“退票成功N“/提示退票成功/修改航班信息/VOIDCHANNGEFLYT,INTNCHARS20/要删除记录的姓名/INTI,JPRINTF“请输入你要修改的航班号“/提示信息/SCANF“S“,S/输入航班名/FORI0INI/从第一条记录开始,直到最后一条/IFSTRCMPS,TIPLANENUMBER0/记录中的航班名和待比较的是否相等/BREAK/相等,则返回该记录的下标号,程序提前结结束/IFIN1/如果整数I值大于N1,说明没找到/PRINTF“没有找到N“ELSEPRINTF“航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣N“/找到,显示原先记录/PRINTF“PRINTF“12S12S10S12S10S7D7S7SN“,TIPLANENUMBER,TITAKE_OFF_CITY,TIARRIVED_IN_CITY,TITAKEOFF_TIME,TILANDING_TIME,TISHIPPING,TIPRICE,TIDISCOUNTPRINTF“PLEASEINPUTTHENEWINFORMATIONN“SCANF“S“,TIPLANENUMBER/输入航班名/SCANF“S“,TITAKE_OFF_CITY/输入起始城市/SCANF“S“,TIARRIVED_IN_CITY/输入终点城市/SCANF“S“,TITAKEOFF_TIME/输入起飞时间/SCANF“S“,TILANDING_TIME/输入降落时间/SCANF“D“,TISHIPPING/输入座位号/SCANF“S“,TIPRICE/输入票价/SCANF“S“,TIDISCOUNT/输入折扣/保存资料/VOIDSAVEFLYT,INTNINTI,JFILEFP/指向文件的指针/IFFPFOPEN“RECORD1TXT“,“WB“NULL/打开文件,并判断打开是否正常/PRINTF“CANNOTOPENFILEN“/没打开/EXIT1/退出/PRINTF“N保存文件N“/输出提示信息/FPRINTFFP,“D“,N/将记录数写入文件/FPRINTFFP,“RN“/将换行符号写入文件/FORI0INIFPRINTFFP,“SSSSSDSS“,TIPLANENUMBER,TITAKE_OFF_CITY,TIARRIVED_IN_CITY,TITAKEOFF_TIME,TILANDING_TIME,TISHIPPING,TIPRICE,TIDISCOUNTFPRINTFFP,“RN“/将换行符号写入文件/FPRINTFFP,“D“,TISIT/将记录数写入文件/FPRINTFFP,“RN“/将换行符号写入文件/FORJ0JTISITJFPRINTFFP,“SSSDS“,TIGUESTJNUMBER,TIGUESTJNAME,TIGUESTJID,TIGUESTJCOUNT,TIGUESTJFLIGHTNAME/格式写入记录/FPRINTFFP,“RN“/将换行符号写入文件/FCLOSEFP/关闭文件/PRINTF“恭喜保存成功N“/显示保存成功/读入函数,参数为结构体数组/INTLOADFLYTINTI,N,JFILEFP/指向文件的指针/IFFPFOPEN“RECORD1TXT“,“RB“NULL/打开文件/PRINTF“不能打开N“/不能打开/EXIT1/退出/FSCANFFP,“D“,/读入记录数/FORI0INIFSCANFFP,“SSSSSDSS“,TIPLANENUMBER,TITAKE_OFF_CITY,TIARRIVED_IN_CITY,TITAKEOFF_TIME,TILANDING_TIME,FSCANFFP,“D“,/读入记录数/FORJ0JTISITJFSCANFFP,“SSSDS“,TIGUESTJNUMBER,TIGUESTJNAME,TIGUESTJID,/按格式读入记录/FCLOSEFP/关闭文件/PRINTF“你已经成功从文件读取数据NNNN“/显示读取成功/RETURNN/返回记录数/主函数/MAININTIFLYFLIGHTQINTLENGTH/保存记录长度/FOR/无限循环/SWITCHMENU_SELECT/调用主菜单函数,返回值整数作开关语句的条件/CASE0LENGTHENTERFLIGHTBREAK/输入记录/CASE1LISTFLIGHT,LENGTHBREAK/显示全部记录/CASE2SEARCH1FLIGHT,LENGTHBREAK/查找记录/CASE3SEARCH2FLIGHT,LENGTHBREAK/查找记录/CASE4BOOKFLIGHT,LENGTHBREAK/订票/CASE5QUITFLIGHT,LENGTHBREAK/退票/CASE6CHANNGEFLIGHT,LENGTHBREAK/修改航班信息/CASE7SAVEFLIGHT,LENGTHBREAK/保存文件/CASE8LENGTHLOADFLIGHTBREAK/读文件/CASE9EXIT0/如返回值为则程序结束/4系统运行时窗口截图(VC60下的运行结果)订票系统菜单窗口0输入航班的信息1列出航班的信息2按航班号查询航班信息3按城市来查询航班4订票程序5退票系统6修改飞机航班的信息7保存文件8读取文件、下载文件图的遍历过程演示需求分析设计程序完成如下功能对给定的图的结构和起点,产生深度优先遍历和广度优先遍历,并列出求解的过程动态演示。主要设计思路设计思想简而言之,深度优先,就是先遍历它的一个邻接点,这个邻接点的邻接点然后才遍历其他的邻接点。广度优先,就是先把它所有的邻接点都遍历完以后,再遍历它每个邻接点的邻接点。存储结构为图的邻接多重表,它是无向图的一种链式存储结构。深度优先遍历设X是当前被访问顶点,在对X做过访问标记后,选择一条从X出发的未检测过的边X,Y。若发现顶点Y已访问过,则重新选择另一条从X出发的未检测过的边,否则沿边X,Y到达未曾访问过的Y,对Y访问并将其标记为已访问过;然后从Y开始搜索,直到搜索完从Y出发的所有路径,即访问完所有从Y出发可达的顶点之后,才回溯到顶点X,并且再选择一条从X出发的未检测过的边。上述过程直至从X出发的所有边都已检测过为止。此时,若X不是源点,则回溯到在X之前被访问过的顶点;否则图中所有和源点有路径相通的顶点即从源点可达的所有顶点都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新源点,进行新的搜索过程。广度优先遍历设X和Y是两个相继要被访问的未访问过的顶点。它们的邻接点分别记为X1,X2,XS和Y1,Y2,YT。为确保先访问的顶点其邻接点亦先被访问,在搜索过程中使用队列来保存已访问过的顶点。当访问X和Y时,这两个顶点相继入队。此后,当X和Y相继出队时,我们分别从X和Y出发搜索其邻接点X1,X2,XS和Y1,Y2,YT,对其中未访者进行访问并将其入队。这种方法是将每个已访问的顶点入队,故保证了每个顶点至多只有一次入队。图的算法构造思想1CREATEALGRAPH初始条件V是图的顶点集,VR是图中弧的集合操作结果按V和VR是定义构造图G2DESTROYGRAPH否则返回其他信息4GETVEXG,V初始条件图G存在,V是G中顶点操作结果返回V的值5FIRSTAJVEXG,V初始条件图G存在,V是G中顶点操作结果返回V的第一个邻接顶点,若顶在图中没有邻接顶点,则返回为空6NEXTAJVEXG,V,W初始条件图G存在,V是G中顶点,W是V的邻接顶点操作结果返回V的下一个邻接顶点,若W是V的最后一个邻接顶点,则返回空7DELETEVEXX/定义枚举变量TYPEDEFSTRUCTARCNODE/图的邻接表存储INTADJVEX/该弧所指向的顶点的位置STRUCTARCNODENEXTARC/指向下一条弧的指针ARCNODE/弧结点TYPEDEFSTRUCTARCNODEADJLIST_VERTEX_NUM/指向第一条依附该顶点的弧的指针INTVEXNUM,ARCNUM/图的当前顶点和弧数GRAPHTYPEDEFSTRUCT/队列结构INTELEMQSIZE/数据域INTFRONT/队头指针INTREAR/队尾指针SUEUEBOOLVISITED_VERTEX_NUM/全局变量访问标志数组VOIDCREATEGRAPHGRAPH/生成图的邻接表VOIDDFSTRAVERSEGRAPH/深度优先搜索遍历图VOIDDFSGRAPH,INTVOIDBFSTRAVERSEGRAPH/广度优先搜索遍历图VOIDINITIALSUEUE/初始化一个队列BOOLQUEUEEMPTYSUEUE/判断队列是否空BOOLENQUEUESUEUE/将一个元素入队列BOOLDEQUEUESUEUE/将一个元素出队列INTFIRSTADJVEXGRAPH,INT/求图中某一顶点的第一个邻接顶点INTNEXTADJVEXGRAPH,INT,INT/求某一顶点的下一个邻接顶点INTMAINGRAPHG/采用邻接表结构的图CHARJYPRINTF“题目编制一个“图遍历的演示”的程序N“/PRINTF“N本程序将演示生成一个图,并对它进行遍历N“PRINTF“输入图的顶点数和弧数N格式顶点数,弧数;例如5,4N“PRINTF“接着输入各边弧尾,弧头N例如5,3N3,1N1,2N2,4N“PRINTF“程序会生成一个图,并对它进行深度和广度遍历N“PRINTF“深度遍历12435N广度遍历12345N“/WHILEJNSCANF“D,D“,/输入图的顶点数和弧数CREATEGRAPHG/生成邻接表结构的图DFSTRAVERSEG/深度优先搜索遍历图BFSTRAVERSEG/广度优先搜索遍历图PRINTF“图遍历完毕,继续进行吗Y/N“SCANF“C“,VOIDCREATEGRAPHGRAPHINTSTART,ENDARCNODESFORI1IGVEXNUMIGADJLISTINULL/初始化指针数组FORI1IGARCNUMISCANF“D,D“,/输入弧的起点和终点SARCNODEMALLOCSIZEOFARCNODE/生成一个弧结点SNEXTARCGADJLISTSTART/插入到邻接表中SADJVEXENDGADJLISTSTARTSSARCNODEMALLOCSIZEOFARCNODESNEXTARCGADJLISTENDSADJVEXSTARTGADJLISTENDSVOIDDFSTRAVERSEGRAPHG/深度优先遍历图GINTIPRINTF“深度优先遍历“FORI1IGVEXNUMIVISITEDIFALSE/访问标志数组初始化FORI1IGVEXNUMIIFVISITEDIDFSG,I/对尚未访问的顶点调用DFSPRINTF“BBN“VOIDDFSGRAPHG,INTI/从第I个顶点出发递归地深度遍历图GINTWVISITEDITRUE/访问第I个顶点PRINTF“D“,IFORWFIRSTADJVEXG,IW0WNEXTADJVEXG,I,WIFVI

温馨提示

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

评论

0/150

提交评论