0C语言-数据结构课程设计实验报告姓名XX学号XXXXXXXX班级XXXXXXXX指导老师XXXXXXXX课题航空客运订票系统12目录一、问题描述.....................................2二、基本要求......................................2三、软件模块结构图................................2四、程序设计思想..................................3五、程序流程图....................................3六、调试分析......................................9七、测试数据.....................................10八、心得体会.....................................15九、用户使用手册.................................16十、源程序.......................................163一、问题描述设计一个机票销售系统,其中,每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。二、基本要求系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。三、软件模块结构图4四、程序设计思想此课题是利用链表,来设计实现设计一个机票销售系统。首先,在程序开头,设定了一些结构体。如,typedefstructpassenger_wait,typedefstructpassenger_ready,structairline来分别定义等候替补客户名单,已订票成功的客户信息以及航班信息。还有结构体typedefstructpqueue,结构体指针成员是等候替补客户名单域的头指针和尾指针。此后,按照系统功能提示,设定了:1、浏览航班信息(list)2、查询航班信息(search)3、查询航班客户信息(prtlink)4、订票(book)5、退票(return_tkt)5个功能函数来实现系统功能,实现了系统的浏览,查询,调用客户信息以及订票、退票功能。为了实现上述功能,还设定了一些辅助函数,如:linkqueueappendqueue(linkqueueq,charname[],intamount),用于将等待替补订票的客户信息插入到等待替补链表中;linklist*insertlink(linklist*head,intamount,charname[],intgrade),用于将订票成功的客户信息以链表的信息存入到订票链表中。最后的主函数main(),包含switch(),通过输入不同的谁调用各个功能函数,以实现系统功能。五、程序流程图1、主函数流程图:主函数主要用于对结构体structairline进行附值并调用函数。对结构体airline进行附值,采用的是结构体数组的形式,这使得存储空间是连续的,有利于指针的移动。附值的信息作为查询,订票的信息依据。之后利用switch进行选择调用不同的系统函数。52、menu主菜单主菜单主要用于输出程序运行界面并将结果值返回给函数。63、list函数List函数用于打印全部航线信息。设定指针*info指向start,之后利用循环语句进行数据的遍历。此处用过调用函数display实现。在不满足循环条件后遍历结束,退出并显示结果。74、航班查询search()航班查询,为用户设定。用户可根据飞机的终点或者航班号来查询有关的航班信息,方便购票。首先,用户输入目的地,本函数依旧利用指针*info对航班信息进行遍历,利用函数strcmp将录入的地名与航班西信息中的ter_name进行对比,如若相同,则利用指针*info返回,否则info后移直至遍历结束,那么,则输出“未找到航班”。85、订票业务book()在本系统中,订票业务是相对复杂,综合的一个任务。它包括了航班的查找,数据的插入等部分。首先利用指针对录入的结构体数组进行遍历,查找出符合条件航班,然后进行信息录入工作,将录入的信息存入到结构体structairline中的book中去,该工作是通过指针info-book以及调用函数insertlink(info-book,amount,name,grade)来实现的。录入订票信息是,若输入的订票数量大于现有余额数量,将会提示订票不成功。订票成功后,航班的余票数量也会跟着改变。96、退票业务return_tkt()10六、调试分析调试中遇到的问题及解决方案(1)问题:在编写程序是,没有良好的编写习惯,格式凌乱,以致在编译时,出现了多个重复的分号”;”丢失的报错。如图:11解决方案:在咨询老师后连接到,该问题是由编写格式不够规范,左右括号没有对应照成的。在将程序的所有括号一一对应之后,报错消失了。(2)问题:关于航班信息初始化,在程序完成之初,在初始化航班信息时,采用的是直接将信息作为结构体变量写入程序中,为之后航班信息的浏览以及查找打来很多不便。解决方案:在仔细查阅C程序设计(清华大学出版社)后,决定采用结构体数组的形式录入航班信息。由于航班信息的存储空间是连续的,这样极大的便利了指针的移动以及遍历,为之后的查找,订票,退票业务带来了方便。(3)问题:在进行结构体数组初始化,录入航班信息后报错无效,即录入的内容,如destination:北京与定义的destination[10]字符数不同,无法录入。解决问题:在老师的帮助排查下,发现是航班信息初始化是,北京等汉字信息全均有空格,在将空格删除后,报错消失。(4)问题:主页面制作时,选择所需办理的业务序号,用inti返回输入的值,若返回的值超过6,则按任意键返回并再重新输入,而若输入n个字符,其中n大于1,那么就要按任意键返回n次才可继续。解决方案:将用inti返回输入值改为用字符串s返回输入结果。之后用函数atoi(s)将s转化为整形即可。(5)问题:在编译过程中,提示定义的变量(linklist*new0;)定义无效,提示无法识别new这一变量。解决方案:在请教过老师后得知new变量可能与编译系统中的功能函数重复导致系统无法识别其为一变量。于是将new变量均改为new0。七、测试数据对系统功能进行测试,结果如下:12(1)进入系统后系统界面:(2)浏览航线信息(3)查询航线查询航线信息是输入终点来查询,如图13但当查询的地点与原本系统中录入的航班信息不符时,系统将会进行提醒(4)办理订票业务订票业务是通过首次按查询航班号,然后输入订购信息进行订票业务。在输入航班号是,如果输入了系统录入信息中不存在的航班号,系统会进行提示。在输入存在的航班号后,进入订票界面,开始录入订票信息,而如果所需要的票数大于该航班的剩余票数的话,程序会给出提醒,订票未成功。14在票数合适的情况下,订票成功并且系统显示座位号:在订票业务成功后再查询航班信息(即进行服务1),余票数额发生变化。(5)查询已订票客户信息15(6)办理退票业务在办理完退票业务后,查询航班信息是,余票量做相应的改变:16(6)退出系统八、心得体会通过本次实验设计,感想有三:17首先,在实践中培养良好的编程习惯。在此次实验编译中,有多次编译报错的原因就来自于编程格式不规范。格式不规范,不仅为自己检查时增加了难度,更直接影响编译结果,带来诸多不便。所以在下次编程时,要格外注意书写格式,力求源代码内容清晰明了。其次,此次程序编写,走了很多弯路,原因在于,没有重视程序编写前的程序逻辑架构规划。在编写时,很多问题没有思虑周全,在不得不涉及时才匆忙编写导致整体运行时出了很多的矛盾与不妥之处,而修正起来又很复杂费事,浪费大量时间并使程序结构混乱,无从下手。所以,在下次编写程序时,需要提前做好规划编写。即在编写之前,做到知道自己要干什么,怎么干,即用什么方式实现一个功能,在编写各个函数时,事先做好规划,如何联系各个函数,如何嵌套事先较为复杂的功能。再次,在编写程序是要注意新知识的学习,注意查阅资料以完善程序。同时,更要考虑到实际情况,即考虑用户体验和感受,使程序更加具有实用性并更加完善。九、用户使用手册本系统为飞机票管理系统,是针对订票客户设计的一款简易的服务系统。本系统的特色是内容简洁明了,易于使用,查询、订票、退票等功能一应俱全,快捷方便。本系统包括:(1)、查询全部航班信息。(2)、浏览订票客户信息。(3)、查询航班(即根据客户要到达的目的地,查询机票信息)。(4)、订票业务(需要客户的姓名,身份ID,电话号码)。(5)、退票业务。五大功能。支持用户的查询,订票退票操作。在使用本系统时,请按照系统内的提示进行操作。浏览航线信息:输入相应的选项序号,即可浏览所有的航班信息,包括终点,18航班号,飞机号,飞行周日,总票量以及剩余票量。浏览已订票客户信息:输入相应的航班号即可浏览订票的客户姓名。查询航线:输入您的目的地,即可得到相应的航班信息,如果航空公司资源的原因部分城市并未被收入到系统信息中,系统将会给出提醒。订票业务:输入要预定的航班号,即可订票,订票时将会需要您的姓名,身份ID以及订票数,请您自行填写并认真检查自己所填写的内容是否正确。订票成功的同时系统会给出您的座位号。退票业务:输入航班号后输入您的姓名即可退票,注意,退票时将您一次预定的票同时退掉。若在使用时,系统出现故障或者崩溃现象,请及时联系我们:6026*****@qq.com。对于你们的建议和批评,我们将不胜感激。十、源程序#includestdio.h#includestdlib.h/*程序中包含C语言的常用函数*/#includestring.h#defineMAXSIZE10typedefstructpassenger_wait{charname[10];/*姓名*/charID[20];//身份证号charphone[11];//电话inttickets_wait;/*订票量*/structpassenger_wait*next;}qnode,*qptr;typedefstructpqueue{qptrfront;/*等候替补客户名单域的头指针*/qptrrear;/*等候替补客户名单域的尾指针*/19}linkqueue;typedefstructpassenger_ready{charname[10];/*客户姓名*/charID[20];//身份证号charphone[11];//电话inttickets_ready;/*订票量*/chargrade;/*舱位等级*/structpassenger_ready*next;}linklist;structairline{charter_name[20];/*终点站名*/charplane_num[10];/*飞机号*/charair_num[10];/*航班号*/charday[10];/*飞行周日(星期几)*/inttickets_total;/*乘员定额*/inttickets_left;/*余票量*/linklist*book;/*乘员名单域,指向乘员名单链表的头指针*/linkqueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头