已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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第4章 开发过程描述274.1 源代码274.2 编译过程错误分析414.3 调试错误分析424.4运行结果及说明42第5章 设计心得体会46第1章 功能需求描述1.1 需求分析 随着科技的发展和人们生活水平的日益提高,人们在不断追求更加快捷的交通方式以满足人们快节奏的生活方式,航空系统在交通系统中已扮演着一个越来越重要的角色。然而,交通的快捷离不开信息的快捷。随着计算机的发展和普及,人们的生活方式发生了巨大的改变,计算机在代替和延伸脑力劳动方面发挥着越来越重要的作用。在交通系统中,有大量的数据需要被处理,而这些工作有人来完成几乎是不可能的,而交给计算机处理,就可以很好地满足我们的需求。 航空售票管理系统可以根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。1.2 功能列表与说明*欢迎进入航空售票系统*显示所有航线= 1查询航线信息= 2订票业务 = 3退票业务 = 4管理系统 = 5退出系统 = 0*清除屏幕信息= 9请按上面指引操作: 系统共设有5个功能并以菜单方式工作,上图为功能列表图。功能分别包括以下5个方面:(1) 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);(2) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行、最近一天航班的日期和余票额;(3) 订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户班里订票手续,输出作为好;若已满或者余票少于订票额,则需要重新询问客户要求。若需要,可等级排队侯补;(4) 退票业务:根据客户提供的情况(航班),为客户办理退票手续,然后查询该航班是否有人排队侯补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队侯补的客户。(5)管理员系统:通过密码认证后可查看所有航班的订票情况,可根据需要增加新的航线。1.3 操作界面及操作说明(1)显示所有航线 终点站 航班号 飞机号 飞行日期 余票量 北京 001 2586934 1 120 上海 002 2682154 2 120 广州 003 4558934 3 120 天津 004 3667894 4 120 系统面向用户显示所有航线信息,为用户提供各个航班的信息,供用户参考。(2)查询航线信息请输入查询航班的方式:航班号-1终点站-2飞行日期-3 用户根据需要可选择三种查询方式,输入“1”,按航班号查询,系统提示输入要查询的航班号;输入“2”,按终点站查询,系统提示输入要查询的终点站名;输入“3”,按飞行日期查询,系统提示输入要查询的飞行日期。(3)订票业务请输入查询航班的方式:航班号-1终点站-2飞行日期-33请输入飞行日期 1 终点站 航班号 飞机号 飞行日期 余票量 北京 001 2586934 1 120请输入订票数量:请输入舱位等级(1/2/3):请输入您的名字:订票成功,座位号为11 用户根据所查询的信息,选择相应的航班,系统提示输入订票数量,舱位等级以及用户姓名,最后系统自动提示“订票成功”。(4)退票业务请输入航班号:请输入您的名字:退票信息:姓名/终点站/票数确认要退票?()是(1)否(0)1退票成功 用户在退票时,按系统提示输入航班号,用户姓名,系统则会自动显示出用户要退的票的信息,然后选择是否退票,选择“1”退票,选择“2”不退票。(5)管理员操作界面请输入管理员密码:(houkaiyang)请选择操作查询航班订票情况(1)增加新航班(2)1请输入新航班号:管理员在进入内部管理界面时,根据提示输入密码,进入之后,选择“1”,查询航班订票情况,选择“2”,增加新航班。第2章 设计描述2.1 任务分解说明 (1)分析系统中链表的设计,用来记录航班信息。(2)根据问题描述,设计链表;(3)完成系统中各个信息的定义;(4)完成系统的应用模块;(5)功能调试;(6)完成系统设计报告。 2.2 数据结构设计说明航空售票系统退出系统退票业务查询航线信息显示所有航线管理系统订票业务 本系统中“航线”只用一条单链表记录,故采用全局变量,减少参数的传递。(1)、定义“航线”类型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)/显示航班客户信息void admin()/进入管理员操作系统void book()/订票系统void waited(airline *p)/排队订票系统void refund()/退票系统void search()/航班查询系统void InitLine()/初始化航线信息void printline()/显示所有航班信息 ADT Lairline(2)、主程序void main()初始化;do接受命令;处理命令(调用相应函数);while(“命令”!=“退出”);(3)、调用关系函数模块主程序模块 2.3 函数接口即函数调用关系main()guide()admin()refund()book()search()printline()waited(p)search_line()search_addr()search_day()search_plant()printcustomer()p)printcustomer(p)第3章 算法描述3.1 主函数 主程序流程图,如图31开始flag=1主菜单界面初始化航线gatchar 7flag=06清除屏幕4退票业务5管理界面3订票业务2查询航线1显示航线 flag 真 假结束图 31 3.2 按航班号查询函数 按航班号查询函数流程图,如图32 开始char a5 airline *p P=Lnext输入航班号 ap 假 真!strcmp(a,pline_num假 p=pnext 结束图 323.3 按飞机号查询函数按飞机号查询函数流程图,如图33开始char a8 airline *p P=Lnext输入飞机号 ap 假!strcmp(a,pplant_num)假 真p=pnext结束图 333.4 按飞行日期查询函数按飞行日期查询函数流程图,如图34开始int aairline *p P=Lnext输入飞行日期ap 假 真a=pday假 真p=pnext结束图 343.5 按航班终点查询函数按航班终点查询函数流程图,如图35开始char a20 airline *p P=Lnext输入航班终点ap 假!strcmp(a,pend_addr)假 真p=pnext结束 图 35 3.6 插入新航班函数流程图插入新航班函数流程图,如图36开始airline *p,*qflag=1flag 真q=(Lairline)malloc(sizeof(airline)输入航班号p=Lpnext假strcmp(pnextline_num, qline_num)=0 真 假p=pnext Pnext&strcmp(pnextline_num,qline_num)=0 假 真输入飞行日期,飞机号, 终点站航班已存在,请重新输入结束图 363.7 显示航班客户信息函数显示航班客户信息函数流程图,如图37开始 customer *cpbook 假 真c=pbooked输入已订票客户信息c 假 真输入cnum,cname c=cnext输出“暂时没有客户订票”pwait 假 c=pwait 真输出排队订票客户信息c假 真输出cnum,cname输出“暂时没有客户订票”c=cnext结束图 373.8 管理员操作函数 管理员操作函数流程图,如图38开始int i, flag, tagchar a20, airline *p输入管理员密码i=0inumleftcstnext=pbookedpbooked=cstpleft=pleftcstnum订票成功,座位号为:余票不足没有该航班结束图 393.10排队订票系统函数排队订票函数流程图,如图310开始int flagcustomer *q,*q0,*hairline *p!pwaitpleft0&qnext 真假qnextnumleft 真假您正在排队订票,现在有票,是否订 真flag假 真q0=qnext,qnext=qnextnextq0next=pbooked,pbooked=q0pleft=pleftq0num订票成功q=qnextpwait=hnext结束 图 310 3.11 退票系统函数退票系统函数流程图,如图311开始int flag,char a20airline *pcustomer *c,*c1 p=search_line()c=pbooked !p 真 假没有该航班输入您的姓名!pbookedname 真没有找到您的信息假 假输出退票信息flag假!strcmp(a,cnextname) 真pbooked=pbookednextpleft=pleft+cnumfree(c)真真 !cnext假真对不起,没有找到您的信息退票成功返回主界面结束 图 3113.12 航班查询函数 航班查询函数流程图,如图312开始int i, flag=0 airline *p输入查询航班方式!flag 假 真i2p=search_plant()flag=1其他操作错误,重新输入4p=search_addr()flag=13p=search_day()flag=11p=search_line()flag=1p 假 真没有该航班输出航班信息结束 图312第4章 开发过程描述4.1 源代码#include#include#include#include#define PR printf#define SC scanftypedef struct customer /客户信息char name20; /客户姓名int num; /订票量int level; /舱位等级customer *next;customer,*Lcustomer;typedef struct airline/航线信息char end_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;airline *p;p=L-next;PR(请输入航班号);SC(%s,a);for(;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,&a);for(;p;p=p-next)if(a=p-day) break;return p;Lairline search_addr()/按航班终点查找航班char 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)if(strcmp(p-next-line_num,q-line_num)=0)break;if(p-next&strcmp(p-next-line_num,q-line_num)=0)PR(航班已存在,请重新输入n);continue;PR(请输入飞行日期:);SC(%d,&q-day);PR(请输入飞机号:);SC(%s,q-plant_num);PR(请输入终点站:);SC(%s,q-end_addr);q-total=120;q-left=120;q-booked=NULL;q-wait=NULL;q-next=p-next;p-next=q;PR(增加航班成功,是否继续增加n继续(1)n返回(0));SC(%d,&flag);void print_customer(airline *p)/显示航班客户信息customer *c;if(p-booked)c=p-booked;PR(已定票客户信息n票数t/t客户姓名n);for(;c;c=c-next)PR(%5dt/t%sn,c-num,c-name);PR(nn);elsePR(暂时没有客户订票nn);if(p-wait)c=p-wait;PR(排队订票客户信息n票数t/t客户姓名n);for(;c;c=c-next)PR(%5dt/t%sn,c-num,c-name);PR(nn);elsePR(暂时没有客户排队订票nn);void admin()/进入管理员操作系统int i,flag,tag;char a20;airline *p;PR(请输入管理员密码:(houkaiyang);for(i=0;i1n);PR(终点站-2n);PR(飞行日期-3n);for(;!flag;)SC(%d,&i);switch(i)case 1: p=search_line();flag=1;break;case 2: p=search_addr();flag=1;break;case 3: p=search_day();flag=1;break;default:PR(操作错误,请重新输入n);break;if(p)PR(终点站 航班号 飞机号 飞行日期 余票量n);PR(%-20s%10s%10s%8d%8dn,p-end_addr,p-line_num,p-plant_num,p-day,p-left);cst=(customer *)malloc(sizeof(customer);PR(请输入订票数量:);SC(%d,&cst-num);PR(请输入舱位等级(1/2/3));SC(%d,&cst-level);PR(请输入您的名字);SC(%s,cst-name);if(cst-numleft)cst-next=p-booked;p-booked=cst;p-left=p-left-cst-num;PR(订票成功,座位号为%d%dn,p-total-p-left-cst-num+1,p-total-p-left);elsePR(余票不足,是否排队等候?n是(1)n否(0)n);SC(%d,&flag);if(flag)if(!p-wait)cst-next=p-wait;p-wait=cst;elsec=p-wait;for(;c-next;c=c-next);cst-next=c-next;c-next=cst;else PR(没有该航班n);guide();void waited(airline *p)/排队订票系统int flag;customer *q,*q0,*h;if(!p-wait) return;q=(customer *)malloc(sizeof(customer);q-level=0;q-num=123;strcpy(q-name,00000);q-next=p-wait;h=q;for(;p-left0&q-next;)if(q-next-numleft)PR(%s,您正在排队定%d张票,现有票,是否定n是(1)n否(0)n,q-next-name,q-next-num);SC(%d,&flag);if(flag)q0=q-next;q-next=q-next-next;q0-next=p-booked;p-booked=q0;p-left=p-left-q0-num;PR(排队订票成功nn);elseq=q-next;elseq=q-next;p-wait=h-next;void refund()/退票系统int flag;char a20;airline *p;customer *c,*c1;p=search_line();c=p-booked;if(!p)PR(没有该航班nn);guide();return;PR(请输入您的姓名);SC(%s,a);if(!p-booked-name)PR(对不起,没有找到您的信息nn);guide();return ;if(!strcmp(a,p-booked-name)PR(退票信息n姓名/终点站/票数n%s/%s/%dn,p-booked-name,p-end_addr,p-booked-num);PR(确认要退票?()n是(1)n否(0)n);scanf(%d,&flag);if(flag)p-booked=p-booked-next;p-left=p-left+c-num;free(c);PR(退票成功nn);waited(p);guide();elsefor(;c-next;c=c-next)if(!strcmp(a,c-next-name)break;if(!c-next)PR(对不起,没有找到您的信息nn);guide();return ;elsePR(退票信息n姓名/终点站/票数n%s/%s/%dn,c-next-name,p-end_addr,c-next-num);PR(确认要退票?()n是(1)n否(0)n);scanf(%d,&flag);if(flag)c1=c-next;c-next=c-next-next;p-left=p-left+c1-num;free(c1);PR(退票成功nn);waited(p);guide();void search()/航班查询系统int i;int flag=0;airline *p;PR(请输入查询航班的方式:n);PR(航班号-1n);PR(飞机号-2n);PR(飞行日期-3n);PR(航班终点-4n);SC(%d,&i);for(;!flag;)switch(i)case 1: p=search_line();flag=1;break;case 2: p=search_plant();flag=1;break;case 3: p=search_day();flag=1;break;case 4: p=search_addr();flag-=1;break;default:PR(操作错误,请重新输入n);break;if(p)PR(终点站 航班号 飞机号 飞行日期 余票量n);PR(%-20s%10s%10s%8d%8dn,p-end_addr,p-line_num,p-plant_num,p-day,p-left);PR(是否订票(确定请按1));SC(%d,&i);if(i=1)book();else PR(没有该航班n);void InitLine()/初始化航线信息airline *p,*q;L=(airline *)malloc(sizeof(airline);L-booked=NULL;L-wait=NULL;L-next=NULL;strcpy(L-end_addr,00000000);strcpy(L-line_num,000);strcpy(L-plant_num,0000000);L-day=L-left=L-total=0;q=L; p=(airline *)malloc(sizeof(airline);p-booked=NULL;p-wait=NULL;strcpy(p-end_addr,天津);strcpy(p-line_num,004);strcpy(p-plant_num, 3667894);p-day=4;p-left=120;p-total=120;p-next=q-next;q-next=p;p=(airline *)malloc(sizeof(airline);p-booked=NULL;p-wait=NULL;strcpy(p-end_addr,广州);strcpy(p-line_num,003);strcpy(p-plant_num,4558934);p-day=3;p-left=120;p-total=120;p-next=q-next;q-next=p;p=(airline *)malloc(sizeof(airline);p-booked=NULL;p-wait=NULL;strcpy(p-end_addr,上海);strcpy(p-line_num,002);strcpy(p-plant_num,2682154);p-day=2;p-left=120;p-total=120;p-next=q-next;q-next=p; p=(airline *)malloc(sizeof(airline);p-booked=NULL;p-wait=NULL;strcpy(p-end_addr,北京);strcpy(p-line_num,001);strcpy(p-plant_num, 2586934);p-day=1;p-left=120;p-total=120;p-next=q-next;q-next=p; void printline()/显示所有航班信息int flag;airline *p;p=L-next;PR(终点站 航班号 飞机号 飞行日期 余票量n);for(;p;p=p-next)PR(%-20s%10s%10s%8d%8dn,p-end_addr,p-line_num,p-plant_num,p-day,p-left);PR(按1进入订票系统,按0返回主菜单n);SC(%d,&flag);if(flag)book();else guide();void main()/主函数int flag=1;guide();InitLine();dos
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年会计电算化从业资格考试《财务软件应用与操作》备考题库及答案解析
- 2025年护士资格考试《护理伦理与法律责任》备考题库及答案解析
- 商铺租赁合同续签补充协议2025年版本
- 商铺招牌维修合同协议2025
- 全职会计2025年聘用协议
- 墙体损坏修复协议2025年
- 酒店电路安装合同协议2025
- 2025年供应链协同管理基础考试试题及答案
- 健身房器材使用协议2025年
- 塑料技术入股协议合同
- 2025年全国出租车从业资格考试复习模拟题库(500题)含答案
- 2025年健康管理师三级专业能力考试题及答案
- 电力公司抄表系统管理办法
- 2025年公需科目一带一路考试试题及答案
- 项目成员变更管理方法
- 锋面物质输运与生物泵效率关联-洞察阐释
- 种业发展面试题库及答案
- 2025至2030年中国丙纶针刺过滤毡行业投资前景及策略咨询报告
- 无人机打药合同协议书
- 2025至2030年政府办公化系统软件项目商业计划书
- 【西方文论】第15讲 新历史主义学习资料
评论
0/150
提交评论