数据结构课设报告_课设报告数据结构

其他范文 时间:2020-02-27 02:02:08 收藏本文下载本文
【www.daodoc.com - 其他范文】

数据结构课设报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“课设报告数据结构”。

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

课程设计报告

题目:华科校园导航

课程名称:数据结构课程设计 专业班级: 学

号:

名: 指导教师: 报告日期:

计算机科学与技术学院

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

任务书

数据结构是计算机科学技术与信息安全等专业的一门重要专业基础课,牢固掌握数据结构的基础知识,熟练地运用数据结构的思想与技术方法解决实际应用问题是是本课程学习的基本任务与目标。而课程设计是实现这一学习目标的重要环节和组成部分。通过课程设计的训练,使学生加深对数据结构知识的理解,牢固掌握其应用方法,并合理灵活地解决一定实际问题,增强和提高综合分析问题与解决问题的能力。

设计题目

华科地图导航系统。设计目的掌握图结构的物理存储结构、基本算法及其算法在相关领域中的应用。

设计内容

华中科技大学(Huazhong University of Science and Technology),简称华中大,坐落于湖北省武汉市,学校面积7000余亩。华科大校园具有典型的工科院校特征,道路笔直,建筑面积方方正正,这为构建电子地图提供了极大的便利。本次课程设计要求以华中科技大学为背景,设计一个简单的华科地图导航程序,可以方便的为用户提供搜索、导航等功能。

设计要求

基本要求:

1.输入地点名,可以在地图中以一定标记标示出地点所在的位置 2.鼠标移动到指定建筑处显示建筑名称

3.输入或点击起点和终点,找出最短的路径,并在图上描出路径,路径不能脱离道路

4.输入起点,输入特定的地点,如食堂,超市能够找到最近的两到三个 5.地点至少要包括清单中所列的位置 实验提示:

1.将每个十字路口或特定建筑看作节点,构建图模型,两个节点的边即是一个路段。对于某些节点,可能具有特定的意义,例如“图书馆”,可以为其设置一个名称;而对于大多数节点,例如普通路口,可能并不需要名称,只是用来构建图模型的一个节点。信息的录入可能需要人为输入,需要编写辅助程序。辅助程序可以如下构造:

程序首先载入一张图片并显示。程序具有多个文本框,当点击图片上

I 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

特定点时,获取该点的坐标,第一个文本框显示该点的图像坐标,第二个文本框可以输入地点名,第三个文本框用来输入节点编号,剩下的文本框用来输入直接相邻的节点编号或者节点的属性。点击“确认”后可以将信息保存到磁盘。这样可以实现坐标、节点编号和位置名称的绑定,为实验构图采集数据。

2.特定建筑只需考虑建筑大门所对应的路段上的一点。例如“图书馆”建 筑,可认为“图书馆”位于图书馆大门和学校道路相接处,简化处理。当鼠标移动到“图书馆”附近时,找到距离最近的具有名称的节点显示 即可。

3.对于存在折线的路段,将其看作多段处理;对于细碎的弯折路线,当作 直线简化处理。

参考文献

[1] 严蔚敏,吴伟民.数据结构(C语言版).北京: 清华大学出版社,1997 [2] 王晓东.计算机算法设计与分析.北京: 电子工业出版社, 2007 [3] 严蔚敏,吴伟民,米宁.数据结构题集(C语言版).北京: 清华大学出版社,1999 [4] Elliot B.Koffman and Paul A.T.Wolfgang..Objects, Abstraction, Data Structures and Design: Using C++.October 2005, ©2006

II华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

目录

任务书.............................................................................................................................I 1 系统需求分析与总体设计........................................................................................1 1.1系统需求分析.................................................................................................1 1.2系统总体设计.................................................................................................1 2 系统详细设计............................................................................................................2 2.1 有关数据结构的定义....................................................................................2 2.2 主要算法设计................................................................................................3 3 系统实现与测试........................................................................................................4 3.1 系统实现........................................................................................................4 3.2 系统测试........................................................................................................6 4 总结与展望..............................................................................................................13 4.1 全文总结......................................................................................................13 4.1 工作展望......................................................................................................13 5 体会..........................................................................................................................15 参考文献......................................................................................................................16 附录..............................................................................................................................17

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告系统需求分析与总体设计

1.1系统需求分析

华中科技大学(Huazhong University of Science and Technology),简称华中大,坐落于湖北省武汉市,学校面积7000余亩。华科大校园具有典型的工科院校特征,道路笔直,建筑面积方方正正,这为构建电子地图提供了极大的便利。本次课程设计以华中科技大学为背景,设计一个简单的华科校园地图导航程序,可以方便的为用户提供搜索、导航等功能。该系统的具体的功能为:

1.输入任意地点名,可以在地图中以一定标记显示出该地点所在的位置;

2.输入任意起点和终点,可以在地图上查询并显示从起点到终点的最佳路线以及最短距离;

3.输入任意地点名,可以在地图上查询并显示出距离该地点最近的食堂或者超市,并给出从该地点到达食堂或者超市的最佳路线和最短距离; 4.鼠标移动到地图上的某一地点是,显示该地点的名称和简介; 5.系统能为用户提供华科整体地图、系统使用说明、设计信息。拥有以上的功能的导航应用将给不熟悉华科的用户提供极大的便利,是人们所需要的。

1.2系统总体设计

系统的总体模块图如图1所示。用户进入系统后,在窗口主界面可以选择“地图导航”、“进入地图”、“使用帮助”“关于导航”、“退出导航”等功能。在“地图导航”功能中,用户可以查询某个地点或者某个地点附近最近的食堂和超市、到达该地点的最佳路径和距离等,在过了一定时间后,系统会提示用户选择返回“地图导航”界面还是进入“进入地图”功能,然后系统根据用户的选择进入相应的界面;在“进入地图”功能下,用户可以浏览整个华科地图并且查询某个地点的名称和简介;在“使用帮助”下,用户可以阅读该系统的使用说明;在“关于导航”下,用户可以了解该系统的设计信息;用户点击“退出导航”即可退出该系统。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 1系统详细设计

2.1 有关数据结构的定义

