票务管理系统程序设计.doc_第1页
票务管理系统程序设计.doc_第2页
票务管理系统程序设计.doc_第3页
票务管理系统程序设计.doc_第4页
票务管理系统程序设计.doc_第5页
免费预览已结束,剩余32页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.程序设计报告( 2014/2015 学年 第 一 学期)题目:票务管理系统专业理工科强化班组长学号姓名组员学号姓名指导教师指导单位 计算机学院软件教学中心日期 2014年10 月23 日.票务管理组长()系统成员组员()分的实工现组员()一、课评分项遵守机房规章制度题上机时的表现容学习态度和程序准备情况程序设计能力要评团队合作精神分细课题功能实现情况求则算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语评票务分等管理级主要负责类的建立、车票类链表及链表相关功能的实现和主函数主题的构建,扩展功能的实现,撰写设计报告。主要负责输入输出流的控制以及文件流的

2、实现,及相关资料的查找与收集,撰写设计报告。主要负责购票、售票、及改签功能的实现,及对应数据的读写,撰写设计报告。优秀良好中等差教师签名:年月 日备.注评分等级共五种:优秀、良好、中等、及格、不及格.系统一 课题内容和要求(1)录入班次信息 ( 信息用文件保存 number.dat),可随时增加新车次数据(2)浏览班次信息 , 可显示出所有车次当前状况( 显示车辆是否发出的提示信息) 。(3)查询路线:可按班次号、终点站查询售票情况。(4)根据发车时间给出顺序的发车时间表,存入文件保存(sort.dat)。(5)售票和退票功能当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,

3、自动更新余票数量。退票时,输入退票的班次, 当本车次发出前半小时才可以退票, 自动更新已售票人数。(6)改签功能改签时,输入改签目标班次,退原来的票,功能实现见上。2、扩展功能要求(1)角色区分:以上的功能(1)只有管理员凭密码才能操作;其余所有的功能管理员和普通访客均可操作。(2)管理员提供密码找回服务。(3)每人限购买一张。二、需求分析票管理系统的功能框架图如图1、2 所示。( 1 )提供一个入口,针对用户和管理员,可分别选择登录方式并进行操作。( 2 )通过数据库文件对车票信息与提示信息进行管理、储存、输入和输出;.车票管理系统(用户)主菜单浏按按按购发目发票览车的车、总时地时退班间查间

4、票次和询顺、信目班序改息的次显签地示查班询次班图 1 功能框架图车票管理系统(管理员)主菜单增加班次信息图 2 功能框架图.三、概要设计1 主要的类内变量的定义和函数的声明:class chepiaopublic:string CC,QD,ZD;/车票类的数据成员车次,起点站,终点站int FCSJh,FCSJm,XCSJ,EDZL,YPSL;/车票类的数据成员发车时间(小时)、(分钟)、行车时间、额定载量、余票数量chepiao* left;/链表的指针chepiao(string A,int AA,int AA2,string AAA,string AAAA,intAAAAA,intAAA

5、AAA,intAAAAAAA)CC=A;FCSJh=AA;FCSJm=AA2;QD=AAA;ZD=AAAA;XCSJ=AAAAA;EDZL=AAAAAA;YPSL=AAAAAAA;left=NULL;chepiao()left=NULL;函数:void Output();/ 输出 number.dat内容void Output2();/ 输出 sort.dat 内容void Write(chepiao *start);/把内存中的车票信息写入number.datvoid Write2(chepiao *start);/把内存中的车票信息写入sort.datvoid Find(chepiao *

6、start);/按目的地和车次查询车票信息.void Sort(chepiao *start);/按发车时间排序车票信息void Buy(chepiao *start);/购票操作void Buy2(chepiao *start);/改签中的购票操作void Refund(chepiao *start);/退票操作void Refund2(chepiao *start);/改签中退票操作void Delete(chepiao *start);/释放内存中车票所占空间void Show1();/输出欢迎的选择界面void Show2();/输出用户的选择界面void Shout();/防“熊孩子

