火车票管理系统课程设计报告.docx

上传人:b****6 文档编号:16638736 上传时间:2023-07-15 格式:DOCX 页数:52 大小:116.79KB
下载 相关 举报
火车票管理系统课程设计报告.docx_第1页
第1页 / 共52页
火车票管理系统课程设计报告.docx_第2页
第2页 / 共52页
火车票管理系统课程设计报告.docx_第3页
第3页 / 共52页
火车票管理系统课程设计报告.docx_第4页
第4页 / 共52页
火车票管理系统课程设计报告.docx_第5页
第5页 / 共52页
火车票管理系统课程设计报告.docx_第6页
第6页 / 共52页
火车票管理系统课程设计报告.docx_第7页
第7页 / 共52页
火车票管理系统课程设计报告.docx_第8页
第8页 / 共52页
火车票管理系统课程设计报告.docx_第9页
第9页 / 共52页
火车票管理系统课程设计报告.docx_第10页
第10页 / 共52页
火车票管理系统课程设计报告.docx_第11页
第11页 / 共52页
火车票管理系统课程设计报告.docx_第12页
第12页 / 共52页
火车票管理系统课程设计报告.docx_第13页
第13页 / 共52页
火车票管理系统课程设计报告.docx_第14页
第14页 / 共52页
火车票管理系统课程设计报告.docx_第15页
第15页 / 共52页
火车票管理系统课程设计报告.docx_第16页
第16页 / 共52页
火车票管理系统课程设计报告.docx_第17页
第17页 / 共52页
火车票管理系统课程设计报告.docx_第18页
第18页 / 共52页
火车票管理系统课程设计报告.docx_第19页
第19页 / 共52页
火车票管理系统课程设计报告.docx_第20页
第20页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

火车票管理系统课程设计报告.docx

《火车票管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《火车票管理系统课程设计报告.docx(52页珍藏版)》请在冰点文库上搜索。

火车票管理系统课程设计报告.docx

火车票管理系统课程设计报告

 

程序设计报告

(2014/2015学年第一学期)

 

题目:

火车票管理系统

 

位计算机学院计算机软件教学中心

遵守机房规章制度上机时的表现

学习态度

程序准备情况程序设计能力团队合作精神

课题功能实现情况算法设计合理性用户界面设计

报告书写认真程度

内容详实程度文字表达熟练程度回答问题准确度

 

简短

评教师签名:

语年月日

评分等级

备评分等级有五种:

优秀、良好、中等、及格、不及格注

火车票务管理系统

一、课题内容和要求

(一)课题内容

该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。

所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。

通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。

(二)课题要求

(1)火车票数据由多条记录组成,其信息包括:

车次,发车时间,起点站,终点站,行车时间,额定载量,已售票人数等。

(2)数据保存形式:

所有火车票数据要以文本或二进制文件保存。

(3)需要实现的功能

1)新增火车票数据记录。

2)查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。

3)删除火车票数据记录(先查找,再删除。

若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。

4)对火车票排序(可按车次、发车时间、起点站、终点站等排序。

)。

5)显示当前所有火车票信息列表。

6)售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。

7)退票(售票的逆处理,过程与售票类似)。

8)保存火车票数据到文件中。

9)从文件中读入火车票数据。

(4)界面功能要求:

1)采用友好的字符界面,实现一个功能控制菜单。

2)每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。

需求分析

一、功能分析图

 

退

线

线

线

 

二、录入班次信息:

依次输入班次、起点站和终点站等信息同时保存在文件中,并可以随时增加新的班次信息。

三、浏览班次信息:

输出保存在文件中的全部班次信息,并区分当前的车次是否已发出,如发出则标记“此车已发出”。

四、按班次号查询路线:

以输入的班次号为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!

五、按起点站查询路线:

输入的起点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!

六、按终点站查询路线:

输入的终点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!

七、排列发车时间表:

按照发车时间从早到晚的顺序逐条显示车次信息。

八、售票功能:

依次输入“售票数目”和“班次号”可出售未发出的班次的车票。

九、退票功能:

依次输入“退票数目”和“班次号”可退距发车时间大于半小时的班

次的车票。

 

三、概要设计

(1))类:

#include#include

#include#includeclassTicket

{

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);//定义重载输出运算符的友元函数

boolfindno(charn[])//用于判断输入的字符串是否与查找区域中的某个字符串一致

{

if(strcmp(no,n)==0)returntrue;

else

}

{

returnfalse;

boolfindname_b(charn[])

if(strcmp(name_b,n)==0)returntrue;

else

}

returnfalse;

boolfindname_e(charn[])

{

if(strcmp(name_e,n)==0)returntrue;

else

}

};

returnfalse;

(2))主要函数流程图:

1、录入班次信息函数:

用户根据提示信息逐项输入班次信息各项数据,

利用read()函数把要录入的信息写入文件。

开始

如图1

开始打开文件

 

打开文件读出数据

 

申请空间读入数据

写入文件

 

关闭文件

 

输出车次信息,输出“此车已发出”

车次发出否?

 

关闭文件

 

输出车次信息

 

结束