华科校园导游系统是用图结构来实现的。具体数据结构如下: 定义景点的结构类型 typedef struct { 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

Point point;char name[20];char num;}Vexs;

定义景点坐标的结构类型 typedef struct { int x;int y;}Point;

定义图的结构类型 struct MGraph {

};

声明无向图的邻接矩阵类型 MGraph G[100],G0,G1;

初始化所有景点信息,存放在图G1中 int CreateUDG1(MGraph &G1);Vexs vexs[MAX_VEX_NUM];

//顶点向量 int vexnum,arcnum;

//顶点数,边数

int arcs[MAX_VEX_NUM][MAX_VEX_NUM];//邻接矩阵

2.2 主要算法设计

Floyd算法:void Floyd(void);

通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。

从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);„„;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的最短路径。

采用松弛技术(松弛操作),对在i和j之间的所有其他点进行一次松弛。所以时间复杂度为O(n^3);其状态转移方程为map[i,j]:=min{map[i,k]+map[k,j],map[i,j]};map[i,j]表示i到j的最短距离,K是穷举i,j的断点,map[n,n]初值应该为0,或者按照题目意思来做。当然,如果这条路没有通的话,还必须特殊处理,比如没有map[i,k]这华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

条路。

通过弗洛伊德算法计算出两单间的最短路径之后,就可以通过距离计算公式计算出两点间的最短距离。

利用佛洛依德算法计算出每两点间的最短路径矩阵。里面有三重for循环,时间的复杂度为O(n^3)。系统实现与测试

3.1 系统实现

3.1.1 开发环境

本系统是在windows7下的Visual C++ 6.0编译器中进行设计,但是一般的编译器中没有包含编写界面的这个库,所以要网上下载、添加这个库函数。请在Project-> Properties里选择C/C++里选择Code Generation下选

Runtime Library

下选

Multi-threaded Debug(/MTd)Project->setting->C/C++->category(code generation)->using runtime library(debug multithread)。3.1.2 运行环境

Window7 64位旗舰版系统。3.1.3 主要函数及说明

1、void Floyd(void);

按照实际路况处理,利用佛洛依德算法,算出每两点间的最短路径矩阵。求华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

->的最短路径,如果->有弧,则存在一条长度为arcs[i][j]的路径,但是该路径不一定是最短路径,尚需要进行n次试探。若存在(Vi,Vo,Vj),则比较(Vi,Vj)和(Vi,Vo)+(Vo,Vj)的大小。取(Vi,Vo,Vj)和(Vi,Vj)的较短者,继续添加结点。依此类推,每次都找到短路径,最后得到的便是最短路径。把最短的路径存到全局变量path中。

2、void LoadData(void);

加载初期设定的信息包括所有图片。并且将设定好的坐标信息存储到图G0中。并且使用佛洛依德算法,将每对景点之间的最短路径距离算出并存储最短路径到全局变量path中。以方便后续程序的进行。

3、int CreateUDG1(MGraph &G1);加载所有景点信息,并存储到图G1中。(图G1不包括路口坐标信息)。里面有两个for循环,一个用来加载景点坐标,名称和代号。另一个for循环用来构建完全图G1,计算出每对景点的最短路径(理想情况下处理的)。返回值为1。

4、int weight(Point a,Point b);计算两个点之间的距离,利用公式,计算出的结果是double类型的,将结果强制类型转换为int类型,并将其值返回。

5、void Musicplay(int mark);

利用mciSendString函数,mark用来控制背景音乐的播放与停止。mark=1,循环播放音乐。界面打开时后台启动。当主界面上点击音乐暂停图标mark=2,音乐暂停.。当主界面上点击音乐播放图标mark=3,音乐恢复播放。.6、void Windows(void);加载事先做好的主界面背景图。在上面输出文字信息。用GetMouseMsg();函数获取鼠标信息,设置鼠标响应区,当鼠标移动到响应区时,文字实现颜色的改变。当单击鼠标左键时,会进入到相应的函数里面,进行下一步操作。

7、void Viewmain(void);输出景点坐标及名称。设置景点活动区域,获取鼠标信息,当鼠标移动到相应的景点活动区域,就会加载相应的景点图片。

8、void Help(void);

有简单的操作说明。操作说明是以图片的形式加载进去的。图片是事先用PS 5 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

准备好的。

9、void About(void);有简单的作者信息及实验感想。背景是以图片的形式加载进去的。图片是事先用PS准备好的。里面还有一个网页链接,点击后会用Systen函数,打开该网页链接。

10、void Quit(void);关闭图形区域,退出导航。详细设计代码见附录。

3.2 系统测试

根据设计要求测试相关的功能,测试结果用相应的截图表示。

1、运行程序,进入系统主窗口界面,结果如图2所示。

图 22、选择主界面的“地图导航功”能,进入功能选区,结果如图3所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 3 2.1、在“地图导航”功能界面选择“place”(地点查询)功能,查询地点A(南大门)。输入A,系统在地图上正确地显示地点A的位置。结果如图4,图5所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 4

图 5 2.2、在“地图导航”功能界面选择“route”(路线查询)功能,查询A(南大门)到B(南一楼)之间的最佳路线和距离。输入AB,系统在地图上正确地显示AB之前的最佳路线和距离。结果如图6,图7所示。

图 6 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 7

2.3、在“地图导航”功能界面选择“repast”(食堂查询)功能,查询B(南一楼)附近最近的食堂。输入B,系统在地图上正确地显示B附近最近的食堂,并且给出了最佳路线和距离。结果如图8,图9所示。

图 8 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 9 2.4、在“地图导航”功能界面选择“market”(超市查询)功能,查询A(南大门)附近最近的超市。输入A,系统在地图上正确地显示A附近最近的超市,并且给出了最佳路线和距离。结果如图10,图11所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 10

图 113、在系统主界面选择“进入地图”功能,将鼠标光标移动到地图的地点(机械大楼)上面,地图右下角显示该地点的具体信息。结果如图12所示。

图 12 11 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

4、在系统主界面选择进入“使用帮助”功能,系统显示该系统的使用说明。结果如图13所示。

图 135、在系统主界面选择进入“关于导航”功能,系统显示该系统的设计信息。结果如图14所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 146、在系统主界面选择“退出导航”功能,点击“确定”即退出系统。结果如所示。总结与展望

