车辆管理系统 论文+代码
- 格式:doc
- 大小:429.99 KB
- 文档页数:19
目录1:需求分析------------------------------------------------------------------------ 2:算法设计---------------------------------------------------------------------- (1)设计思想-------------------------------------------------------------------- (2)设计表示--------------------------------------------------------------------- (3)实现注释-------------------------------------------------------------------- (4) 算法设计中一些新的想法--------------------------------------------------- 3:用户手册---------------------------------------------------------------------- 4:调试及测试------------------------------------------------------------------- 5:课程小结----------------------------------------------------------------------6:参考文献----------------------------------------------------------------------7:附录-----------------------------------------------------------------------------(1)源程序清单-----------------------------------------------------------------(2)测试数据---------------------------------------------------------------------(3)运行结果---------------------------------------------------------------------一:需求分析1)描述问题:设计一个汽车站车票管理系统,该系统要求对班次信息和售票退票进行维护和管理。
一个车站每天有n个发车班次,每个班次都与一班次号(1、2、3--------n),固定的发车时间,固定的路线(起点站,终点站),大致的发车时间,固定的额定载客量。
2)编写目的:便于车站部门对汽车班次的管理与统计,同时提高工作效率;方便市民对有关信息的了解,对旅客的出行提供了方便,避免了旅客长时间等待却买不到票的现象。
3)该程序所具有的功能:a:能够录入汽车班次信息,如班次号、发车时间、起点站、终点站、行车时间、额定载量和已定票人数等有关信息。
b:能够浏览班次信息,显示信息总和(如果已发出站的班次要提示“该班次已开出”)。
c:查询路线:可按班次查询后可按终点站查询。
d:售票功能:当查询出已定票人数小于额定载量且当前时间小于发车时间才能售票,自动更新已售票人数。
e:退票功能:输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
f:保存更改后的信息:可自动更新更改后的信息。
二:算法设计1设计思想2设计表示主函数main():进入系统,选择管理员还是游客进入,若是管理员需要密码才能进入。
游客只能浏览本系统的一部分信息。
主菜单函数mainmenu():按界面提示选择0…9按键,进入所代表功能的界面。
主菜单函数(游客)newmainmenu():主菜单函数(游客)是专为游客设计的函数,此函数与mainmenu()的不同点在于不能录入班次信息。
录入函数input():(此功能只能管理员用) 录入函数用于录入班次信息,录入班次的信息可用文件保存,可不定时的增加保存信息。
查找路线函数found():查找路线函数可实现查询方式的选择,及通过switch语句进行选择是按班次查找还是按终点站查找。
1)按班次查找函数:输入要查找的班次,然后通过类组进行输出。
2)按终点站查找函数:输入要查询的地址,然后通过for循环进行逐一查找,找出符合条件的地址对应的班次信息,然后输出。
售票与退票函数ticket():此函数主要实现“功能选择”的界面,在这个界面里有显示退、订票的功能,利用switch语句实现。
退出系统函数exit():完成所需要求,退出系统。
3实现注释密码功能:管理员还是游客进入,若是管理员需要密码才能进入。
游客只能浏览本系统的一部分信息。
管理员客人进行车票信息的录入。
车票信息的录入:我们默认的初始界面是没有任何车次信息的,所以需要我们事先手动添加,而设计这个功能是为了能够方便快捷,并且规范的的添加车次信息进入表单中。
修改车票信息:若车票信息出现意料之外的问题,可进行临时修改。
按照车次编号进行查询:在现实生活中,我们买票者与车站之间存在着一定的信息误差,所以我们需要通过购票者所掌握的信息做出快捷的查询。
在按照车次信息进行查询时,需要输入所了解的车次编号,能够查询到车次的具体信息。
按照目的地进行查询:我们需要通过购票者的需求做出快捷的信息反馈,所以设计了按照目的地进行的查询,能够使操作者在查询条件下准确快速的给出相关的车次信息。
订退票操作功能。
在这个系统中,能够快速的订购车票,使得人们更加方便,并且完善车票管理系统。
退出功能:能够使操作者快速安全的退出系统。
4算法设计中一些新的想法在程序员登陆是输入的密码应该改成“******”,这样有利于程序的隐秘性,更好的保护车票信息。
三:用户手册尊敬的用户您好,欢迎使用汽车站车票管理系统,请在输入数据的时候按照正确的输入方式,如有的数据输入时应以回车键隔开,这样便于您的查询,便于您进行以下功能的操作。
本系统必须先执行以下步骤才能进行,首先必须明确本时间段班次的数量,然后将班次信息按照以下格式录入:班次发车时间起点站终点站行车时间额定载量已定人数,录入完毕后才能进行以下功能。
四:调试及测试1.刚开始执行载入读取数据时,系统的发车时间不准确,及分钟若为00时,则只能显示一个0,通过查书,将原来的格式说明附上添加格式说明即可。
%02d则可以显示出00。
2.刚开始编出的程序没有设置系统时间,导致退订票函数出现错误信息,通过学习了解到如何设置系统时间,将其加入到程序后,导致退订票函数即可输出准确信息。
3.刚开始编出的程序没有设定密码,没有对权限进行设置,在添加密码功能时,因为对strcmp函数不够了解,使得输入的秘密与原密码无法比较,通过密码的类型,这一问题得以解决。
4.密码写入程序后,运行程序,发现11个函数都不合法,通过仔细检查,才发现在这些函数之上缺少“}”,添加后,所有错误解除。
5.文件录入与保存问题,这是困扰我时间最长的问题。
录入其实不需要文件操作,直接通过录入函数即可录入。
而保存测需要进行文件操作。
6.当程序主体差不多以完成后,我有对其改进,改进如下:1)当浏览班次信息时,通过与系统时间比较,判断当前系统时间是否超过了某班次的发车时间,若超出则显示“此班已发出”的提示信息。
2)在文件保存中添加保存提示信息。
3)退订票后,系统自动更新已订票人数,并将其保存到文件中。
7. 算法改进设想:在退、订票函数中,设置具体时间,比如距离发车时间还有十分钟时即停止退、订票。
退、订票可以设定订票退票的人数,完成一次性售退票若干张的功能。
五:课程小结经历一周的学习和锻炼,这个汽车站车票管理系统算是做出来了,不过功能实现的并不是很完美。
它基本有前面提到过的功能,即录入班次信息,浏览班次信息,按班次或按终点站查询相关信息,售票和退票,保存文件。
有一个扩展功能,即可以退出系统不过目前我发现它一个不足之出,就是不能对输入时间的格式起限制作用,它系统不会提示说输入错误提示再输入一个正确的时间。
还有,就是整个代码条理不够清晰,只是用到一个主函数和调用其他函数,可读性不是很好!我认为最好是能分模块化处理,分文件处理,这样条理性强,可读性高,再者修改也容易。
不过因为知识和时间的原因,该问题并没有得到很好的解决。
经过这一周的忙碌,我虽然并没有给老师提交一份满意的答卷,但我也比较满意自己的表现。
在这过程中我查阅了很多书,不仅把课堂上学的知识理解和加以运用而且学到了很多课堂上没有的东西。
很多知识我之前不知道的现在大部分都知道了,不过理解不够深透,,导致在这三天里碰了不少壁!。
一周的课程设计我觉得编程既是一项费时费力但也是十分有趣的事。
说它费时费力是因为它繁琐,因为程序中经常出现我们平时易犯的错误,这样的错误我们平时很容易忽视,导致我们修改程序时很费力;而有趣是在我将一个功能函数成功调试时,心中的那份喜悦真是吧不言而喻。
我觉得有一点不满意的是课程设计的时间太短和学C的课时过少。
C语言作为我们专业的基础课,是一项重要的课程。
在以后的学习中我将更加努力,学好自己的专业课,圆满的结束大学生活。
除此之外我也希望学校能为我们提供更好的学校C语言的环境氛围。
最后、最后也非常感谢这一周来老师对我们的指导。
六:参考文献[1] 郑莉等编著《C++语言程序设计(第三版)》北京:清华大学出版社[2] 郑莉等编著《C++语言程序设计(第三版)学生用书》北京清华大学出版社[3] 刘振安等编著《C++程序设计课程设计》机械工业出版社[4] 吴乃陵等编著《C++程序设计》北京:高等教育出版社[5] 李春葆等编著《C++程序设计学习与上机实验指导》北京:清华大学出社[6] 范辉等编著《Visual C++6.0程序设计简明教程》高等教育出版社[7] 李龙澍《C++程序设计实训教程》北京:清华大学出版社[8] 洪国胜等编著《C++ Builder程序设计轻松上手》北京:清华大学出版社[9] 宁正元《数据结构(c语言)》南京:东南大学出版社。
2000年6月第1版[10] 严蔚敏等《数据结构(c语言版)》北京:清华大学出版社,1997年第1版。
[11] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,1999年第1版。
[12] 刘大有《数据结构》(面向21世纪课程教材)北京:高等教育出版社。
2001年6月第1版。
[13] 明日科技编著《Visual C++程序开发范例宝典》北京:人民邮电出版社。
[14] 游洪跃等编著《C++面向对象程序设计实验和课程设计教程》北京:清华大学出版社.2009.2附录1 源程序清单:#include<iostream> //数据流输入/输出#include<fstream> //文件输入/输出#include<string> //字符串操作#include<iomanip> //参数化输入/输出#include<time.h> //时间库函数using namespace std; //命名空间class Bus_infor{private:static int Bus_No; //静态数据成员,统计当前所有的Bus_infor对象的数目char start[20]; //起点站char end[20]; //终点站int Bus_order; //班次号int all_tickted; //额定载量int tickted; //已定票人数int Hour_start,Minute_start; //发车时间float GoHour; //行车时间public:Bus_infor();~Bus_infor();Bus_infor *next;void input(); //录入函数void input(ifstream & is); //读取函数void output(); //输出函数void output(ofstream & os); //写入函数void Order_tickt(int n); //定票函数void Unorder_tickt(int n); //退票函数void GetTime_start(); //获取发车时间函数bool GetTime(); //判断当前班次状况函数int Get_all_tickted() { return all_tickted; } //内联函数,返回额定载量int Get_tickted() { return tickted; } //返回已定票人数int Get_bus_order() { return Bus_order; } //返回班次号string Get_end()const; //返回终点站的字符串};int Bus_infor::Bus_No=1;Bus_infor::Bus_infor(){Bus_No++;tickted=0;}Bus_infor::~Bus_infor(){Bus_No--;}void Bus_infor::input(){cout<<"\t\t\t按提示输入:"<<endl; cout<<"输入班次: ";while(1){cin>>Bus_order;if (cin.fail()){ //判断输入的数据类型是否有错cout << "\n班次输入错误,请重新输入:";cin.clear();cin.get();}else break;}cout<<"请输入车的额定座位数: ";while(1){cin>>all_tickted;if (cin.fail()){ //判断输入的数据类型是否有错cout << "\n座位数输入错误,请重新输入:";cin.clear();cin.get()}else break;}GetTime_start();cout<<"请输入行车时间:";while(1){cin>>GoHour;if (cin.fail()){ //判断输入的数据类型是否有错cout << "\n行车时间输入错误,请重新输入:";cin.clear(); cin.get(); }else break;}cout<<"请输入起始站与终点站:";cin>>start;cin>>end;cout<<"是否清空售票(y/n)?";char a;cin>>a;if(a=='y'||a=='Y') tickted=0}void Bus_infor::input(ifstream & is) {is>>Bus_order>>Hour_start>>Minute_start>>start>>end>>GoHour>>all_tic kted>>tickted; is.get();}void Bus_infor::output(){cout<<" "<<Bus_order<<"\t";if(Minute_start==0){//判断发车时的分钟时刻,若为分则在后面多显示个,以符合时间格式cout<<Hour_start<<":"<< Minute_start<<"0\t";}else{cout<<Hour_start<<":"<< Minute_start<<"\t";}cout<<start<<"\t"<<end<< "\t"<<GoHour<<"\t "<<all_tickted<<"\t"<<tickted;if(!GetTime())cout<<"\t 此班已出发"<<endl;elsecout<<"\t 此班未出发"<<endl;}void Bus_infor::output(ofstream & os) {os<<setw(6)<<Bus_order //setw()设置输出宽度<<setw(15)<<Hour_start<<setw(15)<<Minute_start<<setw(15)<<start<<setw(6)<<end<<setw(15)<<GoHour<<setw(15)<<all_tickted<<setw(15)<<tickted <<endl;}void Bus_infor::GetTime_start(){cout<<"请输入始发时间(时分):";while(1){cin>>Hour_start>>Minute_start;if (cin.fail()){ //判断输入的数据类型是否有错cout << "\n时间输入错误,请重新输入:";cin.clear();cin.get(); }else if(Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60) cout<<"\n时间格式出错,请重新输入:"; ////判断时间格式是否出错,小时不能小于大于,分钟不能小于大于else break;}}bool Bus_infor::GetTime(){struct tm *local;time_t t;t=time(NULL);local=localtime(&t); //获取当前系统时间if(local->tm_hour<Hour_start||(local->tm_hour==Hour_start &&local->tm_min<=Minute_start))return 1; //比较当前时间与发车时间,获得班次的当前状况,返回表示班次未出发else return 0;} //返回表示班次已出发void Bus_infor::Order_tickt(int n){tickted=tickted+n;}void Bus_infor::Unorder_tickt(int n){tickted=tickted-n;}string Bus_infor::Get_end()const{string s=end; return s;}class Bus_link{public:Bus_link(){head=new Bus_infor;head->next=NULL;key=0;}//带参数的构造函数~Bus_link(){delete head;} //析构函数void input(); //录入车票信息void mend(); //修改车票信息void del(); //删除车票信息int find(Bus_infor **p,int num,char *pn); //查找函数void found(); //查询车票信息void show(); //显示车票信息void Order(); //定购车票信息void Unorder(); //退还车票信息void save(); //保存车票信息void begin(); //初始化车票信息void clear(); //清除函数void about(); //关于车票信息char mainmenu(); //主菜单函数void setkey(int k){ key=k; } //设置系统修改标志int getkey(){ return key;} //返回系统修改标志private:Bus_infor *head; //链表指针int key; //系统修改标志int password;}; //管理员登陆标志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);cout<<"\t\t\t按继续,按返回: "; cin>>n;if(!cin)throw string("数据输入错误");}}elsecout<<"\n\t\t对不起,游客不能录入车票信息"<<endl;}void Bus_link::show(){cout<<"客车基本信息如下:"<<endl<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<<endl;Bus_infor *p;p=head;while(p->next){(p->next)->output();p=p->next;}}void Bus_link::found(){Bus_infor *p;int num,n;char name[20]; do{cout<<"\t\t1:按班次查找,2:按终点站查找: "; cin>>n;if(!cin)throw string("数据输入错误");}while(n<1||n>2);if(n==1){cout<<"\t\t\t输入班次: ";cin>>num;if(!cin)throw string("数据输入错误");}if(n==2){cout<<"\t\t\t输入终点站: "; cin>>name;}if(!find(&p,num,name)){cout<<"\t\t找不到你要查找的内容!"<<endl; return;}}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<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<<endl;(p->next)->output(); t=1; }p=p->next;} return t;}void Bus_link::del(){if(password==1){Bus_infor *p,*p2;int num;char name[20];cout<<"\t\t\t输入班次号: ";cin>>num; if(!cin)throw string("数据输入错误");if( !find(&p,num,name) ){cout<<"\t\t找不到你要删除的内容!"<<endl;return;}cout<<"\n\t\t\t确定删除(y/n)?";char a;cin>>a;if(a=='y'||a=='Y') {p2=p->next;p->next=p2->next;delete p2;Bus_link::setkey(1);}}elsecout<<"\n\t\t对不起,游客不能删除车票信息"<<endl;}void Bus_link::mend(){if(password==1){Bus_infor *p;int num;char name[20];cout<<"\t\t\t输入班次号: ";cin>>num;if(!cin)throw string("数据输入错误");if( !find(&p,num,name) ){cout<<"\t\t找不到你要修改的内容!"<<endl; return;}(p->next)->input();Bus_link::setkey(1);}elsecout<<"\n\t\t对不起,游客不能修改车票信息"<<endl;}void Bus_link::Order(){if(password==1){Bus_infor *p;cout<<"\n\t\t\t确定购票(y/n)?";char X;cin>>X;if(X=='y'||X=='Y'){int num;cout<<"\n\t\t\t输入班次号: ";cin>>num;if(!cin) throw string("数据输入错误");if( !find(&p,num,"^") ){cout<<"\n\t\t找不到你要定票的车辆的内容!"<<endl;return;}p=p->next;if(!(p->GetTime())){//判断要定票的车辆是否已经出发,若已经出发则不允许定票cout<<"\n\t\t你要订票的车辆已出发!"<<endl; return;}cout<<"\n\t\t\t输入要定的票数";int n;cin>>n;if(!cin)throw string("数据输入错误");if((p->Get_tickted()+n)<=p->Get_all_tickted())p->Order_tickt(n);else cout<<"\n\t\t对不起,没有足够的票数。