资源描述
课 程 设 计
课程名称
面向对象程序设计课程设计
题目名称
列车车票管理系统
专业班级
2023级计算机科学与技术
学生姓名
学 号
指导教师
二○一一年十二月二十二日
蚌埠学院计算机科学与技术系课程设计任务书
课 程
面向对象程序设计课程设计
班
级
2023级计算机
科学与技术
指导
教师
题 目
列车车票管理系统
完毕
时间
2023年11月30日 至
2023年12月23日
重要内容
基本功能规定:实现简朴的列车车票管理系统,可以对列车的车票进行简朴的录入、删除、修改和查找等功能,乘客还可以预订车票,管理员可以查找乘客的信息等功能
乘客:
1、 查询车票情况
2、 根据车次预定车票
3、 显示所有车票信息
管理员:
1、 查询车票情况
2、 录入、修改、删除车票情况,显示所有车票
3、 删除乘客的信息,查找乘客的信息和显示乘客的信息
设计报告规定
1.封面
2.课程设计任务书
3. 分工协作说明
4. 成绩评估表
5.课程设计报告
⑴ 系统总体方案
⑵ 设计思绪和重要环节
⑶ 各功能模块和流程图
⑷ 设计代码
⑸ 心得体会和参考资料
说明:学生完毕课程设计后,提交软件及课程设计电子和纸质版,规定报告文字通畅、笔迹工整,文字不少于3000字,并按规定装订成册。
版面规定
1.题目用黑体三号,段后距18磅(或1行),居中对齐;
2.标题用黑体四号,段前、段后距6磅(或0.3行);
3.正文用小四号宋体,行距为1.25倍行距;
4.标题按“一”、“㈠”、“1”、“⑴”顺序编号。
蚌埠学院计算机科学与技术系课程设计成绩评估表
项目
权重
分值
具体规定
得分
文献阅读与调查论证
0.20
100
能独立查阅文献和从事其它调研活动;有收集、加工各种信息的能力
设计质量
0.30
100
设计合理、功能齐备,程序运营正常,实验数据准确可靠;有较强的实际动手能力
论文撰写质量
0.20
100
设计说明书完全符合规范化规定,用A4复印纸打印成文
学习态度
0.20
100
学习态度认真,科学作风严谨,严格按规定开展各项工作,按期完毕任务
学术水平与创新
0.10
100
设计有创意,有一定的学术水平或实用价值
总分
评语:
这次程序设计实验增长了我们对程序设计在实践上的结识,纯熟了类和对象尚有链表的使用,特别是考虑到大量数据时插入删除操作此种数据结构对运营时间上的节省和方便。在编译的过程中有发现一些错误,比如没有定义等众多错误,所以编译一直不成功,后来通过对程序的仔细阅读,弄懂了哪里没有定义上,修改过来后,编译才成功了;尚有,很多地方没有提醒语句,让人不容易理解;一开始进入页面也不是很清楚明了,页面布局也不够完善,通过老师的指导,后期我们通过了很多的改正,当然尚有很多的局限性之处,还望老师指正,让我们能进一步的提高。
等级:
指导教师:
年 月 日
目录
目录 1
列车车票管理系统 2
一、需求与功能分析 2
二、概要设计 2
(一)、系统框架图 2
(二)、系统类图 3
三、程序运营与测试结果 4
(一)、调试中的问题和解决办法 4
(二)、调试结果 4
1、用户注册 4
2、主菜单 5
3、 车票录入 5
4、车票浏览 6
5、车票查询 7
6、车票删除 8
7、车票修改 9
8、购票 9
9、保存 10
四、总结与展望 11
五、程序代码 12
六、致谢 23
七、参考文献 24
列车车票管理系统
一、需求与功能分析
时代在发展,计算机软件和系统日趋成熟并应用于各行各业。在中国,火车 票的发售与管理一直是一个难题,而建立一个火车票订票管理系统是一个很好的解决方法。作为计算机应用的一部分,使用计算机对火车票信息进行管理,具有手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、犯错率低等各种优点。这些优点能大大提高列车信息管理的效率,也正体现了火车票的科学化正规管理。
我的这个系统采用的编程语言是C++,实现了以下功能:1、可操作的界面 2、录入、修改、删除、查找列车车票信息 3、订票、退票功能
二、概要设计
(一)、系统框架图
(二)、系统类图
三、程序运营与测试结果
(一)、调试中的问题和解决办法
在编译的过程中有发现一些错误,比如没有定义等,所以编译一直不成功,后来通过对程序的仔细阅读,弄懂了哪里没有定义上,修改过来后,编译就一下成功了。
(二)、调试结果
1、用户注册
2、主菜单
3、 车票录入
4、车票浏览
5、车票查询
6、车票删除
7、车票修改
8、购票
9、保存
四、总结与展望
这次课程设计的内容用到了上学期学到的面向对象编程,我选择的面向对象语言是学过的C++,选择的题目是列车车票管理系统。一开始选到这个题目,我就初步开始做需求和功能分析,把这个系统的需求和功能划分为:拥有良好简易的操作界面、对列车车票信息进行增删改查等操作和车票的订购退订这些功能。定义了存放列车信息的类Bus_infor,,用这个类 来完毕所需要的需求功能,可是我不久就发现了,直接用这个类来做按条件查找,删除、修改、添加这些操作实在太麻烦,于是我想到了数据结构中的链表这个数据结构,这个系统用这个结构刚刚好。于是我又编写了此外一个类Bus_link,在这个类中,我把Bus_infor做成链表里的元素,编写了一系列的函数,这样增删改查这些操作就可以在链表中实现了。通过仔细地检查错误,修改内容之后,再通过各种测试,总算把这个系统给做完了。但是由于能力有限,还没有进一步学习MFC等图形界面的知识,所以没能把整个系统的界面做得更美丽一点。相信在以后的学习中,我能不断地提高,做出更好的设计。通过这次课程设计,更加进一步对C++方面的程序设计的了解,特别是它在面向对象的编程思想的应用,并通过这次的不断发现问题,解决问题的过程,学到了不少东西。
五、程序代码
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
class Bus_infor{ //列车信息
int No;
static int Bus_No; //给录入的车次默认编号
char start[20]; //起点站
char end[20]; //终点站
int Bus_order[20]; //车次号
int all_tickted; //车的额定载量
int tickted; //已订票数
int Hour_start, Minute_start, Hour_end, Minute_end; //发车时间,行车时间
public:
Bus_infor *next;
Bus_infor();
~Bus_infor();
int Get_no();
int Get_all_tickted();
int Get_tickted();
int Get_bus_order();
char *Get_start();
char *Get_end();
void addr();
void Order_tickt(int n);
void Unorder_tickt(int n);
void GetTime_start();
void GetTime_end();
void ShowTime();
void input();
void input(ifstream & is);
void output();
void output(ofstream & os);
};
void Bus_infor:: input(){ //录入车票信息
cout<<endl<<"************************录入车票信息************************"<<endl;
cout<<"\t请按提醒输入:"<<endl;
cout<<"\t把列车的载客量 规定为 车次号"<<endl<<endl;
cout<<"输入车次号/额定载量(数字): ";
cin>>all_tickted;
GetTime_start();
GetTime_end();
addr();
}
void Bus_infor:: input(ifstream & is){ //数据流的写入(重要是列车车票信息)
is>>Bus_order[20] >>start >>end >>all_tickted >>tickted >>Hour_start >>Minute_start >>Hour_end >>Minute_end;
is.get();
}
void Bus_infor:: output(){ //输出车票信息
cout<<endl<<"************************车票信息浏览************************"<<endl;
cout<<"列车车票基本信息如下:"<<endl<<endl;
cout<<"车次:"<<Bus_order[20]<<endl
<<"发车时间:"<<Hour_start<<":"<< Minute_start<<endl
<<"起点站:"<<start <<endl
<<"终点站:"<<end <<endl
<<"行车时间:"<<Hour_end<<":"<< Minute_end <<endl
<<"额定载量:"<<all_tickted<<endl
<<"已订票数:"<<tickted<<endl<<endl;
}
void Bus_infor::output(ofstream & os){ //数据流的写出
os<<"车次:"<<Bus_order[20]<<endl
<<setw(6)<<"起点站:"<<start<<endl
<<setw(6)<<"终点站:"<<end<<endl
<<setw(6)<<"发车时间:"<<Hour_start<<":" <<Minute_start<<endl
<<setw(6)<<"行车时间:"<<Hour_end<<":" <<Minute_end<<endl
<<setw(6)<<"额定载量:"<<all_tickted<<endl
<<setw(6)<<"已订票数:"<<tickted<<endl<<endl;
}
int Bus_infor::Bus_No=1;
void Bus_infor::GetTime_start(){ //输入发车时间
int NewH=0,NewM=0;
cout<<"输入发车时间(数字):"<<endl;
cin>>NewH>>NewM;
Hour_start=NewH;
Minute_start=NewM;
}
void Bus_infor::GetTime_end(){ //输入行车时间
int NewH=0,NewM=0;
cout<<"输入行车时间(数字):"<<endl;
cin>>NewH>>NewM;
Hour_end=NewH;
Minute_end=NewM;
}
void Bus_infor::ShowTime(){ //显示时间
cout<<Hour_start<<":"<<Minute_start<<" ";
cout<<Hour_end<<":"<<Minute_end<<" ";
}
Bus_infor::Bus_infor(){ //列车车票信息
No=Bus_No++;
tickted=0;
}
Bus_infor::~Bus_infor(){
Bus_No--;
}
void Bus_infor::addr(){ //起点站与终点站
cout<<"输入起点站与终点站(数字或字母):"<<endl;
char a[20];
char b[20];
cin>>a;
cin>>b;
strcpy(start,a);
strcpy(end,b);
}
char *Bus_infor::Get_start(){ //返回起点站
return start;
}
char *Bus_infor::Get_end(){ //返回终点站
return end;
}
int Bus_infor::Get_no(){ //返回某一张票信息
return No;
}
int Bus_infor::Get_all_tickted(){ //返回车次额定载客量
return all_tickted;
}
int Bus_infor::Get_tickted(){ //返回已订车票
return tickted;
}
int Bus_infor::Get_bus_order(){ //返回车票信息
return Bus_order[20];
}
void Bus_infor::Order_tickt(int n){ //订票
tickted=tickted+n;
}
void Bus_infor::Unorder_tickt(int n){ //退票
tickted=tickted-n;
}
class Bus_link{
public:
Bus_link(){head=new Bus_infor;head->next=NULL;key=0;}
void input(); // 输入
void mend(); // 修改
void del(); // 删除
int find(Bus_infor **p,int num,char *pn); //查询车票信息
int find1(Bus_infor **p,int num,char *pn); //退票查找
void found();
void show();
void Order(); //订购车票
void Unorder(); //退还车票
void save(); //保存信息
void begin();
void clear();
char mainmenu();
int getkey(){return key;}
void setkey(int k){ key=k; }
private:
Bus_infor *head; //类对象作为链表的头指针
int key;
};
void Bus_link::input() { //输入车票信息
Bus_infor *p,*p2=NULL;
p=head;
int n;
while(p->next)
p=p->next; //令p指向其前驱
while(n) {
p2=new Bus_infor;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
Bus_link::setkey(1);
cout<<"\t\t按1继续,按0返回 : ";
cin>>n;
}
}
void Bus_link::Order(){ //购票
Bus_infor *p;
cout<<endl<<"************************车票预订************************"<<endl;
cout<<"拟定购票(y/n)?"<<endl;
char X;
cin>>X;
if(X=='y'){
int num;
cout<<"\t输入车次号(数字): ";
cin>>num;
if( !find1(&p,num,"^") ) {
cout<<"\t\t找不到您要订的车票的信息!"<<endl;
return;
}
cout<<"\t输入要订的票数(数字):";
int n;
cin>>n;
p=p->next;
if((p->Get_tickted()+n)<=p->Get_all_tickted())
{
p->Order_tickt(n);
cout<<"\t预订成功,谢谢使用"<<endl;
}
else cout<<"\t对不起,没有足够的票数。"<<endl;
}
else if(X=='n') cout<<"\t谢谢使用"<<endl;
else cout<<"\t输入字符不拟定"<<endl;
Bus_link::setkey(1);
}
void Bus_link::Unorder(){ //退票
Bus_infor *p;
cout<<endl<<"************************退还车票************************"<<endl;
cout<<"拟定退票(y/n)?"<<endl;
char X;
cin>>X;
if(X=='y'){
int num;
cout<<"\t输入车次号:(数字) ";
cin>>num;
if( !find1(&p,num,"^") ) {
cout<<"\t\t找不到您要退的车票的信息!"<<endl;
return;
}
cout<<"\t输入要退的票数(数字):";
int n;
cin>>n;
p=p->next;
if((p->Get_tickted()-n)>=0) {
p->Unorder_tickt(n);
cout<<"\t退票成功,谢谢使用"<<endl;
}
else cout<<"\t对不起,数据犯错!。"<<endl;
}
else if(X=='n') cout<<"\t谢谢使用"<<endl;
else cout<<"\t输入字符不拟定"<<endl;
Bus_link::setkey(1);
}
void Bus_link::found() { //查寻车票
Bus_infor *p;
int num=-1,n=0;
char name[20]="^";
cout<<endl<<"************************车票信息查询************************"<<endl;
cout<<setw(20)<<"请输入车次(数字): ";
cin>>num;
if(!find(&p,num,name)) {
cout<<"\t\t找不到您要查询的信息!"<<endl;
return;
}
}
int Bus_link::find(Bus_infor **p1,int num,char *pn) { //查找车票
Bus_infor *p;
p=head;
int t=0;
while(p->next) {
(*p1)=p;
if( (p->next)->Get_bus_order()==num||!strcmp( (p->next)->Get_end(),pn ) )
{
(p->next)->output();
t=1;
break;
}
p=p->next;
}
return t;
}
int Bus_link::find1(Bus_infor **p1,int num,char *pn)
{
Bus_infor *p;
p=head;
int t=0;
while(p->next) {
(*p1)=p;
if( (p->next)->Get_bus_order()==num||!strcmp( (p->next)->Get_end(),pn ) )
{return 1;}
p=p->next;
}
return 0;
}
void Bus_link::del(){ //删除车票信息
cout<<endl<<"************************删除车票信息************************"<<endl;
Bus_infor *p,*p2;
int num;
cout<<"\t输入车次号(数字): ";
cin>>num;
if( !find(&p,num,"^") ) {
cout<<"\t\t找不到您要删除的内容!"<<endl;
return;
}
p2=p->next;
p->next=p2->next; //删除并释放结点
delete p2;
Bus_link::setkey(1);
cout<<"\t车票信息删除成功"<<endl;
}
void Bus_link::show() { //显示信息
Bus_infor *p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}
void Bus_link::mend() { //修改车票信息
cout<<endl<<"************************车票信息修改************************"<<endl;
Bus_infor *p;
int num=-1;
char name[20]="^";
cout<<"\t输入车次号(数字): ";
cin>>num;
if( !find1(&p,num,name) ) {
cout<<"\t\t找不到您要修改的内容!"<<endl;
return;
}
(p->next)->output();
(p->next)->input();
Bus_link::setkey(1);
}
void Bus_link::save() { //保存文献
cout<<endl<<"************************保存文献************************"<<endl;
Bus_infor *p;
p=head;
ofstream os("bus.txt",ios::out);
if (Bus_link::getkey()==1) {
while(p->next) {
(p->next)->output(os);
p=p->next;
}
}
cout<<"\t文献已保存至bus.txt中! \n\t谢谢使用"<<endl;
Bus_link::setkey(0);
}
void Bus_link::begin() {
Bus_infor *p,*p2;
p=head;
clear();
long t;
ifstream is("bus.txt",ios::in);
if(!is)
{
ofstream os("bus.txt",ios::out);
os.close();
return ;
}
int num=-1;
while(1) {
num=-1;
t=is.tellg();
is>>num;
is.seekg(t);
if(num<0) {
is.close();
return;
}
p2=new Bus_infor;
p2->input(is);
p->next=p2;
p2->next=NULL;
p=p->next;
}
}
void Bus_link::clear() { //清空
Bus_infor *p,*p2;
p=head->next;
while( p ) {
p2=p;
p=p->next;
delete p2;
}
}
char Bus_link::mainmenu() { //返回主菜单
system("color 3E"); //DOS颜色变换
cout<<endl<<endl;
cout<<"------------------------欢迎使用车票管理系统------------------------"<<endl<<endl;
cout<<setw(48)<<"1. 录入车票信息 2. 浏览车票信息"<<endl
<<setw(48)<<"3. 查询车票信息 4. 删除车票信息"<<endl
<<setw(48)<<"5. 修改车票信息 6. 订购车票信息"<<endl
<<setw(48)<<"7. 退还车票信息 8. 保存车票信息"<<endl
<<setw(27)<<"0: 退出系统"<<endl<<endl<<endl
<<" 请选择功能按钮(0-8):";
return 0;
}
int main() { //主函数
Bus_link pp;
system("color 2E");
char r[20]; //用户名
char s[20]; //密码
char S[20]; //密码确认
cout<<endl;
cout<<setw(22)<<"★★★★★★★"<<"欢迎使用列车车票管理系统"<<"★★★★★★★"<<endl<<endl;
cout<<setw(28)<<"**************"<<"用户注册"<<"************"<<endl<<endl;
cout<<"\t请输入注册用户名(以字母或数字组成):";
cin>>r;
cout<<"\t请填写注册密码(以字母或数字组成):";
cin>>s;
cout<<"\t请再次输入密码以确认:";
cin>>S;
if(strcmp(s,S)!=0){
cout<<"\t密码输入不符,注册失败,谢谢使用!"<<endl;
exit(0);
}
if(strcmp(s,S)==0){
system("cls");
cout<<endl;
cout<<"★★★★★"<<"恭喜你注册成功"<<"★★★★★"<<endl;
char wo;
cout<<endl<<endl<<endl;
cout<<"按任意字母键进入登陆界面"<<endl;
cin>>wo;
system("cls");
char h[20];
char t[20];
for(int m=0;m<3;m++){
cout<<endl;
cout<<setw(24)<<"★★★★★★★"<<"欢迎使用列车车票管理系统"<<"★★★★★★★"<<endl<<endl;
cout<<"\t请输入用户名(以字母或数字组成):";
cin>>h;
cout<<"\t请输入密码(以字母或数字组成):";
cin>>t;
system("cls");
if(strcmp(r,h)==0&&strcmp(s,t)==0)
{
cout<<endl<<endl;
cout<<" "<<"登陆中,请稍等..."<<endl;
for(int k=0;k<;k++)
{}
system("cls");
cout<<endl;
cout<<"\t登陆成功!!!"<<endl;
cout<<endl;
break;
}
else{
if(2-m>0){
cout<<endl;
cout<<"\t输入错误,请重新输入"<<endl;
cout<<"\t您尚有"<<2-m<<"次机会"<<endl;
}
else{
cout<<"\t三次输入错误,安全退出系统!!!"<<endl;
exit(0);
}
}
}
}
int k=1;
int n,m;
pp.begin();
while(k==1) {
n=pp.mainmenu();
cin>>m;
switch(m) {
case 1:system("cls");pp.input(); break;
case 2:system("cls");pp.show(); break;
case 3:system("cls");pp.found(); break;
case 4:system("cls");pp.del(); break;
case 5:system("cls");pp.mend(); break;
case 6:system("cls");pp.Order(); break;
case 7:system("cls");pp.Unorder(); break;
case 8:system("cls");pp.save(); break;
case 0:
if(pp.getkey()==1) {
cout<<"\t是否保存? 1 : 保存0:不保存: ";
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break;
default:
system("cls");
cout<<endl<<"\t输入有误,请重新输入!";break;
}
}
return 0;
}
六、致谢
课程设计急忙结束,在这段时间内,不仅使我们学会了如何设计程序、对错误程序进行调试、如何运用创新能力、如何实现数据为功能,更重要的是使我结实了诸多学时丰富的老师。老师的谆谆教导使我清楚地结识到,没有老师的支持与鼓励,就不会有我们今天的成绩!
这次程序设计实验增长了我们对程序设计在实践上的结识,纯熟了类和对象尚有链表的使用,特别是考虑到大量数据时插入删除操作此种数据结构对运营时间上的节省和方便。程序中用到的获取系统时间的函数,需要上网查找或去图书馆找资料,其过程提高了自学能力。
在以后的学习与生活中,我相信此后的我们一定会更加发奋努力,多实践动手,从实践中学习总结,然后一步步慢慢提高我们自己。
七、参考文献
[1]谭浩强 编著《C++面向对象程序设计》[M],清华大学出版社
[2]谭浩强 编著《C++面向对象程序设计题解与上机指导》[M],清华大学出社
[3]吕凤翥 编著《C++语言基础教程》[M],清华大学出版社
展开阅读全文