


免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计报告(2014/2015学年第 一 学期)题目: 火车票管理系统学生姓名班级学号指导教师指日导单位 计算机学院计算机软件教学中心期评遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性 用户界面设计报告书写认真程度内容详实程度 文字表达熟练程度回答问题准确度简短评教师签名:语年月日评分等级备评分等级有五种:优秀、良好、中等、及格、不及格注火车票务管理系统一、 课题内容和要求(一)课题内容该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。(二)课题要求(1) 火车票数据由多条记录组成,其信息包括:车次,发车时间,起点站,终点站,行车时间,额定载量,已售票人数等。(2) 数据保存形式 :所有火车票数据要以文本或二进制文件保存。(3) 需要实现的功能1) 新增火车票数据记录。2) 查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。3) 删除火车票数据记录(先查找,再删除。若查找出多条记录,则进一步提示用户选择记录的车次,再删除) 。4) 对火车票排序(可按车次、发车时间、起点站、终点站等排序。)。5) 显示当前所有火车票信息列表。6) 售票(先查找,当确定车次后, 根据售票张数对该车次的已售票人数进行修改)。7) 退票(售票的逆处理,过程与售票类似)。8) 保存火车票数据到文件中。9) 从文件中读入火车票数据。(4) 界面功能要求:1) 采用友好的字符界面,实现一个功能控制菜单。2) 每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。需求分析一、功能分析图录浏按按按发售入览班起终车票班班次点点时退次次号站站间票信信查查查表息息询询询路路路线线线二、 录入班次信息:依次输入班次、起点站和终点站等信息同时保存在文件中,并可以随时增加新的班次信息。三、 浏览班次信息:输出保存在文件中的全部班次信息,并区分当前的车次是否已发出,如发出则标记“此车已发出” 。四、 按班次号查询路线:以输入的班次号为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”五、 按起点站查询路线:输入的起点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”六、 按终点站查询路线:输入的终点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”七、 排列发车时间表:按照发车时间从早到晚的顺序逐条显示车次信息。八、 售票功能:依次输入“售票数目”和“班次号”可出售未发出的班次的车票。九、 退票功能:依次输入“退票数目”和“班次号”可退距发车时间大于半小时的班次的车票。三、概要设计(1) ) 类 : #include #include#include #include class ticketchar 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&f);void searchbynumber(fstream&f); void searchbybeginplace(fstream&f); void searchbyendplace(fstream&f); void luru(fstream&f);void liulan(fstream&f); void paixu(fstream&f);friend ostream&operator(ostream&out,const ticket&t);/定义重载输出运算符的友元函数boolfindno(charn)/用于判断输入的字符串是否与查找区域中的某个字符串一致if(strcmp(no,n)=0) return true;elsereturn false;bool findname_b(char n)if(strcmp(name_b,n)=0) return true;elsereturn false;bool findname_e(char n)if(strcmp(name_e,n)=0) return true;else;return false;(2) )主要函数流程图:1、录入班次信息函数:用户根据提示信息逐项输入班次信息各项数据,利用 read() 函数把要录入的信息写入文件。开始如图 1开始打开文件打开文件读出数据申请空间读入数据写入文件关闭文件是输出车次信息, 输出“此车已发出”车 次 发 出否?关闭文件否输出车次信息结束结束图 1图 22、浏览班次信息显示所有的班次信息,并标记已发出的车次,如图 23、按班次号查询路线根据用户输入的班次号查找匹配项的班次信息。4、按起点站查询路线根据用户输入的起点站查找匹配项的班次信息。5、按终点站查询路线根据用户输入的终点站查找匹配项的班次信息。6、排列发车时间表利用冒泡法按照发车时间的升序排列车次信息7、售票用户输入指定的班次和售票数目进行售票如图 38、退票用户输入指定的班次和售票数目进行售票, 如图 4开始打开文件 输入售票数目开始打开文件输入班次号否是否找到?是输入退票数目输入班次号余 票是数 目是 否为零否车是否已发是距 离 发 车是否找到?否票已售完否出?未 找 到 该是时 间 是 否否大 于 半 小时?是未 找 到 该车次信息!车次信息售票更新 后 的 票数写入文件此车已发出退票退票失败!更 新后 的票数写入文件关闭文件关闭文件结束结束图 3图 4四、源程序代码#include #include #include #include class ticketpublic:char no20; char name_b20; char name_e20;int hour; int minute;int tra_time; int eding; int yupiao;void shoupiao(fstream&f);void tuipiao(fstream&f);void searchbynumber(fstream&f); void searchbybeginplace(fstream&f); void searchbyendplace(fstream&f); void luru(fstream&f);void zengjia(fstream&f); void xiugai(fstream&f);void liulan(fstream&f); void paixu(fstream&f);friend ostream&operator(ostream&out,constticket&t);/定义重载输出运算符的友元函数bool findno(char n)/用于判断输入的字符串是否与查找区域中的某个字符串一致if(strcmp(no,n)=0) return true;elsereturn false;bool findname_b(char n)if(strcmp(name_b,n)=0) return true;elsereturn false;bool findname_e(char n)if(strcmp(name_e,n)=0)return true; elsereturn false;ostream&operator=10)outt.not.hour : __et.tra_timet.edingt.yupiaoendl;elseoutt.not.hour : 0__et.tra_timet.edingt.yupiaoendl;return out;void ticket:liulan(fstream&f)终点站while(!f.eof()int i=0;struct tm *local; long t;time(&t);local = localtime(&t);cout 车次发车时间 起点站 行车时间 额定载量 余票数量 endl; f.seekg(0,ios:end);int b=f.tellg(); f.seekg(0,ios:beg); int a=f.tellg();int c=(b-a)/sizeof(ticket);/获得文件内包含的班次信息总数ticket*t=new ticketc;f.read(char*)&ti+,sizeof(ticket);for(int j=0;jtm_hourtj.hour)|(tj.hour=local-tm_hour)&( local-tm_min tj.minute)couttj 此车已发出! endl;elsecouttjendl;void ticket:shoupiao(fstream&f)const int num=sizeof(ticket);int n;long t;char m20; ticket t;struct tm *local;cout请输入售票的数目: n;cout 请输入售票的班次 :m;time(&t);local = localtime(&t); f.seekg(0,ios:beg);/从文件头开始bool fd=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.minute)t.yupiao-=n;f.seekg(-1*num,ios:cur);/从当前位置向前移动(-1*sizeof(ticket)个字节f.write(char*)&t,num);cout已售出n 张该车次的车票! endl;elsecout 该车次已发出 !endl;if(!fd)elsecout 票已售完 !endl;cout未找到该车次信息 !endl;void ticket:tuipiao(fstream&f)const int num=sizeof(ticket);int n;long t;char m20; ticket t;struct tm *local;cout请输入退票的数目: n;cout 请输入退票的班次 :m;time(&t);local = localtime(&t);f.seekg(0,ios:beg);/把文件指针移到文件头bool fd=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已退n 张该车次的车票! endl;elsecout退票失败 !endl;if(!fd)cout未找到该车次信息 !endl;void ticket:paixu(fstream&f)int i=0; f.seekg(0,ios:end);int b=f.tellg();f.seekg(0,ios:beg);/把文件指针移到文件头int a=f.tellg();int num=(b-a)/sizeof(ticket);/得到文件内班次信息总数num ticket*t=new ticketnum+1;ticket*t=new ticketnum+1; for(i=0;inum;i+)f.read(char*)&ti,sizeof(ticket);for(i=0;ihour(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发车时间表 :endl;for(i=0;inum;i+)couttiendl; fstream fil;fil.open(d:sort.dat,ios:in|ios:out|ios:binary);/创建并 打 开 二 进 制 文 件 sort.dat for(i=0;inum;i+)fil.write(char*)&ti,sizeof(ticket);fil.close();void ticket:searchbynumber(fstream&f)char n10; ticket t;cout 请输入你要查找的班次号:n;f.seekg(0,ios:beg); bool fd=false; while(!f.eof()&!fd)f.read(char*)&t,sizeof(ticket); if(fd=t.findno(n) 终点站cout 车次发车时间 起点站 行车时间 额定载量 余票数量 endl; coutt;if(!fd)cout未找到该车次信息 ! 该车次不存在或已发出 !endl;void ticket:searchbybeginplace(fstream&f)char n10; ticket t;cout 请输入你要查找的班次的起点站:n;f.seekg(0,ios:beg); bool fd=false; while(!f.eof()&!fd)f.read(char*)&t,sizeof(ticket); if(fd=t.findname_b(n) 终点站cout 车次发车时间 起点站 行车时间 额定载量 余票数量 endl;coutt;if(!fd)cout未找到该车次信息 ! 该车次不存在或已发出 !endl;void ticket:searchbyendplace(fstream&f)char n10; ticket t;cout 请输入你要查找的班次的终点站:n; f.seekg(0,ios:beg); bool fd=false; while(!f.eof()&!fd)f.read(char*)&t,sizeof(ticket); if(fd=t.findname_e(n) 终点站cout 车次发车时间 起点站 行车时间 额定载量 余票数量 endl; coutt;if(!fd)cout未找到该车次信息 ! 该车次不存在或已发出 !endl;void ticket:luru(fstream&f)int num; int i;cout 请输入你要录入的班次信息数量:num;ticket*t=new ticketnum;cout 请依次输入 endl 车次、发车时间(时)、发车时间(分)、起点站、终点站、行车时间、额定票数和余票数量endl;for(i=0;iti.no; cinti.hour; cinti.minute;_b; _e;cinti.tra_time;cinti.eding; cinti.yupiao;f.seekg(0,ios:end);/文件指针指向文件尾for(i=0;inum;i+)f.write(char*)&ti,sizeof(ticket);void ticket:zengjia(fstream&f)int num; int i;cout 请输入你要增加的班次信息数量:num;ticket*t=new ticketnum;cout 请依次输入 endl 车次、发车时间(时)、发车时间(分)、起点站、终点站、行车时间、额定票数和余票数量endl;for(i=0;iti.no; cinti.hour; cinti.minute;_b; _e;cinti.tra_time; cinti.eding; cinti.yupiao;f.seekg(0,ios:end);/文件指针指向文件尾for(i=0;inum;i+)f.write(char*)&ti,sizeof(ticket);void ticket:xiugai(fstream&f)char n10; ticket t;cout 请输入你要修改的班次:n;f.seekg(0,ios:beg); bool fd=false; while(!f.eof()&!fd)f.read(char*)&t,sizeof(ticket); if(fd=t.findno(n)cout 请依次输入 endl 发车时间(时)、发车时间(分)、起点站、终点站、行车时间、额定票数和余票数量t.no; cint.hour; cint.minute;_b;_e; cint.tra_time; cint.eding; cint.yupiao;f.seekg(0,ios:end);/文件指针指向文件尾f.write(char*)&t,sizeof(ticket);void menu()/菜单函数cout*菜单*endl;cout1: 录入车次信息 endl;cout2: 浏览车次信息 endl;cout3: 根据车次号查询路线 endl;cout4: 根据起点站查询路线 endl;cout5: 根据终点站查询路线 endl;cout6: 排列发车时间表 endl;cout7: 售票endl;cout8: 退票endl;cout9: 增加车次 endl;cout10: 修改车次 endl;cout0: 退 出 菜 单 endl; cout 请选择您需要操作的选项:endl;void main()int x; ticket t;fstream file;cout*欢迎您使用票务管理系统!*x; file.open(d:schedule.dat,ios:in|ios:out|ios:binary);/创建并打开二进制文件schedule.datswitch(x)case 1:t.luru(file);break; case 2:t.liulan(file);break; case 3:t.searchbynumber(file);break; case 4:t.searchbybeginplace(file);break;case 5:t.searchbyendplace(file);break; case 6:t.paixu(file);break;case 7:t.shoupiao(file);break; case 8:t.tuipiao(file);break; case 9:t.zengjia(file);break;case 10:t.xiugai(file);break; case 0:break;cout操作已完成,请继续! endl; file.close();/关闭二进制文件schedule.datcout*欢迎您下次使用!*endl;五、测试数据及其结果分析1、录入班次信息输入: 1输出:请输入你要录入的班次信息数量: 输入: 4输出:请依次输入车次、起点站、终点站、发车时间(时)、发车时间(分) 、行车时间、额定票数和余票数量输入:g111南京扬州8020100 30g222南京北京10302112035g333南京上海1102214050g444南京广州9302216040输出:操作已完成,请继续!2、3、浏览班次信息输入: 2输出:g111南京扬州802010030g222南京北京10302112035g333南京上海1102214050g444南京广州9302216040操作已完成,请继续!4、根据车次号查询路线输入: 3输出:请输入你要查找的班次号:输入: g111输出: g111南京扬州8020100 30操作已完成,请继续!5、根据起点站查询路线输入: 4输出:请输入你要查找的班次的起点站: 输入:南京输出:g111南京扬州8020100 30g222南京北京10302112035g333南京上海1102214050g444南京广州9302216040操作已完成,请继续!6、根据终点站查询路线输入: 5输出:请输入你要查找的班次的终点站:输入: 上海输出: g333南京上海11022140 50操作已完成,请继续!7、排列发车时间表输入: 6输出:g111南京扬州8020100 30g444南京广州93022160 40g222南京北京103021120 35g333南京上海11022140 50操作已完成,请继续!8、售票输入: 7输出:请输入售票的数目:输入: 1输出:请输入售票的班次:输入: g333输出:已售出 1 张该车次的车票! 操作已完成,请继续退票8、退票输入: 8输出:请输入退票的数目:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术支持服务满意度调查
- 2025年体育医学运动损伤诊疗方案评估答案及解析
- 一元一次方程教学课件与练习题
- 综合性调查问卷表格设计技巧
- 上海中考物理模拟一模试卷
- 亲子结构游戏指导手册
- 主管岗位竞聘演讲稿范文
- 初中平面几何教学内容总结
- 幼儿园日常安全检查标准流程
- 英语人称和物主代词专项练习
- 道路运输安全员考试题库及答案
- 2025重庆某国有企业招聘新媒体运营(偏拍摄剪辑)参考题库含答案
- 2025年秋期新教材部编人教版一年级上册道德与法治教学计划+进度表
- 医院绩效考核指标体系设计与实施
- 2025年农业农村局公务员招聘面试指南与模拟题解析
- 食堂食品安全风险日管控、周排查、月调度管理制度
- 2025年秋季新学期全体教职工大会上校长讲话:汇一股心力、立两个目标、守三条底线、打四场硬仗
- 2025至2030中国水射流强化泵行业项目调研及市场前景预测评估报告
- 联邦学习在二零二五年保险精算模型跨机构协作中的实践
- 招投标技术服务及售后承诺书
- 《推销实务》中职全套教学课件
评论
0/150
提交评论