当前位置:文档之家› 公交线路管理系统的设计

公交线路管理系统的设计

《C++程序设计》课程设计说明书题目公交线路管理系统的设计姓名贺英杰班级软件13-1 班指导教师周李涌日期2014年6月23日内蒙古科技大学课程设计任务书课程名称C++语言课程设计设计题目公交线路管理系统的设计指导教师周李涌时间2014春学期第18、19周一、教学要求1. 巩固和加深学生对C++语言课程的基本知识的理解和掌握2. 掌握C++语言编程和程序调试的基本技能3. 利用C++语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C++语言解决实际问题的能力二、设计资料及参数用C++设计一个系统,能提供下列服务:(1)录入公交信息,格式为:线路全程站点起始终点途经票价11 10 包头火车站恰特内科大,技校,云龙,包钢三中,科隆,八一公园,包百,包钢招待所可增加线路数据。

(2)浏览线路信息,可显示出所有公交线路,按照线路编号由小到大排序。

(3)修改路线:可按线路编号查询,可按起始站,终点站查询后进行修改。

(4)线路查询。

输入当前所在站点和要去的站点,找到应乘坐的公交线路,如输入起点=八一公园,到站=内科大,查找后应输出“请乘坐1路公交车”,有多个查找结果时,按照线路编号由小到大输出。

三、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书目录目录 (4)第一章需求分析 (6)第二章总体设计 (7)第三章bus类的设计 (9)第四章详细设计 (10)4.1工程视图 (10)4.2类图视图 (11)4.3函数的调用关系 (12)4.4主程序流程图 (14)4.5主要算法的流程图 (15)第五章测试 (17)第六章总结 (21)附录:程序代码 (22)第一章需求分析以文件操作为基础,完成对数据信息的相关操作。

要求设计类(或类模板)来描述集合,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:文件的输入和输出查询文件中的元素、数据对文件中进行插入、删除元素实现文件元素的并、交、差运算并设计主函数测试该类。

设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书第二章总体设计系统功能包括:录入线路信息,显示所有路线信息,删除路线,站站查询(输入起始站和终点站,查询经过两站的路线)。

