最新版车票管理系统毕业课程设计报告Word下载.docx
《最新版车票管理系统毕业课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《最新版车票管理系统毕业课程设计报告Word下载.docx(44页珍藏版)》请在冰豆网上搜索。
返回源程序。
由上述需求分析可得,系统的功能模块图如图1所示。
图1系统功能模块图
二、系统的设计与实现
根据第一章的需求分析,接下来给出的是系统的设计和实现。
1、类的设计
根据上述需求分析,有车票信息类和链表类。
(1)车票信息类
系统研究车票系统Bus_infor类中成员:
Bus_order是班次编号,start[20]是车票信息的起点站,end[20]是车票信息的终点站,all_tickted是总共要发售的票数,tickted是已经被订购的票数,Hour_start,Minute_start是车票的发车时间,GoHour表示行车时间,构造函数Bus_infor(),析构函数~Bus_infor(),录入函数input(),读取函数input(ifstream&
is),输出函数output(),写入函数output(ofstream&
os),定票函数Order_tickt(intn),获取发车时间函数GetTime_start(),判断当前班次状况函数GetTime(),内联函数,返回额定载量Get_all_tickted(){returnall_tickted;
},返回已定票人数Get_tickted(),返回班次号Get_bus_order(),返回终点站的字符串Get_end()const。
车票类的UML图如(图2)所示:
图2客房类的UML图
(2)链表类
在Bus_link类中,有成员:
构造函数Bus_link(),析构函数~Bus_link(),录入车票信息的函数input(),修改车票信息的函数mend(),删除车票信息的函数del(),查找函数find(Bus_infor**p,intnum,char*pn),查询车票信息found(),显示车票信息show(),定购车票信息Order(),退还车票信息Unorder(),保存车票信息save(),初始化车票信息begin(),清除函数clear(),关于车票信息about(),主菜单函数mainmenu(),设置系统修改标志voidsetkey(intk){key=k;
},返回系统修改标志intgetkey(){returnkey;
},头节点head,系统修改标志key,管理员登陆标志password。
链表类的UML图如(图3)所示:
2.界面设计:
分界面:
车票信息的查询的设计
提示进入查询界面,选择按班次查找或按终点站查询车票信息。
车票信息的查询界面如图所示。
车票信息的删除的设计
在录入或修改错误的车票信息后,想删除错误的车票信息,按提示按提示输入班次号,程序会显示该班次的信息并提示用户是否确定删除,输入y则删除。
删除车票的信息界面如图所示。
修改车票信息的设计
按提示进行车票信息的修改,本系统中只有管理员身份才可以修改车票,显示屏幕如图所示。
订购车票信息的设计
在管理员身份下按提示在剩余未出发的班次中,输出车票的信息,以判断是否可以订票,已出发的和已定票人数已满的情况下是不能订票的。
定购车票信息输出界面如图所示。
退订车票信息的设计
在管理员身份下按提示在剩余未出发的班次中,输出车票的信息,以判断是否可以退票,已出发的和没人定票的情况下是不能退票的。
退定信息输出界面如图所示。
介绍车票信息的设计
在程序中输出使用说明。
介绍信息界面如图所示。
3.关键程序代码的分析:
(1)系统的登录
在主函数中,先输出车票管理系统的欢迎界面。
调用一个对象的mainmenu函数来输出主菜单,按照提示选择需要执行功能的序号,由switch判断和选择所需要执行的功能。
选择1:
执行车票信息的录入;
选择2:
执行车票信息的浏览;
选择3:
执行查询车票信息;
选择4:
执行车票信息的删除;
选择5:
执行车票信息的修改;
选择6:
执行定购车票;
选择7:
执行退定车票;
选择8:
执行车票信息的保存;
选择9:
输出关于车票管理系统的信息;
选择0:
退出;
主函数:
intmain()
{
Bus_linkpp;
intk=1;
charc;
strings;
pp.begin();
cout<
<
"
\n\n→→→→→→→→→→→→→→欢迎进入车票管理系统←←←←←←←←←←←←←←←←"
endl<
endl;
//开机选择是否进入系统
*******************************************************************************"
endl
<
系统说明:
**\t本系统为课程设计作品,可以简易的进行车票管理,欢迎提出意见和建议!
**"
endl
**\t合肥学院计算机科学与技术系11网工二班\t**"
**\t作者:
孙乐\t\t学号:
\n\t\t是否进入系统?
\n\n\t\t按Enter进入主菜单,按Esc键退出:
;
do//利用一个do-while循环来判断输入是否进入系统
{
c=getch();
if(c==27)
exit(0);
elseif(c==13)
break;
else
{
cout<
\n\n\t\t按键错误!
请重新输入:
}
}while((c!
=13)||(c!
=27));
try
while(k==1)
{
system("
cls"
);
s=pp.mainmenu();
//调用主菜单函数
switch(s[0])
{
case'
1'
:
pp.input();
break;
//录入车票信息
2'
pp.show();
//浏览车票信息
3'
pp.found();
//查询车票信息
4'
pp.del();
//删除车票信息
5'
pp.mend();
//修改车票信息
6'
pp.Order();
//保存车票信息
7'
pp.Unorder();
//退还车票信息
8'
pp.save();
9'
pp.about();
break;
//关于车票系统
0'
cout<
\n\t\t是否退出系统?
\n\n\t\t按Enter返回主菜单,按Esc键退出:
do//利用一个do-while循环来判断输入是否退出系统
{
c=getch();
if(c==27)
{
k=0;
break;
}
elseif(c==13)
k=1;
else
cout<
//利用循环防止误操作而引起的退出系统
}while((c!
break;
}
if(k==1)
\n\t\t\t是否返回主菜单?
1.是0.不是:
"
cin>
>
k;
if(!
cin)
throwstring("
数据输入错误"
if(k==0)
if(pp.getkey()==1)
cout<
\t\t\t是否保存?
1.保存0.不保存:
cin>
if(!
throwstring("
if(k==1)
pp.save();
pp.clear();
k=0;
}
}
}
}
catch(strings)
cout<
s<
为保护系统不崩溃,将自动退出系统!
system("
pause"
return0;
}
在读取数据库中,可以从以有的文件中读取数据到程序中,避免了程序的重复输入数据,有利于后面的信息修改、删除等功能。
读取数据库:
voidBus_link:
begin()
{
password=0;
Bus_infor*p,*p2;
p=head;
clear();
longt;
ifstreamis("
bus.txt"
ios:
in);
//文件以输入方式打开
if(!
is)
ofstreamos("
out);
//文件以输出方式打开
os.close();
//关闭文件
return;
intnum=-1;
while
(1)
num=-1;
t=is.tellg();
//记录下当前位置
is>
num;
is.seekg(t);
//移动到原来位置
if(num<
0)
{
is.close();
return;
p2=newBus_infor;
p2->
input(is);
//输入is对象内容
p->
next=p2;
next=NULL;
p=p->
next;
(2)信息的添加
车票信息的录入,创建Bus_infor类和Bus_link对象,调用构造函数,输入车票的班次、额定座位数、始发时间、行车时间、起始站与终点站、,通过input函数实现。
input()
if(password==1)
Bus_infor*p,*p2=NULL;
p=head;
intn=1;
//intn;
while(p->
next)
p=p->
while(n)
p2=newBus_infor;
p2->
input();
p->
Bus_link:
setkey
(1);
\t\t\t按1继续,按0返回:
cin>
n;
if(!
throwstring("
else
\n\t\t对不起,游客不能录入车票信息"
voidBus_infor:
GetTime_start()
请输入始发时间(时分):
{
cin>
Hour_start>
Minute_start;
if(cin.fail())//判断输入的数据类型是否有错
cout<
\n时间输入错误,请重新输入:
cin.clear();
cin.get();
}
elseif(Hour_start<
0||Hour_start>
24||Minute_start<
0||Minute_start>
60)
\n时间格式出错,请重新输入:
//判断时间格式是否出错,小时不能小于大于24,分钟不能小于大于60
else
}
input()//Bus_infor类中成员函数input的函数体
\t\t\t按提示输入:
输入班次:
while
(1)
Bus_order;
if(cin.fail())//判断输入的数据类型是否有错
\n班次输入错误,请重新输入:
//清除刚才输入的数据
//重新输入
else
break;
请输入车的额定座位数:
all_tickted;
if(cin.fail())//判断输入的数据类型是否有错
\n座位数输入错误,请重新输入:
GetTime_start();
请输入行车时间:
GoHour;
\n行车时间输入错误,请重新输入:
请输入起始站与终点站:
cin>
start;
cin>
end;
是否清空售票(y/n)?
chara;
a;
if(a=='
y'
||a=='
Y'
)tickted=0;
(3)信息的浏览
浏览客房信息,如果之前有文件信息,则直接输出,如果没有则需录入后才能输出。
所以,先得有一个读取函数begin,再有一个浏览函数show。
show()
客车基本信息如下:
班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"
Bus_infor*p;
while(p->
(p->
next)->
output();
(4)信息的修改
按提示输入要修改的班次,定义一个指向链表第一个节点的指针p。
如果指针创建成功,开始用while和if语句实现p指向的节点的班次与存在的班次比较。
如果相同,提示输入车票的各个信息;
如果没有相同,提示没有所查询的车票。
intBus_link:
find(Bus_infor**p1,intnum,char*pn)
intt=0;
(*p1)=p;
if((p->
Get_bus_order()==num||(p->
Get_end()==pn)
{
<
(p->
t=1;
}
returnt;
mend()
Bus_infor*p;
intnum;
charname[20];
\t\t\t输入班次号:
if(!
if(!
find(&
p,num,name))
\t\t找不到你要修改的内容!
Bus_link:
\n\t\t对不起,游客不能修改车票信息"
}
(5)信息的查询
按提示输入要查询的班次或者终点站,定义一个指向链表第一个节点的指针p。
如果相同,则输出车票的各个信息;
found()
intnum,n;
charname[20];
do
\t\t1:
按班次查找,2:
按终点站查找:
}while(n<
1||n>
2);
if(n==1)
\t\t\t输入班次:
if