1、C 语言程序设计课程设计报告-航空售票系统目录第 1章 功能需求描述 .21.1 需求分析 .21.2 功能列表与说明 .31.3 操作界面及操作说明 .4第 2章 设计描述 .72.1 任务分解说明 .72.2 数据结构设计说明 .72.3 函数接口即函数调用关系 .9第 3章 算法描述 103.2 按航班号查询函数 113.3 按飞机号查询函数 123.4 按飞行日期查询函数 133.5 按航班终点查询函数 143.7 显示航班客户信息函数 .173.8 管理员操作函数 193.9 订票系统函数 203.10排队订票系统函数 223.11 退票系统函数 .233.12 航班查询函数 .25
2、第 4章 开发过程描述 274.1 源代码 274.2 编译过程错误分析 414.3 调试错误分析 424.4运行结果及说明 .42第 5章 设计心得体会 .460第 1 章 功能需求描述1.1 需求分析随着科技的发展和人们生活水平的日益提高,人们在不断追求更加快捷的交通方式以满足人们快节奏的生活方式,航空系统在交通系统中已扮演着一个越来越重要的角色。然而,交通的快捷离不开信息的快捷。随着计算机的发展和普及,人们的生活方式发生了巨大的改变,计算机在代替和延伸脑力劳动方面发挥着越来越重要的作用。在交通系统中,有大量的数据需要被处理,而这些工作有人来完成几乎是不可能的,而交给计算机处理,就可以很好
3、地满足我们的需求。航空售票管理系统可以根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。11.2 功能列表与说明系统共设有 5个功能并以菜单方式工作,上图为功能列表图。功能分别包括以下 5个方面:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几) 、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2 或 3)以及等候替补的客户名单(包括姓名、所需票量) ;(2)查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行、最近一天航班的日期和余票额;(3)订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况
4、,若有余票,则为客户班里订票手续,输出作为好;若已满或者余票少于订票额,则需要重新询问客户要求。若需要,可等级排队侯补;(4)退票业务:根据客户提供的情况(航班) ,为客户办理退票手续,然后查*欢迎进入航空售票系统*显示所有航线= 1查询航线信息= 2订票业务 = 3退票业务 = 4管理系统 = 5退出系统 = 0*清除屏幕信息= 9请按上面指引操作:2询该航班是否有人排队侯补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队侯补的客户。(5)管理员系统:通过密码认证后可查看所有航班的订票情况,可根据需要增加新的航线。1.3 操作界面及操作说明(1)显
5、示所有航线系统面向用户显示所有航线信息,为用户提供各个航班的信息,供用户参考。(2)查询航线信息用户根据需要可选择三种查询方式,输入“1” ,按航班号查询,系统提示输入要查询的航班号;输入“2” ,按终点站查询,系统提示输入要查询的终点站名;输入“3”,按飞行日期查询,系统提示输入要查询的飞行日期。终点站 航班号 飞机号 飞行日期 余票量北京 001 2586934 1 120上海 002 2682154 2 120广州 003 4558934 3 120天津 004 3667894 4 120请输入查询航班的方式:航班号-1终点站-2飞行日期-33(3)订票业务用户根据所查询的信息,选择相应
6、的航班,系统提示输入订票数量,舱位等级以及用户姓名,最后系统自动提示“订票成功” 。请输入查询航班的方式:航班号-1终点站-2飞行日期-33请输入飞行日期 1终点站 航班号 飞机号 飞行日期 余票量北京 001 2586934 1 120请输入订票数量:请输入舱位等级(1/2/3):请输入您的名字:订票成功,座位号为 114(4)退票业务用户在退票时,按系统提示输入航班号,用户姓名,系统则会自动显示出用户要退的票的信息,然后选择是否退票,选择“1”退票,选择“2”不退票。(5)管理员操作界面管理员在进入内部管理界面时,根据提示输入密码,进入之后,选择“1” ,查询航班订票情况,选择“2” ,增
7、加新航班。请输入航班号:请输入您的名字:退票信息:姓名/终点站/票数确认要退票?()是(1)否(0)1退票成功请输入管理员密码:(houkaiyang)请选择操作查询航班订票情况(1)增加新航班(2)1请输入新航班号:5第 2 章 设计描述2.1 任务分解说明(1)分析系统中链表的设计,用来记录航班信息。(2)根据问题描述,设计链表;(3)完成系统中各个信息的定义;(4)完成系统的应用模块;(5)功能调试;(6)完成系统设计报告。2.2 数据结构设计说明航空售票系统显示所有航线查询航线信息订票业务退票业务管理系统退出系统6本系统中“航线”只用一条单链表记录,故采用全局变量,减少参数的传递。(1
8、) 、定义“航线”类型ADT Lairline数据对象:D=ai|ai航线链表集,i=1,2,3,n,n=0数据关系:R1=| ai-1,aiD,i=1,2,3,n 基本操作:Lairline search_line() /按航班号查找航班Lairline search_plant() /按飞机号查找航班Lairline search_day() /按飞行日期查找航班Lairline search_addr() /按航班终点查找航班 void guide() /主菜单界面void insert_line() /插入新航班void print_customer(airline *p) /显示航班
9、客户信息void admin() /进入管理员操作系统void book() /订票系统void waited(airline *p) /排队订票系统void refund() /退票系统void search() /航班查询系统void InitLine() /初始化航线信息void printline() /显示所有航班信息 ADT Lairline(2) 、主程序void main()7初始化;do接受命令;处理命令(调用相应函数) ;while(“命令”!=“退出”);(3) 、调用关系2.3 函数接口即函数调用关系主程序模块 函数模块main()guide()printline()
10、search() book() refund() admin()waited(p)printcustomer(p) printcustomer()p)search_line()search_addr()search_day()search_plant()8第 3 章 算法描述3.1 主函数 主程序流程图,如图 31真假开始主菜单界面flag=1初始化航线gatchar4退票业务flag结束5管理界面3订票业务6清除屏幕2查询航线7flag=01显示航线9图 31 3.2 按航班号查询函数按航班号查询函数流程图,如图 32 假真假开始char a5 airline *p P=Lnext输入航班号
11、 a!strcmp(a,pline_numpp=pnext10图 323.3 按飞机号查询函数按飞机号查询函数流程图,如图 33假假真结束开始char a8 airline *p P=Lnext输入飞机号 a!strcmp(a,pplant_num)p11图 333.4 按飞行日期查询函数按飞行日期查询函数流程图,如图 34假真结束p=pnext开始int aairline *p P=Lnext输入飞行日期 ap12假真图 343.5 按航班终点查询函数按航班终点查询函数流程图,如图 35a=pday结束p=pnext开始char a20 airline *p P=Lnext输入航班终点a13
12、假假真图 35 3.6 插入新航班函数流程图插入新航班函数流程图,如图 36真!strcmp(a,pend_addr)p结束p=pnext开始airline *p,*qflag=1flag14假真假假真q=(Lairline)malloc(sizeof(airline)输入航班号p=Lpnextstrcmp(pnextline_num,qline_num)=0p=pnextPnext /客户姓名int num; /订票量int level; /舱位等级customer *next;customer,*Lcustomer;typedef struct airline /航线信息char end_
13、addr20; /航线终点char line_num5; /航班号char plant_num8; /飞机号int day; /飞行日期int total; /定员int left; /剩余票数customer *booked; /已定客户信息customer *wait; /排队等候订票信息airline *next;airline,*Lairline;airline *L; /将航班信息定义为全局变量,减少参数传递Lairline search_line() /按航班号查找航班char a5;26airline *p;p=L-next;PR(“请输入航班号“);SC(“%s“,a);for
14、(;p;p=p-next)if(!strcmp(a,p-line_num) break;return p;Lairline search_plant() /按飞机号查找航班char a8;airline *p;p=L-next;PR(“请输入飞机号“);SC(“%s“,a);for(;p;p=p-next)if(!strcmp(a,p-plant_num) break;return p;Lairline search_day() /按飞行日期查找航班int a;airline *p;p=L-next;PR(“请输入飞行日期“);SC(“%d“,for(;p;p=p-next)if(a=p-da
15、y) break;return p;Lairline search_addr() /按航班终点查找航班27char a20;airline *p;p=L-next;PR(“请输入航班终点“);SC(“%s“,a);for(;p;p=p-next)if(!strcmp(a,p-end_addr) break;return p;void guide() /主菜单界面PR(“*欢迎进入航空售票系统*n“);PR(“tt显示所有航线= 1n“);PR(“tt查询航线信息= 2n“);PR(“tt订票业务 = 3n“);PR(“tt退票业务 = 4n“);PR(“tt管理系统 = 5n“);PR(“tt退出系统 = 0n“);PR(“*n“);PR(“tt清除屏幕信息= 9nn“);PR(“请按上面指引操作:t“);void insert_line() /插入新航班airline *p,*q;int flag=1;for(;flag;)q=(Lairline)malloc(sizeof(airline);PR(“请输入航班号:“);SC(“%s“,q-line_num);for(p=L;p-next;p=p-next)