您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页东华大学数据结构设计C语言航空订票系统

东华大学数据结构设计C语言航空订票系统

来源:意榕旅游网


东华大学数据结构课程设计 实验报告

实验名称: 航空订票系统 指导教师:

目 录

一、设计题目 ……………………………………………………(3) 二、任务…………………………………………………………(3) 三、功能要求和测试数据 ……………………………………(3)

1

四、需求分析 ……………………………………………………(4) 4.1 宏观需求分析 ………………………………………(4) 4.2 具体需求分析 ………………………………………(4) 五、概要设计……………………………………………………(5) 5.1系统的流程框图…………………………………………(5) 5.2系统各函数的功能、相互调用关系 …………………(6) 六、详细设计……………………………………………………(8) 6.1 各变量的定义和作用 ………………………………(8) 6.2 系统各函数的功能 …………………………………(8) 七、调试分析……………………………………………………(21) 八、用户手册 …………………………………………………(22) 九、测试结果……………………………………………………(22) 十、心得体会与参考文献………………………………………(22)

设计题目 航空订票系统 任务

2

航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。

功能要求

1) 录入:可以录入航班情况

2) 查询:可以查询某个航线的情况(如输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;

3) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果 该航班已经无票,可以提供相关可选择航班; 4) 退票: 可退票,退票后修改相关数据文件;

5) 客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号; 6) 修改航班信息:当航班信息改变可以修改航班数据文件。

测试数据 航班数据 航班号 出发 城市 到达 城市 起飞 时间 7:00 到达 时间 9:20 1063 价格 折扣总票剩余 率(%) 数 94 20 票数 2 MU5103 上海北京 虹桥 CA1590 上海北京 虹桥 FM9307 上海广州 虹桥 HO1241 上海青岛 浦东 3U8964 上海成都 浦东 客户数据

8:55 11:15 864 75 20 0 10:30 12:50 608 48 20 5 19:50 21:20 418 56 20 11 15:45 19:05 922 57 20 1 3

姓名 张三丰 张翠山 张无忌

证件号 31000012 31000025 31000033 订票数 1 1 1 航班号 3U8964 FM9307 MU5103 需求分析

宏观需求分析

●采用现有的软硬件环境及先进的管理系统方案,从而达到充分利用现有资源,提高系统应用效果的目的。

●尽量达到系统操作过程中的直观、方便、实用、安全等要求。

●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。

●系统应具备维护功能,及时根据用户需求进行数据的添加、删除、修改等操作。

具体需求分析

菜单是应用程序中非常重要的组成部分,通过菜单,应用程序可以实现不同的功能,通过本系统的设计,可以实现应用程序的菜单。

(1)程序运行时,首先给出两个菜单选项的内容和输入提示:管理员进入输入1,客户进入输入2。用户输入1或者2,以不同身份进入系统,如果输入1和2以外的其他字符,则显示输入错误,请重新输入。

(2) 若用户选择是管理员身份进入,需要输入密码(首次设定密码为1111),验证正确后,则可进入系统,显示如下7个菜单选项(后有截图)。若密码验证错误,则提示密码错误,并返回主界面让用户重新选择身份。

1.输入航班信息 2.查询航班信息 3.输入乘客信息 4.查询乘客信息 5.修改航班信息 6.查找航线 7.返回上一界面

(3)若用户是以客户身份进入,则进入系统后,将显示如下7个菜单选项(后有截图)。进入系统后,用户可以根据需要输入选项实现不同功能。若输入其它字符,则显示输入错误,

4

1.查询航班信息 2.输入乘客个人信息 3.查询乘客个人信息 4.订票信息 5.退票信息 6.查找航线 7.返回上一界面

(4)用户根据需要输入(1-7),若输入其他字符,则提示输入错误,要求重新选择。

(5)用户选择(1-7)实现不同功能,如果要返回上级菜单界面,则需要根据提示操作返回。

概要设计

4.1系统的流程框图

5

主函数void main()管理员登录函数void guanliyuanmenu()客户登录函数void customermenu()输入航班信息函数void input_air()订票函数void bookticket()查询全部客户信息函数void cust_print()客户定退票身份验证函数void yanzheng() 查询个人信息函数void kehu_print()航线修改函数void change()退票函数void tuipiao()查询航班信息函数void air_print()查询航班信息函数void air_print()输入客户信息函数void input_cust() 输入客户信息函数void input_cust() 查找航线函数void search()查找航线函数void search()返回上一界面返回上一界面

