栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构课程设计——学校导游系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构课程设计——学校导游系统

文章目录
  • 目录:
  • 一.内容与相关要求
    • 二.问题分析和任务定义
    • 三.数据结构的选择和概要设计
    • 四.详细设计和编码
    • 五.测试结果及其分析
    • 六.用户使用说明
    • 七.参考文献
    • 附录

目录:

一.内容与相关要求;
二.问题分析和任务定义;
三.数据结构的选择和概要设计;
3.1 数据结构的选择
3.2 概要设计
3.2.1 总体设计
3.2.2 功能函数的设计
四.详细设计和编码;
4.1 程序流程图
4.2 详细代码
4.2.1 结构体定义
4.2.2 主函数
4.2.3 InitGraph()函数
4.2.4
4.2.5
4.2.6
4.2.7
4.2.8
4.2.9
4.3 完整代码
五.测试结果及其分析;
六.用户使用说明;
七.参考文献;
附录;

一.内容与相关要求

1.内容:设计一个校园导游程序,为来访的客人提供各种信息查询服务。
2.相关要求:
(1) 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。
(2) 为来访客人提供图中任意景点相关信息的查询。
(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

二.问题分析和任务定义

这个问题实际上是对数据结构中的图的实际应用,由于实际校园中的路都是双向的,故此处为无向图,校园中的景点等效于图中的节点,图中的边表示景点之间的路径,查询任意两个景点之间的一条最短的简单路径,实际为寻找无向图中两个节点之间的最短路径,我们可以使用Dijkstra算法和Floyd-Warshall算法。(这里我选择Floyd方法)。其他重要的函数及其功能会在第四点中详细介绍,这里只讲思想。

三.数据结构的选择和概要设计

3.1 数据结构的选择
校园导游系统,选择数据结构里的图的结构来解决;
3.2 概要设计
3.2.1 总体设计
这里选择江苏科技大学长山校区的13个景点,他们的对应关系为:


1.行政楼 2.计算机学院楼 3.图书馆
4.文理大楼 5.东苑食堂 6.明德楼
7.西操场 8.文体中心 9.东操场
10.笃学楼 11.西苑食堂 12.48栋学生宿舍
13.校医院

3.2.2 功能函数的设计
(1) 欢迎界面,向用户显示菜单
(2)显示云图和简化图
(3) 景点信息查询
(4)输出学校景点的基本信息
(5)查询任意两景点间的最短路径
(6)山政校园平面图
(7)增加某个景点
(8)删除某个景点
(9)增加某条道路
(10)删除某条道路
(11)退出系统

四.详细设计和编码

4.1 程序流程图
4.2 详细代码
4.2.1 结构体定义
结点的结构体定义:

//结点的结构体--代表实际中的景点
typedef struct {
	int Num;//景点的编号
	char  name[19];		//景点的名称 
	char  info[66];    //景点的介绍 
}VextexType;

图的结构体定义:

typedef struct {
	int AdjMatrix[MAXVEX][MAXVEX]; //用二维数组来存放邻接矩阵 
	VextexType vex[MAXVEX];    //存放顶点信息
	int vexnum;		//顶点数 
	int arcnum;     //边数 
	bool visited[MAXVEX];   //访问标志数组,标志是否被访问过 
}MGraph;

4.2.2 InitGraph() 图的初始化函数:

void InitGraph() {
	int i = 0, j = 0;
	G.vexnum = 13;
	G.arcnum = 19;
	for (int i = 0; i < 13; i++) {
		G.visited[i] = 0;
		G.vex[i].Num = i + 1;//第1号景点到第13号景点
	}
	strcpy(G.vex[0].name,"行政楼");
	strcpy(G.vex[0].info, "老师办公,校领导开会的地方");
	strcpy(G.vex[1].name, "计算机学院楼");
	strcpy(G.vex[1].info, "有很多需要用到的计算机实验室");
	strcpy(G.vex[2].name, "图书馆");
	strcpy(G.vex[2].info, "学习的地方");
	strcpy(G.vex[3].name, "文理大楼");
	strcpy(G.vex[3].info, "江科大地标建筑");
	strcpy(G.vex[4].name, "东苑食堂");
	strcpy(G.vex[4].info, "菜肴很多,三楼有小龙虾");
	strcpy(G.vex[5].name, "明德楼");
	strcpy(G.vex[5].info, "很适合自习,靠经操场,学累了可以去放松一下");
	strcpy(G.vex[6].name, "西操场");
	strcpy(G.vex[6].info, "锻炼身体的好地方");
	strcpy(G.vex[7].name, "文体中心");
	strcpy(G.vex[7].info, "有羽毛球场,篮球场,乒乓球场等等,在这里可以尽情释放自己,挥洒汗水");
	strcpy(G.vex[8].name, "东操场");
	strcpy(G.vex[8].info, "适合傍晚散步,看夕阳,野营等等");
	strcpy(G.vex[9].name, "笃学楼");
	strcpy(G.vex[9].info, "楼如其名,笃学明德,经世致用");
	strcpy(G.vex[10].name, "西苑食堂");
	strcpy(G.vex[10].info, "三楼有少数民族餐厅,一楼二楼的饭菜都很好吃");
	strcpy(G.vex[11].name, "48栋学生宿舍");
	strcpy(G.vex[11].info, "学生晚上休息睡觉的地方");
	strcpy(G.vex[12].name, "校医院");
	strcpy(G.vex[12].info, "如果你感觉到身体不适,请来这里");
	//注意无向图是对称的
	for (int i = 0; i < 13; i++) {
		for (int j = 0; j < 13; j++) {
			G.AdjMatrix[i][j] = INFINITY;
			G.AdjMatrix[0][1] = G.AdjMatrix[1][0] = 10;
			G.AdjMatrix[0][6] = G.AdjMatrix[6][0] = 20;
			G.AdjMatrix[0][5] = G.AdjMatrix[5][0] = 14;
			G.AdjMatrix[1][2] = G.AdjMatrix[2][1] = 15;
			G.AdjMatrix[2][3] = G.AdjMatrix[3][2] = 16;
			G.AdjMatrix[3][4] = G.AdjMatrix[4][3] = 33;
			G.AdjMatrix[1][6] = G.AdjMatrix[6][1] = 23;
			G.AdjMatrix[4][6] = G.AdjMatrix[6][4] = 3;
		}
	}
}

4.2.3 MapDisplay() 显示地图函数
在此之前,我已经把需要用到的照片放到和代码相同的文件夹下,调用system函数,使用Windows自带的几何画板来打开图片

void MapDisplay() {
	system("mspaint Cloud_Picture.jpg");//使用Windows自带的画板打开校园云图
	system("mspaint Plane_Figure.png");//使用Windows自带的画板打开校园平面图
}

4.2.4 Menu() 向用户显示菜单函数

void Menu() {
	system("cls");//清屏
	cout << endl;
	cout << "|----------------------------欢迎来到江苏科技大学-------------------------------n";
	cout << "|---------------------------校园导游系统功能菜单图------------------------------n";
	cout << "|*******************************************************************************n";
	cout << "|      1.显示江苏科技大学云图                 2. 校园景点一览                   n";
	cout << "|      3.显示任意两个景点间的最短路径         4. 增加某个景点                   n";
	cout << "|      5.删除某个景点                         6.增加某条道路                    n";
	cout << "|      7.删除某条道路                         8.更新景点信息                    n";
	cout << "|      9.修改某条道路的长度值                 0.退出                            n";
	cout << "|*******************************************************************************n";
	cout << endl;
}

4.2.5 PrintAllInfo() 打印所有景点信息函数

void PrintAllInfo(MGraph G) {
	cout.setf(ios::left, ios::adjustfield);
	cout << setw(10) << "编号" << setw(15) << "名称" << "简介" << endl;
	for (int i = 0; i < G.vexnum; i++){
		cout << setw(10) << G.vex[i].Num << setw(15) << G.vex[i].name << G.vex[i].info << endl;
	}
}

4.2.6
4.2.7
4.2.8
4.2.9

五.测试结果及其分析 六.用户使用说明 七.参考文献 附录
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号