7、”设定void Getpassword();/读入文件中的密码void Resetpassword();/将修改的密码重新读入文件储存bool Check();/ 是否买过票检查void Setnumber();/记录买过票的身份证号码string innumber;/ 记录身份证号bool mp=false;/判断是否能购买string password;/临时储存读入的密码和修改的新密码int sj;/ 当前的小时数 *60+ 分钟数,用于时间比较int sj2;/ 车票的发车时间的小时数*60+ 分钟数,用于时间比较bool gq=false;/用于传递改签过程中第一步购票是否成功的信息

8、string name=admin;/默认的管理员账号string Q1=中国江苏找南邮 ;/默认的管理员密保问题2 主要函数流程图.四、源程序代码/ 车票类 .h #include #include using namespace std; int sum=0;.class chepiaopublic:string CC,QD,ZD;/ 车票类的数据成员车次,起点站,终点站int FCSJh,FCSJm,XCSJ,EDZL,YPSL;/ 车票类的数据成员发车时间 (小时)、(分钟)、行车时间、额定载量、余票数量chepiao* left;/链表的指针chepiao(string A,int

9、AA,int AA2,string AAA,string AAAA,int AAAAA,int AAAAAA,intAAAAAAA)CC=A;FCSJh=AA;FCSJm=AA2;QD=AAA;ZD=AAAA;XCSJ=AAAAA;EDZL=AAAAAA;YPSL=AAAAAAA;left=NULL;chepiao()left=NULL;#include 车票类 .h#include #include using namespace std;void Output();/输出 number.dat 内容void Output2();/输出 sort.dat 内容void Write(chepi

10、ao *start) ; /把内存中的车票信息写入 number.dat void Write2(chepiao *start); /把内存中的车票信息写入 sort.datvoid Find(chepiao *start);/按目的地和车次查询车票信息void Sort(chepiao *start);/按发车时间排序车票信息void Buy(chepiao *start);/购票操作void Buy2(chepiao *start) ;/改签中的购票操作void Refund(chepiao *start);/退票操作void Refund2(chepiao *start); / 改签中退

11、票操作void Delete(chepiao *start);/ 释放内存中车票所占空间void Show1();/输出欢迎的选择界面void Show2();/输出用户的选择界面void Shout();/防 “熊孩子 ”设定void Getpassword();/读入文件中的密码void Resetpassword();/ 将修改的密码重新读入文件储存bool Check();/ 是否买过票检查void Setnumber();/ 记录买过票的身份证号码.string innumber;/记录身份证号bool mp=false;/ 判断是否能购买string password;/ 临时储存

12、读入的密码和修改的新密码int sj;/当前的小时数*60+ 分钟数,用于时间比较int sj2;/车票的发车时间的小时数*60+ 分钟数,用于时间比较bool gq=false;/用于传递改签过程中第一步购票是否成功的信息string name=admin;/默认的管理员账号string Q1= 中国江苏找南邮;/ 默认的管理员密保问题int main()Getpassword();int ways;/ 登陆方式Show1();cinways;if(ways=1)string inname;/键盘输入的管理员账号string inpassword;/ 用于键盘输入管理员密码string in

13、Q1;/ 用于键盘输入管理员密保问题char bbb=N;/用于键盘输入是否使用密保问题int aaa=1;/ 用于循环,每三次密码错误,提示一次是否使用密保问题bool judge=false;/ 用于判断是否输入正确coutinname;if (inname=name)judge=true;elsewhile(!judge)coutinname;if (inname=name)judge=true;judge=false;coutinpassword;if (inpassword=password)judge=true;elsewhile(!judge).if(aaa%3=0)coutbb

14、b;if(bbb=Y|bbb=y)cout 编程技术哪家牛?inQ1;if(inQ1=Q1)cout 回答正确!请输入新密码password;Resetpassword();cout 请牢记密码 endl;break;elsecout 密保问题验证失败。endl;coutinpassword;aaa+;/*分割线 */*分割线 *ofstream fout(number.dat,ios:out|ios_base:app);/ 定义输出数据流,以输出方式打开, 打开位于文件尾if(!fout)cerropen error!endl;exit(1);/*分割线 */*分割线 *string a,b

