资源描述
青岛理工大学
C++面向对象课程设计汇报
院(系): 计算机工程学院
专业: 软件工程
学生姓名:
班级 软件131班 学号:
题目: 飞机订票管理系统设计 ____
起迄日期: _.6.29~.7.10
设计地点: 计算机学院机房
指 导 教 师: 翟正利 丁凡
完成日期: 年7月 10 日
C++面向对象课程设计任务书
题目24“飞机订票管理系统设计”
1、问题描述:
航空客运订票业务包含:查询航班、客票预订和办理退票等。试设计一个航空客运订票系统,已使上述业务能够借助计算机完成。
2.功效要求:
(1)每条航线所包含信息有:终点站名、航班号、飞机号、星期几飞行飞行周日(星期几)、乘员定额、余票量、已订票用户名单(包含姓名、订票量、舱位等级)和等候补替补用户名单(包含姓名、所需票量);
(2)作为示意系统,全部数据能够只放在内存中;
(3)系统能实现操作和功效以下:
录入:能够录入航班情况(数据能够存放在一个数据文件中,数据结构、具体数据自定);
查询航线:依据旅客提出终点站名输入下列信息:航班号、飞机号、星期几起飞,最近航班日期和余票量。
承接订票业务:依据用户提出要求(航班号、订票数额)查询该航班票额情况,若还有余票,则为用户办理订票手续,输出座位号;若已满员或余票数少于订票额,则需重新寻味用户要求,若需要,可登记排队候补;
承接退票业务:依据用户提供情况(日期、航班),为用户办理退票手续,然后查询该航班是否有些人排队等候补,首先问询排在第一用户,若全部退票额能满足她要求,则为她办理订票手续不然依次问询其它排队候补用户。
修改航班信息:当航班信息改变能够修改航班数据文件。
(选作)为用户订票要求不能满足时,系统可向用户提供抵达同一目标地其它航线情况。
3、问题处理方案:
依据系统功效要求,能够将问题处理分为以下步骤:
(1)应用系统分析,建立该系统功效模块框图和界面组织和设计;
(2)分析系统中各个实体及它们之间关系;
(3)依据问题描述,设计系统类层次;
(4)完成类层次中各个类描述;
(5)完成类中各个组员函数定义;
(6)完成系统应用模块;
(7)功效调试;
(8)完成系统总结汇报。
目 录
一、需求分析 2
二、内容设计 2
2.1、依据所选题目给出模块图 2
2.2、画出关键程序步骤图: 3
2.2、编写程序关键代码: 8
三、调试分析 13
四、用户手册 14
五、设计总结 20
六、参考文件 21
七、 附录 21
一、需求分析
1.选做此课题或项目标
1.经过试验实现对学生信息系统管理操作;
2.深入掌握和利用C++进行程设计能力;
3.深入了解和利用结构化程序设计思想和方法;
4.初步掌握开发一个小型实用系统基础方法;
5.学会利用步骤图或N-S图表示算法;
6.掌握书写程设计开发文档能力
2. 程序所实现功效
1.输入航班信息并保留到磁盘;
2.浏览航班信息;
3.修改航班信息并保留到磁盘
4.查找航班
5.订票
6.退票
二、 内容设计
1. 依据所选题目给出模块图
图1.1所表示
飞机订票管理系统
修改航班信息
查询全部信息
退票
录入航班信息
查询航班信息
订票
图1.1 模块图
2.画出主程序及其关键模块步骤图
(1).图2.1所表示为查询函数步骤图:
开始
输入航班号
否
查询成功?
是
输出航班信息
返回主菜单?
否
是
主菜单
结束
图2.1 查询函数步骤图
(2) .图2.2所表示为订票函数步骤图
开始
输入要订票姓名
是
姓名和初始姓名相同?
否
输入航班号
还有余票,订票?
否
是
存放用户信息到文件
修改航班信息(票额)
输出订票信息
返回主菜单?
否
是
主菜单
结束
图2.2 订票函数步骤图
(3) .图2.3所表示为退票函数步骤图
开始
输入姓名和航班号
信息和文件中信息相同?
否
是
是否退订?
否
是
从文件中删除该用户订票信息
退票成功!
返回主菜单?
是
否
主菜单
结束
图2.3 退票函数步骤图
(4) .图2.4所表示为查询全部信息函数
开始
输出乘客信息
输出航班信息
返回主菜单?
否
是
主菜单
结束
图2.4 查询全部信息函数
(5.)图2.5所表示为主程序步骤图
开始
录入航班信息
进入主菜单
飞机订票管理系统
查询全部信息
退票管理
查询航班
订票管理
是
返回主菜单?
否
退出系统
结束
图2.5 查询全部信息函数
3.编写程序关键代码
(1) .录入航班信息:
void chushi()
{
int i;
ofstream outfile("airline.dat");
ofstream file("customer.dat");
for (i=0;i<3;i++)
{
outfile<<fl[i].fligh <<" "
<<fl[i].num<<" "
<<fl[i].place<<" "<<fl[i].data<<" "
<<fl[i].dticket<<" "<<fl[i].riqi<<" "
<<fl[i].yticket<<endl;
file<<cu[i].name<<" "<<cu[i].num<<" "<<cu[i].seat<<" "<<cnum<<endl;}
outfile.close();file.close();
cout<<"初始化已完成!"<<endl<<endl;
caidan1();
}
}
(2) .查询航班信息:
void chaxun1()
{
char place[10];
int temp,i,a;
cout<<"输入终点站名:";cin>>place;
for(i=0;i<100;i++)
if(strcmp(fl[i].place,place)==0){temp=i;a=0;}
cout<<"航班信息"<<endl<<"航班号:"<<fl[temp].fligh<<"飞机号:"<<fl[temp].num<<"起飞日期:"<<fl[temp].data<<"最近航班日期"<<fl[temp].riqi<<"余票量"<<fl[temp].yticket<<endl;
if(a!=0)cout<<"查询失败!"<<endl;
cout<<"返回主菜单?1.是2.否";cin>>temp;
if(temp==1) caidan2();
}
(3) .订票:
void dingpiao()// 订票
{
char name[10];
int num,i,t,j,k,temp;
int x;
cout<<"请输入你姓名和想订航班号:"<<endl<<endl;
cout<<"姓名:";
cin>>name;
cout<<endl;
cout<<"航班号:";
cin>>num;
for(i=0;i<300;i++)
if(strcmp(name,cu[i].name)==0)
{
cout<<"您已经定过航班,要返回主菜单吗?(1.返回/2.退出)";
cin>>t;switch(t)
{case 1:caidan1();break;
default :break;}
}
for(i=0;i<300;i++)
if (name!=cu[i].name)
for(j=0;j<10;j++)
if(fl[j].fligh==num)temp=j;
if(fl[temp].yticket<=100)
{
cout<<"此航班还有余票,要订票吗?(1.是/2.否)";
cin>>x;
switch(x)
{
case 1:
{
for (k=0;k<3;k++)
if (fl[k].fligh==num)
{
fl[k].dticket=fl[k].dticket+1;
fl[k].yticket=fl[k].yticket-1;
cnum=cnum+1;
strcpy(cu[cnum].name,name);cu[cnum].num=num;
cu[cnum].seat=fl[k].dticket;
ofstream outfile1("airline.dat");
for(j=0;j<3;j++)
outfile1<<fl[j].fligh<<" "<<fl[j].num<<" "<<fl[j].place<<" "<<fl[j].data<<" "<<fl[j].dticket<<" "<<fl[j].riqi<<" "<<fl[j].yticket<<endl;
ofstream outfile2("customer.dat",ios::app);
outfile2<<cu[cnum].name<<" "<<cu[cnum].num<<" "<<cu[cnum].seat<<" "<<cnum<<endl; //打开文件并存放数据
cout<<"订票成功!"<<endl<<endl
<<"用户信息:"<<cu[cnum].name<<'\t'<<"航班号:"<<cu[cnum].num<<'\t'<<"座位号:"<<cu[cnum].seat<<endl;
outfile1.close();
outfile2.close();
cout<<" 1.返回主菜单 2.退出 :";
cin>>temp;
if(temp==1)
caidan1();
else;
}};
break;
default :caidan1();break;}}else cout<<"此航班票已经售完,请订其它航班次票~";
}
(4) .退票:
void tuipiao()// 退票
{
char name[10];
int i,temp,t,num,a,j;
struct tmp;
cout<<"请输入您姓名和航班号:"<<endl;
cout<<"姓名:";
cin>>name;cout<<"航班号:";
cin>>num;cout<<endl;
for(i=0;i<300;i++)
{if (strcmp(cu[i].name,name)==0)
{
a=0;cout<<"确定退订吗?(1.是 2.否):";
cin>>temp;
if(temp==1)
{
ofstream outfile1("airline.dat");
ofstream outfile2("customer.dat");
for(j=0;j<=i;j++)
outfile2<<cu[j].name<<" "<<cu[j].num<<" "<<cu[j].seat<<" "<<j<<endl;
for(t=0;t<3;t++)
{
if(fl[t].fligh==num) {fl[t].dticket=fl[t].dticket-1;fl[t].yticket=fl[t].yticket+1;}}
for(t=0;t<3;t++)
outfile1<<fl[t].fligh<<" "<<fl[t].num<<" "<<fl[t].place<<" "<<fl[t].data<<" "<<fl[t].dticket<<" "<<fl[t].riqi<<" "<<fl[t].yticket<<endl;
}
}
else
a!=0;
}
if (a!=0)
cout<<"没有你信息,请查证后再操作!";
cout<<"返回主菜单?1.是2.否:";
cin>>temp;
if(temp==1)
caidan1();
}
(5) .查询全部信息:
void chaxunquanbu()
{
int i,temp;
cout<<"乘客信息:"<<endl<<endl;
for(i=0;i<300;i++)
{
if (cnum==i) temp=i;
}
for(i=0;i<temp;i++)
cout<<"姓名:"<<cu[i].name<<'\t'<<"航班号:"<<cu[i].num<<'\t'<<"座位号:"<<cu[i].seat<<'\t'<<"编号:"<<i+1<<endl;
cout<<endl<<"航班信息:"<<endl<<endl;
for(i=0;i<3;i++)
cout<<"航班号:"<<fl[i].fligh<<'\t'<<"飞机号:"<<fl[i].num<<'\t'<<"目标地:"<<fl[i].place<<'\t'<<"起飞日期"<<fl[i].data<<'\t'<<"已订票数:"<<fl[i].dticket<<'\t'<<"最近航班日期"<<fl[i].riqi<<'\t'<<"剩下票数:"<<fl[i].yticket<<endl;
cout<<"返回主菜单?1.是2.否";
cin>>temp;
if(temp==1)caidan1();
}
(6) .主菜单函数:
void caidan1()
{
int i;
cout<<"************* 航空订票系统v *************"<<endl;
cout<<"*** ***"<<endl;
cout<<"*** 1.订票业务 2.退票业务 ***"<<endl;
cout<<"*** 3.查询用户信息 4.查询全部信息 ***"<<endl;
cout<<"*** 5.查询飞机票 6.退出系统 ***"<<endl;
cout<<"*** ***"<<endl;
cout<<"*** 假如是第一次使用本系统,请载入初始信息 ***"<<endl;
cout<<"*********************************************************"<<endl;
ifstream infile1("airline.dat");
ifstream infile2("customer.dat");
for(i=0;i<3;i++) {infile1>>fl[i].fligh>>fl[i].num>>fl[i].place>>fl[i].data>>fl[i].dticket>>fl[i].riqi>>fl[i].yticket;}
for(i=0;i<300;i++) {infile2>>cu[i].name>>cu[i].num>>cu[i].seat>>cnum;}
infile1.close();infile2.close(); //读取数据
cout<<"请输入业务代码:";
list();
}
(7) .选择列表函数:
void list()
{
int a;
cin>>a;cout<<endl;
switch(a)
{
case 1:dingpiao();break;
case 2:tuipiao();break;
case 3:chaxun();break;
case 4:chaxunquanbu();break;
case 5:chaxun1();break;
case 6:;break;
default:{cout<<"输入错误,请重新输入正确代码:";list();} //输入代码
}
}
(8) .查询用户信息函数:
void chaxun()
{
char name[10];
int temp,i,a;
cout<<"请输入你姓名:";cin>>name;
for(i=0;i<300;i++)
if (strcmp(cu[i].name,name)==0){temp=i;a=0;}
cout<<"*****乘客信息*****"<<endl<<"姓名:"<<cu[temp].name<<'\t'
<<"航班号:"<<cu[temp].num<<'\t'<<"座位号:"<<cu[temp].seat<<endl;
if (a!=0) cout<<"没有你信息,请查证后再操作!"<<endl;
cout<<"返回主菜单?1.是2.否";
cin>>temp;
if(temp==1)
caidan1();
}
三、调试分析
1.实际完成情况说明(完成功效,支持数据类型等)。
该航空订票管理系统关键完成支持int(航班号,座位号等),char(姓名,终点,抵达日期等,关键实现功效以下:
1. 航班信息和用户信息初始化。
2. 用户信息录入。
3. 航班信息修改(包含余票和已定票改动)。
4. 订票功效。
5. 退票功效。
6. 查询航线功效。
7. 查询全部信息功效(包含用户和航班信息)。
2. 程序性能分析。
1. 本程充足利用了多种系统函数,使程序十分简练。
2. 程序相比之下较大,运行起来需要一定时间。
3. 依据不一样功效建立不一样类,对具体功效又分别用对应函数来据体实现使程序变得有序易懂。
3. 上机过程中出现问题及其处理方案。
上机过程碰到问题有:
1. 不了解文件使用,包含读取文件到程序,将数据写入文件等。
2. 对整体程序模版不够了解,刚开始不能够完全地构思出程序全部。
3. 出现括号和符号忘记匹配,或马虎造成单词拼错和函数体写错。
4. 结构体格式开始不够熟练。
5. 循环体嵌套使用不够熟悉。
6. 使用string类型不是那么熟练。
处理方案:
1. 查阅相关书籍,和上网查找资料,问询基础很好同学,从而对文件操作有了深入提升。
2. 上网查找类似程序,观看其大致结构,从而提炼出精华,找出大致规律,利用到自己程序里,使程序不至于那么僵硬。
3. 每写完一段程序就检验该段程序有没有错误,分段缩小范围修改,采取分步调试方法,逐步找出问题所在。
4. 上网和查阅结构体具体说明,学会熟练使用结构体。
5. 能够先画步骤图列出全部循环体图示,依据图示来编写程序中循环体嵌套,这么能够大大降低循环体犯错。
6. 开始使用char类型来定义字符串,以后改成方便string类型,之前忘记头文件#include<string>,经过学习深入了解string类型。
4. 程序中能够改善地方说明。
1. 退票管理中可增加功效,区分退票在飞机起飞前和飞机起飞后,依据不一样选择来退还不一样金额退款。
2. 订票函数里可合适提升订票最大人数,以免发生系统瓦解现象。
3. 查询函数里能够增加查询适宜航班方法,方便于愈加好程度地适应用户多方面不一样订票需求。
5. 程序中能够扩充功效及设计实现构想。
1. 能够增加用户登录功效,让用户能够设置自己帐号密码,方便于用户更方便使用本飞机订票系统办理航空业务。
2. 能够将dos系统界面显示做成mfc界面显示,使显示愈加清楚,更便于用户了解和使用本系统。
3. 能够在航空飞机订票基础上发展其它订票功效,比如火车订票,汽车订票,更全方面地提供订票管理服务。
四、 用户手册
1.运行程序,显示主菜单图3.1所表示:
图3.1 主菜单
2. 选择5.查询航班信息,然后选择返回主菜单图3.2图3.3所表示:
图3.2 查询航班信息
图3.3 查询航班信息
3. 选择1订票,进行订票,输入姓名,要订航班号,显示已定过情况图3.4所表示,若未定过,则订票,此时用户信息将新促进文件customer中,订票完成后选择返回主菜单,图3.5图3.6图3.7所表示:
图3.4 订票失败
图3.5 订票成功
图3.6 返回主菜单
图3.7 文件数据存放情况
3. 退票,输入你姓名,返回主菜单,此时文件改变,图3.8图3.9所表示:
图3.8 退票成功
图3.9 文件存放情况
4. 查询,输入4,查询图3.10,图3.11所表示:
图3.10查询全部信息
图3.11 查询全部信息
6. 退出系统,图3.12所表示
图3.12 退出系统
五、 设计总结
自从拿到题目到完成整个编程,从理论到实践,在整整一个星期日子里,能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。经过这次课程设计使我知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,这毕竟独立做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠,比如说结构体……经过这次课程设计以后,一定把以前所学过知识重新温故。
编程看起来似乎是一件很枯燥、乏味事情,不过经历了这次大程序编辑以后,发觉其实里面还是充满乐趣,一旦真钻研下去什么事情全部能够放下,来认真研究。在试验中还发觉了很多不足,对于以后对C++学习有很大帮助。
六、参考文件
[1] 李兰, 任凤华. C++面向对象程序设计. 西安: 西安电子科技大学出版社,
[2] 李兰, 任凤华. 《C++面向对象程序设计》试验指导及习题解析. 西安: 西安电子科技大学出版社,
[3] 郑莉, 董渊. C++程序设计基础教程. 北京: 清华大学出版社,
[4] 郑莉. C++程序设计基础教程学生用书. 北京: 清华大学出版社,
七、附录(要加上注释。)
#include <iostream>
#include<string>
#include <fstream>
using namespace std;
struct flight
{
int fligh;
int num;
char place[10];
char data[10]; //起飞日期(星期几)
int dticket;
char riqi[15]; //最近航班日期
int yticket;
}fl[10]={{101,01,"北京","monday",1,".01.01",99},
{102,02,"青岛","tuesday",0,".02.10",100},
{103,03,"郑州","friday",0,".3.15",100}};
struct customer
{char name[10];
int seat;
int num;
}cu[300]={{"李华",01,101},{"赵光",01,102},{"王磊",01,103}}; //定义结构体
int cnum=3; //定义用户编号
void list();
void dingpiao();
void tuipiao();
void chaxun();
void chaxunquanbu();
void chaxun1();
void caidan1(); //函数申明
void caidan2();
void chushi();
void main()
{cout<<"*******欢迎使用航空订票系统******"<<endl<<endl;
caidan2();
} //主函数
void caidan1()
{
int i;
cout<<"************* 航空订票系统v *************"<<endl;
cout<<"*** ***"<<endl;
cout<<"*** 1.订票业务 2.退票业务 ***"<<endl;
cout<<"*** 3.查询用户信息 4.查询全部信息 ***"<<endl;
cout<<"*** 5.查询飞机票 6.退出系统 ***"<<endl;
cout<<"*** ***"<<endl;
cout<<"*** 假如是第一次使用本系统,请载入初始信息 ***"<<endl;
cout<<"*********************************************************"<<endl;
ifstream infile1("airline.dat");
ifstream infile2("customer.dat");
for(i=0;i<3;i++) {infile1>>fl[i].fligh>>fl[i].num>>fl[i].place>>fl[i].data>>fl[i].dticket>>fl[i].riqi>>fl[i].yticket;}
for(i=0;i<300;i++) {infile2>>cu[i].name>>cu[i].num>>cu[i].seat>>cnum;}
infile1.close();infile2.close(); //读取数据
cout<<"请输入业务代码:";
list();
} //菜单1
void caidan2()
{
int t;
cout<<"第一次开启本软件请输入1,不然请输入2:";cin>>t;
if(t==1)chushi();else caidan1();} //菜单2
void chushi()
{
int i;
ofstream outfile("airline.dat");
ofstream file("customer.dat");
for (i=0;i<3;i++)
{ outfile<<fl[i].fligh <<" "
<<fl[i].num<<" "
<<fl[i].place<<" "<<fl[i].data<<" "
<<fl[i].dticket<<" "<<fl[i].riqi<<" "
<<fl[i].yticket<<endl;
file<<cu[i].name<<" "<<cu[i].num<<" "<<cu[i].seat<<" "<<cnum<<endl;}
outfile.close();file.close();
cout<<"初始化已完成!"<<endl<<endl;
caidan1();
} //存放数据
void list()
{
int a;
cin>>a;cout<<endl;
switch(a)
{
case 1:dingpiao();break;
case 2:tuipiao();break;
case 3:chaxun();break;
case 4:chaxunquanbu();break;
case 5:chaxun1();break;
case 6:;break;
default:{cout<<"输入错误,请重新输入正确代码:";list();} //输入代码
}
}
void chaxun1()
{
char place[10];
int temp,i,a;
cout<<"输入终点站名:";cin>>place;
for(i=0;i<100;i++)
if(strcmp(fl[i].place,place)==0){temp=i;a=0;}
cout<<"航班信息"<<endl<<"航班号:"<<fl[temp].fligh<<"飞机号:"<<fl[temp].num<<"起飞日期:"<<fl[temp].data<<"最近航班日期"<<fl[temp].riqi<<"余票量"<<fl[temp].yticket<<endl;
if(a!=0)cout<<"查询失败!"<<endl;
cout<<"返回主菜单?1.是2.否";cin>>temp;
if(temp==1) caidan1();
}
void dingpiao()// 订票
{
char name[10];
int num,i,t,j,k,temp;
int x;
cout<<"请输入你姓名和想订航班号:"<<endl<<endl;
cout<<"姓名:";
cin>>name;
cout<<endl;
cout<<"航班号:";
cin>>num;
for(i=0;i<300;i++)
if(strcmp(name,cu[i].name)==0)
{
cout<<"您已经定过航班,要返回主菜单吗?(1.返回/2.退出)";
cin>>t;switch(t)
{case 1:caidan1();break;
default :break;}
}
for(i=0;i<300;i++)
if (name!=cu[i].name)
for(j=0;j<10;j++)
if(fl[j].fligh==num)temp=j;
if(fl[temp].yticket<=100)
{
cout<<"此航班还有余票,要订票吗?(1.是/2.否)";
cin>>x;
switch(x)
{
case 1:
{
for (k=0;k<3;k++)
if (fl[k].f
展开阅读全文