系统功能输入路线信息显示所有路线删除路线站站查询乱序输入则按正序录入乱序输入则按正序输出整线删除后重新录入并正序录入任意两站查询并显示提示第三章bus类的设计bus类的设计:class bus{函数成员:public:void save();//录入信息void showall();//显示所有公交路线void searchroute();//根据起始站和终点站查询路线void del();//删除站点void sort();//排序数据成员private:int route,station,price;string start;string end;string pass[30];}对bus类的说明:由于本系统设计初衷为的是管理公交系统,所以利用C++语言来编写系统时,来设计一个bus类来管理公交线路信息,bus类中包含5个成员函数,他们分别或共同来实现主程序中的4个功能:1.void save()和void sort()共同完成信息的录入功能。

2.void showall()来完成信息的屏幕输出功能。

3.void searchroute()来完成站点的无序查询功能。

第四章详细设计4.1工程视图4.2类图视图4.3函数的调用关系main() 主程序显示菜单menu()输入信息Save()清屏根据起始站和终点站查询路线voidsearchroute()显示所有公交路线voidshowall()删除站点voiddel()排序voidsort()排序voidsort()4.4主程序流程图算法:主程序主要用运了switch结构,使得主程序更加方便的调用成员函数,各个成员函数间的关系也清晰明了。

是否开始输入与功能相对应的序号执行功能结束是否存在4.5主要算法的流程图算法:此函数用运了ofstream 文件 操作,将文件写入到磁盘中的c1.txt中。

开始 信息输入保存成功是 结束录入返回主界面否是否继续录入开始算法:此函数用运ifstream 函数读取文本文件的内容,然后将其显示到屏幕上。

算法:此函数先通过 ifstream 函数读取c1.txt 中的内容,然后修改之在通过 ofstream 函数将修改过的数据存入c1.txt 中。

否是 输入删除 输入要删除的线路开始 是否正确输入函数结束显示保存的线路信息结束 返回主界面 开始算法:此函数先读取c1.txt 中内容,然后通过for 循环找出符合条件的线路,最后将线路输出到屏幕。

第五章 测试是 否输入数据开始是否正确 执行并显示结果 结束1.主界面:2.输入路线信息:在主界面输入1,进入“输入路线信息”功能,按提示依次输入“线路”、“全程站点”、“起始站”、“终点站”、“票价”、“途经站点”,中间用空格隔开,回车,则结束输入。

保存成功后提示是否再次输入,Y则继续输入,N则结束到主界面。

3.显示所有路线信息:在主界面时,输入2,显示所有路线信息。

4.删除路线:在主界面时,输入3,进入删除界面,输入要删除的线路的序号,回车结束。

并提示是否输入新线路,Y则继续输入,N则结束到主界面。

5.站站查询:在主界面,输入4,进入查询界面。

然后按照提示输入要查询的两个站点,回车结束,结果如下:第六章总结这次课程设计花费了将近30天时间,在这期间我第一次体验到编程的困难,但在程序顺利运行出结果时也体验到了很大的成就感,这种成就感让我兴奋不已。

这次经历给我感触最深的地方就是,注重细节。

在刚阅读完课程设计任务书的时候,我只粗略想了一下总体设计,感觉可以轻松完成任务。

但在接下来的几十天中,我才感受到什么叫做细节决定成败。

就在写第一个函数时,我就遇到了不小的麻烦。

看似不长的几十行代码,写起来却十分费力。

中间不容有一点儿大意,一点小小的错误会浪费很多的时间去寻找与改错。

而调试更是花了两周的时间,期间不断地发现错误,不断地改正错误,在这样的过程中收获也是很多的。

虽然写代码过程中遇到数不尽的难题,但在同学的启发与老师的帮助下。

我终于克服重重困难完成了设计,这是我自己努力付出的结果,也有同学和老师的热心帮助的回报,没有他们的帮助,我没有信心能够写出完整的程序。

这是一次难得的历练,它让我认识到编程不尽需要丰富的只是和经验,更需要认真仔细的态度去面对。

附录:程序代码#include<iostream>#include<fstream>#include<string>#include<iomanip>#include<ctime>void menu();using namespace std;class bus{public:void save();//录入信息void showall();//显示所有公交路线void searchroute();//根据起始站和终点站查询路线void del();//删除站点void sort();//排序private:int route,station,price;string start;string end;string pass[30];};//-------------录入路线信息---------------void bus::save(){string pass[30],busstart,busend;int busroute,busstation,busprice,i;char x;ofstream outfile("c1.txt",ios::app); //----打开文件---- if(!outfile){cerr<<" open error"<<endl;exit(1);}//==========按照提示录入路线信息==========do{cout<<"============================================= ==============="<<endl;cout<<"线路"<<"全程站点"<<"起始站"<<"终点站"<<"票价"<<"途经站点"<<endl;cin>>busroute;route=busroute;if(route==0){ break;}outfile<<left<<setw(10)<<route;cin>>busstation;station=busstation;outfile<<left<<setw(10)<<station;cin>>busstart;start=busstart;outfile<<left<<setw(10)<<start;cin>>busend;end=busend;outfile<<left<<setw(10)<<end;cin>>busprice;price=busprice;outfile<<left<<setw(10)<<price;for(i=0;i<30,i<station;i++){cin>>pass[i];outfile<<left<<setw(10)<<pass[i];}outfile<<"\r\n";cout<<"路线信息已成功保存!"<<endl;cout<<"是否继续录入路线信息:"<<endl;cout<<"y.是n.否"<<endl;cin>>x;}while(x=='y'||x=='Y');outfile.close();//=========关闭文件========== sort();}//---------------对站点信息进行排序--------------struct fbr{string buspass[30],busstart,busend;int busstation,busprice;};void bus::sort(){struct fbr fbr2[100];int busroute[100],i,j;ifstream infile("c1.txt",ios::in);if(!infile){cerr<<" Open error"<<endl;exit(1);}i=0;j=0;while(infile>>busroute[i]>>fbr2[i].busstation>>fbr2[i].busstart>>fbr2[i].busen d>>fbr2[i].busprice){for(j=0;j<30;j++){infile>>fbr2[i].buspass[j];if(fbr2[i].buspass[j]==fbr2[i].busend)break;}i++;}for(int m=0;m<i-1;m++){int br=m,br2;struct fbr fbr3;for(int n=m+1;n<i;n++){if(busroute[m]>busroute[n]){br=n;}}if(m!=br){br2=busroute[m];busroute[m]=busroute[br];busroute[br]=br2;fbr3=fbr2[m];fbr2[m]=fbr2[br];fbr2[br]=fbr3;}}infile.close();ofstream outfile("c1.txt",ios::out);if(!outfile)cerr<<" Open error"<<endl;exit(1);}for(int ii=0;ii<i;ii++){route=busroute[ii];outfile<<left<<setw(10)<<route;station=fbr2[ii].busstation;outfile<<left<<setw(10)<<station;start=fbr2[ii].busstart;outfile<<left<<setw(10)<<start;end=fbr2[ii].busend;outfile<<left<<setw(10)<<end;price=fbr2[ii].busprice;outfile<<left<<setw(10)<<price;for(int kl=0;kl<30,kl<station;kl++){pass[kl]=fbr2[ii].buspass[kl];outfile<<left<<setw(10)<<pass[kl];}outfile<<"\r\n";cout<<"完成!!"<<endl;outfile.close();}//------------------显示所有路线-----------------void bus::showall(){string buspass,busstart,busend,str;ifstream infile("c1.txt",ios::in);if(!infile){cerr<<" 0pen error"<<endl;exit(1);}cout<<"路线全程站点起始站终点站票价途经站点"<<endl;while(getline(infile,str)){cout<<"============================================= ==================================="<<endl;cout<<str<<endl;cout<<"================================================================================"<<endl;}infile.close();}//--------------站站查询-------------------void bus::searchroute(){system("cls");bool flag=true;string pass[30],start,end,ch1,ch2,a,b,str;int station,price;ifstream infile("c1.txt",ios::in);if(!infile){cerr<<" open error"<<endl;//fopenexit(1);}cout<<" =========="<<endl;cout<<" = 起始站="<<endl;cout<<" =========="<<endl;cin>>ch1;cout<<" =========="<<endl;cout<<" = 终点站="<<endl;cout<<" =========="<<endl;cin>>ch2;while(infile>>route>>station>>start>>end>>price){for(int i=0;i<30;i++){infile>>pass[i];if(pass[i]==ch1)a=pass[i];if(pass[i]==ch2)b=pass[i];if(pass[i]==end){if(a==ch1&&b==ch2){cout<<endl<<"---------------------------------------------------------------"<<e ndl;cout<<"路线全程站点起始站终点站票价途经站点"<<endl;cout<<endl<<"---------------------------------------------------------------"<<e ndl;cout<<route<<" "<<station<<" "<<start<<" "<<end<<" "<<price<<" ";for(int j=0;j<=i;j++){cout<<pass[j];if(j!=i)cout<<"-";flag=false;}cout<<endl<<" *************"<<endl;cout<<" 请乘坐"<<route<<"路车!"<<endl;cout<<" *************"<<endl;}break;}}a='0';b='0';getline(infile,str);}if(flag)cout<<"系统未收录此站点"<<endl;infile.close();}void bus::del(){string str[100];int k,i=1,a=1;char l;string start[100],end[100],pass[100];ifstream infile("c1.txt",ios::in);if(!infile){cerr<<" open error"<<endl;exit(1);}while(getline(infile,str[a])){cout<<"序号:"<<a<<endl;cout<<str[a]<<endl;a++;}cout<<"请输入需要的删除的路线序号:"<<endl;cin>>k;infile.close();ofstream outfile("c1.txt",ios::out);if(!outfile){cerr<<" open error"<<endl;exit(1); //退出程序}for(i=1;i<a;i++){if(k!=i)outfile<<str[i]<<"\r\n";}outfile.close();cout<<"已删除成功!"<<endl;cout<<"请问是否录入新的路线信息?"<<endl; cout<<" Y.是N.否"<<endl; cin>>l;if(l=='Y'||l=='y'){save();}}//主函数void main(){bus a;void menu();char ch;menu();cin>>ch;while(ch!='0'){system("cls");switch(ch){case '1':a.save();break;case '2':a.showall();break;case '3':a.del();break;case '4':a.searchroute();break;case '5':exit(0);break;default:cout<<"没有此选项!"<<endl;break;}menu();cin>>ch;}}void menu(){long t;time(&t);cout<<endl;cout<<" 当前时间:";cout<<ctime(&t)<<endl;cout<<" "<<endl;cout<<" >>>>>>> 公交线路管理系统<<<<<<<"<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" >> <<"<<endl;cout<<" >> 1.输入路线信息<<"<<endl;cout<<" >> 2.显示所有路线<<"<<endl;cout<<" >> 3.删除线路<<"<<endl;cout<<" >> 4.站站查询<<"<<endl;cout<<" >> 5.退出程序<<"<<endl;cout<<" >> <<"<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" 欢迎使用本系统!!"<<endl;}感谢下载!欢迎您的下载,资料仅供参考。

相关主题