车票管理系统课程设计报告.doc_第1页
车票管理系统课程设计报告.doc_第2页
车票管理系统课程设计报告.doc_第3页
车票管理系统课程设计报告.doc_第4页
车票管理系统课程设计报告.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告20112012学年第二学期课程C+课程设计课程设计名称车票管理系统学生姓名刘吉喆学号1104121008专业班级1210指导教师2013年9月17日星期二一、系统的需求分析:需求分析是一项重要的工作,也是最困难的工作。它指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。可以说,“需求分析”就是确定要计算机“做什么”。车票管理系统是典型的管理信息系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。车票管理系统可以实现对车票的科学化、规范化、查询车票情况、定票信息、以及路线信息等。车票管理系统是根据某车站对这票管理的实际情况进行编写的,主要目的是为了方便车站对车票的实际情况进行集中的查询与管理工作,以提高整个车站的工作。经过电脑及生活的调查研究,根据车辆的运行状态和车站的管理模式,车票管理系统需要管理的东西主要有:车辆的班次,车辆的线路,售票和退票等等。车辆是一个对外服务的内容,为了乘客的乘车要求,所以系统需要实现售票信息的录入、修改和删除功能。乘客对剩余车票需要进行选择,系统必须实现相应的查询和输出功能,使乘客择优而乘。本次课程设计需要实现的是车票管理系统的链表实现。主要实现的功能包括:车票信息的录入、修改、删除、剩余车票信息的查询、输出。车票信息可写入文件,也可从文件中读取。车票信息涉及的数据有班次号、发车时间、起点站、终点站、行车时间、额定载量、已定票人数等。按照需求分析所得,车票管理系统有以下几个功能模块:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。(3)查询路线:可按班次号查询 ,可按终点站查询(4)售票和退票功能 A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。(5)退出在界面状态下,按下“ESC”会退出该系统。返回源程序。由上述需求分析可得,系统的功能模块图如图1所示。录入班次信息车票信息管理系统售票和退票功能保存班次信息功能关于车票管理介绍浏览班次信息查询路线信息删除班次信息退出系统图1 系统功能模块图二、 系统的设计与实现根据第一章的需求分析,接下来给出的是系统的设计和实现。1、 类的设计根据上述需求分析,有车票信息类和链表类。(1) 车票信息类系统研究车票系统Bus_infor类中成员:Bus_order是班次编号,start20是车票信息的起点站,end20是车票信息的终点站,all_tickted是总共要发售的票数,tickted是已经被订购的票数,Hour_start,Minute_start是车票的发车时间,GoHour表示行车时间,构造函数Bus_infor(),析构函数Bus_infor(),录入函数input(),读取函数input(ifstream & is),输出函数output(),写入函数output(ofstream & os),定票函数Order_tickt(int n),获取发车时间函数GetTime_start(),判断当前班次状况函数GetTime(),内联函数,返回额定载量Get_all_tickted() return all_tickted; ,返回已定票人数Get_tickted(),返回班次号Get_bus_order(),返回终点站的字符串Get_end()const。车票类的UML图如(图2)所示:class Bus_inforpublic:+ Bus_order:int/ 班次编号+ start20:char/起始站+ end20:char/终点站+ all_tickted:int/总共要发售的票数+tickted:int/已经被订购的票数+ Hour_start,Minute_start :int/发车时间+GoHour:float/行车时间+Bus_infor ()/构造函数初始化+Bus_infor()/析构函数+ input():void/录入函数+ input(ifstream & is):void/读取函数+output():void/输出函数+output(ofstream & os):void/写入函数+Order_tickt(int n):void/定票函数+ GetTime_start():void/获取发车时间函数+ GetTime():bool/判断当前班次状况函数+ Get_all_tickted():int/内联函数,返回额定载量+ Get_tickted():int/返回已定票人数+ Get_bus_order():int/返回班次号+Get_end()const:string/返回终点站的字符串private:Bus_No; static intstart20; charend20; charBus_order; intall_tickted; inttickted; intHour_start,Minute_start; intGoHour; float图2 客房类的UML图(2)链表类在Bus_link类中,有成员:构造函数Bus_link (),析构函数Bus_link(),录入车票信息的函数input(),修改车票信息的函数mend(),删除车票信息的函数del(),查找函数find(Bus_infor *p,int num,char *pn),查询车票信息found(),显示车票信息show(),定购车票信息Order(),退还车票信息Unorder(),保存车票信息save(),初始化车票信息begin(),清除函数clear(),关于车票信息about(),主菜单函数mainmenu(),设置系统修改标志void setkey(int k) key=k; ,返回系统修改标志int getkey() return key;,头节点head,系统修改标志key,管理员登陆标志password。链表类的UML图如(图3)所示:class Bus_linkpublic:+ Bus_link ();+Bus_link(); + input():void + mend():void + del():void +find(Bus_infor*p,intnum,char *pn):int + found():void; + show():void;+ Order():void;+ Unorder():void;+ save():void;+ begin():void;+ clear():void;+ about():void;+ mainmenu():void;+ setkey(int k):void;+ getkey():int;Private:-*head: Bus_infor;- key:int;- password:int;2界面设计:分界面:车票信息的查询的设计提示进入查询界面,选择按班次查找或按终点站查询车票信息。车票信息的查询界面如图所示。分界面:车票信息的删除的设计在录入或修改错误的车票信息后,想删除错误的车票信息,按提示按提示输入班次号,程序会显示该班次的信息并提示用户是否确定删除,输入y则删除。删除车票的信息界面如图所示。修改车票信息的设计按提示进行车票信息的修改,本系统中只有管理员身份才可以修改车票,显示屏幕如图所示。分界面:订购车票信息的设计在管理员身份下按提示在剩余未出发的班次中,输出车票的信息,以判断是否可以订票,已出发的和已定票人数已满的情况下是不能订票的。定购车票信息输出界面如图所示。分界面:退订车票信息的设计在管理员身份下按提示在剩余未出发的班次中,输出车票的信息,以判断是否可以退票,已出发的和没人定票的情况下是不能退票的。退定信息输出界面如图所示。分界面:介绍车票信息的设计在程序中输出使用说明。介绍信息界面如图所示。3.关键程序代码的分析:(1)系统的登录在主函数中,先输出车票管理系统的欢迎界面。调用一个对象的mainmenu函数来输出主菜单,按照提示选择需要执行功能的序号,由switch判断和选择所需要执行的功能。选择1:执行车票信息的录入;选择2:执行车票信息的浏览;选择3:执行查询车票信息;选择4:执行车票信息的删除;选择5:执行车票信息的修改;选择6:执行定购车票;选择7:执行退定车票;选择8:执行车票信息的保存;选择9:输出关于车票管理系统的信息;选择0:退出;主函数:int main()Bus_link pp;int k=1;char c;string s;pp.begin();coutnn欢迎进入车票管理系统endlendl; /开机选择是否进入系统cout*endl系统说明:endl*endl*t本系统为课程设计作品,可以简易的进行车票管理,欢迎提出意见和建议! *endl *t合肥学院计算机科学与技术系11网工二班t *endl*t作者:孙乐 tt学号:1104032043 *endl*endlendl;coutntt是否进入系统?nntt按Enter进入主菜单,按Esc键退出:;do /利用一个do-while循环来判断输入是否进入系统c=getch();if(c=27)exit(0);else if(c=13)break;else coutnntt按键错误!请重新输入:;while(c!=13)|(c!=27);try while(k=1) system(cls); s=pp.mainmenu(); /调用主菜单函数 switch(s0) case 1:pp.input(); break; /录入车票信息 case 2:pp.show(); break; /浏览车票信息 case 3:pp.found(); break; /查询车票信息 case 4:pp.del(); break; /删除车票信息 case 5:pp.mend(); break; /修改车票信息 case 6:pp.Order(); break; /保存车票信息 case 7:pp.Unorder(); break; /退还车票信息 case 8:pp.save(); break; /保存车票信息 case 9:pp.about();break; /关于车票系统 case 0: coutntt是否退出系统?nntt按Enter返回主菜单,按Esc键退出:;do /利用一个do-while循环来判断输入是否退出系统c=getch(); if(c=27)k=0;break;else if(c=13)k=1;break;else coutnntt按键错误!请重新输入:; /利用循环防止误操作而引起的退出系统while(c!=13)|(c!=27);break; if(k=1) coutk; if(!cin)throw string(数据输入错误); coutntt是否退出系统?nntt按Enter返回主菜单,按Esc键退出:;do /利用一个do-while循环来判断输入是否退出系统c=getch(); if(c=27)k=0;break;else if(c=13)k=1;break;else coutnntt按键错误!请重新输入:; /利用循环防止误操作而引起的退出系统while(c!=13)|(c!=27); if(k=0) if(pp.getkey()=1) coutk; if(!cin)throw string(数据输入错误); if(k=1) pp.save(); pp.clear(); k=0; catch(string s)couts,为保护系统不崩溃,将自动退出系统!num;is.seekg(t);/移动到原来位置if(numinput(is);/输入is对象内容p-next=p2;p2-next=NULL;p=p-next;(2)信息的添加车票信息的录入,创建Bus_infor类和Bus_link对象,调用构造函数,输入车票的班次、额定座位数、始发时间、行车时间、起始站与终点站、,通过input函数实现。void Bus_link:input()if(password=1)Bus_infor *p,*p2=NULL;p=head; int n=1; /int n;while(p-next)p=p-next;while(n)p2=new Bus_infor;p2-input();p-next=p2;p2-next=NULL;p=p-next; Bus_link:setkey(1);coutn;if(!cin)throw string(数据输入错误);elsecoutntt对不起,游客不能录入车票信息endl;void Bus_infor:GetTime_start()coutHour_startMinute_start;if (cin.fail()/判断输入的数据类型是否有错cout n时间输入错误,请重新输入:;cin.clear();cin.get();else if(Hour_start24|Minute_start60)coutn时间格式出错,请重新输入:;/判断时间格式是否出错,小时不能小于大于24,分钟不能小于大于60elsebreak;void Bus_infor:input() /Bus_infor类中成员函数input的函数体coutttt按提示输入:endl;coutBus_order;if (cin.fail()/判断输入的数据类型是否有错cout n班次输入错误,请重新输入:;cin.clear(); /清除刚才输入的数据cin.get(); /重新输入else break;coutall_tickted;if (cin.fail()/判断输入的数据类型是否有错cout n座位数输入错误,请重新输入:;cin.clear();cin.get();else break;GetTime_start();coutGoHour;if (cin.fail()/判断输入的数据类型是否有错cout n行车时间输入错误,请重新输入:;cin.clear();cin.get();else break;coutstart;cinend;couta;if(a=y|a=Y) tickted=0;(3)信息的浏览浏览客房信息,如果之前有文件信息,则直接输出,如果没有则需录入后才能输出。所以,先得有一个读取函数begin,再有一个浏览函数show。void Bus_link:begin()password=0;Bus_infor *p,*p2;p=head;clear();long t;ifstream is(bus.txt,ios:in);/文件以输入方式打开if(!is)ofstream os(bus.txt,ios:out);/文件以输出方式打开os.close();/关闭文件return ;int num=-1;while(1) num=-1;t=is.tellg();/记录下当前位置isnum;is.seekg(t);/移动到原来位置if(numinput(is);/输入is对象内容p-next=p2;p2-next=NULL;p=p-next;void Bus_link:show()cout*endl客车基本信息如下:endl*endl班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 当前状况endl*next)(p-next)-output();p=p-next;(4)信息的修改按提示输入要修改的班次,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的班次与存在的班次比较。如果相同,提示输入车票的各个信息;如果没有相同,提示没有所查询的车票。int Bus_link:find(Bus_infor *p1,int num,char *pn)Bus_infor *p;p=head;int t=0;while(p-next)(*p1)=p;if( (p-next)-Get_bus_order()=num| (p-next)-Get_end()=pn )cout客车基本信息如下:endl 班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 当前状况next)-output(); t=1;p=p-next;return t;void Bus_link:mend()if(password=1)Bus_infor *p;int num;char name20;coutnum;if(!cin)throw string(数据输入错误);if( !find(&p,num,name) )couttt找不到你要修改的内容!next)-input();Bus_link:setkey(1);elsecoutntt对不起,游客不能修改车票信息endl; (5)信息的查询按提示输入要查询的班次或者终点站,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的班次与存在的班次比较。如果相同,则输出车票的各个信息;如果没有相同,提示没有所查询的车票。void Bus_link:found()Bus_infor *p;int num,n;char name20;docoutn;if(!cin)throw string(数据输入错误);while(n2);if(n=1)coutnum;if(!cin)throw string(数据输入错误);if(n=2)coutname;if(!find(&p,num,name)couttt找不到你要查找的内容!endl;return;(6)信息的删除按提示输入要删除的班次,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的班次与存在的班次比较。如果相同,输出车票的各个信息并提示是否确定删除;如果没有相同,提示没有所查询的车票。void Bus_link:del()if(password=1)Bus_infor *p,*p2;int num;char name20;coutnum;if(!cin)throw string(数据输入错误);if( !find(&p,num,name) )couttt找不到你要删除的内容!endl;return;couta;if(a=y|a=Y) p2=p-next;p-next=p2-next;delete p2;Bus_link:setkey(1);elsecoutntt对不起,游客不能删除车票信息endl;(7)车票的定购按提示输入要定票的班次,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的班次与存在的班次比较。如果相同,判断是否出发,若已出发则输出信息提示不能订票,若没有出发,则输出车票信息。提示输入需要定购车票的数量;如果没有相同,提示没有所查询的车票。void Bus_link:Order()if(password=1)Bus_infor *p;coutX;if(X=y|X=Y)int num;coutnum;if(!cin)throw string(数据输入错误);if( !find(&p,num,) )coutntt找不到你要定票的车辆的内容!next;if(!(p-GetTime()/判断要定票的车辆是否已经出发,若已经出发则不允许定票coutntt你要订票的车辆已出发!endl;return;coutn;if(!cin)throw string(数据输入错误);if(p-Get_tickted()+n)Get_all_tickted()p-Order_tickt(n);else coutntt对不起,没有足够的票数。endl;else if(X=n|X=N) cout谢谢使用endl;else coutnttt输入字符不确定endl;Bus_link:setkey(1);elsecoutntt对不起,订购车票请在管理员处购买endl;(8)车票的退定按提示输入要退票的班次,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的班次与存在的班次比较。如果相同,判断是否出发,若已出发则输出信息提示不能退票,若没有出发,则输出车票信息。提示输入需要退票的数量;如果没有相同,提示没有所查询的车票。void Bus_link:Unorder()if(password=1)Bus_infor *p;coutX;if(X=y|X=Y)int num;coutnum;if(!cin)throw string(数据输入错误);if( !find(&p,num,) )coutntt找不到你要退票的车辆的内容!GetTime()/判断要定票的车辆是否已经出发,若已经出发则不允许定票coutntt你要退票的车辆已出发!endl;return;coutn;if(!cin)throw string(数据输入错误);p=p-next;if(p-Get_tickted()-n)=0)p-Unorder_tickt(n);else coutnttt对不起,数据出错!。endl;else if(X=n|X=N) cout谢谢使用endl;else coutnttt输入字符不确定endl;Bus_link:setkey(1);elsecoutntt对不起,退还车票请在管理员处退还next)(p-next)-output(os);p=p-next;coutttt文件已保存! endl;Bus_link:setkey(0);elsecoutntt对不起,游客无法保存车票信息endl;三、 用户手册输入的格式要求均有提示,而且输入错误的话会提示并要求重新输入,基本不需要说明。四、 调试及测试程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机中测试。原程序:void Bus_link:Order()if(password=1)Bus_infor *p;coutX;if(X=y|X=Y)int num;coutnum;if(!cin)throw string(数据输入错误);if( !find(&p,num,) )coutntt找不到你要定票的车辆的内容!next;if(p-GetTime()/判断要定票的车辆是否已经出发,若已经出发则不允许定票coutntt你要订票的车辆已出发!endl;return;coutn;if(!cin)throw string(数据输入错误);if(p-Get_tickted()+n)Get_all_tickted()p-Order_tickt(n);else coutntt对不起,没有足够的票数。endl;else if(X=n|X=N) cout谢谢使用endl;else coutnttt输入字符不确定endl;Bus_link:setkey(1);elsecoutntt对不起,订购车票请在管理员处购买GetTime()中加一个!即可。void Bus_link:Order()if(password=1)Bus_infor *p;coutX;if(X=y|X=Y)int num;coutnum;if(!cin)throw string(数据输入错误);if( !find(&p,num,) )coutntt找不到你要定票的车辆的内容!next;if(!(p-GetTime()/判断要定票的车辆是否已经出发,若已经出发则不允许定票coutntt你要订票的车辆已出发!endl;return;coutn;if(!cin)throw string(数据输入错误);if(p-Get_tickted()+n)Get_all_tickted()p-Order_tickt(n);else coutntt对不起,没有足够的票数。endl;else if(X=n|X=N) cout谢谢使用endl;else coutnttt输入字符不确定endl;Bus_link:setkey(1);elsecoutntt对不起,订购车票请在管理员处购买endl;五、 小结本次的C+课程设计时间非常紧凑,虽然只是短短的一星期,但是却令我体会很多,也学到很多东西。利用C+去设计车票管理,使我加强了对C+的认识,也对现代客运的基本运作管理有了初步了解。在这次课程设计中,我还懂得了程序开发中的一些比较重要的步骤,比如需求分析、类的设计以及类与类之间的关系,UML图形的表示方法等。面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。C语言相对于C语言来更具有优越性,它不仅兼容C,还有一个非常重要的特点就是面向对象(具体来讲就是类),另外模板技术的频繁引用,也使整个程序看起来更清晰,更有条理化,所以,对模块的掌握,在C+学习中是非常重要的。 在本次的应用程序的设计和创建过程中,我经历了平时在课堂中和考试中,决不会有的重重难题,而这些问题,又都是课本上简单零散提到的,使我在设计的初期不得不查询大量的资料来了解整个系统的规划,所以,课程设计也培养了我们探索实践的能力。总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用。以前上C+课程,只是零散被动地接受知识,而不是主动地去吸收渗透,而此次的课程设计却让我对编程产生了兴趣,习惯独立自主地完成任务,在困难中寻求帮助,加强和同学间的互帮互助,相信自己会在以后的学习和工作更加有经验。通过课程设计,我既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。 完整代码:#include#include#include#include#include#include#define N 20typedef struct clchar num10;char hour3;/*小时、分钟为char型可输出时间时输出xx:00*/char min3;char from10;char to10;float hours;int max;int now;CLASS;int class_num=0;CLASS recordsN;void NewMessage(); /*录入班次*/void ShowTable1();/*打印表头*/void ShowTable2(int i);/*打印表尾*/void Display();/*显示所有班次*/void ad

温馨提示

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

评论

0/150

提交评论