《软件设计实践》报告学生姓名:高翠艳学号:10050741X23学院:信息与通信工程专业:通信工程专业题目:航空客运订票系统完成时间:指导教师:一、需求分析:基本要求:1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。设计思想我们需要建立的是具有能对数据的插入,删除,检索功能的软件。由于乘客的数量较大且不固定,因此选择用链表来保存乘客的基本信息:终点站名,航班号,飞机号,飞行时间(星期几),成员定额,余票量等等,由于预约人数无法预计,队列也应以链表作存储结构。所以我们建立一个可以插入和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中。系统主要实现的操作和功能是:查询航线,订票功能,退票功能。要实现这些功能,首先要使程序实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息满足客户的要求。基本实现1)查询航线:根据旅客提出的终点站名输出下列信息:航班号,飞机星期几飞行,价格和剩余票额等业务。2)承办订票业务:根据客户提出的要求(终点站)查询该航班票额情若尚有余票,则为客户办理订票手续,输出座位号;若以满员,则需重新询问客户要求。若需要,可购买下一次航班或者等待看有没有人退票;3)承办退票业务:根据客户提供的情况(日期,航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户二、概要设计:(1)初始化航线信息(2)根据客户提出的终点站名,调用find()函数寻找航线信息,调用list函数输出航线信息(3)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。(4)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。(5)退出本系统三、详细设计:主菜单控制函数函数名voidmain()操作结果a)录入航线信息b)查询航线c)办理订票业务d)办理退票业务e)退出系统四、程序设计与程序调试:航空订票系统编辑航线办理订票办理退票退出系统#includestdio.h#includestring.h#includestdlib.h#includemath.h#defineok1typedefstructYidingkehu{//单链表charname[15];//已订票的客户姓名intdingpiaoshu;//已订票数量structYidingkehu*next1;}Yidingkehu,*Link;typedefstructWeidingkehu{//单链队charname[15];//预订票的客户姓名intyudingpiao;//要订票数量structWeidingkehu*next2;//下一个链队结点指针}Weidingkehu,*Qptr;typedefstruct{Qptrfront;//单链队头结点Qptrrear;//单链队尾结点}linkQueue;typedefstructHangxian{//创建一个航线的结构体charhangbanhao[15];//航班号-charfeijihao[15];//飞机号intfeixingriqi;//起飞时间intlevel;//仓位intyupiao;//余票charzhongdianzhan[15];//降落城市structHangxian*next;//指向下一个链结点的指针structYidingkehu*yiding;//定义一个指向已订票客户的头结点指针structWeidingkehu*yudingqueue;}Hangxian,*Linklist;structHangxian*L=NULL;//定义全局量structYidingkehu*H;//为已订票客户链队来申请空间linkQueueQ;//linkQueue类型的来申请空间LinklistInitLinklist();//声明intInsertLinklist(Linklist&head1);//声明voidhbhchaxun();//通过航班号查询voidmddchaxun();//通过目的地查询voidlurugongneng();//初始化录入功能voidchaxungongnen();//查询功能voiddingpiaogongnen();//订票功能voidtuipiaogongnen();//退票功能voidmain(){H=(structYidingkehu*)malloc(sizeof(Yidingkehu));Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));InitLinklist();intn;do{//打印主界面printf(\t欢迎使用航空客运订票系统\n);printf(\t+++++++++++++++++++++++++++++\n);printf(\t==1.录入功能==\n);printf(\t==2.查询功能==\n);printf(\t==3.订票功能==\n);printf(\t==4.退票功能==\n);printf(\t==5.退出==\n);printf(\t+++++++++++++++++++++++++++++\n);printf(\t请选择:);scanf(%d,&n);printf(\n);switch(n){case1:lurugongneng();//录入功能break;case2:chaxungongnen();//查询功能break;case3:dingpiaogongnen();//订票功能break;case4:tuipiaogongnen();//退票功能break;default:exit(0);//退出}}while(n==1||n==2||n==3||n==4);}五、测试结果:六、实验总结:在一周半的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题:程序在起初设计的时候,经常出现溢出错误,而且不只一处。为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,经过这次实习,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。这次的设计,让我大大地感觉到,对于程序设计中,对语言再熟悉也比不过在设计中算法和结构分析的真知灼见。当然,成功的程序设计是要建立在熟悉语言的基础之上的。平时语言的基本功要扎实。而每一次程序设计的经营能大大地增加对语言的熟悉和感知。程序设计的技能来自多方面,每一次的亲自实践、思考揣摩、刨根问底就会让自己更加清楚所欠缺的是什么。所以,现在觉得在设计实践中作为参考的书册阅读和研究远远比过单纯的阅读,因为它是在最紧迫的时间上填补自己最紧迫的不足。附录:voidmain(){H=(structYidingkehu*)malloc(sizeof(Yidingkehu));Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));InitLinklist();intn;do{//打印主界面printf(\t欢迎使用航空客运订票系统\n);printf(\t+++++++++++++++++++++++++++++\n);printf(\t==1.录入功能==\n);printf(\t==2.查询功能==\n);printf(\t==3.订票功能==\n);printf(\t==4.退票功能==\n);printf(\t==5.退出==\n);printf(\t+++++++++++++++++++++++++++++\n);printf(\t请选择:);scanf(%d,&n);printf(\n);switch(n){case1:lurugongneng();//录入功能break;case2:chaxungongnen();//查询功能break;case3:dingpiaogongnen();//订票功能break;case4:tuipiaogongnen();//退票功能break;default:exit(0);//退出}}while(n==1||n==2||n==3||n==4);}题目:小组成员:姓名学号完成日期:程序清单及解释说明