C++数据结构-大作业课程设计(共25页).doc
《C++数据结构-大作业课程设计(共25页).doc》由会员分享,可在线阅读,更多相关《C++数据结构-大作业课程设计(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上C+/数据结构 大作业/课程设计【校园导游咨询】【停车场管理】娃娃们可以收着以后用 绝对纯手工打造 内含类模块/一维指针数组(谨以此程序供大家参考。运行结果后面有贴图)目录【1】校园导游咨询 程序设计源代码 及 截图【2】停车场管理方案一 程序设计源代码 及 截图【3】停车场管理方案二 程序设计源代码 及 截图#【1】【校园导游咨询】#(ps:该校园导游咨询系统没有输入值,所有信息是都在class MGraph的构造函数中传输的,且校园景点信息皆为【上海电力学院】景点信息。请大家注意,直接从文章copy到visual stutio中会出现中文字符,注意删除,推荐大家在
2、一行语句的分号后面,点出光标,按一下delete键,然后按一下enter键,完成visual stutio的自动对齐,这样程序看起来一目了然,更易于操作和更改)【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。【基本要求】(1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一个最短的简单路径。【选作内容】(6)扩充每个景点的邻接景点的方向等信息,使得路径查询结果能
3、提供详尽的导向信息。*【以下为类的定义】*#include#includeusing namespace std;const int MaxSize=18;const int INFINITY=65535;/最大值无穷class direction;template class MGraph;template class VertexNode/定义头结点friend class MGraph; public:int vex;/顶点名称T vexname;/顶点名称T vexinf;/顶点信息direction dir;/存放顶点方位信息的direction类的dir。;class direct
4、ionpublic:int ln;/存放在方向图中的横坐标,表示东西int col;/存放在方向图中的纵坐标,表示南北;template class MGraph/定义无向图的邻接矩阵public:MGraph(); /构造函数,初始化具有n个顶点的图void printvexname();/显示所有景点及景点代号void printvexinf(int i);/显示代号为i景点的名称及信息void printroad(int i,int j);/显示景点ij的最短路径方案信息void printdir(int i,int j);/显示景点i到j的方向信息,如“向东100m,向南200m”Ve
5、rtexNode adjlistMaxSize; /存放景点全部信息的 景点类数组int vertexNum,arcNum; /图的顶点数和边数void Root(int p,int q);/递归寻找pq间的最短路径int PathMaxSizeMaxSize,DistMaxSizeMaxSize;/创建Path和Dist分别存放两点间最短路径的前驱节点,两点间最短路径长度int LineMaxSize;/Line存放路径int kkk;/Line数组的标记private:T vertexMaxSize; /存放图中顶点的数组int arcMaxSizeMaxSize;/存放图中边的数组;*【
6、以下为类的实现 即类函数的定义】*template MGraph:MGraph()/a为景点代号,b为景点名称,c为景点信息,d为景点方位信息的横坐标,e为景点方位信息的纵坐标/s为存放景点邻接矩阵信息的一维数组,根据其对称性可以用公式赋值给二维数组arcint s=0,1,0,0,2,0,0,0,2,0,0,0,2,3,0,0,0,0,4,2,0,0,0,0,0,2,3,0,0,0,0,0,2,3,1,0,0,0,2,0,2,0,0,2,0,4,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,
7、0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,2,0;int a=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17;char* b=南门,实验楼,南图,大活,睿思楼,大礼堂,南4教,知行楼,国交楼,南3教,南2教,南1教,北图,北3教,北4教,北2教,北1教,北门
8、;char* c=南校区正门,物理实验楼,南校区图书馆,大学生活动中心,教师办公楼、医务室及留学生公寓,大礼堂,用于举办各种文艺演出,南校区第4教学楼,实习基地,计算机房等,国际交流中心,教职工餐厅,南校区第3教学楼,南校区第2教学楼,南校区第1教学楼,北校区图书馆,北校区第3教学楼,北校区第4教学楼,北校区第2教学楼,北校区第1教学楼,北校区正门;int d=8,6,4,4,1,0,0,1,3,4,6,8,4,3,2,3,5,8;int e=8,8,8,10,8,10,7,6,6,6,6,6,3,1,0,0,0,2;int i,j;vertexNum=18;arcNum=30; for(i=
9、0;ivertexNum;i+)adjlisti.vex=ai;adjlisti.vexname=bi;adjlisti.vexinf=ci;adjlisti.dir.ln=di;adjlisti.dir.col=ei;for (i=0; ivertexNum; i+)/初始化邻接矩阵for (j=0; jvertexNum; j+)arcij=arcji=s(i*(i+1)/2+j; /根据s的对称性,将一维数组中的数据赋给二维数组arc templatevoid MGraph:printvexname()int i;for(i=0;ivertexNum;i+)coutadjlisti.ve
10、x adjlisti.vexnameendl;templatevoid MGraph:printvexinf(int i)couti adjlisti.vexname:adjlisti.vexinfendl;templatevoid MGraph:printdir(int i,int j)int dx,nb;/临时存放i与j之间的南北东西关系 j在i的哪边?dx=adjlistj.dir.col-adjlisti.dir.col;nb=adjlistj.dir.ln-adjlisti.dir.ln;if(dx0)/即j在i的东边cout向东dx*100m,;elsecout向西dx*(0-10
11、0)0)/即j在i的南边cout向南nb*100m;elsecout向北nb*(0-100)m;templatevoid MGraph:Root(int p,int q) if (Pathpq0) Root(p,Pathpq); Root(Pathpq,q); else Linekkk=q; kkk+; templatevoid MGraph:printroad(int i,int j)int p,q,m,k,item1,item2;for(p=0;pvertexNum;p+)for(q=0;qvertexNum;q+)Distpq=arcpq;/邻接矩阵赋值for(k=0;kvertexNu
12、m;k+) for(p=0;p0) for(q=0;q0) if (DistpqDistpk+Distkq)|(Distpq=0)&(p!=q) Distpq=Distpk+Distkq; Pathpq=k; coutn=n;cout从adjlisti.vexname到adjlistj.vexname的最短路径为:endl;coutadjlisti.vexname;kkk=2;Root(i,j);item2=Line2;cout;printdir(i,item2);coutadjlistitem2.vexname;for(m=3;m=kkk-1;m+)item1=Linem;cout;prin
13、tdir(item1-1,item1);coutadjlistitem1.vexname;coutendl;coutn=n;*【以下为主函数】*int funcchoice()/系统功能选择页面int choice;cout=endl;cout 欢迎进入校园导游咨询平台endl;cout 1-显示校园所有景点信息endl;cout 2-查询校园景点信息endl;cout 3-问路查询系统endl;cout 4-退出导游资讯平台endl;cout=endl;coutchoice;return choice;void main()MGraph mg;int funcchoice();int fc;
14、while(1)fc=funcchoice();if(fc=1)int i;for(i=0;img.vertexNum;i+)mg.printvexinf(i);else if(fc=2)int i;mg.printvexname();coutendli;mg.printvexinf(i);else if(fc=3)int i,j;mg.printvexname();coutij;mg.printroad(i,j);else if(fc=4)break;elsecout输入有误,请重新输入!endl;运行测试图#【2】【停车场管理系统【方案一 程序】#(ps:该程序有漏洞,若将要离开的车辆是停
15、于便道上的,则对该车进行驶离操作时程序内部有错误数据,虽然做了函数完成这一功能,但因时间有限,没能及时查找更正,现在懒得改了。大家将就看吧。不过运行是可以的)【问题描述】设停车场是一个可停放n辆汽车的 长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开
16、停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【基本要求】以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。【测试数据】设n=2,输入数据为:(A,1,5),(A,2,15),(A,3,20),(A,4,25),(A,
17、5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。*【以下为类的定义】*#includeusing namespace std;const int Max=2;/车库最大容量const double price=30;/每小时的费用/思想:(报告第四页)/我的系统界面,输入信息为:(到达/离开/退出);车牌号;时刻/因此,我的停车场类分成车辆到达和车辆离开两个主要的函数实现。/车辆到达,有入栈和入队。车辆离开有出栈,出队和入栈操作。/因此我又编写入栈的类,队的类。与parkingman
18、agement进行友元。/*类定义*class car/车的信息类public:double time;/计费时间int number;/车牌号car *next;/存放car类型元素的数组初始地址;class carstack/栈(停车场)的类friend class parkingmanagement;/parkingmanagement能访问carstack类中所有成员public:carstack();/构造函数,栈的初始化int empty();/判断栈是否为空int full();/判断栈是否为满car *s;/存放car类型栈元素的数组初始地址int top;/栈顶指针;clas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 数据结构 作业 课程设计 25
限制150内