《数据结构课设》弗洛伊德算法设计校园导游系统
大二上学期的数据结构课设分享一下,具体题目如下:
题目27:“校园导游系统”的设计与实现
1.问题描述
设计一个校园导游系统,为来访的客人提供信息查询服务。
2.基本要求
(1)从学校园中选取10个景点
(2)分别对这10个景点特征进行说明
(3)以这10个景点作为10个顶点建立无向图
(4)对各个路径长度进行赋值
(5)根据建立的无向图创建一个领边矩阵
(6)利用弗洛伊德算法实现两个景点间最短路径的求解
3.测试数据
由读者根据实际情况指定。
【实现提示】
一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。
目录
- 一.课程设计目的
- 二.课程设计内容和要求
- 三.任务完成情况
- 四.设计报告
- 4.1需求分析
- 4.1.1用户需求
- 4.2概要设计
- 4.2.1总体设计
- 4.2.2各功能函数的设计
- 4.3详细设计
- 4.3.1 程序流程图
- 4.4详细代码
- 4.4.1结构体定义
- 4.4.2 主函数
- 4.4.3移动光标函数
- 4.4.4初始化函数
- 4.4.5显示菜单函数
- 4.4.6显示地图函数
- 4.4.7显示景点信息函数
- 4.4.8弗洛伊德算法求最短路径函数
- 4.4.9导航位置信息函数
- 4.5使用说明
- 4.6测试结果与分析
- 4.7参考文献
- 5.体会与感想
- 附录
一.课程设计目的
1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的使用系统。
2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握使用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的使用。
3.学会将知识使用于实际的方法,提高分析和解决问题的能力,增加综合能力。(1)熟练掌握弗洛伊德算法;(2)熟练掌握邻接矩阵的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。
二.课程设计内容和要求
题目27:“校园导游系统”的设计与实现
- 问题描述 设计一个校园导游系统,为来访的客人提供信息查询服务。
- 基本要求
(1)从学校园中选取10个景点
(2)分别对这10个景点特征进行说明
(3)以这10个景点作为10个顶点建立无向图
(4)对各个路径长度进行赋值
(5)根据建立的无向图创建一个领边矩阵
(6)利用弗洛伊德算法实现两个景点间最短路径的求解
3.测试数据 由读者根据实际情况指定。 【实现提示】 一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。
三.任务完成情况
1.选取校园的十个标志性的地点作为本次介绍的对象,通过读取文本文件来提取出景点名称和两两之间的距离。
2.介绍景点的特征。
3.创建邻接矩阵实现两点之间距离的记录。
4.通过弗洛伊德算法求最短路径。
四.设计报告
4.1需求分析
4.1.1用户需求
(1)界面简介,排列清晰,可以一目了然的看懂每一项功能。
(2)运行速度快,没有卡顿,使用方便。
(3)功能齐全,具备查询每一种景点的信息的功能,可以计算出任意两个景点的最短路径
4.2概要设计
4.2.1总体设计
10个景点对应的关系如图4.1:
4.2.2各功能函数的设计
(1) 欢迎界面,显示菜单
(2) 退出功能。
(3) 显示地图。
(4) 景点信息查询。
(5) 导航。
4.3详细设计
4.3.1 程序流程图
4.4详细代码
4.4.1结构体定义
该系统包含的库函数具体有:
#include <iostream>
#include <fstream>
#include <windows.h>
该系统创建的结构体有:
struct Graphd
{string vexs[MVNum]; /*顶点表*/int a[MVNum][MVNum]; /*邻接矩阵*/int vexnum; /*顶点数*/int arcnum; /*边数*/
} G;
4.4.2 主函数
int main()
{system("title 校园导游程序设计"); /*设置标题*/init();menu();char c;while((c=getchar())!='0'){system("cls");switch(c-'0'){case 1:map();break;case 2:information();break;case 3:daohang();break;}getchar();menu();}return 0;
}
4.4.3移动光标函数
void gotoxy(int y, int x)/*将光标移动到坐标为(x,y)的地方*/
{CONSOLE_SCREEN_BUFFER_INFO csbiInfo;HANDLE hConsoleOut;hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);csbiInfo.dwCursorPosition.X = x;csbiInfo.dwCursorPosition.Y = y;SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}
4.4.4初始化函数
void init()//读取txt文件数据并存入结构体中
{FILE *fp;ifstream in("1.txt");for(int i = 0; i<10; i++)//把文件中的10个景点复制到对应的图中{in >> G.vexs[i];}G.vexnum = 10; /*顶点数*/G.arcnum = 22; /*边数*/fp = fopen("weight.txt", "r"); /*打开权值文件*/for (int i = 0; i < G.vexnum; i++)for (int j = 0; j < G.vexnum; j++){fscanf(fp, "%d", &G.a[i][j]); /*从文件读入权值*/if (!G.a[i][j]&&i!=j)G.a[i][j] = MaxInt; /*没边的设置为最大值*/}fclose(fp); /*关闭文件*/
}
4.4.5显示菜单函数
void menu()
{system("cls");gotoxy(10,40);cout<<"欢迎来到南昌航空大学科技学院!";gotoxy(11,40);cout<<"0.退出";gotoxy(12,40);cout<<"1.显示地图";gotoxy(13,40);cout<<"2.景点信息查询";gotoxy(14,40);cout<<"3.导航"<<endl;gotoxy(20,1);
}
4.4.6显示地图函数
void map()
{int y=3,x=20;for(int i=0; i<80; ++i){gotoxy(y,x+i);if(i==40){cout<<"北门";gotoxy(y+40,x+i);cout<<"南门";i+=2;continue;}cout<<"*";gotoxy(y+40,x+i);cout<<"*";}for(int i=0; i<40; ++i){gotoxy(y+i,x);if(i==20){cout<<"西";++i;gotoxy(y+i,x);cout<<"门";gotoxy(y+i-1,x+80);cout<<"东";gotoxy(y+i,x+80);cout<<"门";continue;}cout<<"*";gotoxy(y+i,x+80);cout<<"*";}for(int i=30; i<40; ++i){gotoxy(y+2,x+i);cout<<"*";gotoxy(y+10,x+i);cout<<"*";gotoxy(y+20,x+i);cout<<"*";gotoxy(y+30,x+i);cout<<"*";}for(int i=2; i<10; ++i){gotoxy(y+i,x+30);cout<<"*";gotoxy(y+i,x+40);cout<<"*";if(i<5){gotoxy(y+i,x+50);cout<<"*";}else{gotoxy(y+i,x+60);cout<<"*";}}for(int i=20; i<30; ++i){gotoxy(y+i,x+30);cout<<"*";gotoxy(y+i,x+40);cout<<"*";if(i<25){gotoxy(y+i,x+50);cout<<"*";}else{gotoxy(y+i,x+60);cout<<"*";}}gotoxy(0,0);system("pause");
}
4.4.7显示景点信息函数
void information()
{int t;while(1){system("cls");gotoxy(10,40);cout<<"请选择查询的地点";gotoxy(11,40);cout<<"1.教学主楼";gotoxy(12,40);cout<<"2.综合实验楼";gotoxy(13,40);cout<<"3.实训楼";gotoxy(14,40);cout<<"4.体育馆";gotoxy(15,40);cout<<"5.1-14栋学生宿舍";gotoxy(16,40);cout<<"6.图书馆";gotoxy(17,40);cout<<"7.礼堂";gotoxy(18,40);cout<<"8.食堂";gotoxy(19,40);cout<<"9.15-17栋学生宿舍";gotoxy(20,40);cout<<"10.第二教学楼";gotoxy(21,40);cout<<"0.退出";gotoxy(30,1);cin>>t;system("cls");gotoxy(10,40);switch(t){case 0:return;case 1:cout<<"学生日常上课的教学楼"<<endl;break;case 2:cout<<"硬件和实验为主的实验楼"<<endl;break;case 3:cout<<"中航未来训练基地,体育室,科技创新小组"<<endl;break;case 4:cout<<"一楼有篮球舞蹈乒乓球羽毛球室,二楼有钢琴和各种琴类"<<endl;break;case 5:cout<<"大一到大四的不同专业的宿舍楼集合"<<endl;break;case 6:cout<<"图书室阅读室和自习室"<<endl;break;case 7:cout<<"举行大型讲座会议的会场"<<endl;break;case 8:cout<<"学生和老师用餐的地点"<<endl;break;case 9:cout<<"经管等专业的宿舍"<<endl;break;case 10:cout<<"辅导员办公室和辅助教学楼"<<endl;break;}system("pause");}
}
4.4.8弗洛伊德算法求最短路径函数
void floyd()
{int i, j, k;for (i = 0; i < G.vexnum; i++)for (j = 0; j < G.vexnum; j++){D[i][j] = G.a[i][j];if (D[i][j] > 0)//出发地到目的地的距离大于0说明可以走Path[i][j] = i;elsePath[i][j] = -1;}for (k = 0; k < G.vexnum; k++)for (i = 0; i < G.vexnum; i++)for (j = 0; j < G.vexnum; j++){if (D[i][j]>D[i][k] + D[k][j])//如果两地之间的路途大于间接的路途则换成间接的路途{D[i][j] = D[i][k] + D[k][j];Path[i][j] = Path[k][j];}}
}
4.4.9导航位置信息函数
void daohang()
{int x,y;cout<<"请输入需要查询的地点:"<<endl;cin>>x;cout<<"请输入下一个地点:"<<endl;cin>>y;floyd();gotoxy(10,40);cout<<G.vexs[--x]<<"到"<<G.vexs[--y]<<"的路程为"<<D[x][y]<<"米"<<endl;system("pause");
}
4.5使用说明
程序比较简单易懂,对不懂变成的用户比较友好,只需根据自己想要选择的功能进行选择就行。
4.6测试结果与分析
主界面如图4-3
地图如图4-4
导航信息如图4-6
4.7参考文献
[1] 严蔚敏、吴伟民,数据结构:C语言版.清华大学出版社,1997.4
[2] 程杰,大话数据结构.清华大学出版社,2011.6
[3] 谭浩强,C语言程序设计.清华大学出版社,2010.6
5.体会与感想
学习的意义在于自己探索,自己总结经验,设计途中会遇到许许多多的问题,通过不断的调试排查错误,才能进步,相信自己的能力还有对专业的执着与热爱,经过不断的学习成长,终将变成对这个社会有用的人。
附录
1.txt (存入选取的十个景点)
教学主楼
综合实验楼
实训楼
体育馆
1-14栋学生宿舍
图书馆
礼堂
食堂
15-17栋学生宿舍
第二教学楼
weight.txt (存入邻接矩阵)
0 80 95 0 0 100 0 120 0 90
80 0 50 0 0 0 0 0 0 0
95 50 0 60 0 0 0 0 0 0
0 0 60 0 90 80 85 100 0 0
0 0 0 90 0 175 170 130 0 0
100 0 0 80 175 0 30 60 0 70
0 0 0 85 170 30 0 55 0 75
120 0 0 100 130 60 55 0 30 50
0 0 0 0 0 0 0 30 0 55
90 0 0 0 0 70 75 50 55 0
源代码
#include <iostream>
#include <fstream>
#include <windows.h>
#define MVNum 10 //顶点数
#define MaxInt 32767 //最大值
using namespace std;struct Graphd
{string vexs[MVNum]; /*顶点表*/int a[MVNum][MVNum]; /*邻接矩阵*/int vexnum; /*顶点数*/int arcnum; /*边数*/
} G;
void gotoxy(int x,int y);
int Path[MVNum][MVNum];
int D[MVNum][MVNum];
void init();
void menu();
void map();
void information();
void floyd();
void daohang();int main()
{system("title 校园导游程序设计"); /*设置标题*/init();menu();char c;while((c=getchar())!='0'){system("cls");switch(c-'0'){case 1:map();break;case 2:information();break;case 3:daohang();break;}getchar();menu();}return 0;
}void gotoxy(int y, int x)/*将光标移动到坐标为(x,y)的地方*/
{CONSOLE_SCREEN_BUFFER_INFO csbiInfo;HANDLE hConsoleOut;hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);csbiInfo.dwCursorPosition.X = x;csbiInfo.dwCursorPosition.Y = y;SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}void init()//读取txt文件数据并存入结构体中
{FILE *fp;ifstream in("1.txt");for(int i = 0; i<10; i++)//把文件中的10个景点复制到对应的图中{in >> G.vexs[i];}G.vexnum = 10; /*顶点数*/G.arcnum = 22; /*边数*/fp = fopen("weight.txt", "r"); /*打开权值文件*/for (int i = 0; i < G.vexnum; i++)for (int j = 0; j < G.vexnum; j++){fscanf(fp, "%d", &G.a[i][j]); /*从文件读入权值*/if (!G.a[i][j]&&i!=j)G.a[i][j] = MaxInt; /*没边的设置为最大值*/}fclose(fp); /*关闭文件*/
}void menu()
{system("cls");gotoxy(10,40);cout<<"欢迎来到南昌航空大学科技学院!";gotoxy(11,40);cout<<"0.退出";gotoxy(12,40);cout<<"1.显示地图";gotoxy(13,40);cout<<"2.景点信息查询";gotoxy(14,40);cout<<"3.导航"<<endl;gotoxy(20,1);
}void map()
{int y=3,x=20;for(int i=0; i<80; ++i){gotoxy(y,x+i);if(i==40){cout<<"北门";gotoxy(y+40,x+i);cout<<"南门";i+=2;continue;}cout<<"*";gotoxy(y+40,x+i);cout<<"*";}for(int i=0; i<40; ++i){gotoxy(y+i,x);if(i==20){cout<<"西";++i;gotoxy(y+i,x);cout<<"门";gotoxy(y+i-1,x+80);cout<<"东";gotoxy(y+i,x+80);cout<<"门";continue;}cout<<"*";gotoxy(y+i,x+80);cout<<"*";}for(int i=30; i<40; ++i){gotoxy(y+2,x+i);cout<<"*";gotoxy(y+10,x+i);cout<<"*";gotoxy(y+20,x+i);cout<<"*";gotoxy(y+30,x+i);cout<<"*";}for(int i=2; i<10; ++i){gotoxy(y+i,x+30);cout<<"*";gotoxy(y+i,x+40);cout<<"*";if(i<5){gotoxy(y+i,x+50);cout<<"*";}else{gotoxy(y+i,x+60);cout<<"*";}}for(int i=20; i<30; ++i){gotoxy(y+i,x+30);cout<<"*";gotoxy(y+i,x+40);cout<<"*";if(i<25){gotoxy(y+i,x+50);cout<<"*";}else{gotoxy(y+i,x+60);cout<<"*";}}gotoxy(0,0);system("pause");
}void information()
{int t;while(1){system("cls");gotoxy(10,40);cout<<"请选择查询的地点";gotoxy(11,40);cout<<"1.教学主楼";gotoxy(12,40);cout<<"2.综合实验楼";gotoxy(13,40);cout<<"3.实训楼";gotoxy(14,40);cout<<"4.体育馆";gotoxy(15,40);cout<<"5.1-14栋学生宿舍";gotoxy(16,40);cout<<"6.图书馆";gotoxy(17,40);cout<<"7.礼堂";gotoxy(18,40);cout<<"8.食堂";gotoxy(19,40);cout<<"9.15-17栋学生宿舍";gotoxy(20,40);cout<<"10.第二教学楼";gotoxy(21,40);cout<<"0.退出";gotoxy(30,1);cin>>t;system("cls");gotoxy(10,40);switch(t){case 0:return;case 1:cout<<"学生日常上课的教学楼"<<endl;break;case 2:cout<<"硬件和实验为主的实验楼"<<endl;break;case 3:cout<<"中航未来训练基地,体育室,科技创新小组"<<endl;break;case 4:cout<<"一楼有篮球舞蹈乒乓球羽毛球室,二楼有钢琴和各种琴类"<<endl;break;case 5:cout<<"大一到大四的不同专业的宿舍楼集合"<<endl;break;case 6:cout<<"图书室阅读室和自习室"<<endl;break;case 7:cout<<"举行大型讲座会议的会场"<<endl;break;case 8:cout<<"学生和老师用餐的地点"<<endl;break;case 9:cout<<"经管等专业的宿舍"<<endl;break;case 10:cout<<"辅导员办公室和辅助教学楼"<<endl;break;}system("pause");}
}void floyd()
{int i, j, k;for (i = 0; i < G.vexnum; i++)for (j = 0; j < G.vexnum; j++){D[i][j] = G.a[i][j];if (D[i][j] > 0)//出发地到目的地的距离大于0说明可以走Path[i][j] = i;elsePath[i][j] = -1;}for (k = 0; k < G.vexnum; k++)for (i = 0; i < G.vexnum; i++)for (j = 0; j < G.vexnum; j++){if (D[i][j]>D[i][k] + D[k][j])//如果两地之间的路途大于间接的路途则换成间接的路途{D[i][j] = D[i][k] + D[k][j];Path[i][j] = Path[k][j];}}
}void daohang()
{int x,y;cout<<"请输入需要查询的地点:"<<endl;cin>>x;cout<<"请输入下一个地点:"<<endl;cin>>y;floyd();gotoxy(10,40);cout<<G.vexs[--x]<<"到"<<G.vexs[--y]<<"的路程为"<<D[x][y]<<"米"<<endl;system("pause");
}
《数据结构课设》弗洛伊德算法设计校园导游系统相关推荐
- 数据结构课程设计 校园导游系统 c++
元旦前后利用几天时间完成了数据结构课程设计,学期初计划搞一个*精美* 些的课程设计,最后还是一拖再拖,到最后只来得及实现些基本功能. 团队协作完成,所以代码风格不尽相同. 另外才疏学浅,若有错误恳请不 ...
- C语言数据结构课程设计-校园导游系统
倾心原创,转载请备注原文地址,谢谢. 主要内容: 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号.名称.简介等信息,图中的边表示景点间的道路,存放路径长度等信息.要求能够 ...
- 【数据结构课设HITSZ】-校园地图导航(完整程序)-DFS、弗洛伊德算法、快速排序
问题描述 设计一个校园导游系统,为来校参观的人们提供建筑和道路信息查询服务. To Solve the Problem 一.校园导游地图简图 1.1 学校景点目录 地图设计参照如上的校园地图,各个建筑 ...
- 数据结构课设+校园导航系统+西安邮电大学
数据结构课设+校园导航系统+西安邮电大学 设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息:对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园 ...
- java校院导游程序课程设计_数据结构课程设计之校园导游系统
数据结构课程设计之校园导游系统 放假到现在终于安下心来要搞点学习了,现在对放假前一周的数据结构课设做一个总结,快放假的时候搞数据结构课设,当时满脑子都是期末考试忙着复习,根本没啥心思去做.所以课设一共 ...
- 校园导游系统数据结构课程设计(附完整代码)
1 问题内容与目的要求 1.1 算法产生的背景: Floyd 算法又称为加点法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获 ...
- 数据结构课设_网页形式的景区导游
一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...
- 校园导游系统_C语言实现_Dijkstra(迪杰斯特拉算法)_数据结构
西京学院导游系统 摘要 要完成对整个导游图系统的功能实现,需要对每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现和需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确 ...
- c语言数据结构校园导游系统,校园导游系统课程设计报告
校园导游系统课程设计报告 目录 1.需求分析1 2.总体设计1 2.1 抽象数据类型图的定义1 2.2 程序中包含的模块1 2.3模块间的调用关系3 3.详细设计3 3.1 代码设计3 3.1.1 定 ...
最新文章
- librosa.stft() 短时傅里叶变换
- Glide核心设计一:皮皮虾,我们走
- java文件出现字符串_找出三个文本文件中都出现的字符串,并输出到一个文本文件(菜鸟求救)...
- NFS Volume Provider(Part II) - 每天5分钟玩转 OpenStack(63)
- 一、从Windows消息机制说起
- 同时多个axios请求_用 React+Antd 封装 Axios 实现全局 Loading 效果
- 关于make_work_guard猜想
- java 实例域_Java实例域初始化方法及顺序
- Linux Bash Shell字符串截取
- C++的占位符std::placeholder
- 奇安信荣获中国电子2021年度科技进步奖一、二等奖
- MySQL 字段类型解析
- BP神经网络的预测模型
- 破解Prezi桌面版30天限制的方法
- iCode:开源的在线 html/css/js 编辑器
- Kindle倒下,iReader接力
- 统信UOS应用商店十月活动
- 转行测试,11k入职,我写了份1000多字的分享,每一笔都是经历
- Python网络爬虫精要
- 安装win10系统时,创建用户页面卡死