火车票管理系统课程设计报告.docx
《火车票管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《火车票管理系统课程设计报告.docx(15页珍藏版)》请在冰点文库上搜索。
![火车票管理系统课程设计报告.docx](https://file1.bingdoc.com/fileroot1/2023-6/21/49136846-a669-4fea-9be5-ffd7aaa5d2c1/49136846-a669-4fea-9be5-ffd7aaa5d2c11.gif)
火车票管理系统课程设计报告
程序设计报告
(2014/2015学年第一学期)
题目:
火车票管理系统
专业通信工程
学生姓名
班级学号
指导教师
指导单位计算机学院计算机软件教学中心
日期
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
火车票务管理系统
一、课题内容和要求
(一)课题内容
该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。
所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
(二)课题要求
(1)火车票数据由多条记录组成,其信息包括:
车次,发车时间,起点站,终点站,行车时间,额定载量,已售票人数等。
(2)数据保存形式:
所有火车票数据要以文本或二进制文件保存。
(3)需要实现的功能
1)新增火车票数据记录。
2)查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。
3)删除火车票数据记录(先查找,再删除。
若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。
4)对火车票排序(可按车次、发车时间、起点站、终点站等排序。
)。
5)显示当前所有火车票信息列表。
6)售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。
7)退票(售票的逆处理,过程与售票类似)。
8)保存火车票数据到文件中。
9)从文件中读入火车票数据。
(4)界面功能要求:
1)采用友好的字符界面,实现一个功能控制菜单。
2)每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。
需求分析
一、功能分析图
二、录入班次信息:
依次输入班次、起点站和终点站等信息同时保存在文件中,并可以随时增加新的班次信息。
三、浏览班次信息:
输出保存在文件中的全部班次信息,并区分当前的车次是否已发出,如发出则标记“此车已发出”。
四、按班次号查询路线:
以输入的班次号为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!
”
五、按起点站查询路线:
输入的起点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!
”
六、按终点站查询路线:
输入的终点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!
”
七、排列发车时间表:
按照发车时间从早到晚的顺序逐条显示车次信息。
八、售票功能:
依次输入“售票数目”和“班次号”可出售未发出的班次的车票。
九、退票功能:
依次输入“退票数目”和“班次号”可退距发车时间大于半小时的班次的车票。
三、概要设计
(1)类:
#include<>
#include<>
#include<>
#include<>
classTicket
{
charno[20];
charname_b[20];
charname_e[20];
inthour;
intminute;
inttra_time;
inteding;
intyupiao;
public:
voidshoupiao(fstream&f);
voidtuipiao(fstream&f);
voidsearchbynumber(fstream&f);
voidsearchbybeginplace(fstream&f);
voidsearchbyendplace(fstream&f);
voidluru(fstream&f);
voidliulan(fstream&f);
voidpaixu(fstream&f);
friendostream&operator<<(ostream&out,constTicket&t);
our)||(T[j].hour==local->tm_hour)&&(local->tm_min>T[j].minute))
{
cout<"<}
else
{
cout<}
}
}
voidTicket:
:
shoupiao(fstream&f)
{
constintNUM=sizeof(Ticket);
intn;
longt;
charm[20];
TicketT;
structtm*local;
cout<<"请输入售票的数目:
"<cin>>n;
cout<<"请输入售票的班次:
"<cin>>m;
time(&t);
local=localtime(&t);
(0,ios:
:
beg);o;
cin>>t[i].hour;
cin>>t[i].minute;
cin>>t[i].name_b;
cin>>t[i].name_e;
cin>>t[i].tra_time;
cin>>t[i].eding;
cin>>t[i].yupiao;
}
(0,ios:
:
end);o;
cin>>t[i].hour;
cin>>t[i].minute;
cin>>t[i].name_b;
cin>>t[i].name_e;
cin>>t[i].tra_time;
cin>>t[i].eding;
cin>>t[i].yupiao;
}
(0,ios:
:
end);//文件指针指向文件尾
for(i=0;i((char*)&t[i],sizeof(Ticket));
}
voidTicket:
:
xiugai(fstream&f)
{
charn[10];
Tickett;
cout<<"请输入你要修改的班次:
"<cin>>n;
(0,ios:
:
beg);
boolfd=false;
while(!
()&&!
fd)
{
((char*)&t,sizeof(Ticket));
if(fd=(n))
{
cout<<"请依次输入"<cin>>;
cin>>;
cin>>;
cin>>;
cin>>;
cin>>;
cin>>;
cin>>;
}
}
(0,ios:
:
end);//文件指针指向文件尾
((char*)&t,sizeof(Ticket));
}
voidmenu()//菜单函数
{
cout<<"******************************菜单********************************"<cout<<"1:
录入车次信息"<cout<<"2:
浏览车次信息"<cout<<"3:
根据车次号查询路线"<cout<<"4:
根据起点站查询路线"<cout<<"5:
根据终点站查询路线"<cout<<"6:
排列发车时间表"<cout<<"7:
售票"<cout<<"8:
退票"<cout<<"9:
增加车次"<cout<<"10:
修改车次"<cout<<"0:
退出菜单"<cout<<"请选择您需要操作的选项:
"<}
voidmain()
{
intx;
TicketT;
fstreamfile;
cout<<"*********************欢迎您使用票务管理系统!
**********************"<menu();
while(x)
{
cin>>x;
("d:
\\",ios:
:
in|ios:
:
out|ios:
:
binary);//创建并打开二进制文件
switch(x)
{
case1:
(file);break;
case2:
(file);break;
case3:
(file);break;
case4:
(file);break;
case5:
(file);break;
case6:
(file);break;
case7:
(file);break;
case8:
(file);break;
case9:
(file);break;
case10:
(file);break;
case0:
break;
}
cout<<"操作已完成,请继续!
"<();//关闭二进制文件
}
cout<<"************************欢迎您下次使用!
****************************"<}
五、测试数据及其结果分析
1、录入班次信息
输入:
1
输出:
请输入你要录入的班次信息数量:
输入:
4
输出:
请依次输入
车次、起点站、终点站、发车时间(时)、发车时间(分)、行车时间、额定票数和余票数量
输入:
G111南京扬州802010030
G222南京北京10302112035
G333南京上海1102214050
G444南京广州9302216040
输出:
操作已完成,请继续!
2、浏览班次信息
输入:
2
输出:
G111南京扬州802010030
G222南京北京10302112035
G333南京上海1102214050
G444南京广州9302216040
操作已完成,请继续!
3、根据车次号查询路线
输入:
3
输出:
请输入你要查找的班次号:
输入:
G111
输出:
G111南京扬州802010030
操作已完成,请继续!
4、根据起点站查询路线
输入:
4
输出:
请输入你要查找的班次的起点站:
输入:
南京
输出:
G111南京扬州802010030
G222南京北京10302112035
G333南京上海1102214050
G444南京广州9302216040
操作已完成,请继续!
5、根据终点站查询路线
输入:
5
输出:
请输入你要查找的班次的终点站:
输入:
上海
输出:
G333南京上海1102214050
操作已完成,请继续!
6、排列发车时间表
输入:
6
输出:
G111南京扬州802010030
G444南京广州9302216040
G222南京北京10302112035
G333南京上海1102214050
操作已完成,请继续!
7、售票
输入:
7
输出:
请输入售票的数目:
输入:
1
输出:
请输入售票的班次:
输入:
G333
输出:
已售出1张该车次的车票!
操作已完成,请继续退票
8、退票
输入:
8
输出:
请输入退票的数目:
输入:
1
输出:
请输入退票的班次:
输入:
G444
输出:
已退1张该车次的车票!
操作已完成,请继续!
9、退出菜单
输入:
0
输出:
************************欢迎您下次使用!
****************************
结果分析:
(1)按照车次号、起点站或终点站查询班次时,如输入的车次信息不在数据库里或该车次已发出,则显示“未找到该车次信息!
该车次不存在或已发出!
”
(2)售票的班次如已发出,则显示“该车次已发出!
”如无余票则提示“票已售完”。
(3)退票的班次如在半小时内发车或已发出,则显示“退票失败!
”
六、调试过程中的问题
1、录入班次信息的操作完成时,必须调用函数(0,ios:
:
end)令文件指针指向文件尾,否则下次录入新的数据时会覆盖之前的信息,造成班次信息的丢失。
2、调用while(!
())((char*)&T[i++],sizeof(Ticket));浏览班次信息后,文件中的班次信息的最后一条会被读两次,所以把班次信息显示在屏幕时利用(0,ios:
:
end);
intb=();
(0,ios:
:
beg);
inta=();
intc=(b-a)/sizeof(Ticket);获得文件内包含的班次信息总数c,调用for(intj=0;j3、在主函数中的swicth()循环函数外层加上一个while()循环可连续多次对菜单进行操作,从而提高了运行效率。
7、课程设计总结
通过将近两周的程序设计实习,我首先认识到自己编程水平的有限,十分后悔当初没有学好C++,其次我也意识到编程是件很严谨的工作,一点点小的错误都会引起不可想象的连锁反应。
实践出真知,我觉得这两个星期的学习,自己收获很大,对我自己来说也是一种锻炼,不仅在一定程度上增长了我对编程的认识,我也学会了团队合作,学会了坐冷板凳一行一行敲代码。
当然,我自己身上依然存在着不少的问题。
比如对于一些难懂的代码,还是参考了网上的程序,比如录入数据的时候一开始不知道怎么让各组信息整齐地排列。
我们大学生学编程,实践真的是很好的方式,我非常感谢学校给我们安排这样一次珍贵的实习机会,让我们第一次面对问题、解决问题,在实战中真正地提高了自己对编程的理解和编程的能力,真心希望学校多给我们提供这样书本之外的考核和锻炼。
指导老师吴老师不仅提供给我们好的方法,更给我们信心,再次真的非常感谢吴老师的耐心教导!