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

上传人:b****5 文档编号:4477102 上传时间:2022-12-01 格式:DOCX 页数:26 大小:121.21KB
下载 相关 举报
火车票管理系统课程设计报告.docx_第1页
第1页 / 共26页
火车票管理系统课程设计报告.docx_第2页
第2页 / 共26页
火车票管理系统课程设计报告.docx_第3页
第3页 / 共26页
火车票管理系统课程设计报告.docx_第4页
第4页 / 共26页
火车票管理系统课程设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

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

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

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

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

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

 

程序设计报告

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

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

#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);

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)

{

inti=0;

structtm*local;

longt;

time(&t);

local=localtime(&t);

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

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

f.seekg(0,ios:

:

end);

intb=f.tellg();

f.seekg(0,ios:

:

beg);

inta=f.tellg();

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

Ticket*T=newTicket[c];

while(!

f.eof())

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<<"请输入售票的班次:

"<

cin>>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<<"该车次已发出!

"<

}

else

cout<<"票已售完!

"<

}

}

if(!

fd)

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

"<

}

voidTicket:

:

tuipiao(fstream&f)

{

constintNUM=sizeof(Ticket);

intn;

longt;

charm[20];

TicketT;

structtm*local;

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

"<

cin>>n;

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

"<

cin>>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)>30)

{

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);//得到文件内班次信息总数num

Ticket*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

fstreamfil;

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<<"请输入你要查找的班次号:

"<

cin>>n;

f.seekg(0,ios:

:

beg);

boolfd=false;

while(!

f.eof()&&!

fd)

{

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

if(fd=t.findno(n))

{

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

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

cout<

}

}

if(!

fd)

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

该车次不存在或已发出!

"<

}

voidTicket:

:

searchbybeginplace(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_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<<"车次"<<""<<"发车时间"<<""<<"起点站"<<""<<"终点站"<<""

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

cout<

}

}

if(!

fd)

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

该车次不存在或已发出!

"<

}

voidTicket:

:

luru(fstream&f)

{

intnum;

inti;

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

"<

cin>>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<<"请输入你要增加的班次信息数量:

"<

cin>>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(fstream&f)

{

char

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

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1