机票预定系统课程设计说明书Word文档格式.docx
《机票预定系统课程设计说明书Word文档格式.docx》由会员分享,可在线阅读,更多相关《机票预定系统课程设计说明书Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出信息;
若已满员或余票少于订票额,则重新询问客户要求。
若需要,可登记排队候补;
(4)退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他候补的客户。
(5)修改航班信息
:
对各航班信息进行修改,如航班号,航班起点站,和终点站,起飞的时间,飞行的时间,余票数和订票数。
(6)f删除航班信息
(7)g航班信息保存
(8)h退出订票系统
模块设计的思想:
i.程序程序建立所需的.txt文件。
运行程序时,若找不到初始化所需文件,程序将视所有数据为空,即所有班机的机票都未被预定。
例如,首次运行该程序,不采取任何操作或加入若干信息后可从wait.txt文件导出文件已存有的信息。
ii.在查询模块中可根据程序给出的功能进行查询,然后输入要查询的信息,在输出界面上显示已订票的客户和正在排队等待的订票客户的所有信息,按任意键返回主界面。
iii.订票功能模块中,输入要订票的航班信息,输出界面显示已订票的客户或正在排队等待的订票客户信息,如已有等待订票客户,则显示暂时不能满足新的订票客户的需求,询问是否进入等待队列,是输入y和n确定,是的话输入客户的ID信息和所需的航班信息。
iv.退票的模块:
输入要退票的航班信息,显示航班信息,已订票的客户和正在排队等待订票的客户信息,对两类客户(已订票的客户和正在排队等待订票的客户)都进行询问是哪类客户需要退票服务?
选择确定然后输入要退票的客户ID,程序输出显示客户信息,并接着输出显示进行退票业务修改后的航班信息。
v.修改功能模块可对航班信息和客户的所有信息进行修改。
vi.及时存储,程序种只要内容进行了改动,就及时的保存入文件,从而加大了程序的安全性,减小了对各种不安全因素可能引起的损失。
vi.
vii.
viii.
ix.
主要类的设计描述:
classCustomer//////////////////////////////////////////////客户类
{
public:
stringm_strID;
//客户ID号
stringm_strName;
//客户姓名
intm_nWant;
//客户要订的票数
};
classAirInfo//////////////////////////////////////////航班信息类
stringm_strNum;
//航班号
stringm_strStart;
//航班起点站
stringm_strEnd;
//航班终点站
stringm_strTime;
//航班起飞时间日期
stringm_strFlyTime;
//飞行时间
intm_nCount;
//航班票数
intm_nLeftCount;
//剩余票数
vector<
Customer>
m_wPerson;
//等待订票的顾客队列,其中m_wPerson.size()即为排队的客户数
m_haveBook;
//已订票客户
AirInfo();
voidSetNum(string&
n);
//设计航班号
voidSetStart(string&
start);
//设计航班起飞点
voidSetEnd(string&
end);
//设计航班终点地
voidSetTime(string&
time);
//设计航班起飞时间
voidSetCount(intcount);
//设计航班票数
voidSetLeftCount(intleft);
//设计航班剩余票数
voidSetFlyTime(string&
//设计航班飞行总时间
voidSetWait(Customer&
p);
//设计航班的等候订票队列,每次进一个人
voidSetHavingBookCustomer(Customer&
//设计已订票的客户
stringGetFlyTime();
//获取航班飞行总时间
stringGetTime();
//获取航班起飞时间日期
intGetWaitCount();
//获取等侯订票队列人数
intGetLeftCount();
//航班剩余票数
stringGetStart();
//获取该航班起飞地
stringGetEnd();
//获取该航班终点地
stringGetNum();
//获取该航班号
intGetCount();
//获取该航班总票数
voidPrintInfo();
//打印该航班的信息
~AirInfo(){}
}
航空客运订票系统
输入航班信息
查询航班信息
乘客订票业务
乘客退票业务
修改航班信息
删除航班信息
浏览航班信息
信息保存退出
选择进入主菜单
显示文件中已存的航班信息
功能实现流程图:
数据测试进入主界面:
查询界面:
订票界面:
退票界面:
分析总结:
通过对C++面向对象此次课题的课程设计,加强了我对C++知识的掌握,特别是对面向对象的重载性、继承性、多态性有了比较熟练的掌握以及对模板应用进一步加强,给本人积累了丰富的编程经验和大大提高了我的动手能力,最后通过不少的数据测试运行,结果表明:
各项数据在界面的传递正常,能达到预期效果。
通过这一课题的研究,使我受益非浅
优点:
本系统的特点是条理清晰,而且界面友善,大方,简单易用,美观。
类与类的关系明了,每个类都有头文件与实现文件分开。
缺点:
界面是控制台的界面。
根据要求我觉得这是本程序的一个小缺陷。
致谢:
感谢李老师和王老师给传输给我们的知识及你们的耐心指导。
同时也感谢身边同学给我提供各种帮助,特别是编程能力很强的那些同学给我的帮助,都是他们在我做这个课程设计过程中遇到问题时都教会我解决的方法。
参考文献:
<
C++编程思想>
BruceEckel刘宗田等机械工业出版社
C++程序设计教程>
钱能清华大学出版社
附录:
程序关键源代码:
voidAirInfo:
SetHavingBookCustomer(Customer&
p)///记录已订票的客户
intAirInfo:
GetLeftCount()
GetWaitCount()
stringAirInfo:
GetTime()
GetFlyTime()
SetWait(Customer&
p)//每次进入一个等侯订票的客户,让客户排在队列后面
SetFlyTime(string&
time)
SetLeftCount(intleft)
AirInfo:
AirInfo()
//初始化为空
m_strNum="
"
;
m_strStart="
m_strEnd="
m_strTime="
//航班起飞时间
m_strFlyTime="
m_nCount=0;
m_nLeftCount=0;
GetCount()
GetNum()
GetEnd()
GetStart()
SetCount(intcount)
SetTime(string&
SetEnd(string&
end)
SetStart(string&
start)
SetNum(string&
n)
PrintInfo()//打印本航班信息
cout<
endl;
\t************************航班信息********************"
\t航班号:
m_strNum<
\t"
起飞站:
m_strStart<
\t终点站:
m_strEnd<
\t起飞时间:
m_strTime<
\t飞行总时间:
m_strFlyTime<
\t航班总票数:
m_nCount<
\t剩余票数"
m_nLeftCount<
if(m_haveBook.size()!
=0)
{
cout<
\t该航班有"
m_haveBook.size()<
个客户已订票,其信息如下:
\t\t"
for(inti=0;
i<
m_haveBook.size();
i++)
{
客户ID号:
m_haveBook[i].m_strID<
"
<
客户姓名:
m_haveBook[i].m_strName<
<
订票数量:
m_haveBook[i].m_nWant;
cout<
endl<
}
}
\t\t**********"
if(m_wPerson.size()!
m_wPerson.size()<
个客户等待订票,其信息如下:
m_wPerson.size();
m_wPerson[i].m_strID<
m_wPerson[i].m_strName<
m_wPerson[i].m_nWant;
\t*****************************************************"
voidLoadData(vector<
AirInfo*>
*vec_Air)//从文件导入数据
AirInfo*pA;
//航班信息指针
fstreamdateFile;
dateFile.open("
AirInfo.txt"
ios:
in);
//打开航班信息数据文件
stringtem;
//临时变量
intwait=0;
//等待订票的客户数
intdate=0;
inthavedBook=0;
//已订票和客户数
while(dateFile>
>
tem)//从文件里导入数据
//处理一条航班记录
{//动态创建
pA=newAirInfo();
//在内存申请一块空间
pA->
SetNum(tem);
//设计航班编号
//正在对一条记录处理,不能跳到另外一条记录
///////////////////////////////对数字处理
dateFile>
tem;
date=atoi(tem.c_str());
//把字符串转换成整形int
SetCount(date);
SetLeftCount(date);
//////对已订票的客户处理
havedBook=atoi(tem.c_str());
for(intj=0;
j<
havedBook;
j++)
{
CustomerhavedPerson;
dateFile>
havedPerson.m_strID=tem;
//客户ID
havedPerson.m_strName=tem;
//客户名字
havedPerson.m_nWant=atoi(tem.c_str());
//客户要订票的数目
pA->
SetHavingBookCustomer(havedPerson);
}
////////////////////////////////////////////////////////////////////////////对等候客户的数据导入
wait=atoi(tem.c_str());
//本航班有wait个客户等候排队订票
for(inti=0;
wait;
i++)//有wait个客户等待订票,每个客户订票数不同
Customerperson;
person.m_strID=tem;
person.m_strName=tem;
person.m_nWant=atoi(tem.c_str());
SetWait(person);
vec_Air->
push_back(pA);
//把本航班的整条信息记录放入模板里(用作航班信息暂存器)
dateFile.close();
//关闭文件
voidFindAirInfo(vector<
vec_Air)//////////////////////////////查询航班信息
voidBookAirInfo(vector<
*vec_Air)//////////////////////////////订票
iteratorv_Iter;
//当作指针用
system("
cls"
);
//清屏
stringnum;
//航班号
\t请输入要订票的航班号:
cin>
num;
for(v_Iter=vec_Air->
begin();
v_Iter!
=vec_Air->
end();
v_Iter++)
if((*v_Iter)->
GetNum()==num)//找到相应的航班号
(*v_Iter)->
PrintInfo();
//输出航班信息
break;
if(v_Iter==vec_Air->
end())//如果找到记录最后还没有找到此航班的记录
\t对不起,暂时没有此航班号!
cin.get();
return;
if((*v_Iter)->
m_wPerson.size()!
=0)//是否有客户在等候订票
(*v_Iter)->
//如果第一个客户所订票数小于此航班所剩余的票数,则询问此客户是否要订票
m_wPerson[0].m_nWant<
GetLeftCount())
\t请先核对并满足排队等候本航班的客户!
//计算剩余票数
intleft=(*v_Iter)->
GetLeftCount()-(*v_Iter)->
m_wPerson[0].m_nWant;
charmeet;
//满足要求
cout<
\t可以满足等候本航班的第一个客户的订票数,是否要订票?
(y/n):
cin>
meet;
if(meet=='
y'
)//满足此客户的订票需求
{
vector<
iteratorIter_person;
//声明一个客户类型的指针
Iter_person=(*v_Iter)->
m_wPerson.begin();
//指向等候队列首地址
(*v_Iter)->
SetLeftCount(left);
cout<
\t已经为等候本航班的第一个客户订票!
请通知该客户!
CustomerPerson;
Person.m_strID=(*v_Iter)->
m_wPerson[0].m_strID;
Person.m_strName=(*v_Iter)->
m_wPerson[0].m_strName;
Person.m_nWant=(*v_Iter)->
//把已满足的客户放入已订得票的客户记录
m_haveBook.push_back(Person);
//删除第一个已经满足订票的客户
m_wPerson.erase(Iter_person);
//输出修改后的本航班所有信息
(*v_Iter)->
i--;
//为了不错过每一个客户
}
=0)//还有客户等候本航班
charwait='
n'
\t系统暂不能满足新客户的订票要求!
是否要排队等候?
cin>
if(wait=='
Customerp;
//声明一个要等候的客户对象
\t请输入此客户的ID编号:
cin>
p.m_strID;
\t请输入此客户的姓名:
p.m_strName;
\t请输入要订票的数目:
p.m_nWant;
(*v_Iter)->
m_wPerson.push_back(p);
//进行排队等候
\t此客户已经进入本航班的订票排队!
else//新客户,本航班没有客户在等候排票
intcount;
\t请输入新客户要订票的数量:
count;
GetLeftCount()<
count)
\t对不起,本航班已没有足够的票数"
\t是否要进入排队等候?
charch;
ch;
if(ch=='
Customerp;
\t请输入此客户的ID号:
p.m_nWant=count;
(*v_Iter)->
\t此客户已进入等候排队订票中!
else
\t您已取消了排队等候订票!
else//可以满足订票要求,把新客户放入已订得票的客户记录里
Customerperson;
\t请输入新客户的ID号:
person.m_strID;
\t请输入新客户的姓名:
person.m_strName;
person.m_nWant=count;
intleft=(*v_Iter)->
GetLeftCount()-count;
//
//设计本航班剩余票数
m_haveBook.pus