结束

 

图1图2

2、浏览班次信息

显示所有的班次信息,并标记已发出的车次,

如图2

3、按班次号查询路线

根据用户输入的班次号查找匹配项的班次信息。

4、按起点站查询路线

根据用户输入的起点站查找匹配项的班次信息。

5、按终点站查询路线

根据用户输入的终点站查找匹配项的班次信息。

6、排列发车时间表

利用冒泡法按照发车时间的升序排列车次信息

7、售票

用户输入指定的班次和售票数目进行售票如图3

8、退票

用户输入指定的班次和售票数目进行售票,如图4

开始

打开文件输入售票数目

开始

 

打开文件

 

输入班次号

否是否找到?

输入退票数目输入班次号

 

余票

是数目

是否为零

 

车是否已发

 

距离发车

是否找到?

票已售完否出?

未找到该是

时间是否

否大于半小

时?

未找到该车次信息!

车次信息

售票

 

更新后的票数写入文件

此车已发出

退票

退票失败!

更新后的票数写入文件

 

关闭文件

 

关闭文件

结束

结束

图3

图4

 

四、源程序代码

#include#include#include#includeclassTicket

{

 

public:

charno[20];charname_b[20];charname_e[20];

inthour;intminute;

inttra_time;inteding;intyupiao;

voidshoupiao(fstream&f);

voidtuipiao(fstream&f);

voidsearchbynumber(fstream&f);voidsearchbybeginplace(fstream&f);voidsearchbyendplace(fstream&f);voidluru(fstream&f);

voidzengjia(fstream&f);voidxiugai(fstream&f);

voidliulan(fstream&f);voidpaixu(fstream&f);

friendostream&operator<<(ostream&out,constTicket&t);//定义重载输出运算符的友元函数

boolfindno(charn[])//用于判断输入的字符串是否与查找区域中的

某个字符串一致

 

}

{

 

}

{

if(strcmp(no,n)==0)returntrue;

else

returnfalse;

boolfindname_b(charn[])

if(strcmp(name_b,n)==0)returntrue;

else

returnfalse;

boolfindname_e(charn[])

{

if(strcmp(name_e,n)==0)

returntrue;else

returnfalse;

}

};

ostream&operator<<(ostream&out,constTicket&t)//打印车次表格

{

if(t.minute>=10)

{

out<

"<

"<

<<""<

"<

}

else

{out<

"<<"0"<

"<

<<""<

"<

 

}

}

returnout;

voidTicket:

:

liulan(fstream&f)

{

 

终点站"<<""

 

while(!

f.eof())

inti=0;

structtm*local;longt;

time(&t);

local=localtime(&t);

cout<<"车次"<<""<<"发车时间"<<""<<"起点站"<<""<<"

<<"行车时间"<<""<<"额定载量"<<""<<"余票数量"<

:

end);

intb=f.tellg();f.seekg(0,ios:

:

beg);inta=f.tellg();

intc=(b-a)/sizeof(Ticket);//获得文件内包含的班次信息总数

Ticket*T=newTicket[c];

f.read((char*)&T[i++],sizeof(Ticket));

