东华大学数据结构课程设计 实验报告
实验名称: 航空订票系统 指导教师:
目 录
一、设计题目 ……………………………………………………(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 程序调用关系 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 #define A 6 /*航线数*/ #define B 15 /*用于循环体中的返回模块,常量*/ #define C 5 /*顾客数*/ #define Cout air[i].airnum<<\" \"< 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 ***\"< 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<<\"密码错误!!! 重新选择按键\"< 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<<\" ★ *** 客户订票系统 *** ★ \"< 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<<\"输入出错\"< } cout<<\"谢谢使用!\"< cout<<\" ★ *** 管理员航线管理系统 *** ★\"< 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<<\"请输入到达城市:\"< cout<<\"请输入起飞时间:\"< cout<<\"请输入到达时间:\"< cout<<\"请输入机票价格:\"< cout<<\"请输入机票折扣率:\"< cout<<\"请输入机票总票数:\"< cout<<\"请输入机票剩余票数:\"< cout<<\"第\"<<++f<<\"个航线信息已经输入完毕是否继续?按1继续,按0返回上一界面\"; cin>>k; if(k==0) break; } } void air_print() /*查询并输出所有航班信息*/ { 12 int i; if(f==0) cout<<\"航班信息未输入,请管理员输入\"< cout<<\"请输入客户订票数:\"< cout<<\"请输入航班号:\"< cout<<\"请输入订单标号:\"< cout<<\"第\"<<++g<<\"个客户信息已经输入完毕。按1继续,按0返回上级\"; cin>>k; if(k==0) { break; }}} 13 } void cust_print() { int i; if(g==0) cout<<\"客户信息未输入,请管理员输入\"< int i,k=0;//控制变量k char custnum[20]; /*证件号*/ char name[40]; if(g==0) cout<<\"客户信息未输入,请管理员输入\"< cout<<\"请输入您的姓名:\"< for(i=0;i cout<<\" 证件号 姓名 订票数 航班号 订单标号\"< {/*根据用户的选择,根据不同的需求查找条件的 航线。(如给定航班号,或者给定 起点城市和终点城市*/ int i,j=0,l; char city1[20],city2[20],num[20]; 14 if(f==0) cout<<\"航班信息未输入,请管理员输入\"< case 0: l=A; break; case 1: cout<<\"请输入航班号:\"< for(i=0;iif(strcmp(air[i].airnum,num)==0)//按航班号判断输出条件 { cout< if(j==0) cout<<\" 查找失败,无此航线! \"< cout<<\"请输入到达城市:\"< for(i=0;iif(strcmp(air[i].set_off,city1)==0&&strcmp(air[i].get_to,city2)==0) // { cout< 相等 continue; } if(j==0) cout<<\" 查找失败,无此航线! \"< char custnum[20]; /*证件号*/ char name[40]; if(g==0) cout<<\"客户信息未输入,请管理员输入\"< cout<<\"请输入您的姓名:\"< for(int i=0;i void bookticket() /*订票信息*/ { int i,j,k=0,m=0; //k为控制变量 char num[20]; void yanzheng(); if(f==0) cout<<\"航班信息未输入,请管理员输入\"< for(i=0;iif(strcmp(air[i].airnum,num)==0)//按航班号判断输出条件 { cout< cout< if((air[h].ticketleft!=0)&&(j<=air[h].ticketleft)) /*判断是否订票数符合要求*/ { air[h].ticketleft=air[h].ticketleft-j; cust[s].ticketnum=cust[s].ticketnum+j; cout<<\"订票成功!\"< cout<<\"按出发和到达城市查找\"< cout<<\"请输入到达城市:\"<