图 1

54.1 全文总结

对自己的工作做个总结,主要工作总结如下:

(1)分析设计题目、设计内容和设计要求,到图书馆和网上查阅相关资料,制定设计计划,为设计工作做准备。

(2)按照设计要求进行设计工作,设计合适的数据结构和算法,收集并处理相关的资料,编程实现。

(3)按照设计要求测试系统,调试程序BUG,优化、完善系统。(4)撰写课程设计报告。

4.1 工作展望

在今后的研究中,围绕着如下几个方面开展工作:

(1)此次设计使用了弗洛伊德算法,没有设计出更高效的算法。所以应该

设计更合适的数据结构和更高效的算法,优化代码,提高系统的效率。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

(2)设计的系统功能还是比较单一。所以应该完善和扩充系统功能,使系 统能为用户提供更多、更优质的服务。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告体会

在该接触到本次《数据结构》的课程设计时,心里是没有底的,一开始就为了确定题目思考了很久,但是看到地图就有了很多想法,回想起在课程的学习中对图进行了深入地学习并且学习了诸多寻路算法,于是就选择了这个题目,我觉得我可以根据自己所学习的图的知识和算法设计出“华科地图导航”。

“华科地图导航”涉及到大量的图形信息与绘图信息,于是我开始寻找合适的开发的工具与语言进行编程设计。最开始在网上查询相关信息了解到QT是写图形界面的好工具,但是进行上手学习后发现QT函数库众多,而我不能正确熟悉地使用,于是考虑了很久就放弃了。后来了解到了C语言的图形库easyx,于是上网查询了相关的资料,对easyx有了大致的了解,上手很容易,只需根据其图形函数与绘图函数进行编程设计,课设就正式进入了设计、编写、测试,然后顺利完成课设。

感谢帮助过我同学和老师,也感谢我自己。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

参考文献

[1] 严蔚敏,吴伟民.数据结构(C语言版).北京: 清华大学出版社,1997 [2] 严蔚敏,吴伟民,米宁.数据结构题集(C语言版).北京: 清华大学出版社,1999 [3] 曹计昌,卢萍,李开.C语言与程序设计.北京: 电子工业出版社,2013 [4] 王晓东.计算机算法设计与分析.北京: 电子工业出版社, 2007华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

附录

1.TourGuide.h

#include #include #include #include #include #include #include #pragma comment(lib,“Winmm.lib”)#include using namespace std;

#define MAX_VEX_NUM 100 //最大地点个数 #define N 22

//当前地点个数 #define All 60

//地点和路口总数

#define MAX_ROAD 10000 //相当于两地点间断开

int shortest[MAX_VEX_NUM][MAX_VEX_NUM];

//全局变量存贮最小路径 int path[MAX_VEX_NUM][MAX_VEX_NUM];

//存贮路径 int pos[][2]={

//地点坐标及路口坐标

//地点坐标

{208,430},{209,387},{50,404} ,{105,355}, {110,300},{170,300},{167,234},{230,150}, {310,235},{310,320},{390,320},{615,155},{430,320},{430,150},{417,320},{368,307},{406,320},{472,160},{5,185} ,{339,293},{65,452} ,{109,439}, //路口坐标

{369,317},{46,379} ,{110,387},{368,293}, {168,386},{262,384},{112,320},{170,320}, {262,320},{309,292},{309,282},{110,284}, {170,284},{230,250},{309,250},{170,250}, {230,220},{307,220},{370,150},{2,219} , {108,188},{33,337} ,{109,250},{109,218}, {309,150},{108,150},{167,218},{427,250}, {368,218},{368,250},{166,150},{166,188}, {230,188},{309,188},{368,188},{230,282}, {230,320},{168,350} };char Num[]={

//地点编号

'A','B','C','D', 'E','F','G','H', 'I','J','K','L','M','N','O','P','Q','R','S','T','U','V' };char Name[][20]={

//地点名称

“南大门”,“南一楼”,“西十二楼”,“西五楼”, “青年园”,“图书馆”,“科技楼”,“喻园餐厅”, 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

“机械学院”,“名人园”,“中心操场”,“东九楼”, “沁苑”,“喻园教工超市”,“东教工超市”, “东一食堂”,“紫荆园餐厅”,“清真食堂”, “百景园”,“东五楼”,“南三门”,“南二门” };typedef struct { int x;int y;}Point;typedef struct { Point point;char name[20];char num;}Vexs;struct MGraph { Vexs vexs[MAX_VEX_NUM];

//顶点向量

int arcs[MAX_VEX_NUM][MAX_VEX_NUM];//邻接矩阵

int vexnum,arcnum;

//顶点数,边数 };MGraph G[100],G0,G1;

//声明无向图的邻接矩阵类型 int Gi;IMAGE map,map1;

//图片信息的加载 IMAGE loading;IMAGE about;IMAGE help;IMAGE background;IMAGE Aa,Bb,Cc,Dd,Ee,Ff,Gg,Hh,Ii,Jj,Kk,Ll,Mm,Nn,Oo,Pp,Qq,Rr,Ss,Tt,Uu,Vv,a1,a2,b1,b2,c1,c2,d1,d2;void LoadData(void);

//加载信息

int CreateUDG1(MGraph &G1);//初始化所有景点信息 int weight(Point a,Point b);//计算两点之间的距离 void Windows(void);

//主窗口界面 void Musicplay(int mark);//播放音乐

void Showplace(void);

//查找地点位置 void Showpoint(int i);void Shortest(void);

//两点之间的最短路径 void Showline(int i,int j);//显示输入框 void Showline1(int i,int j);//显示输入框 void Showline2(int i,int j);//显示输入框

void Floyd(void);

//佛洛依德算法,算出每两点间的最短路径矩阵 void Linemin(int i,int j);

//画最短路径

void Findrepast(void);

//查找附近的食堂 void Findmarket(void);

//查找附近的超市 void Entermap(void);

//进入地图操作界面 void Viewmain(void);

//浏览地点信息 void HelP(void);

//操作说明 void About(void);

//作者相关信息 void Quit(void);

//退出系统

2.TourGuide.cpp 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

#include“head.h” int main(){ initgraph(640,480);HWND hwnd = GetHWnd();

// 设置窗口标题文字

SetWindowText(hwnd, “华科地图导航”);LoadData();CreateUDG1(G1);Musicplay(1);Windows();return 0;}

