《数据结构课程设计之飞机订票系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计之飞机订票系统.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、青岛理工大学 数据结构课程设计报告 题目 飞机订票系统 院系 学生姓名: 班级 学号 起迄日期: 指导教师: 20212021年度 第 2 学期 指导教师评语 成绩 签名 年 月 日 一、需求分析 1.问题描述 设计一个模拟飞机订票系统通过此系统可以录入、查询、修改航班情况完成用户订票和退票功能并且可以保存客户和航班的资料。 2.根本功能 1 录入航班信息。 没个航班的信息包括航班号起飞、抵达城市座位总数剩余座位数。数据由使用者输入。 数据存储在txt文件中采用线性表的链式结构。 2 加载航班和客户信息。 可以自动加载保存在txt文件中的航班和客户的信息。 3 查询航班。 可以通过输入航班号查
2、询该航班的所有信息。 可以通过输入起飞抵达的城市查询航班的信息。 4 订票。 客户的信息包括姓名证件号所订票的航班号座号。 用户输入要订票的航班号如果该航班未满那么订票成功并记录客户的信息。如果该航班已满那么订票失败输出所有未满的航班信息供用户选择。 5 退票。 删除退票用户的订票信息相应的航班的剩余票数增加1。 6 修改航班信息。 用户输入要修改的航班号和要修改的内容修改该航班的相应信息。 7 保存操作。 把当前的航班信息和用户信息分别保存在txt文件中。 8 输出所有客户信息。 按一定的格式输出用户的姓名证件号码航班号座号。 9 输出所有航班信息。 按一定的格式输出所有的航班的航班号起飞抵
3、达城市座位总数剩余座位数。 0 退出系统。 3.输入输出 在控制台下根据提示输入要完成功能的标号然后在提示下选择性的输入航班号、起飞抵达地、证件号码或者姓名等。系统会根据用户的输入输出相应的航班信息或者用户信息。 二、 概要设计 1.设计思路 对于航班和用户分别定义不同的数据结构并且采用线性表的链式结构进行存储。然后根据要完成的功能分模块用函数实现。 所用到的算法主要有链表的创立增加遍历插入删除。 2.数据结构设计 采用的逻辑结构是线性结构。存储结构是链式结构。 /航线结构体。 typedef struct airline char line_num10/航班号 char start_plac
4、e20/起飞地 char end_place20/目的地 int total/座位总数 int left/剩余座位 struct airline next/下一个结点 airline /航线结构体的头结点。 typedef struct airlinehead int count airline next airlinehead /客户结构体 typedef struct client char name20/顾客名 char id10/顾客证件号 char line_num10/航班号 int seat_num/座位号 struct client next/下一个结点 client /客户结
5、构体的头结点。 typedef struct clienthead int count client next clienthead 采用线性链表的原因1航班情况和客户信息与均成线性与线性表的结构相符合。2由于本系统对数据的插入和删除较频繁所以更适合链式存储结构。 3.软件结构设计 /对航班的操作/ airlinehead importint nairlinehead pheadline/录入航班函数n为所要录入航班的数量 airline queryairlinehead phead /查询航班情况 void display_lineairline node/打印一个航班结点的所有信息到屏幕
6、void display_all_lineairlinehead headline/打印所有航班的信息到屏幕 int change_lineairlinehead headline/修改航班信息。 void display_left_airlineairlinehead headline/输出未售完票的航班的信息 /对客户的操作/ void display_clientclient nodeNULL/打印一个客户节点的信息到屏幕。 void display_all_clientclienthead headclient/打印所有客户信息到屏幕。 int bookticketairlinehea
7、d headlineclienthead headclient/订票 int returnticketairlinehead headlineclienthead headclient/退票。 /对文件的操作/ int savemessageairlinehead headlineclienthead headclient/保存航班和客户的信息到相应的txt文件中。 int loadmessageairlinehead headlineclienthead headclient/加载保存在文件中的信息。 模块之间的关系框图 主函数main录入航班信息Import加载航班信息loadmessag
8、e查询航线信息query客户订票bookticket客户退票Returnticket保存操作Sabemessage输出所有航班信息display_all_line输出所有客户信息display_all_client 三、 详细设计 1. 定义程序中所有用到的数据及其数据结构及其根本操作的实现 /航线结构体。 typedef struct airline char line_num10/航班号 char start_place20/起飞地 char end_place20/目的地 int total/座位总数 int left/剩余座位 struct airline next/下一个结点 air
9、line /航线结构体的头结点。 typedef struct airlinehead int count airline next airlinehead /客户结构体 typedef struct client char name20/顾客名 char id10/顾客证件号 char line_num10/航班号 int seat_num/座位号 struct client next/下一个结点 client /客户结构体的头结点。 typedef struct clienthead int count client next clienthead 2主函数和其他函数的算法 /主函数/ v
10、oid main airlinehead headline new airlinehead headline-gtcount0 headline-gtnextNULL clienthead headclient new clienthead headclient-gtcount0 headclient-gtnextNULL while1 main_menu int n coutltltquot请选择您老人家要进行的操作: quot cingtgtn coutltltendl switchn case 1: int num coutltltquot请选择您老人家要录入的航班的数目 quot ci
11、ngtgtnum coutltltendl importnumheadline coutltltendl /display_all_lineheadline coutltltquot航班信息成功录入。quot coutltltendlltltendl break case 2: loadmessageheadlineheadclient break case 3: airline find findqueryheadline iffind display_linefind break case 4: bookticket headlineheadclient /display_all_clie
12、ntheadclient break case 5: returnticketheadlineheadclient break case 6: savemessageheadlineheadclient break case 7: display_all_lineheadline break case 8: display_all_clientheadclient break case 0: exit1 break /订票函数的实现/ int bookticketairlinehead headlineclienthead headclient /订票 coutltltquot请输入航班号 q
13、uot char line_num10 cingtgtline_num airline temp tempheadline-gtnext whiletemp ifstrcmptemp-gtline_numline_num0 break temptemp-gtnext iftemp coutltltquot未找到该航班quotltltendl return 0 iftemp-gtleft0 coutltltquot对不起该航班票已经售完。quotltltendl coutltltquot请选择其他适宜的航班quot client customnew client coutltltquot请输入你
14、的证件号码 quot cingtgtcustom-gtid coutltltendl coutltltquot请输入你的姓名quot cingtgtcustom-gtname coutltltendl custom-gtseat_numtemp-gttotal - temp-gtleft 1 custom-gtnextNULL strcpycustom-gtline_numline_num temp-gtleft- headclient-gtcount custom-gtnext headclient-gtnext headclient-gtnext custom coutltltquot订票
15、成功祝您旅途愉快。quot return 1 /退票函数的实现/ int returnticketairlinehead headlineclienthead headclient/退票。 coutltltquot请输入顾客的证件号码id: quot char id10 cingtgtid airline airlinetemp headline-gtnext client clienttemp headclient-gtnext ifNULLairlinetemp coutltltquot当前没有航班信息。quotltltendl return 0 char line_num10 clien
16、t delnext ifstrcmpclienttemp-gtidid0/要删除的节点为第一个时。 strcpyline_numclienttemp-gtline_num headclient-gtnextclienttemp-gtnext delete clienttemp whileairlinetemp/修改对票客户所对应的航班的售票信息。 ifstrcmpline_numairlinetemp-gtline_num 0 airlinetemp-gtleft break airlinetemp airlinetemp-gtnext coutltltquot退票成功生意不成仁义在有时机继续
17、合作。quot return 1 whileclienttemp-gtnext/要删除 的节点不是第一个时。 ifstrcmpclienttemp-gtnext-gtidid0 strcpyline_numclienttemp-gtnext-gtline_num delnext clienttemp-gtnext-gtnext delete clienttemp-gtnext clienttemp-gtnextdelnext/ whileairlinetemp/修改对票客户所对应的航班的售票信息。 ifstrcpyline_numairlinetemp-gtline_num 0 airline
18、temp-gtleft break airlinetemp airlinetemp-gtnext coutltltquot退票成功生意不成仁义在有时机继续合作。quotltltendlltltendl return 1 break clienttemp clienttemp-gtnext coutltltquot未找到该客户的信息。quotltltendl return 0 /保存文件的实现/ int savemessageairlinehead headlineclienthead headclient/保存航班和客户的信息到相应的txt文件中。 ofstream outlinequotai
19、rline.txtquot ifoutline coutltltquot航班信息文件翻开失败。quotltltendl return 0 coutltltquot正在保存航班信息.quotltltendl outlineltltheadline-gtcountltltendl airline linetemp headline-gtnext whilelinetemp outlineltltlinetemp-gtline_numltltquot quot ltltlinetemp-gtstart_placeltltquot quot ltltlinetemp-gtend_placeltltqu
20、ot quot ltltlinetemp-gttotalltltquot quot ltltlinetemp-gtleftltltquot quot ltltendl linetemplinetemp-gtnext outline.close coutltltquot航班信息保存成功.quotltltendl ofstream outclientquotclient.txtquot ifoutclient coutltltquot客户信息文件翻开失败。quotltltendl return 0 coutltltquot正在保存客户信息文件.quotltltendl outclientltlth
21、eadclient-gtcountltltendl client clienttemp headclient-gtnext whileclienttemp outclientltltclienttemp-gtnameltltquot quot ltltclienttemp-gtidltltquot quot ltltclienttemp-gtline_numltltquot quot ltltclienttemp-gtseat_numltltquot quot ltltendl clienttemp clienttemp-gtnext outclient.close coutltltquot客
22、户信息保存成功。quotltltendl return 1 3.主要函数的程序流程图: 开始定义航班头结点并初始化定义客户头结点并初始化。进入无限循环打印菜单用户的选择n2345678录入航班信息1加载航班信息客户订票客户退票保存修改查询航班信息打印所有航班信息打印所有客户信息1结束 4. 画出函数之间的调用关系图。 主函数main录入航班信息Import加载航班信息loadmessage查询航线信息query客户订票bookticket客户退票Returnticket保存操作Sabemessage输出所有航班信息display_all_line输出所有客户信息display_all_clie
23、nt 四、 调试分析 1.实际完成的情况说明完成的功能支持的数据类型等 完成了所有预设的功能可以实现航班的录入、查询、修改和客户的订票、退票保存信息的功能。 2.程序的性能分析包括时空分析 时间复杂度分析在订票和退票函数中都用到了链表的查询算法时间复杂度为logn. 3.上机过程中出现的问题及其解决方案 调试过程中遇到的问题及解决方法 A 语法错误 我的调试一个翻开文件进行写入操作时遇到这样一个问题char filenameC:airline.datfpfopen “filenamewb调试了我一个半小时还是没有找到问题的所在最后发现是在filename上多了一对引号 B 逻辑错误 声明一个指
24、针只是在内存中开辟了一个这种数据类型的空间并让这个指针指向它由于它还没有指向任何变量因此不能引用其指向的任何成员。 4.程序中可以改良的地方说明 考虑到实际操作过程中的情况可以设定每个客户的订票上限和每一张票的价格以及退票时要扣掉的费用。 五、测试结果 1测试所用到的数据如下。 航班号 起飞城市 抵达城市 座位总数 123 China America 30 456 Japan Vietnam 30 789 Chian Englan 30 姓名 证件号码 航班 犀利哥 2021 123 春哥 2021 123 凤姐 2021 789 测试结果 姓名 证件号码 航班 六、用户手册 一 录入航班信息
25、 翻开系统会出现主界面输入1后回车系统会提示要输入航班的个数航班号起飞地目的地座位总数。依次输入 二加载航班信息 翻开系统在主界面输入2.系统会自动加载上次保存的航班信息及客户信息。 操作如图 三 查询航线信息。 选择航线查询功能后会出现如图界面 可以根据需要选择1或者2.然后根据提示输入必要的数据。系统会输出航线信息。 四 客户订票。 在主界面选择4然后依次输入航班号证件号姓名。操作如图 五 客户退票 选择5然后输入证件号操作如图 六 保存操作输出所有航班信息输出所有客户信息。 选择保存操作后系统将把您对数据的修改情况覆盖源文件的信息以txt形式保存在根目录下。 选择输出所有航班信息后系统将
26、输出所有航班的信息。 选择输出所有客户信息后系统将输出所有客户的信息。 七、体会与自我评价 做课程设计的这些天有些累但更多的是充实。有时候一个bug没能解决睡觉时脑袋里也全是代码。这西天收获的绝对不仅仅是完成了课程设计我还体会到了写完程序时带来的那种成就感锻炼了自己的逻辑思维能力。 另外我感觉一个好的的程序并不只是可以运行它还应该满足一大堆的条件如健壮性可读性可维护性高效性等等。 要提高自己的编程能力你必须亲自去体验、去设计、编辑、编译、调试、运行。 开始的时候没有认识到算法的重要性以为语言是程序设计的根底和核心随着学习的深入我渐渐认识到只有好的算法才能写出出类拔萃的的程序。只有对算法的深入理
27、解和知道如何使用相应的算法设计相应的程序才能完成程序设计。 实训中深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式 虽 然对有些时候老师没给我们指出解决问题的方法有些小抱怨 但是到了结束时才知道 这种 教学让我们自己学会了自学学会了去看懂别人的代码.更多是老师给的感动每天在我们 来之前就到了教室 在讲课中海给我们分享他在公司上班的一些心得和体会 还有那些我们 应该注意的事项这些是平时上课时无法学到的是更深层次的巨大收获. 在此之前我也以为自己对C语言已经比拟懂了可还是遇到了一系列问题也学到很多东西。每一个程序员都是在失败、尝试、失败、尝试与收获中成长起来的。作为一个团团的计算机学
28、院大局部学生对计算机竟不大感兴趣导致学院人才凋零。我本学识尚浅无权谈论这些只是希望能对大家有所警醒编程之道漫漫无边吾将上下而求索.最后以林锐先生的话来作为自己的追求目标和最后的结束语以振兴民族软件产业为己任作真实、正值、优秀的科技人员 源代码 includeltiostreamgt includeltfstreamgt using namespace std includeltstdlib.hgt includeltstring.hgt typedef struct client char name20/顾客名 char id10/顾客证件号 char line_num10/航班号 int s
29、eat_num/座位号 struct client next/下一个结点 client typedef struct clienthead int count client next clienthead typedef struct airline char line_num10/航班号 char start_place20/起飞地 char end_place20/目的地 int total/座位总数 int left/剩余座位 struct airline next/下一个结点 airline typedef struct airlinehead int count airline ne
30、xt airlinehead airlinehead importint nairlinehead pheadline/录入航班函数n为所要录入航班的数量 airline temp new airline temp-gtnextNULL pheadline-gtnexttemp pheadline-gtcount n forint i0iltni coutltltquot请输入第quotltlti1ltltquot个航班的航班号 quot cingtgttemp-gtline_num coutltltquot请输入第quotltlti1ltltquot个航班的起飞地 quot cingtgtt
31、emp-gtstart_place coutltltquot请输入第quotltlti1ltltquot个航班的目的地 quot cingtgttemp-gtend_place coutltltquot请输入第quotltlti1ltltquot个航班的座位总数 quot cingtgttemp-gttotal temp-gtleft temp-gttotal coutltltquot第quotltlti1ltltquot个航班成功录入。quotltltendl ifiltn-1 temp-gtnext new airline iftemp-gtnext NULL coutltltquot分配
32、内存失败quotltltendl exit1 temp-gtnext-gtnextNULL temp temp-gtnext return pheadline airline queryairlinehead phead /查询航班情况 airline findNULL airline temp coutltltquotquotltltendl coutltltquot 1按航线查询航班情况。 quotltltendl coutltltquot 2按起飞抵达城市查询航班情况。 quotltltendl coutltltquotquotltltendl coutltltquot请选择quot i
33、nt select cingtgtselect coutltltendl switchselect case 1: coutltltquot请输入航班号quot char line_num10 cingtgtline_num temp phead-gtnext whiletemp ifstrcmptemp-gtline_numline_num 0 find temp /display_linefind return temp break else temp temp-gtnext iftemp coutltltquot没有找到该航班的信息。quotltltendl return NULL br
34、eak case 2: char start_place20/起飞地 char end_place20/目的地 coutltltquot请输入起飞地址quot cingtgtstart_place coutltltquot请输入目的地quot cingtgtend_place /airline temp temp phead-gtnext whiletemp ifstrcmptemp-gtstart_placestart_place0 ampamp strcmptemp-gtend_placeend_place 0 find temp /return temp break temp temp-
35、gtnext iftemp coutltltquot没有找到该航班的信息。quotltltendl return NULL break default: coutltltquot输入错误。quotltltendl break return find void display_lineairline node/打印一个航班结点的所有信息到屏幕 ifnodeNULL coutltltquot参数为空输出失败。quotltltendl return coutltltendl coutltltquot航班号tt起飞地tt目的地tt座位总数t剩余座位tquotltltendl coutltltnode-
36、gtline_numltltquotttquot ltltnode-gtstart_placeltltquotttquot ltltnode-gtend_placeltltquotttquot ltltnode-gttotalltltquottquot ltltnode-gtleftltltquottquot ltltendl void display_all_lineairlinehead headline coutltltendl airline node node headline-gtnext ifnode coutltltquot当前没有航班信息quotltltendl return coutltltquot航班数目 quotltltheadline-gtcountltltendl whilenode displa.