图1 系统流程框图

(二)实现函数的具体功能:

(通过定义函数来实现客户端订票,退票等功能) struct air {

char airnum[20]; //航班号

char set_off[20];//起飞的城市 char get_to[20];//终点城市

char start_time[20];//起飞时间

6

char arrive_time[20];//到达时间 float price;//票价 float discount;//折扣 int ticketnum;//票的编号 int ticketleft;//剩余的票数 }air[A];

struct customer {

char custnum[20]; //证件号 char name[40];//姓名 int ticketnum;//票的编号 char airnum[20];//航班 int booknum;//预定的票号 }cust[C];

void customermenu()//创建客户账户界面 void air_print();//查询航班信息

void input_cust();//输入乘客个人信息

void yanzheng();//客户信息验证,相当于密码 void kehu_print();//乘客查询自己的个人信息 void bookticket();//订票信息 void tuipiao();//退票信息 void search();//查找航线

void guanliyuanmenu();//创建管理员账户界面 void input_air();//输入航班信息

void cust_print();//管理员查询所有乘客信息 void change();//航线修改系统。

void main();//主函数,选择进入管理员界面或客户界面。

本系统要用到的库函数: #include #include #include

程序调用关系

customermenu( )调用了void air_print(),void input_cust(),kehu_print(),void bookticket(),void tuipiao(),void search()。

guanliyuanmenu()调用了void input_air(),void air_print(),input_cust();void cust_print(),void change(),void search()。 bookticket()和tuipiao()调用了void yanzheng();

7

void void

详细设计

/*各变量的定义和作用*/

#include #include #include

#define A 6 /*航线数*/

#define B 15 /*用于循环体中的返回模块,常量*/ #define C 5 /*顾客数*/

#define Cout air[i].airnum<<\" \"<char airnum[20]; /*航班号*/ char set_off[20]; /*起飞城市*/ char get_to[20]; /*到达城市*/ char start_time[20]; /*起飞时间*/ char arrive_time[20]; /*到达时间*/ float price; /*票价*/

float discount; /*折扣率*/ int ticketnum; /*总票数*/ int ticketleft; /*剩余票数*/ }air[A];

struct customer {

char custnum[20]; /*证件号*/ char name[40]; /*姓名*/ int ticketnum; /*订票数*/ char airnum[20]; /*航班号*/ int booknum; /*订单编号*/ }cust[C];

/*2:系统各函数的功能*/

void main() /*主函数选择进入管理员界面或客户界面*/ { int j; void customermenu();

8

void guanliyuanmenu(); for(;;) { cout<<\" *** 管理人员进入请输入1,客户进入请输入2,退出请输入0 ***\"<>j;

if(j>=0&&j<=2) //判断输入数字是否在规定范围内 {

switch(j)//选择登录账户类型 {

case 1://登陆管理员账户 { char p[]={\"1111\ char m[5]; cout<<\"请输入密码\"; cin>>m; if (strcmp(m,p)==0) //验证密码正确与否 { system(\"cls\"); /*清屏功能,美化界面*/ guanliyuanmenu(); break; } //调用管理员账户信息 else

cout<<\"密码错误!!! 重新选择按键\"<case 2://登陆客户账户 {

system(\"cls\"); /*清屏功能,美化界面*/ customermenu(); break; }

case 0://登陆客户账户 { exit(0); break; } } } } }

void customermenu()/*创建客户账户界面*/ {

void air_print();

9

void cust_print(); void input_cust(); void input_air(); void search(); void bookticket(); void change(); void tuipiao(); void kehu_print(); int i,j;

cout<<\" ★ *** 客户订票系统 *** ★ \"<cout<<\"*********************************************\"<cout<<\" 1.查询航班信息 2.输入乘客个人信息\"<cout<<\" 3.查询乘客个人信息 4.订票信息 \"<cout<<\" 5.退票信息 6.查找航线 \"<cout<<\" 7.返回上一界面 \"<cout<<\" **************************************\"<cin>>j; switch(j) {

case 1:air_print(); break;

case 2:input_cust(); break;

case 3:kehu_print(); break;

case 4:bookticket(); break;

case 5:tuipiao(); break;

case 6:search(); break;

case 7: i=B-1; break;

default:cout<<\"输入出错\"<10

}

cout<<\"谢谢使用!\"<void guanliyuanmenu() /*创建管理员账户界面*/ { void air_print(); void cust_print(); void input_cust(); void input_air(); void search(); void bookticket(); void change(); void tuipiao(); int j,i;

cout<<\" ★ *** 管理员航线管理系统 *** ★\"<cout<<\" 1.输入航班信息 2.查询航班信息 \"<<< \" 3.输入乘客信息 4.查询乘客信息 \"<<< \" 5.修改航班信息 6.查找航线 \"<<< \" 7.返回上一界面 \"<cout<<\" *********************************************\"<cin>>j;

switch(j) {

case 1: input_air(); break;

case 2:air_print(); break;

case 3:input_cust(); break;

case 4:cust_print(); break;

11

case 5:change();; break;

case 6:search(); break;

case 7:i=B-1; break;

default: cout<<\"输入出错\"; } } }

void input_air() /*输入航班信息*/ {

int i,j=0,k;

cout<<\"请依次输入各航班信息:\"<cout<<\"***************************************************\"<{cout<<\"请输入航班号:\"<>air[i].airnum;

cout<<\"请输入出发城市:\"<>air[i].set_off;

cout<<\"请输入到达城市:\"<>air[i].get_to;

cout<<\"请输入起飞时间:\"<>air[i].start_time;

cout<<\"请输入到达时间:\"<>air[i].arrive_time;

cout<<\"请输入机票价格:\"<>air[i].price;

cout<<\"请输入机票折扣率:\"<>air[i].discount;

cout<<\"请输入机票总票数:\"<>air[i].ticketnum;

cout<<\"请输入机票剩余票数:\"<>air[i].ticketleft;

cout<<\"第\"<<++f<<\"个航线信息已经输入完毕是否继续?按1继续,按0返回上一界面\"; cin>>k; if(k==0) break; } }

void air_print() /*查询并输出所有航班信息*/ {

12

int i; if(f==0) cout<<\"航班信息未输入,请管理员输入\"<cout<cout<void input_cust() /*输入客户个人信息*/ { int k; { int i; if(f==0) cout<<\"航班信息未输入,请管理员输入\"<cout<<\"请依次输入各客户信息:\"<i=g; /*程序错误点,顾客信息输出最后一行乱码,输入三行,只输出两行 ,加入此语句已改正,原因是先管理员界面,后客户界面输入时会使i=0, 而g是静态变量,其值非0,导致输入出错*/ cout<<\"请输入客户证件号:\"<>cust[i].custnum; cout<<\"请输入客户姓名:\"<>cust[i].name;

cout<<\"请输入客户订票数:\"<>cust[i].ticketnum;

cout<<\"请输入航班号:\"<>cust[i].airnum;

cout<<\"请输入订单标号:\"<>cust[i].booknum;

cout<<\"第\"<<++g<<\"个客户信息已经输入完毕。按1继续,按0返回上级\"; cin>>k; if(k==0) {

break; }}}

13

}

void cust_print() { int i;

if(g==0) cout<<\"客户信息未输入,请管理员输入\"<else cout<<\" 证件号 姓名 订票数 航班号 订单标号\"<cout<void kehu_print() /*用于客户个人信息输出,添加验证功能*/ {

int i,k=0;//控制变量k

char custnum[20]; /*证件号*/ char name[40];

if(g==0) cout<<\"客户信息未输入,请管理员输入\"<cout<<\"为确保是顾客本人操作,请输入您的证件号和姓名验证\"<>custnum;

cout<<\"请输入您的姓名:\"<>name;

for(i=0;iif(strcmp(cust[i].custnum,custnum)==0&&strcmp(cust[i].name,name)==0) {

cout<<\" 证件号 姓名 订票数 航班号 订单标号\"<cout<if(k==0) cout<<\"验证出错,请核对个人信息,系统自动返回上一界面\"<void search()

{/*根据用户的选择,根据不同的需求查找条件的 航线。(如给定航班号,或者给定 起点城市和终点城市*/ int i,j=0,l; char city1[20],city2[20],num[20];

14

if(f==0) cout<<\"航班信息未输入,请管理员输入\"<cin>>i; switch(i) {

case 0: l=A; break; case 1:

cout<<\"请输入航班号:\"<>num;

for(i=0;iif(strcmp(air[i].airnum,num)==0)//按航班号判断输出条件 {

cout<cout<<\"航班号 起始站 终点站 时间 机票数\"<continue; }

if(j==0) cout<<\" 查找失败,无此航线! \"<>city1;

cout<<\"请输入到达城市:\"<>city2;

for(i=0;iif(strcmp(air[i].set_off,city1)==0&&strcmp(air[i].get_to,city2)==0) // {

cout<cout<<\"航班号 起始站 终点站 时间 机票数\"<15

相等

continue; }

if(j==0) cout<<\" 查找失败,无此航线! \"<void yanzheng() {

char custnum[20]; /*证件号*/ char name[40];

if(g==0) cout<<\"客户信息未输入,请管理员输入\"<cout<<\"为确保是顾客本人操作,请输入您的证件号和姓名验证\"<cin>>custnum;

cout<<\"请输入您的姓名:\"<>name;

for(int i=0;iif(strcmp(cust[i].custnum,custnum)==0&&strcmp(cust[i].name,name)==0) { s=i; break; } }}

void bookticket() /*订票信息*/ {

int i,j,k=0,m=0; //k为控制变量 char num[20]; void yanzheng();

if(f==0) cout<<\"航班信息未输入,请管理员输入\"<cout<<\"请输入航班号查找:\"<>num;

for(i=0;iif(strcmp(air[i].airnum,num)==0)//按航班号判断输出条件 {

cout<cout<<\"航班号 起始站 终点站 时间 机票数\"<16

cout<>j;

if((air[h].ticketleft!=0)&&(j<=air[h].ticketleft)) /*判断是否订票数符合要求*/ {

air[h].ticketleft=air[h].ticketleft-j; cust[s].ticketnum=cust[s].ticketnum+j; cout<<\"订票成功!\"<char city1[20],city2[20];

cout<<\"按出发和到达城市查找\"<>city1;

cout<<\"请输入到达城市:\"<>city2;

for(i=0;iif(strcmp(air[i].set_off,city1)==0&&strcmp(air[i].get_to,city2)==0) { h=i; cout<cout<17

} }

void tuipiao() /*响应退票操作*/ { int i,j,k,l=0,m=0; char num[20];

void bookticket();

if(f==0) cout<<\"航班信息未输入,请管理员输入:\"<>num;

for(i=0;iif(strcmp(air[i].airnum,num)==0)/*按航班号判断输出条件*/ {

cout<cout<<\"航班号 起始站 终点站 时间 机票数\"<if(l==0)cout<<\"航班信息输入错误,请核实您的信息\"; if(l!=0) { for(;;) {

cout<<\"请输入您要退的机票数目:\"<>j; if(j<0) { cout<<\"请输入有效的机票数,票数应大于0!\"<if(cust[s].ticketnumair[h].ticketleft=air[h].ticketleft+j; cust[s].ticketnum=cust[s].ticketnum-j; }

cout<<\"退票完毕:\"<>k;

18

if(k==0) {

break; } }} } }

void change()

{/*航线信息修改,当管理员对航班

信息做一定的修改时,对数据进行处理*/ char airno[20]; char airnum[20]; char city1[20]; char city2[20];

char start_time[20]; char arrive_time[20]; float price; float discount; int ticketleft; int i,j,m,k=0;

if(f==0) cout<<\"航班信息未输入,请管理员输入\"<>airnum; for(i=0;iif(strcmp(air[i].airnum,airnum)==0)//判断输出条件 {

cout<<\"航班号 起始站 终点站 时间 机票数\"<k=1;/*控制变量,若有符合航班,则为1,下一步继续,否则下一步中断返回*/ } }

if(k!=1)cout<<\"抱歉,尚没有该航班信息,请核对输入内容准确性\"<i=h;

19

cout<<\" ★ *** 航线修改系统 *** ★ \"<cout<<\"***************************************\"<cout<<\" 1.修改航班号 2.修改出发城市 \"<cout<<\" 3.修改到达城市 4.修改起飞时间 \"<cout<<\" 5.修改到达时间 6.修改机票价格 \"<cout<<\" 7.修改折扣率(%) 8.修改总票数 \"<cout<<\" 9.修改剩余票数 0.返回上一界面 \"<cout<<\"***************************************\"<for(m=0;mcin>>j; switch(j) {

case 1: cout<<\"输入航班号:\"; cin>>airno; strcpy(air[i].airnum,airno); break; case 2: cout<<\"输入出发城市:\"; cin>>city1; strcpy(air[i].set_off,city1); break; case 3: cout<<\"输入到达城市:\"; cin>>city2; strcpy(air[i].get_to,city2); break; case 4: cout<<\"输入起飞时间:\"; cin>>start_time; strcpy(air[i].start_time,start_time); break; case 5: cout<<\"输入到达时间:\"; cin>>arrive_time;

20

strcpy(air[i].arrive_time,arrive_time); break; case 6: cout<<\"输入机票价格:\"; cin>>price; air[i].price=price; break; case 7: cout<<\"输入折扣率:\"; cin>>discount; air[i].price=price; break; case 8: cout<<\"输入总票价:\"; cin>>price; air[i].price=price; break; case 9: cout<<\"输入剩余票数:\"; cin>>ticketleft; air[i].ticketleft=ticketleft; break; case 0: m=B+1; break;

default:cout<<\"输入出错\"; break; } } } } }

调试分析

1 客户可以在客户订票系统中查询全部客户信息,不符合实际问题。

解决办法:新建了一个kehu_print()函数,当客户要求输出客户信息时,要通过对证件号和姓名的验证若符合则可以查看该用户信息,不符合则提示验证错误,要求重新操作。

2 客户在客户订票系统中订票或退票时,航班剩余票改变,而客户的定票数不变,很明显不符合实际问题。

解决办法:新建了一个yanzheng()函数,加入一定控制变量,当客户要求订票或退票时,要通过对证件号和姓名的验证若符合则可以订票或退票,并且实

21

现了客户订票数和航班剩余票数的动态同步改变,若输入不符合则提示验证错误,要求重新操作。

3对菜单切换的方法不了解,导致编写的程序运行时候是一竖行向下排列,影响使用者的视觉范围。

解决方法:通过上网搜索一些相关资料得知system(\"cls\")具有清屏的作用,这是本次的一个小收获。

4程序对不符合要求的输入没有错误提示(比如定票数必须为正整数,订票数要小于等于剩余票数)。

解决办法:在原有代码的基础上加上对输入值的必要判定和错误提示。 5 在预计输出与实际输出不一样时,如在管理员和客户界面分别输入客户信息后要求input_cust()输出时有乱码并且缺行。

解决办法:经分析是i值的改变导致的,后加入i=g; 语句改正了此错误。

总之,在调试时问题会很多,要求不断的改进,可以在问题困难的时候寻求必要帮助,以便更快地解决问题。

用户手册

(1)演示程序的运行环境为Windows 7 系统,Microsoft Visual C++ 6.0中运行。执行文件为:air.exe

(2)进入演示程序后即显示界面:

(3) 请根据提示进行操作,按规范输入,如上一界面下一步可以输入的值为0,1,2,然后继续按需求和提示操作。

22

测试结果

进入程序后界面

管理员登陆输入密码

清屏后的管理员界面

23

管理员输入2条航线信息

查询航班信息

24

管理员输入客户信息

查询客户信息

修改航线信息及修改后的结果

25

查找航班信息

查询航班信息

查询客户个人信息

26

订票(票数不足特殊情况处理)

订票后票数改变

查找航线

退票后的订票数,订票数动态变化

27

十 心得与体会与参考文献

这次数据结构课程设计实验让自己经历了一个从没有思路到方法渐渐明晰的过程,从实验想法到实验报告完成,程序运行正确的历程,从刚开始错误较多的程序到慢慢调试成功,无限喜悦尽在此!

在这次课程设计中,自己不仅开发一个小型实用系统,而且掌握了“清屏”美化界面的语句,通过学习数据结构的知识更好地理解了运用结构化程序设计的思想和方法,学会了调试一个较长程序的基本方法,提升了书写程序设计开发文档的能力,对实验报告作用的认识更加清晰„„

回顾此次课程设计,从拿到题目到完成整个编程,从理论到实践,自己学到了很多的东西,不仅可以巩固所学的C++语言知识,把前面所学过的知识重新温习了一遍,而且学到了很多在书本上所没有学到过的知识(比如清屏作用)。 通过这次数据结构课程设计收获知识,提高能力的同时,我也学到了很多人生的哲理,比如懂得怎样去制定计划,怎样去实现这个计划,掌握了在执行过程中怎么样去克服心理上的不良情绪(在程序调试阶段苦苦报错的阶段),以及在错误自己无法解决的情况下如何去请教同学和老师,获取帮助。

谭浩强 《C程序设计(第四版)》 清华大学出版社 谭浩强 《C程序设计题解与上机指导》 清华大学出版社 严蔚敏 《数据结构(C语言版)》 清华大学出版社 《C++语言基础教程(第二版)》 清华大学出版社

28

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务