/*功能:对输入的两个点计算它们之间的距离,并将其返回到调用的函数中*/ int weight(Point a,Point b){ double x;int y;x=pow((a.x-b.x),2)+pow((a.y-b.y),2);x=sqrt(x);y=int(x);return y;} /*功能:加载程序运行必须的图片及函数相关信息*/ void LoadData(void){ int i,j;loadimage(&loading,“./picture/loading.jpg”);loadimage(&about,“./picture/about.jpg”);loadimage(&help,“./picture/help.jpg”);loadimage(&background,“./picture/background.jpg”);loadimage(&map,“./picture/map.jpg”);loadimage(&map1,“./picture/map1.jpg”);loadimage(&Aa,“./picture/place/A.jpg”);loadimage(&Bb,“./picture/place/B.jpg”);loadimage(&Cc,“./picture/place/C.jpg”);loadimage(&Dd,“./picture/place/D.jpg”);loadimage(&Ee,“./picture/place/E.jpg”);loadimage(&Ff,“./picture/place/F.jpg”);loadimage(&Gg,“./picture/place/G.jpg”);loadimage(&Hh,“./picture/place/H.jpg”);loadimage(&Ii,“./picture/place/I.jpg”);loadimage(&Jj,“./picture/place/J.jpg”);loadimage(&Kk,“./picture/place/K.jpg”);loadimage(&Ll,“./picture/place/L.jpg”);loadimage(&Mm,“./picture/place/M.jpg”);loadimage(&Nn,“./picture/place/N.jpg”);loadimage(&Oo,“./picture/place/O.jpg”);loadimage(&Pp,“./picture/place/P.jpg”);loadimage(&Qq,“./picture/place/Q.jpg”);loadimage(&Rr,“./picture/place/R.jpg”);loadimage(&Ss,“./picture/place/S.jpg”);loadimage(&Tt,“./picture/place/T.jpg”);loadimage(&Uu,“./picture/place/U.jpg”);loadimage(&Vv,“./picture/place/V.jpg”);loadimage(&a1,“./picture/menu/a1.jpg”);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

loadimage(&a2,“./picture/menu/a2.jpg”);loadimage(&b1,“./picture/menu/b1.jpg”);loadimage(&b2,“./picture/menu/b2.jpg”);loadimage(&c1,“./picture/menu/c1.jpg”);loadimage(&c2,“./picture/menu/c2.jpg”);loadimage(&d1,“./picture/menu/d1.jpg”);loadimage(&d2,“./picture/menu/d2.jpg”);for(i=1;i

for(j=1;j

{

G0.arcs[i][j]=MAX_ROAD;

}

}

for(i=1;i

{

shortest[i][i]=0;

} for(i=0;i

G0.vexs[i+1].point.x=pos[i][0];

G0.vexs[i+1].point.y=pos[i][1];

} //初始化连通路径

G0.arcs[1][2]=G0.arcs[2][1]=weight(G0.vexs[1].point,G0.vexs[2].point);G0.arcs[1][22]=G0.arcs[22][1]=weight(G0.vexs[22].point,G0.vexs[1].point);G0.arcs[1][27]=G0.arcs[27][1]=weight(G0.vexs[27].point,G0.vexs[1].point);

G0.arcs[1][28]=G0.arcs[28][1]=weight(G0.vexs[28].point,G0.vexs[1].point);

G0.arcs[2][27]=G0.arcs[27][2]=weight(G0.vexs[27].point,G0.vexs[2].point);

G0.arcs[2][28]=G0.arcs[28][2]=weight(G0.vexs[28].point,G0.vexs[2].point);

G0.arcs[3][21]=G0.arcs[21][3]=weight(G0.vexs[21].point,G0.vexs[3].point);

G0.arcs[3][24]=G0.arcs[24][3]=weight(G0.vexs[24].point,G0.vexs[3].point);G0.arcs[4][24]=G0.arcs[24][4]=weight(G0.vexs[24].point,G0.vexs[4].point);

G0.arcs[4][25]=G0.arcs[25][4]=weight(G0.vexs[25].point,G0.vexs[4].point);G0.arcs[4][29]=G0.arcs[29][4]=weight(G0.vexs[29].point,G0.vexs[4].point);G0.arcs[4][60]=G0.arcs[60][4]=weight(G0.vexs[60].point,G0.vexs[4].point);

G0.arcs[5][29]=G0.arcs[29][5]=weight(G0.vexs[29].point,G0.vexs[5].point);G0.arcs[5][34]=G0.arcs[34][5]=weight(G0.vexs[34].point,G0.vexs[5].point);G0.arcs[6][30]=G0.arcs[30][6]=weight(G0.vexs[6].point,G0.vexs[30].point);G0.arcs[6][35]=G0.arcs[35][6]=weight(G0.vexs[6].point,G0.vexs[35].point);

G0.arcs[7][49]=G0.arcs[49][7]=weight(G0.vexs[7].point,G0.vexs[49].point);G0.arcs[7][38]=G0.arcs[38][7]=weight(G0.vexs[7].point,G0.vexs[38].point);G0.arcs[8][47]=G0.arcs[47][8]=weight(G0.vexs[8].point,G0.vexs[47].point);G0.arcs[8][53]=G0.arcs[53][8]=weight(G0.vexs[53].point,G0.vexs[8].point);G0.arcs[8][55]=G0.arcs[55][8]=weight(G0.vexs[55].point,G0.vexs[8].point);G0.arcs[9][37]=G0.arcs[37][9]=weight(G0.vexs[9].point,G0.vexs[37].point);G0.arcs[9][40]=G0.arcs[40][9]=weight(G0.vexs[9].point,G0.vexs[40].point);G0.arcs[10][31]=G0.arcs[31][10]=weight(G0.vexs[10].point,G0.vexs[31].point);G0.arcs[10][23]=G0.arcs[23][10]=weight(G0.vexs[10].point,G0.vexs[23].point);G0.arcs[10][32]=G0.arcs[32][10]=weight(G0.vexs[10].point,G0.vexs[32].point);

G0.arcs[11][17]=G0.arcs[17][11]=weight(G0.vexs[11].point,G0.vexs[17].point);

G0.arcs[11][23]=G0.arcs[23][11]=weight(G0.vexs[11].point,G0.vexs[23].point);

G0.arcs[12][18]=G0.arcs[18][12]=weight(G0.vexs[12].point,G0.vexs[18].point);

G0.arcs[13][50]=G0.arcs[50][13]=weight(G0.vexs[13].point,G0.vexs[50].point);G0.arcs[13][15]=G0.arcs[15][13]=weight(G0.vexs[13].point,G0.vexs[15].point);

G0.arcs[14][18]=G0.arcs[18][14]=weight(G0.vexs[14].point,G0.vexs[18].point);

G0.arcs[14][41]=G0.arcs[41][14]=weight(G0.vexs[14].point,G0.vexs[41].point);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

G0.arcs[14][50]=G0.arcs[50][14]=weight(G0.vexs[14].point,G0.vexs[50].point);

G0.arcs[15][17]=G0.arcs[17][15]=weight(G0.vexs[15].point,G0.vexs[17].point);

G0.arcs[16][23]=G0.arcs[23][16]=weight(G0.vexs[16].point,G0.vexs[23].point);

G0.arcs[16][26]=G0.arcs[26][16]=weight(G0.vexs[16].point,G0.vexs[26].point);

G0.arcs[19][42]=G0.arcs[42][19]=weight(G0.vexs[19].point,G0.vexs[42].point);

G0.arcs[19][43]=G0.arcs[43][19]=weight(G0.vexs[19].point,G0.vexs[43].point);

G0.arcs[20][26]=G0.arcs[26][20]=weight(G0.vexs[20].point,G0.vexs[26].point);

G0.arcs[20][32]=G0.arcs[32][20]=weight(G0.vexs[20].point,G0.vexs[32].point);

G0.arcs[21][22]=G0.arcs[22][21]=weight(G0.vexs[22].point,G0.vexs[21].point);

G0.arcs[22][25]=G0.arcs[25][22]=weight(G0.vexs[22].point,G0.vexs[25].point);

G0.arcs[24][44]=G0.arcs[44][24]=weight(G0.vexs[24].point,G0.vexs[44].point);

G0.arcs[25][27]=G0.arcs[27][25]=weight(G0.vexs[25].point,G0.vexs[27].point);

G0.arcs[26][52]=G0.arcs[52][26]=weight(G0.vexs[26].point,G0.vexs[52].point);

G0.arcs[27][60]=G0.arcs[60][27]=weight(G0.vexs[27].point,G0.vexs[60].point);

G0.arcs[28][31]=G0.arcs[31][28]=weight(G0.vexs[28].point,G0.vexs[31].point);

G0.arcs[29][30]=G0.arcs[30][29]=weight(G0.vexs[29].point,G0.vexs[30].point);

G0.arcs[29][44]=G0.arcs[44][29]=weight(G0.vexs[29].point,G0.vexs[44].point);

G0.arcs[30][59]=G0.arcs[59][30]=weight(G0.vexs[30].point,G0.vexs[59].point);G0.arcs[30][60]=G0.arcs[60][30]=weight(G0.vexs[30].point,G0.vexs[60].point);

G0.arcs[31][59]=G0.arcs[59][31]=weight(G0.vexs[31].point,G0.vexs[59].point);

G0.arcs[32][33]=G0.arcs[33][32]=weight(G0.vexs[32].point,G0.vexs[33].point);

G0.arcs[33][37]=G0.arcs[37][33]=weight(G0.vexs[33].point,G0.vexs[37].point);

G0.arcs[33][58]=G0.arcs[58][33]=weight(G0.vexs[33].point,G0.vexs[58].point);

G0.arcs[34][35]=G0.arcs[35][34]=weight(G0.vexs[34].point,G0.vexs[35].point);

G0.arcs[34][45]=G0.arcs[45][34]=weight(G0.vexs[34].point,G0.vexs[45].point);

G0.arcs[35][38]=G0.arcs[38][35]=weight(G0.vexs[35].point,G0.vexs[38].point);G0.arcs[35][58]=G0.arcs[58][35]=weight(G0.vexs[35].point,G0.vexs[58].point);

G0.arcs[36][37]=G0.arcs[37][36]=weight(G0.vexs[36].point,G0.vexs[37].point);

G0.arcs[36][38]=G0.arcs[38][36]=weight(G0.vexs[36].point,G0.vexs[38].point);

G0.arcs[36][39]=G0.arcs[39][36]=weight(G0.vexs[36].point,G0.vexs[39].point);G0.arcs[36][58]=G0.arcs[58][36]=weight(G0.vexs[36].point,G0.vexs[58].point);

G0.arcs[37][52]=G0.arcs[52][37]=weight(G0.vexs[37].point,G0.vexs[52].point);G0.arcs[38][45]=G0.arcs[45][38]=weight(G0.vexs[45].point,G0.vexs[38].point);G0.arcs[39][49]=G0.arcs[49][39]=weight(G0.vexs[39].point,G0.vexs[49].point);

G0.arcs[39][55]=G0.arcs[55][39]=weight(G0.vexs[39].point,G0.vexs[55].point);G0.arcs[39][40]=G0.arcs[40][39]=weight(G0.vexs[39].point,G0.vexs[40].point);

G0.arcs[40][56]=G0.arcs[56][40]=weight(G0.vexs[40].point,G0.vexs[56].point);

G0.arcs[40][51]=G0.arcs[51][40]=weight(G0.vexs[40].point,G0.vexs[51].point);

G0.arcs[41][47]=G0.arcs[47][41]=weight(G0.vexs[41].point,G0.vexs[47].point);G0.arcs[41][57]=G0.arcs[57][41]=weight(G0.vexs[41].point,G0.vexs[57].point);G0.arcs[42][44]=G0.arcs[44][42]=weight(G0.vexs[42].point,G0.vexs[44].point);G0.arcs[42][46]=G0.arcs[46][42]=weight(G0.vexs[42].point,G0.vexs[46].point);G0.arcs[43][46]=G0.arcs[46][43]=weight(G0.vexs[43].point,G0.vexs[46].point);

G0.arcs[43][48]=G0.arcs[48][43]=weight(G0.vexs[43].point,G0.vexs[48].point);G0.arcs[43][54]=G0.arcs[54][43]=weight(G0.vexs[43].point,G0.vexs[54].point);G0.arcs[45][46]=G0.arcs[46][45]=weight(G0.vexs[45].point,G0.vexs[46].point);

G0.arcs[46][49]=G0.arcs[49][46]=weight(G0.vexs[46].point,G0.vexs[49].point);G0.arcs[47][56]=G0.arcs[56][47]=weight(G0.vexs[47].point,G0.vexs[56].point);G0.arcs[48][53]=G0.arcs[53][48]=weight(G0.vexs[48].point,G0.vexs[53].point);G0.arcs[49][54]=G0.arcs[54][49]=weight(G0.vexs[49].point,G0.vexs[54].point);

G0.arcs[50][52]=G0.arcs[52][50]=weight(G0.vexs[50].point,G0.vexs[52].point);G0.arcs[51][52]=G0.arcs[52][51]=weight(G0.vexs[51].point,G0.vexs[52].point);G0.arcs[51][57]=G0.arcs[57][51]=weight(G0.vexs[51].point,G0.vexs[57].point);

G0.arcs[53][54]=G0.arcs[54][53]=weight(G0.vexs[53].point,G0.vexs[54].point);G0.arcs[54][55]=G0.arcs[55][54]=weight(G0.vexs[54].point,G0.vexs[55].point);G0.arcs[55][56]=G0.arcs[56][55]=weight(G0.vexs[55].point,G0.vexs[56].point);G0.arcs[56][57]=G0.arcs[57][56]=weight(G0.vexs[56].point,G0.vexs[57].point);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

G0.arcs[58][59]=G0.arcs[59][58]=weight(G0.vexs[58].point,G0.vexs[59].point Floyd();}

/*功能:佛洛依德算法,将每对景点之间的最短路径距离算出并存储最短路径到path中 */ void Floyd()

{

int i,j,k;

for(i=1;i

{ for(j=1;j

{

shortest[i][j]=G0.arcs[i][j];

path[i][j]=j;

}

}

/*初始化数组*/

for(k=1;k

{

for(i=1;i

{

for(j=1;j

{

if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))

{

shortest[i][j]=shortest[i][k]+shortest[k][j];

path[i][j]=k;

path[j][i]=k;

/*记录经过的路径*/

}

}

}

} } /*功能:初始化由所有景点构成的无向完全图G1,并加载必要信息*/ int CreateUDG1(MGraph &G1){

int p,q;Gi=0;G1.vexnum=22;

for(q=0;q

G1.vexs[q].point.x=pos[q][0];

G1.vexs[q].point.y=pos[q][1];

strcpy(G1.vexs[q].name,Name[q]);

G1.vexs[q].num=Num[q];} for(q=0;q

{

for(p=q;p

G1.arcs[q][p]=G1.arcs[p][q]=weight(G1.vexs[p].point,G1.vexs[q].point);}

return 1;} /*把音乐以资源形式嵌入exe并播放,mark用来控制音乐的播放与暂停*/ void Musicplay(int mark){ mciSendString(“open./music/1024.mp3 alias music”,NULL,0,NULL);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

if(mark==1)

mciSendString(_T(“play music repeat”),NULL,0,NULL);if(mark==2)

mciSendString(_T(“pause music”),NULL,0,NULL);if(mark==3)

mciSendString(_T(“resume music”),NULL,0,NULL);} /*功能:显示主窗口界面,进入功能选择区*/ void Windows(void){ cleardevice();int posx[]={265,265,265,265,265,31,62};int posy[]={180,220,260,300,340,449,449};putimage(0,0,&loading);settextstyle(25, 0, _T(“隶书”));setbkmode(TRANSPARENT);settextcolor(WHITE);outtextxy(posx[0],posy[0], _T(“地图导航”));outtextxy(posx[1],posy[1], _T(“进入地图”));outtextxy(posx[2],posy[2], _T(“使用帮助”));outtextxy(posx[3],posy[3], _T(“关于导航”));outtextxy(posx[4],posy[4], _T(“退出导航”));MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_MOUSEMOVE)

{

if(m.x>posx[0]&&m.x

posy[0]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[0],posy[0], _T(“地图导航”));

if(m.x>posx[1]&&m.x

posy[1]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[1],posy[1], _T(“进入地图”));

if(m.x>posx[2]&&m.x

posy[2]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[2],posy[2], _T(“使用帮助”));

if(m.x>posx[3]&&m.x

posy[3]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[3],posy[3], _T(“关于导航”));

if(m.x>posx[4]&&m.x

posy[4]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[4],posy[4], _T(“退出导航”));

}

if(m.uMsg==WM_LBUTTONUP)

{ 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

if(m.x>posx[0]&&m.x

posy[0]&&m.y

Entermap();

if(m.x>posx[1]&&m.x

posy[1]&&m.y

Viewmain();

if(m.x>posx[2]&&m.x

posy[2]&&m.y

HelP();

if(m.x>posx[3]&&m.x

posy[3]&&m.y

About();

if(m.x>posx[4]&&m.x

posy[4]&&m.y

Quit();

if(m.x>posx[5]&&m.x

posy[5]&&m.y

Musicplay(3);

if(m.x>posx[6]&&m.x

posy[6]&&m.y

Musicplay(2);

} } cleardevice();return;} /*功能:进入地图操作界面,可选功能项有最短路径查询和最佳路线问题*/ void Entermap(){ int posx[]={215,325,215,325,0};int posy[]={135,135,245,245,0};putimage(0,0,&background);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_MOUSEMOVE)

{

if(m.x>posx[0]&&m.x

posy[0]&&m.y

putimage(215,135,&c2);

else

putimage(215,135,&c1);

if(m.x>posx[1]&&m.x

posy[1]&&m.y

putimage(325,135,&d2);

else

putimage(325,135,&d1);

if(m.x>posx[2]&&m.x

posy[2]&&m.y

putimage(215,245,&a2);

else

putimage(215,245,&a1);

if(m.x>posx[3]&&m.x

posy[3]&&m.y

putimage(325,245,&b2);

else

putimage(325,245,&b1);

}

if(m.uMsg==WM_LBUTTONUP)

{

if(m.x>posx[0]&&m.x

posy[0]&&m.y

Showplace();

if(m.x>posx[1]&&m.x

posy[1]&&m.y

Shortest();

if(m.x>posx[2]&&m.x

posy[2]&&m.y

Findrepast();

if(m.x>posx[3]&&m.x

posy[3]&&m.y

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

Findmarket();

if(m.x>posx[4]&&m.x

posy[4]&&m.y

Windows();

} } } /*功能:弹出地点查询框,作为输入信息用*/ void Showplace(void){ char s[10];int choose;HWND wnd = GetHWnd();M: if(InputBox(s, 10, “查找地点,如:我的选择是:AnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入地点编号”,NULL,300,90,false)==true){

choose=s[0]-'A'+1;

if(0

Showpoint(choose);

else

if(MeageBox(wnd, _T(“选择出现在A-V,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();} void Showpoint(int i){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“ 【红色为查询地点所在位置】”};char meage[100];int a=i;strcpy(meage,s[0]);putimage(0,0,&map1);strcat(meage,G1.vexs[a-1].name);strcat(meage,s[1]);setfillcolor(0x001eff);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);

if(MeageBox(wnd, _T(meage), _T(“提醒”),MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MeageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:弹出最短路径查询框,作为输入信息用*/ void Shortest(void){ char s[10];int choose1,choose2;HWND wnd = GetHWnd();华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

M: if(InputBox(s, 10, “查询线路,如:我的选择是:ABnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入两地点编号”,NULL,300,90,false)==true){

choose1=s[0]-'A'+1;

choose2=s[1]-'A'+1;

if(0

Showline(choose1,choose2);

else

if(MeageBox(wnd, _T(“选择出现在A-V,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();}

/*功能:弹出食堂查询框,作为输入信息用*/ void Findrepast(void){ char s[10];int choose1,choose2;HWND wnd = GetHWnd();M: if(InputBox(s, 10, “查找地点附近食堂,如:我的选择是:AnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入编号”,NULL,300,90,false)==true){

choose1=s[0]-'A'+1;

if(0

{

if(choose1==6||choose1==7||choose1==8){

choose2=8;

Showline1(choose1,choose2);}

else if(choose1==1||choose1==2||choose1==9||choose1==10||choose1==16||choose1==20){

choose2=16;

Showline1(choose1,choose2);}

else if(choose1==11||choose1==13||choose1==15||choose1==17){

choose2=17;

Showline1(choose1,choose2);}

else if(choose1==12||choose1==14||choose1==18){

choose2=18;

Showline1(choose1,choose2);}

else{

choose2=19;

Showline1(choose1,choose2);}

}

else

if(MeageBox(wnd, _T(“选择出现在A-V,W-X,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

} /*功能:弹出食堂超市查询框,作为输入信息用*/ void Findmarket(void){ char s[10];int choose1,choose2;HWND wnd = GetHWnd();M: if(InputBox(s, 10, “查找地点附近超市,如:我的选择是:AnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入编号”,NULL,300,90,false)==true){

choose1=s[0]-'A'+1;

if(0

{

if(choose1==8||choose1==12||choose1==14||choose1==18||choose1==19){

choose2=14;

Showline2(choose1,choose2);}

else{

choose2=15;

Showline2(choose1,choose2);}

}

else

if(MeageBox(wnd, _T(“选择出现在A-V,W-X,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();} /*功能:输出最短路径线路图及最短距离*/ void Showline(int i,int j){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“→”,“的最短距离nn”,“最短距离为:”,“米

【蓝色为起点,红色为终点】”};char meage[100];char string[10];int a,b;a=i;b=j;strcpy(meage,s[0]);putimage(0,0,&map1);strcat(meage,G1.vexs[a-1].name);strcat(meage,s[1]);strcat(meage,G1.vexs[b-1].name);strcat(meage,s[2]);strcat(meage,s[3]);Linemin(a,b);itoa(shortest[a][b]*3.68,string,10);strcat(meage,string);strcat(meage,s[4]);setfillcolor(BLUE);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);setfillcolor(0x001eff);fillcircle(G1.vexs[b-1].point.x,G1.vexs[b-1].point.y,7);if(MeageBox(wnd, _T(meage), _T(“提醒”), 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MeageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:输出食堂最短路径线路图及最短距离*/ void Showline1(int i,int j){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“ 附近最近的食堂 ”,“ 其路径如图nn”,“最短距离为:”,“米

【蓝色为起点,红色为终点】”};char meage[100];char string[10];int a,b;a=i;b=j;strcpy(meage,s[0]);putimage(0,0,&map1);strcat(meage,G1.vexs[a-1].name);strcat(meage,s[1]);strcat(meage,G1.vexs[b-1].name);strcat(meage,s[2]);strcat(meage,s[3]);Linemin(a,b);itoa(shortest[a][b]*3.68,string,10);strcat(meage,string);strcat(meage,s[4]);setfillcolor(BLUE);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);setfillcolor(0x001eff);fillcircle(G1.vexs[b-1].point.x,G1.vexs[b-1].point.y,7);if(MeageBox(wnd, _T(meage), _T(“提醒”),MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MeageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:输出食堂最短路径线路图及最短距离*/ void Showline2(int i,int j){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“ 附近最近的超市 ”,“ 其路径如图nn”,“最短距离为:”,“米

【蓝色为起点,红色为终点】”};char meage[100];char string[10];int a,b;a=i;b=j;strcpy(meage,s[0]);putimage(0,0,&map1);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

strcat(meage,G1.vexs[a-1].name);strcat(meage,s[1]);strcat(meage,G1.vexs[b-1].name);strcat(meage,s[2]);strcat(meage,s[3]);Linemin(a,b);itoa(shortest[a][b]*3.68,string,10);strcat(meage,string);strcat(meage,s[4]);setfillcolor(BLUE);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);setfillcolor(0x001eff);fillcircle(G1.vexs[b-1].point.x,G1.vexs[b-1].point.y,7);if(MeageBox(wnd, _T(meage), _T(“提醒”),MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MeageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:绘制最短路径线路图*/ void Linemin(int i,int j){ setlinestyle(PS_DASH|PS_JOIN_ROUND,4);if(path[i][j]==i||path[i][j]==j)

line(G0.vexs[i].point.x,G0.vexs[i].point.y,G0.vexs[j].point.x,G0.vexs[j].point.y);else{

Linemin(path[i][j],i);

Linemin(path[i][j],j);} setlinestyle(PS_SOLID,1);} /*功能:地图地点相关信息的介绍*/ void Viewmain(){ IMAGE temp;int choose;putimage(0,0,&map);getimage(&temp,465,275,210,260);setfillcolor(0x001eff);settextstyle(20,0,“楷体”);settextcolor(BLACK);setbkmode(TRANSPARENT);for(choose=1;choose

fillcircle(pos[choose-1][0],pos[choose-1][1],7);} outtextxy(0,0,“返回”);outtextxy(80,0,“Tips:鼠标移动到相应的点范围即可查看对应地点信息”);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_MOUSEMOVE)华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

{

if(m.x>pos[0][0]-7&&m.x

pos[0][1]-7&&m.y

putimage(465,275,&Aa);

else if(m.x>pos[1][0]-7&&m.x

pos[1][1]-7&&m.y

putimage(465,275,&Bb);

else if(m.x>pos[2][0]-7&&m.x

pos[2][1]-7&&m.y

putimage(465,275,&Cc);

else if(m.x>pos[3][0]-7&&m.x

pos[3][1]-7&&m.y

putimage(465,275,&Dd);

else if(m.x>pos[4][0]-7&&m.x

pos[4][1]-7&&m.y

putimage(465,275,&Ee);

else if(m.x>pos[5][0]-7&&m.x

pos[5][1]-7&&m.y

putimage(465,275,&Ff);

else if(m.x>pos[6][0]-7&&m.x

pos[6][1]-7&&m.y

putimage(465,275,&Gg);

else if(m.x>pos[7][0]-7&&m.x

pos[7][1]-7&&m.y

putimage(465,275,&Hh);

else if(m.x>pos[8][0]-7&&m.x

pos[8][1]-7&&m.y

putimage(465,275,&Ii);

else if(m.x>pos[9][0]-7&&m.x

pos[9][1]-7&&m.y

putimage(465,275,&Jj);

else if(m.x>pos[10][0]-7&&m.x

pos[10][1]-7&&m.y

putimage(465,275,&Kk);

else if(m.x>pos[11][0]-7&&m.x

pos[11][1]-7&&m.y

putimage(465,275,&Ll);

else if(m.x>pos[12][0]-7&&m.x

pos[12][1]-7&&m.y

putimage(465,275,&Mm);

else if(m.x>pos[13][0]-7&&m.x

pos[13][1]-7&&m.y

putimage(465,275,&Nn);

else if(m.x>pos[14][0]-7&&m.x

pos[14][1]-7&&m.y

putimage(465,275,&Oo);

else if(m.x>pos[15][0]-7&&m.x

pos[15][1]-7&&m.y

putimage(465,275,&Pp);

else if(m.x>pos[16][0]-7&&m.x

pos[16][1]-7&&m.y

putimage(465,275,&Qq);

else if(m.x>pos[17][0]-7&&m.x

pos[17][1]-7&&m.y

putimage(465,275,&Rr);

else if(m.x>pos[18][0]-7&&m.x

pos[18][1]-7&&m.y

putimage(465,275,&Ss);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

else if(m.x>pos[19][0]-7&&m.x

pos[19][1]-7&&m.y

putimage(465,275,&Tt);

else if(m.x>pos[20][0]-7&&m.x

pos[20][1]-7&&m.y

putimage(465,275,&Uu);

else if(m.x>pos[21][0]-7&&m.x

pos[21][1]-7&&m.y

putimage(465,275,&Vv);

else

putimage(465,275,&temp);

}

if(m.uMsg==WM_LBUTTONUP)

{

if(m.x>0&&m.x0&&m.y

{

setbkmode(TRANSPARENT);

Windows();

}

} } } /*功能:进入帮助功能界面,显示操作说明*/ void HelP(void){ putimage(0,0,&help);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_LBUTTONUP)

if(m.x>0&&m.x0&&m.y

Windows();} }

/*功能:显示作者相关信息*/ void About(void){ int posx[]={0,25};int posy[]={0,350};cleardevice();putimage(0,0,&about);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_LBUTTONUP)

if(m.x>posx[0]&&m.x

posy[0]&&m.y

Windows();} } /*退出系统,结束程序的运行*/ void Quit(void){ HWND wnd = GetHWnd();if(MeageBox(wnd, _T(“你确定要退出吗?”), _T(“提醒”),31 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

} {

} MB_OKCANCEL | MB_ICONQUESTION)== IDOK)closegraph();exit(0);

数据结构课设

数据结构课设 大整数计数器 1.问题描述实现大整数(200位以内的整数)的加、减、乘、除运算。 2.设计要求设计程序实现两个大整数的四则运算,输出这两个大整数的和、差、积、商及......

财务会计课设报告

武汉理工大学《财务会计》课程设计说明书财务会计手工模拟实验及感悟1 概述1.1实务背景 作为一名未来的会计人员,我们现在才刚刚起步,为了更好的掌握会计学知识,我们进行了财务......

数据库课设报告

数据库上机实习数 据 库 课 程 设 计 题目 《数据库》课程设计 学号 201007084201 姓名 马伟华 班级 电气102 指导老师 刘秀敏 1 数据库上机实习 目录一 、概述„„„......

财务会计课设报告

武汉理工大学《财务会计课程设计》报告书13年我们一起做的财务会计课程设计财务会计课程设计,是我的第三次专业课程设计,说实话做起来应该轻车熟路,但实际却不是如此。在刚开始......

ERP课设报告

《企业资源计划ERP》课程设计题目:关于企业实施ERP对人力资源管理影响的探究班 级 信管 092 专 业 信息管理和信息系统 学 号 3090561053 姓 名 窦 婷 地 点 经济与管理学院......

下载数据结构课设报告word格式文档
下载数据结构课设报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文