for(intj=0;j

{

if((local->tm_hour>T[j].hour)||(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<<"请输入售票的班次:

"<>m;

time(&t);

local=localtime(&t);f.seekg(0,ios:

:

beg);//从文件头开始boolfd=false;

while(!

f.eof()&&!

fd)

{

f.read((char*)&T,NUM);

if(fd=T.findno(m))//判断是否找到匹配班次

{

if(T.yupiao)//判断余票数量是否大于零

{

if((local->tm_hourtm_hour)&&(local-

>tm_min

{

T.yupiao-=n;

f.seekg(-1*NUM,ios:

:

cur);//从当前位置向前移动

(-1*sizeof(Ticket))个字节

f.write((char*)&T,NUM);

cout<<"已售出"<

"<

}

else

cout<<"该车次已发出!

"<

}

 

}

}

if(!

fd)

else

cout<<"票已售完!

"<

cout<<"未找到该车次信息!

"<

}

voidTicket:

:

tuipiao(fstream&f)

{

constintNUM=sizeof(Ticket);

intn;

longt;

charm[20];TicketT;

structtm*local;

cout<<"请输入退票的数目:

"<

cin>>n;

cout<<"请输入退票的班次:

"<>m;

time(&t);

local=localtime(&t);

f.seekg(0,ios:

:

beg);//把文件指针移到文件头

boolfd=false;

while(!

f.eof()&&!

fd)//未找到匹配的车次号以及未搜索完所有数据

前继续循环

{

f.read((char*)&T,NUM);

if(fd=T.findno(m))

{

 

if((T.hour)*60+T.minute-(local->tm_hour)*60-(local->tm_min)>3

0)

{

T.yupiao+=n;

f.seekg(-1*NUM,ios:

:

cur);//从当前位置向前移动

(-1*sizeof(Ticket))个字节

f.write((char*)&T,NUM);//更新退票后的班次信息

cout<<"已退"<

"<

}

else

cout<<"退票失败!

"<

}

}

if(!

fd)

cout<<"未找到该车次信息!

"<

}

voidTicket:

:

paixu(fstream&f)

{

inti=0;f.seekg(0,ios:

:

end);

intb=f.tellg();

f.seekg(0,ios:

:

beg);//把文件指针移到文件头

inta=f.tellg();

intnum=(b-a)/sizeof(Ticket);//得到文件内班次信息总数numTicket*t=newTicket[num+1];

Ticket*T=newTicket[num+1];for(i=0;i

{

f.read((char*)&t[i],sizeof(Ticket));

}

for(i=0;i

{

if(((t+i)->hour>(t+i+1)->hour)||(((t+i)->hour==(t+i+1)->hour)

&&((t+i)->minute>(t+i+1)->minute)))

{

strcpy(T->no,(t+i)->no);

strcpy(T->name_b,(t+i)->name_b);strcpy(T->name_e,(t+i)->name_e);T->hour=(t+i)->hour;

T->minute=(t+i)->minute;

T->tra_time=(t+i)->tra_time;T->eding=(t+i)->eding;

T->yupiao=(t+i)->yupiao;

strcpy((t+i)->no,(t+i+1)->no);

strcpy((t+i)->name_b,(t+i+1)->name_b);strcpy((t+i)->name_e,(t+i+1)->name_e);(t+i)->minute=(t+i+1)->minute;

(t+i)->tra_time=(t+i+1)->tra_time;(t+i)->eding=(t+i+1)->eding;

(t+i)->yupiao=(t+i+1)->yupiao;

strcpy((t+i+1)->no,T->no);

strcpy((t+i+1)->name_b,T->name_b);strcpy((t+i+1)->name_e,T->name_e);(t+i+1)->minute=T->minute;

(t+i+1)->tra_time=T->tra_time;(t+i+1)->eding=T->eding;

(t+i+1)->yupiao=T->yupiao;

}//利用冒泡法将发车时间相对早的班次信息往文件头移

}

cout<<"发车时间表:

"<

for(i=0;i

fil.open("d:

\\sort.dat",ios:

:

in|ios:

:

out|ios:

:

binary);//创建

并打开二进制文件"sort.dat"for(i=0;i

fil.close();

}

voidTicket:

:

searchbynumber(fstream&f)

{

charn[10];Tickett;

cout<<"请输入你要查找的班次号:

"<>n;

f.seekg(0,ios:

:

beg);boolfd=false;while(!

f.eof()&&!

fd)

{

f.read((char*)&t,sizeof(Ticket));if(fd=t.findno(n))

{

"<<"终点站"<<""

cout<<"车次"<<""<<"发车时间"<<""<<"起点站"<<"

<<"行车时间"<<""<<"额定载量"<<""<<"余票数量"<

}

}

if(!

fd)

cout<<"未找到该车次信息!

该车次不存在或已发出!

"<

}

voidTicket:

:

searchbybeginplace(fstream&f)

{

charn[10];Tickett;

cout<<"请输入你要查找的班次的起点站:

"<>n;

f.seekg(0,ios:

:

beg);boolfd=false;while(!

f.eof()&&!

fd)

{

f.read((char*)&t,sizeof(Ticket));if(fd=t.findname_b(n))

{

"<<"终点站"<<""

cout<<"车次"<<""<<"发车时间"<<""<<"起点站"<<"

<<"行车时间"<<""<<"额定载量"<<""<<"余票数量"<

cout<

}

}

if(!

fd)

cout<<"未找到该车次信息!

该车次不存在或已发出!

"<

}

voidTicket:

:

searchbyendplace(fstream&f)

{

charn[10];Tickett;

cout<<"请输入你要查找的班次的终点站:

"<

cin>>n;f.seekg(0,ios:

:

beg);boolfd=false;while(!

f.eof()&&!

fd)

{

f.read((char*)&t,sizeof(Ticket));if(fd=t.findname_e(n))

{

"<<"终点站"<<""

cout<<"车次"<<""<<"发车时间"<<""<<"起点站"<<"

<<"行车时间"<<""<<"额定载量"<<""<<"余票数量"<

}

}

if(!

fd)

cout<<"未找到该车次信息!

该车次不存在或已发出!

"<

}

voidTicket:

:

luru(fstream&f)

{

intnum;inti;

cout<<"请输入你要录入的班次信息数量:

"<>num;

Ticket*t=newTicket[num];

cout<<"请依次输入"<

for(i=0;i

{

cin>>t[i].no;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;

}

f.seekg(0,ios:

:

end);//文件指针指向文件尾

for(i=0;i

f.write((char*)&t[i],sizeof(Ticket));

}

voidTicket:

:

zengjia(fstream&f)

{

intnum;inti;

cout<<"请输入你要增加的班次信息数量:

"<>num;

Ticket*t=newTicket[num];

cout<<"请依次输入"<

for(i=0;i

{

cin>>t[i].no;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;

}

f.seekg(0,ios:

:

end);//文件指针指向文件尾

for(i=0;i

f.write((char*)&t[i],sizeof(Ticket));

}

voidTicket:

:

xiugai(fs

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2