15、,c;/用于储存即将输入的车票的车次、起点和重点int d1,d2,e,f,g; / 用于储存即将输入的发车时间小时、分钟、行车时间、额定载量、余票数量cout 请输入需要增加的车票数i;cout 请逐个输入车票的如下信息endl;.cout 车次发车时间(小时)发车时间(分钟)起点站终点站行车时间额定载量余票数量 endl;for(x=0;xad1d2b;cincefg;fouta;fout;foutd1;fout;foutd2;fout;foutb;fout;foutc;fout;foute;fout;foutf;fout;foutg;fout;cout 录入成功 tm_hour;/ 得到

16、当前时间的小时int m = newtime-tm_min;/得到当前时间的分钟.sj=60*h+m;/*分割线 */*分割线 *ifstream infile(number.dat,ios:out);/ 定义输入数据流,以输入方式打开 if(!infile)cerropen error!y)break;elseq-left=new chepiao 1;sum+;q=q-left;q-CC=y;switch(num%8)case 2:infileq-FCSJh;break;case 3:infileq-FCSJm;break;case 4:infileq-QD;break;case 5:inf

17、ileq-ZD;break;case 6:infileq-XCSJ;break;case 7:infileq-EDZL;break;case 0:infileq-YPSL;break;infile.close();/ 关闭文件/*分割线 */*分割线 *int yh;/ 用于读入用户需要的操作的序号while(1)Show2();cinyh;switch (yh).case 1:Output();break;case 2:Find(start);break;case 3:;Sort(start);Write2(start);Output2();break;case 4:if(Check()Bu

18、y(start);if(mp)Setnumber();Write(start);break; case 5:Refund(start);Write(start);break;case 6:Buy2(start);if(gq)Refund2(start);Write(start);gq=false;break; case 7:break;default:Shout();system(pause);return 0;if(yh=7)Delete(start);break;return 0;elseShout();system(pause);return 0;/*分割线 */*分割线 *void W

19、rite(chepiao *start)chepiao *p=start-left;/用于对链表进行操作ofstream fout(number.dat,ios:out|ios:trunc); / 定义输出数据流,清空并打开 if(!fout)cerropen error!endl;exit(1);while(p!=NULL)foutCC FCSJh FCSJm QD ZD XCSJ EDZL YPSLleft;fout.close();/ 关闭文件/*分割线 *./*分割线 *void Write2(chepiao *start)/本函数内各变量作用同前chepiao *p=start-le

20、ft;ofstream fout(sort.dat,ios:out|ios:trunc);/ 定义输入数据流,清空并打开 if(!fout)cerropen error!endl;exit(1);while(p!=NULL)foutCC FCSJh FCSJm QD ZD XCSJ EDZL YPSLleft;fout.close();/ 关闭文件/*分割线 */*分割线 *void Sort(chepiao *start)chepiao* L;/用于链表排序的交换步骤chepiao* M;/用于chepiao* N;/ 用于int i,j;/用于排序L=start;M=start-left;

21、N=M-left;for(i=0;isum-2;i+)for(j=0;jFCSJh*60)+M-FCSJm)(N-FCSJh*60)+N-FCSJm)if(N-left!=NULL)L-left=N;M-left=N-left;N-left=M;L=N;M=L-left;N=M-left;.elseL-left=N;N-left=M;M-left=NULL;continue;elseif(N-left!=NULL)L=M;M=L-left;N=M-left;elsecontinue;L=start;M=L-left;N=M-left;/*分割线 */*分割线 *void Output()int

22、 j=1,a,b;/j 用于记录输出的是第几个数据,用于判断类型;a,b 为时间的小时数和分钟数string temp;/ 用于逐个读出数据ifstream infile(number.dat,ios:out); / 定义输入数据流,以输入方式打开 if(!infile)cerropen error!temp)break;.if(j%8=2)infilea;infileb;j+;couta:;if(b10)cout0;coutb;if(a*60+bsj)cout (此车已发出);elsecout (此车未发出);elsecouttemp;/ 输出显示if(j%8=0)coutendl;j+;i

