1、一、课题内容和要求(一)课题内容该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。 (二)课题要求(1)火车票数据由多条记录组成,其信息包括:车次,发车时间,起点站,终点站,行车时间,额定载量,已售票人数等。(2)数据保存形式:所有火车票数据要以文本或二进制文件保存。(3)需要实现的功能1)新增火车票数据记录。2)查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。3)删除火车票数据记录(先查找
2、,再删除。若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。4)对火车票排序(可按车次、发车时间、起点站、终点站等排序。)。5)显示当前所有火车票信息列表。6)售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。7)退票(售票的逆处理,过程与售票类似)。8)保存火车票数据到文件中。9)从文件中读入火车票数据。(4)界面功能要求:1)采用友好的字符界面,实现一个功能控制菜单。2)每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。需求分析一、功能分析图二、录入班次信息:依次输入班次、起点站和终点站等信息同时保存在文件中,并可以随时增加新的班次信息。三
3、、浏览班次信息:输出保存在文件中的全部班次信息,并区分当前的车次是否已发出,如发出则标记“此车已发出”。四、按班次号查询路线:以输入的班次号为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”五、按起点站查询路线:输入的起点站为依据进行查找,找到匹配项则输出该项完整的班次信息;六、按终点站查询路线:输入的终点站为依据进行查找,找到匹配项则输出该项完整的班次信息;七、排列发车时间表:按照发车时间从早到晚的顺序逐条显示车次信息。八、售票功能:依次输入“售票数目”和“班次号”可出售未发出的班次的车票。九、退票功能:依次输入“退票数目”和“班次号”可退距发车时间大于半
4、小时的班次的车票。三、概要设计(1)类:#includefstream.hstring.h#include class Ticket char no20; char name_b20; char name_e20; int hour; int minute; int tra_time; int eding; int yupiao;public: void shoupiao(fstream&f); void tuipiao(fstream& void searchbynumber(fstream& void searchbybeginplace(fstream& void searchbyend
5、place(fstream& void luru(fstream& void liulan(fstream& void paixu(fstream& friend ostream&operator=10) outt.no t.hour :t.minutet.name_bt.name_e t.tra_timet.edingt.yupiaoendl; else out0 return out;void Ticket:liulan(fstream&f) int i=0; struct tm *local; long t; time(& local = localtime(& cout车次发车时间起点
6、站终点站行车时间额定载量余票数量 f.seekg(0,ios:end); int b=f.tellg();beg); int a=f.tellg(); int c=(b-a)/sizeof(Ticket);/获得文件内包含的班次信息总数 Ticket*T=new Ticketc; while(!f.eof() f.read(char*)&Ti+,sizeof(Ticket); for(int j=0;jtm_hourTj.hour)|(Tj.hour=local-tm_hour)&(local-tm_min Tj.minute) coutTj此车已发出! coutn;请输入售票的班次:m; l
7、ocal = localtime(&/从文件头开始 bool fd=false;f.eof()&!fd) f.read(char*)&T,NUM); if(fd=T.findno(m)/判断是否找到匹配班次 if(T.yupiao)/判断余票数量是否大于零 if(local-tm_hourtm_min T.minute) T.yupiao-=n; f.seekg(-1*NUM,ios:cur);/从当前位置向前移动(-1*sizeof(Ticket)个字节 f.write(char*)&已售出n张该车次的车票! else couttm_hour)*60-(local-tm_min)30) T.
8、yupiao+=n; f.seekg(-1*NUM,ios:/从当前位置向前移动(-1*sizeof(Ticket)个字节 f.write(char*)&/更新退票后的班次信息已退退票失败!paixu(fstream& int num=(b-a)/sizeof(Ticket);/得到文件内班次信息总数num Ticket*t=new Ticketnum+1; Ticket*T=new Ticketnum+1; for(i=0;ihour(t+i+1)-hour)|(t+i)-hour=(t+i+1)-hour)&(t+i)-minuteminute) strcpy(T-no,(t+i)-no)
9、; strcpy(T-name_b,(t+i)-name_b);name_e,(t+i)-name_e); T-hour=(t+i)-hour; T-minute=(t+i)-minute;tra_time=(t+i)-tra_time;eding=(t+i)-eding;yupiao=(t+i)-yupiao; strcpy(t+i)-no,(t+i+1)- strcpy(t+i)-name_b,(t+i+1)-name_e,(t+i+1)- (t+i)-minute=(t+i+1)- (t+i)-tra_time=(t+i+1)-eding=(t+i+1)-yupiao=(t+i+1)-
10、strcpy(t+i+1)-no,T-name_b,T-name_e,T- (t+i+1)-minute=T- (t+i+1)-tra_time=T-eding=T-yupiao=T- /利用冒泡法将发车时间相对早的班次信息往文件头移cout 发车时间表: for(i=0;i+)coutti fstream fil; fil.open(d:sort.dat,ios:in|ios:out|ios:binary);/创建并打开二进制文件sort.dati+)fil.write(char*)& fil.close(); void Ticket:searchbynumber(fstream& char
11、 n10; Ticket t;请输入你要查找的班次号:t,sizeof(Ticket); if(fd=t.findno(n)t;该车次不存在或已发出!searchbybeginplace(fstream&请输入你要查找的班次的起点站: if(fd=t.findname_b(n)searchbyendplace(fstream&请输入你要查找的班次的终点站: if(fd=t.findname_e(n)luru(fstream& int num; int i;请输入你要录入的班次信息数量: Ticket*t=new Ticketnum;请依次输入endlti.hour;ti.minute;ti.name_b;ti.name_e;ti.tra_time;ti.eding;ti.yupiao;/文件指针指向文件尾zengjia(fstream&请输入你要增加的班次信息数量:xiugai(fstream&请输入你要修改的班次:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1