1、 航空订票系统课程设计报告摘 要飞机在现代的生活中扮演者非常重要的角色。它能够快速的把人们送到自己想要去的地方,既快速,又方便。所以现在坐飞机时很普遍的。但是都到机场去买票浪费时间,因此,航空订票系统应运而生。有了航空订票系统,用户可以在该系统进行飞机票的查询,订票,退票等操作。 关键词 航空订票系统 、查询、订票、退票I目 录摘 要I1 需求分析21.1 需求概述21.2 需求环境21.3 功能描述22 概要设计32.1 程序功能模块32.2 程序流程图32.3 课程设计的思想33 详细设计43.1 程序初始化43.1.1代码功能43.1.2 功能实现代码43.2 查询航班信息63.2.1代
2、码功能63.2.3 功能实现代码73.3 订票模块83.3.1 代码功能83.3.2 功能实现代码84 测试与运行145结束语.166 参考文献.177附录.1828攀枝花学院学生课程设计报告 需求分析1 需求分析1.1 需求概述航线管理。每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量 客户管理。有关订票的客房信息(包括姓名、订票量、舱位等级(1,2和3)以及等替补的客房名单(包括姓名、所需标量)。 系统实现主要操作操作和功能。系统实现的主要操作规程和功能如下: 查询航线。根据旅客提出的终点站名输出下列信息:航班号、飞机号、飞行日期、余标额。 承办订票业
3、务。根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队侯补 承办退票业务。根据客户提供的情况(日期、航班),为客户输退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额满足该客户的要求,则为其订票手续,否则依次询问其他排队候补的客户。1.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:硬件要求:一台计算机。软件配置:WINDOWS7/VC+6.0。1.3 功能描述本次课程设计是航空订票系统主要是由查询航班信息,订票还有退票三大主要
4、功能。除此之外,还有系统的界面等等。攀枝花学院学生课程设计论文 概要设计2 概要设计2.1 程序功能模块由需求分析知,本次课程设计是航空订票系统其主要由三大模块构成,即查询模块(这部分由我负责),订票系统模块和退票系统模块构成。2.2 程序流程图开始 该程序开始运行后 进如航空订票系统 用户可以进行航班航空订票系统 信息的查询,订票 和退票操作。退票系统模块查询模块订票系统模块使用结束,退出系统图2.1为该系统总的流程图2.3 课程设计的思想 由需求分析知道需要实现几个功能定义了两个结构体。这两个结构体分别用来表示顾客信息和航班信息。有结构体可以知道一些基本信息,比如顾客的姓名,定的机票和航班
5、的时间等等信息。使得实验代码的可读性大大增强。3 详细设计3.1 程序初始化3.1.1代码功能这一块还是由我负责。我初始化了五个航班的基本信息。在初始化程序中,主要是航班的基本信息。比如航班号,出发时间和剩下的机票数目等等基本信息。通过运用指针和链表来进行对初始化信息的书写。在初始化时将三个重点的信息分别初始化为:广州 航班号005 飞机号PZH113 机票数120天津 航班号004 飞机号PZH121 机票数120 北京 航班号003 飞机号PZH133 机票数120上海 航班号002 飞机号PZH132 机票数120成都 航班号001 飞机号PZH122 机票数1203.1.2 功能实现代
6、码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=NUL
7、L;strcpy(p-end_addr,广州);strcpy(p-line_num,005);strcpy(p-plant_num,PZH113);p-day=5;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,004);strcpy(p-plant_num,PZH121);p-day=4;p-left=120;p-total=120;p-ne
8、xt=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,PZH133);p-day=1;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,上海);s
9、trcpy(p-line_num,002);strcpy(p-plant_num,PZH132);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,PZH122);p-day=3;p-left=120;p-total=120;p-next=q-next;q-next=p; 3.2
10、查询航班信息3.2.1代码功能 此模块主要由我负责,在此模块我实现了查询航班的功能。当进入查询功能时,通过输入数字用户可以查询航班的基本信息,比如目的地,剩下的机票数目,出发的时间等等基本信息。如果输入的数字在界面中没有显示则会提示用户没有这次航班。在这个模块我使用了个switch语句来实现对查询方式的选择。通过判断输入的数字进入到相对应的查询方式。如果输入的信息有误的话,系统将会提示用户没有这次航班,需要重新输入。3.2.2查询模块流程图查询4321航班终点飞行日期飞机号航班号 3.2.2查询模块的流程图在该模块用户可以进行查询功能。用户根据提示可以按照航班号、飞机号、飞行日期和航班重点来查
11、询航班的基本信息。这些基本信息包括了飞行航班号、飞机号、剩余票量和处罚日期等等。在该模块用户必须根据提示进行输入,否则系统会提示输入有误,需要重新输入。3.2.3 功能实现代码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) /switch语句来进行航班的查询方式 case 1: p=search_line();flag=1;break;
12、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(没有
13、该航班n);3.3 订票模块3.3.1 代码功能在此模块可以根据提示可以从航班号,飞行日期和终点站来进行订票。如果订票时余票不足所需要的票的数目时就可以进行排队购票选择。3.3.2 功能实现代码void book()/订票系统int i;int flag=0;airline *p;customer *cst,*c;PR(请输入查询航班的方式:n);PR(航班号-1n);PR(终点站-2n);PR(飞行日期-3n);for(;!flag;)SC(%d,&i);switch(i) /运用一个switch语句进行航班查询case 1: p=search_line();flag=1;break;cas
14、e 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,&cs
15、t-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);else/当需要的飘得数量大于剩余的票数的时候进行询问是否进行排队购票PR(余票不足,是否排队等候n是(y)n否(n)n);SC(%d,&flag);if(flag)if(!p-wait)cst-next=p-wait;p-wait=cst;elsec=p-wait;fo
16、r(;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
17、(%s,您正在排队定%d张票,现有票,是否定n是(y)n否(n)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;3.4退票系统模块3.4.1代码功能在此模块,用户可以根据系统的提示进行退票操作。当进行退票操作时需要进行信息的核对,如果正确,打印出信息,再询问是否退票。3.4.2功能实现代码
18、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-na
19、me,p-end_addr,p-booked-num);PR(确认要退票n是(y)n否(n)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
20、-end_addr,c-next-num);PR(确认要退票?n是(y)n否(n)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();以上三个模块是改程序最主要的功能实现的代码。初次之外还有部分其他显示模块。4 测试与运行由需求分析可知该程序运行后实现功能后的结果。此处是功能界面,用户可以按照提示进行操作进行查询功能时:进行查询模块式会显示出查询方式,按照查询方式可以准确的得到航班的信息进行订票模块时:在
21、此处模块,订票可以根据提示进行购票,可以订多张票,输入舱位的等级和订票人名字排队订票系统:如果该航班剩余的票量小于所要购买的数量,则会提示是否进行排队购票。退票系统:在该模块,进行退票操作时,系统会进行信息的核对,如果正确,将会显示客户的信息。然后提示是否退票。5 结束语 此次数据结构课程设计为航空订票系统。在写程序的时候还是遇到了很多的问题。有些功能怎么也实现不了。经过和同学的探讨还有上网查找资料,最后终于克服了这些问题,成功的运行出了程序。通过这次学习,使我对编写程序的兴趣更大了。除此之外,此次课程设计帮我们熟练地运用所学习的知识,还让我们熟练的去融合他们,写出一个全新的程序来。在这次课程
22、设计中要衷心的感谢老师对我们的帮助,使得我们对所学知识的熟练运用。总而言之,这次的课程设计既有趣又训练了我们对知识的运用。 6参考文献1阮宏一,鲁静数据结构课程设计C/C+描述.电子工业出版社2马巧梅,庞晓琼等.数据结构课程设计案例教程第三版.人民邮电出版社3袁蔚敏.数据结构 清华大学出版社 7 源代码 源代码:#include#include#include#include#define PR printf#define SC scanftypedef struct customer/客户信息char name20;/客户姓名int num;/订票量int level;/舱位等级custom
23、er *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()/按航班号查找航班ch
24、ar 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(请
25、输入飞行日期);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(=n);PR(tt显示所有航线= 1n);PR(tt查询航线信息= 2n);PR(tt订票业务 = 3n);PR(tt退票业务
26、 = 4n);PR(tt退出系统 = 0n);PR(=n);PR(tt清除屏幕信息= 9nn);PR(请按上面指引操作:t);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%s
27、n,c-num,c-name);PR(nn);elsePR(暂时没有客户排队订票nn);void book()/订票系统int i;int flag=0;airline *p;customer *cst,*c;PR(请输入查询航班的方式:n);PR(航班号-1n);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;def
28、ault: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-b
29、ooked=cst;p-left=p-left-cst-num;PR(订票成功,座位号为%d%dn,p-total-p-left-cst-num+1,p-total-p-left);elsePR(余票不足,是否排队等候?n是(y)n否(n)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)/排队订票系统in
30、t 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是(y)n否(n)n,q-next-name,q-next-num);SC(%d,&flag);if(flag)q0=q-next;q-next=q-next-next;q0-next=p
31、-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(!strcm
32、p(a,p-booked-name)PR(退票信息n姓名/终点站/票数n%s/%s/%dn,p-booked-name,p-end_addr,p-booked-num);PR(确认要退票?n是(y)n否(n)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);gui
33、de();return ;elsePR(退票信息n姓名/终点站/票数n%s/%s/%dn,c-next-name,p-end_addr,c-next-num);PR(确认要退票?n是(y)n否(n)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)
34、;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