23、nfile.close();/关闭文件/*分割线 */*分割线 *void Find(chepiao *start)chepiao *o;/ 用于对车票链表操作bool c=false;/ 用于记录是否找到相应车次string Cc;/ 用于输入需要寻找的车次或终点站cout 请输入车次或终点站:Cc;o=start;o=o-left;while(o)if(o-CC=Cc|o-ZD=Cc)coutCCFCSJhFCSJm10)cout0;coutFCSJm;if(o-FCSJh*60+o-FCSJm)sj)cout (此车已发出);elsecout (此车未发出);.coutQDZD XCSJ

24、EDZLYPSLleft;if(!c)cout 未找到目标车次或终点站。endl;/*分割线 */*分割线 *void Output2()/ 同 Output ();int j=1,a,b;string temp;ifstream infile(sort.dat,ios:out);/ 定义输入数据流,以输入方式打开if(!infile)cerropen error!temp)break;if(j%8=2)infilea;infileb;j+;couta:;if(b10)cout0;coutb;if(a*60+bsj)cout (此车已发出);elsecout (此车未发出);elsecoutt

25、emp;/输出显示if(j%8=0)coutendl;j+;.infile.close();/关闭文件/*分割线 */*分割线 *void Buy(chepiao *start)chepiao *o;/ 用于对车票链表进行操作string Cc;/ 用于输入车次bool c=false;/ 用于记录购买是否成功cout 请输入需要买票的车次Cc;o=start;o=o-left;while(o)if(o-CC=Cc)if(o-FCSJh*60+o-FCSJm)sj)cout 发车时间已过,购买失败YPSL=0)cout 票已售空,购买失败YPSL=o-YPSL-1;cout 购买成功 left

26、;if(!c)mp=false;cout 未找到目标车次,购买失败endl;/*分割线 */*分割线 *void Buy2(chepiao *start)chepiao *o;/ 用于对车票链表进行操作bool c=false;/ 用于记录购买是否成功.string Cc;/ 用于输入车次cout 请输入需要改签的目标车次Cc;o=start;o=o-left;while(o)if(o-CC=Cc)if(o-FCSJh*60+o-FCSJm)sj)cout 发车时间已过,无法改签YPSL=0)cout 目标车次票已售空,无法改签YPSL=o-YPSL-1;cout 改签成功,请退原车次车票le

27、ft;if(!c)cout 未找到目标车次tm_hour;/ 得到当前时间的小时int m = newtime-tm_min;/ 得到当前时间的分钟int sj=60*h+m;/记录时间的小时数*60+ 分钟数,用于比较chepiao *o;/用于对车票类链表的操作string Cc;/用于输入退票的车次cout 请输入需要退票的车次Cc;.o=start;o=o-left;while(o)if(o-CC=Cc)if(o-FCSJh*60+o-FCSJm)sj+30)cout 需要提前半小时办理退票,本次退票失败YPSL=o-YPSL+1;cout 退票成功 left;/*分割线 */*分割线

28、 *void Refund2(chepiao *start)/ 同 Refund ()struct tm *newtime;time_t long_time;time( &long_time ); /Get time as long integernewtime = localtime( &long_time );int h = newtime-tm_hour;/ 得到当前时间的小时int m = newtime-tm_min;/ 得到当前时间的分钟int sj=60*h+m;chepiao *o;string Cc;cout 请输入需要改签的原车票车次Cc;o=start;o=o-left;

29、while(o)if(o-CC=Cc)if(o-FCSJh*60+o-FCSJm)sj+30)cout 需要提前半小时办理退票,本次退票失败,购票金额无法退还,请使用新车次车票乘车YPSL=o-YPSL+1;cout 退票成功 left;/*分割线 */*分割线 *void Delete(chepiao *start)chepiao *a1;/ 用于对车票类链表的逐个释放a1=start;for(;start-left=NULL;)for(a1=start;a1-left-left=NULL;)if(a1-left-left!=NULL)a1=a1-left;delete a1-left;/*分割线 */*分割线 *v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论