免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告题 目 航空客运订票系统 学 院_ 计算机学院_ 专 业_ 网络工程 年级班别_ 2007级三班_ 学 号 3107007033 学生姓名_江振辉_ 辅导教师_李小妹_2009年 6 月 28 日题目:航空客运订票系统班级:07级网络工程3班 姓名:江振辉 学号:3107007033完成日期:2009.6.14 一、需求分析航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以便上述业务可以借助计算机来实现。(1)查询航线:根据旅客提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; (2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; (3)承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘客定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);航班是否有人排队 候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。二、 概要设计1设定线性表的抽象数据类型定义#include #include /头文件声明#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;/动态分配顺序存储结构#define LIST_INIT_SIZE 100 /初始存储空间大小#define LISTINCREMENT 10 /存储空间增量typedef int Elemtype;/线性表存储的元素类型struct SList Elemtype *head;/存储空间基址 int length;/表长 int size;/存储空间大小;/基本操作的函数说明Status InitList(SList &L);/构建空线性表LStatus DestroyList(SList &L);/删除线性表LStatus EmptyList(SList L);/判断L是否为空,空为True,非空Falseint Length(SList L);/返回L的元素个数Status GetElem(SList L,int i,int &e);/用e返回表中第i的元素Status ListInsert(SList &L,int i,int e);/在表的第i出插入元素eStatus ListDelete(SList &L,int i,int &e);/删除表中第i个元素,用e返回其值void VisitList(SList L);/顺序显示线性表;2本程序包括3个模块1) 主程序模块:void main()输出界面选择功能,调用相应函数选择6推出程序2) 线性表模块实现线性表抽象数据类型3) 航空客运订票系统输入输出函数。三、详细设计1、线性表类型/基本操作的实现Status InitList(SList &L) /构建空线性表 L.head=(Elemtype*)malloc(LIST_INIT_SIZE*sizeof(Elemtype); if (!L.head) return OVERFLOW;/申请失败 L.length=0; L.size=LIST_INIT_SIZE; return OK;/InitListStatus DestroyList(SList &L) /删除链表L free(L.head); L.head=NULL; return OK;/DestroyListStatus EmptyList(SList &L) /判断L是否为空,空为True,非空False if (L.length=0) return TRUE; else return FALSE;/EmptyListint Length(SList L) /返回L的元素个数 return L.length;/LengthStatus GetElem(SList L,int i,Elemtype &e) /用e返回表中第i的元素 if (iL.length) return ERROR;/i不合法 else e=L.headi-1; return OK; /GetElemStatus ListInsert(SList &L,int i,Elemtype e) /在表的第i出插入元素e Elemtype *newhead,*p,*q; if(iL.length+1) return ERROR;/i不合法 if(L.length=L.size)/存储空间已满,增加分配 newhead=(Elemtype*)realloc(L.head,(L.size+LISTINCREMENT)*sizeof(Elemtype); if(!newhead)return OVERFLOW;/空间分配失败 L.head=newhead; L.size+=LISTINCREMENT; p=&(L.headi-1); for (q=&(L.headL.length-1);q=p;-q) *(q+1)=*q;/插入位置及其以后的元素后移 *p=e;/插入e +L.length; return OK;/ListInsertStatus ListDelete(SList &L,int i,int &e) /删除表中第i个元素,用e返回其值 Elemtype *p,*q; if(iL.length) return ERROR;/i不合法 p=&(L.headi-1); e=*p;/ 返回i元素的值 for (+p;p=&(L.headL.length-1);+p) *(p-1)=*p;/i后的元素左移 -L.length; return OK;/ListDeletevoid VisitList(SList L) /顺序输出线性表 int i;/循环参数 for (i=1;i=L.length;i+) cout-L.headi-1-;/VisitList2、主函数算法main() char c;head=air;doprintf(ntt航空客运订票系统n); printf(*n); printf( 1.浏览航线信息n); printf( 2.浏览已订票客户信息n); printf( 3.查询航线n); printf( 4.办理订票业务n); printf( 5.办理退票业务n); printf( 6.查看剩余票数n); printf( 0.退出系统n); printf(*n); printf(请选择:); scanf(%s,&c);getchar(); switch(c) case 1:list();break; case 2:prtlink();break; case 3:search();break; case 4:order();break; case 5:return_tkt();break; case 6:sort_tkt();break; case 0: break; default:break; while(c!=0); 3、函数和过程的调用关系图推出系统查看剩余票数办理退票业务办理订票业务查询航线浏览已订票客户信息浏览航空信息Mainvoid list()void prtlink()void search()Void order()void return_tkt()void ort_tkt()Void exitCase 1Case 2Case 3Case 4 4Case 5 Case 6 Case 0四、 调试分析本程序较为复杂,由于实现功能比较多,而且事先需要声明的函数也十分丰富,所以编写时耗时较多。但是只要捉住主要脉络,还是十分的好理解。由于此程序并不能真正应用于实际操作之中,所以又很多数据都只是自己指定,所以使用时会感到输出结果单一。也由于本人对知识掌握得不够好,理解不够深刻,能力有限,所以只能基本上符合课本上的要求制作。虽然界面和内容都显得有点枯燥,相信在以后慢慢的成长中会跟好。五、 用户使用说明1 本程序的运行环境为DOS操作系统,执行文件为:航空客运订票系统.exe 。进入程序后,即会显示提示用户选择功能。1. 浏览航空信息 2. 浏览已订票客户信息 3. 查询航线 4. 办理订票业务 5. 办理退票业务 6. 查看剩余票数 0. 推出系统六、 测试结果1.进入之后的界面选择“浏览航线信息”,1 ,enter订一张去guangzhou的头等舱的飞机票选择功能4“办理订票业务”。4,enter ;请输入航班号:(输入1,enter);请输入你订票所需要的数量:(输入1,enter);请输入你的姓名:(输入 江振辉,enter);请输入江振辉票的舱位等级:(输入1,enter)。输入完成后系统会自动保存,并输出“祝您乘坐愉快!”现在我要查询我是否已经订票成功。选择功能2“浏览已订票客户信息”,请输入航班号:(输入2,enter)。输入完成后系统会自动弹出相应记录。现在办理退票业务。选择功能5“办理退票业务”。请输入航班号:(输入1,enter);请输入你的姓名:(输入 江振辉 enter)。系统自动输出“江振辉成功退票”。查看功能,选择6“查看剩余票数”。系统自动弹出相应的数据。七、 附录详细程序如下:#include #include #include #include #define MAXSIZE 3 /*定义航线量的最大值*/#define AMOUNT 5/*定义每条航班的总座位数*/typedef struct wat_ros char name10;/*姓名*/ int req_amt;/*订票量*/ struct wat_ros *next;qnode,*qptr;typedef struct pqueue qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/linkqueue;typedef struct ord_ros char name10;/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next;linklist;struct airline char ter_name10;/*终点站名 */ char air_num10;/*航班号*/ char plane_num10;/*飞机号*/ char date7;/*飞行日期(星期几)*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/line;struct airline *head;struct airline airMAXSIZE=guangzhou,1,F9000,MON,3,5, NewYork,2,S9076,TUE,3,5, london,3,G3456,STA,3,5;void display(struct airline *a)/*打印每条航线的基本信息*/printf(%8st%3st%st%4stt%3dt%10dn,a-ter_name,a-air_num,a-plane_num,a-date,a-tkt_amt,a-tkt_sur);void list()/*打印全部航线信息*/ struct airline *a; int i=0; a=head; printf(终点站名t航班号t飞机号t飞行日期t乘员定额t余票量n); while(iMAXSIZE) display(a); a+; i+; printf(nn);void search()/*根据客户提出的终点站名输出航线信息*/ struct airline *a,*find(); char name10; int i=0; a=head; printf(请输入终点站名:); scanf(%s,name); while(iter_name) break; a+; i+; if(i=MAXSIZE) printf(对不起,该航线未找到!n); else printf(终点站名t航班号t飞机号t飞行日期t乘员定额t余票量n); display(a); struct airline *find()/*根据系统提出的航班号查询并以指针形式返回*/ struct airline *a; char number10; int i=0; a=head; printf(请输入航班号:); scanf(%s,number); while(iair_num) return a; a+; i+; printf(对不起,该航线末找到!n); return NULL;void prtlink()/*打印订票乘员名单域的客户名单信息*/ linklist *p; struct airline *a; a=find(); p=a-order; if(p!=NULL) printf(客户姓名 订票数额 舱位等级n); while(p) printf(%stt%dt%dn,p-name,p-ord_amt,p-grade); p=p-next; else printf(该航线没有客户信息!n);linklist *insertlink(linklist *head,int amount,char name,int grade)/*增加订票乘员名单域的客户信息*/ linklist *p1,*new1; p1=head; new1=(linklist *)malloc(sizeof(linklist); if(!new1) printf(nOut of memory!n);return NULL; strcpy(new1-name,name); new1-ord_amt=amount; new1-grade=grade; new1-next=NULL; if(head=NULL)/*若原无订票客户信息*/ head=new1;new1-next=NULL; else head=new1; new1-next=p1; return head;linkqueue appendqueue(linkqueue q,char name,int amount)/*增加排队等候的客户名单域*/ qptr new1;new1=(qptr)malloc(sizeof(qnode);strcpy(new1-name,name);new1-req_amt=amount;new1-next=NULL;if(q.front=NULL)/*若原排队等候客户名单域为空*/ q.front=new1;else q.rear-next=new1;q.rear=new1;return q;void order()/*办理订票业务*/ struct airline *a; int amount,grade; char name10; a=head; if(!(a=find() return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/ printf(请输入你订票所需要的数量:); scanf(%d,&amount); if(amounta-tkt_amt)/*若客户订票额超过余票量总额,退出*/ printf(n对不起,您输入的票的数量已经超过乘员定额!); return; if(amounttkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/ int i; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s票的舱位等级:,name); scanf(%d,&grade); a-order=insertlink(a-order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/ a-tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/ for(i=amount;i0;i-)/*依次输出该订票客户的座位号*/ printf(%s的座位号是:%dn,name,AMOUNT-a-tkt_sur-i+1); printf(n祝您乘坐愉快!n); else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r; printf(n已经没有更多的票,您需要排队等候吗?(Y/N); r=getch(); printf(%c,r); if(r=Y|r=y) printf(n请输入您的姓名(排队订票客户):); scanf(%s,name); a-wait=appendqueue(a-wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/ printf(n注册成功!n); else printf(n欢迎您下次再次订购!n); void return_tkt()/*退票模块*/ struct airline *a; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname10; if(!(a=find() return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=a-order; p1=head; printf(请输入你的姓名(退票客户):); scanf(%s,cusname); while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/ if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) printf(对不起,你没有订过票!n);return;/*若未找到,退出本模块*/ else /*若信息查询成功,删除订票客户名单域中的信息*/ if(p1=head) head=p1-next; else p2-next=p1-next; a-tkt_sur+=p1-ord_amt; grade=p1-grade; printf(%s成功退票!n,p1-name); free(p1); a-order=head;/*重新将航线名单域指向订票单链表的头指针 */ f=(a-wait).front;/*f指向排队等候名单队列的头结点*/ r=(a-wait).rear;/*r指向排队等候名单队列的尾结点*/ t=f;/*t为当前满点条件的排队候补名单域*/ while(t) if(a-tkt_sur=a-wait.front-req_amt)/*若满足条件者为头结点*/ int i; a-wait.front=t-next; printf(%s订票成功!n,t-name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(%s的座位号是:%dn,t-name,(a-tkt_sur)-i); a-tkt_sur-=t-req_amt; a-order=insertlink(a-order,t-req_amt,t-name,grade);/*插入到订票客户名单链表中*/ free(t); break; back=t;t=t-next; if(a-tkt_sur)=(t-req_amt)&t!=NULL)/*若满足条件者不为头结点*/ int i;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 友情赠言范本
- 2025年人工智能在犯罪预防中的数据分析
- 2025年人工智能在法律领域的辅助决策研究
- ERAS妇科肿瘤围手术期规范化管理与临床实践路径
- 2025届安徽省华师联盟高三下学期5月质量检测语文试题及答案
- 中国无人机交通管理(UTM)行业发展现状、市场前景、投资方向分析报告
- 中国水泥球磨机行业市场前景预测及投资价值评估分析报告
- 《陀螺》教学设计与反思
- 《桥涵施工技术》课件 学习任务五-2简支板桥施工
- 城市轨道交通安全管理创新创业项目商业计划书
- 2025广东深圳市龙华区招聘社区网格员72人考试笔试参考题库附答案解析
- 工业废水处理工岗位标准化技术规程
- 2026年南京科技职业学院单招职业倾向性测试题库及答案1套
- 私宴接待流程标准化管理
- (14)普通高中音乐课程标准日常修订版(2017年版2025年修订)
- 【MOOC】《创业团队建设与管理》(首都经济贸易大学)章节期末慕课答案
- 注塑产品常见缺陷及解决方法
- 隧道工程施工风险源辨识与防控措施
- 员工怀孕免责承诺书
- 食品留样表 (2)
- 牛津深圳版九年级上英语课文翻译
评论
0/150
提交评论