java校院导游程序课程设计
- 格式:doc
- 大小:2.64 MB
- 文档页数:24
目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (4)四、设计和调试分析 (9)五、用户手册 (9)六、测试结果 (10)1.操作命令符为s/S, (10)2.操作命令符为v/V, (11)3.操作符为v/V, (11)4.操作符为e/E, (11)5.综上可以查得: (12)七、附录 (12)参考文献 (13)校园导游咨询系统一、需求分析1.从福建农林大学的平面图中选取28个有代表性的景点,抽象成一个无向带权图。
以图中顶点表示景点,边上的权值表示两地间的距离。
2.本程序的目的是为了用户提供路径咨询,根据用户指定的始点和终点输出相应路径,或者根据用户指定的景点输出景点的信息。
3.测试数据(附后)。
二、概要设计1.抽象数据类型图的定义如下:ADT {struct arcnode{ int v;int w;struct arcnode *next;};struct node{ int degree;struct arcnode *first;}adjlist[28];}2.主程序V oid mian(){初始化临接矩阵windows(); / /初始化串口getch();}3.函数定义的变量#define infi 32767#define MAX 28int M,N; //无向图中的顶点M,无向图的变数int adjmatrix[MAX][MAX]; // 保存临接矩阵的2唯数组char *schoolIfo[MAX+1]={ //此数组用于界面显示信息"null","东台-dt","金1-j1","金2-j2","金3-j3","金4-j4","食堂-st","田径场-tjc","校大门-xdm","创业园-cyy","校医院-xyy","图书馆-tsg","映辉桥-yhq","观音湖-gyh","成教楼-cjl","生物楼-swl","博学楼-bxl","创新楼-cxl","明德楼-mdl","拓荒广场-thgc","南区公寓-nqgy","田家炳楼-tjbl","农大新区-ndxq","中华广场-zhgc","905终点站-zdz","蜂疗医院-flyy","研究生公寓-yjsgy","昌融学生街-crxsj","北区学生公寓-bqxsgy"};char *charcd2[MAX]={ //用于显示最短路径时走向的数组"校大门","金1","昌融学生街","创业园","东台","金2","田径场","拓荒广场","南区公寓","校医院","食堂","成教楼","创新楼","田家炳楼","农大新区","观音湖","金3","映辉桥","金4","明德楼","中华广场","905终点站","蜂疗医院","生物楼","博学楼","图书馆","研究生公寓","北区学生公寓"};char *charcd[MAX]={ //用于用户输入起始点与终止点时对应的数组"xdm","j1","crxsj","cyy","dt","j2","tjc","thgc","nqgy","xyy","st","cjl","cxl","tjbl","ndxq","gyh","j3","yhq","j4","mdl","zhgc","zdz","flyy","swl","bxl","tsg","yjsgy","bqxsgy"};char *infor[MAX]={ //介绍景点信息数组"校大门:\n 占不提供介绍","金1:\n 指金山大道的一处,由图可知","昌融学士街:\n 农大的小吃一条街,来农大一定要来尝尝!","创业园:\n 农大创业有志者的孵化地","东台:\n 农大老师所住之处","金2:\n 金山大道的第二处有图可看出","田径场:\n 农大的运动场地","拓荒广场:\n 大礼堂就在此处","南区公寓:\n 顾名思意,学生公寓","校医院:\n 希望你不要来","食堂:\n 学校八九十食堂都在这,不错蛮好吃的。
校园导游系统课程设计一、课程目标知识目标:1. 学生能理解校园导游系统的基本概念,掌握其功能结构与操作流程。
2. 学生能运用所学的信息技术知识,结合校园实际情况,设计出实用的校园导游系统。
3. 学生了解并掌握校园导游系统中的地理信息、历史文化等相关知识。
技能目标:1. 学生能够运用所学的编程语言或软件工具,独立或合作完成校园导游系统的设计与制作。
2. 学生通过实践操作,提高自己的信息收集、处理、分析及解决问题的能力。
3. 学生能够通过项目实践,提升自己的团队协作、沟通表达及组织协调能力。
情感态度价值观目标:1. 学生在学习过程中,培养对信息技术的兴趣和爱好,提高主动学习和探究的精神。
2. 学生通过了解校园的历史文化,增强对学校的热爱和自豪感,培养积极向上的情感态度。
3. 学生在团队协作中,学会尊重他人、关心同伴,形成良好的人际关系,树立正确的价值观。
本课程针对中学生设计,结合信息技术学科特点,注重实践操作和团队协作。
课程目标旨在帮助学生将所学知识运用到实际项目中,提高他们的综合能力和素养。
通过本课程的学习,使学生能够更好地了解校园,提升自我解决问题的能力,同时培养他们的团队精神和价值观。
二、教学内容1. 校园导游系统概述- 了解校园导游系统的定义、功能与意义。
- 分析现有校园导游系统的优缺点。
2. 校园地理信息与历史文化- 学习校园地理分布、建筑特点及历史文化背景。
- 收集并整理校园内重要景点的信息。
3. 信息技术应用- 掌握编程语言(如Python)或软件工具(如GIS软件)的基本使用方法。
- 学习数据库管理,整理并存储校园导游信息。
4. 系统设计与制作- 制定校园导游系统的设计方案,明确系统功能模块。
- 学习界面设计,掌握一定的UI设计原则。
- 编程实现校园导游系统的基本功能,如地图导航、景点介绍等。
5. 项目实践与团队协作- 分组进行项目实践,明确分工与协作。
- 定期进行项目进度汇报,交流问题与经验。
1、需求分析设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。
(1)。
设计工商学院校园无向图,所含的景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)。
为来访客人提供图中任意景点相关信息的查询。
(3)。
为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2、设计思路校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟.用图的结点代表景点,用图的边代表景点之间的路径.所以首先应设计一个图类.结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用弗洛伊德(Floyd)算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径。
3 算法设计3。
1 概要设计3。
1。
1 程序中包含的模块(1)主程序模块主函数:void main(void)void cmd(void) cmd修改显示框大小,字体背景颜色,初始化景点,景点信息打印菜单,MGraph InitGraph(void); //初始化图。
MGraph * CreatUDN(MGraph *G);//初始化图形接受用户输入void Menu(void);//菜单函数void Browser(MGraph *G);//浏览函数void ShortestPath_DIJ(MGraph *G);void Floyd(MGraph *G);//查询图中任意两个景点间的所有路径void Search(MGraph *G);//查找函数int LocateVex(MGraph *G,char*v); // 迪杰斯特拉算法计算起点各顶点间短路径,void print(MGraph *G);//输出函数(2)查询模块景点信息查询:void introduce()最短路径查询:要查找的两景点的最短距离:用floyd算法求两个景点的最短路径:(3)打印模块:void print(MGraph *G);3。
java校园导游咨询课程设计一、课程目标知识目标:1. 理解Java语言面向对象编程的基本概念,掌握类的定义、属性和方法的声明及使用。
2. 学习使用Java异常处理机制,提高程序的健壮性。
3. 了解Java事件处理机制,掌握事件监听器和事件处理方法的使用。
4. 掌握Java图形用户界面(GUI)设计,熟练运用Swing组件构建应用程序界面。
技能目标:1. 能够运用面向对象思想,设计并实现一个校园导游咨询系统的核心功能模块。
2. 能够使用Java异常处理机制,对程序中可能出现的错误进行有效捕获和处理。
3. 能够利用事件处理机制,实现导游咨询系统的用户交互功能。
4. 能够运用Swing组件,设计美观、易用的校园导游咨询系统界面。
情感态度价值观目标:1. 培养学生团队协作能力,提高沟通与表达能力,增强解决实际问题的信心。
2. 激发学生对计算机编程的兴趣,培养自主学习、持续探究的精神。
3. 引导学生关注校园环境,提高环保意识,培养学生热爱校园的情感。
课程性质:本课程为实践性较强的Java编程课程,通过设计校园导游咨询系统,使学生将所学知识应用于实际项目中,提高编程能力和解决实际问题的能力。
学生特点:学生已经掌握了Java编程基础,具有一定的编程能力,但面向对象编程和事件处理等方面尚需加强。
教学要求:注重理论与实践相结合,引导学生通过自主探究、团队协作的方式完成课程任务,提高学生的编程技能和综合素养。
同时,关注学生的情感态度价值观培养,使学生在学习过程中得到全面发展。
二、教学内容1. 面向对象编程基础:- 类与对象的概念及关系- 成员变量和局部变量的区别与使用- 方法的定义、调用及重载- 构造方法的作用及定义2. Java异常处理:- 异常的概念及分类- try-catch语句的使用- 异常的抛出和自定义异常3. Java事件处理:- 事件监听器接口及事件类的概念- 常用事件监听器及事件适配器- 事件处理方法的设计与实现4. Java图形用户界面设计:- Swing组件的概述及使用- 布局管理器的选择与运用- 菜单、对话框及工具栏的设计与实现5. 校园导游咨询系统设计与实现:- 系统需求分析- 功能模块划分- 数据存储与操作- 界面设计与实现教学内容安排与进度:第一周:面向对象编程基础,完成类的定义、对象创建及方法调用第二周:Java异常处理,实现对可能出现的错误进行捕获和处理第三周:Java事件处理,实现导游咨询系统的用户交互功能第四周:Java图形用户界面设计,设计并实现系统界面第五周:整合前面所学知识,完成校园导游咨询系统的设计与实现教材章节关联:《Java程序设计》第3章:面向对象编程基础《Java程序设计》第5章:异常处理《Java程序设计》第6章:事件处理与图形用户界面设计教学内容确保科学性和系统性,结合课程目标,以实践为导向,使学生能够将所学知识应用于实际项目中,提高编程能力和解决实际问题的能力。
Java校园导航课程设计论文一、教学目标本课程的目标是让学生掌握Java编程语言的基本语法和编程思想,能够运用Java编写简单的校园导航系统。
具体的学习目标如下:1.知识目标:–掌握Java的基本语法和数据结构;–理解面向对象编程的基本概念和方法;–了解校园导航系统的基本原理和实现方法。
2.技能目标:–能够使用Java编写简单的程序;–能够运用面向对象编程思想设计和实现校园导航系统;–能够使用Java开发工具进行程序的编译和运行。
3.情感态度价值观目标:–培养学生对编程语言的兴趣和热情;–培养学生解决问题的能力和创新精神;–培养学生团队协作和沟通交流的能力。
二、教学内容根据课程目标,教学内容主要包括Java基本语法、面向对象编程和校园导航系统的设计与实现。
具体的教学大纲如下:1.Java基本语法:–变量和数据类型;–运算符和表达式;–控制结构和函数。
2.面向对象编程:–类和对象的概念;–封装、继承和多态的原则;–常用类库和接口。
3.校园导航系统的设计与实现:–校园导航系统的基本原理;–地图数据结构和算法;–路径规划和导航算法。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过讲解Java的基本语法和编程思想,让学生掌握编程的基础知识;2.讨论法:通过小组讨论和课堂讨论,培养学生的思考能力和团队协作能力;3.案例分析法:通过分析具体的校园导航系统案例,让学生理解和掌握导航系统的设计与实现方法;4.实验法:通过编程实验,让学生亲手编写代码,培养学生的实践能力和创新精神。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用《Java编程语言》作为主要教材,系统地介绍Java编程的基础知识;2.参考书:提供《Java核心技术》等参考书籍,供学生深入学习;3.多媒体资料:制作PPT和教学视频,直观地展示教学内容和案例分析;4.实验设备:提供计算机和编程环境,让学生进行编程实验和实践。
校园导游的课程设计代码一、课程目标知识目标:1. 学生能够掌握校园主要建筑、景点的基本信息,如历史背景、功能用途等。
2. 学生能够运用所学知识,设计出符合校园特色的导游词。
3. 学生了解导游的基本礼仪和沟通技巧,提高校园导游的专业素养。
技能目标:1. 学生能够运用地图、资料等工具,独立完成校园导游词的编写。
2. 学生具备良好的口语表达能力,能够清晰、流畅地为他人介绍校园。
3. 学生能够运用所学知识,解决导游过程中遇到的问题,如突发状况的处理等。
情感态度价值观目标:1. 学生培养对学校文化的热爱,增强校园荣誉感和自豪感。
2. 学生通过担任校园导游,提升自信心、责任感和团队合作意识。
3. 学生在导游过程中,学会尊重他人,关爱自然,传递正能量。
课程性质:本课程为实践性、综合性课程,结合所学知识,培养学生的实际操作能力和综合素质。
学生特点:六年级学生具有一定的知识储备,思维活跃,好奇心强,善于表达,具备一定的团队协作能力。
教学要求:结合学生特点,注重理论与实践相结合,鼓励学生积极参与,充分调动学生的主观能动性,提高课堂实效性。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 校园文化及历史:介绍学校的发展历程、校训、校徽等,让学生了解学校的文化底蕴。
相关教材章节:课本第三章《学校的历史与文化》2. 校园建筑与景点:学习校园内主要建筑、景点的名称、功能、特点等。
相关教材章节:课本第四章《美丽的校园》3. 导游词编写技巧:教授导游词的基本结构、编写方法,指导学生进行创作。
相关教材章节:课本第五章《如何编写导游词》4. 导游礼仪与沟通:学习导游过程中的礼仪规范、沟通技巧,提高学生的职业素养。
相关教材章节:课本第六章《导游的礼仪与沟通》5. 实践操作:组织学生进行实地考察,编写导游词,并进行模拟导游实践。
相关教材章节:课本第七章《实践与操作》教学内容安排与进度:第一周:校园文化及历史学习,了解学校的发展历程、校训、校徽等。
基于Java的校园智能导览系统设计与开发随着信息技术的不断发展,校园导览系统在大学校园中扮演着越来越重要的角色。
传统的纸质地图已经无法满足人们对于快速、准确获取信息的需求,而基于Java的校园智能导览系统则成为了一种新的解决方案。
本文将介绍基于Java的校园智能导览系统的设计与开发过程。
一、系统需求分析在设计与开发校园智能导览系统之前,首先需要进行系统需求分析。
校园导览系统主要面向师生以及校园游客,因此系统需要具备以下功能:地图展示功能:能够显示校园地图,并标注各个重要建筑物和地点。
路线规划功能:用户可以输入起点和终点,系统能够为用户规划最优路径。
景点推荐功能:系统可以根据用户的兴趣推荐附近的景点或活动。
实时定位功能:用户可以通过手机GPS定位功能获取当前位置,并在地图上实时显示。
搜索功能:用户可以通过关键词搜索地点或建筑物,快速定位目标位置。
二、系统设计1. 技术选型基于Java的校园智能导览系统可以采用B/S架构进行开发,前端使用HTML、CSS和JavaScript,后端使用Java语言进行开发。
数据库可以选择MySQL或者Oracle等关系型数据库。
2. 系统架构校园智能导览系统主要分为前端展示层、后端服务层和数据库存储层三部分。
前端展示层负责页面展示和用户交互,后端服务层处理业务逻辑和数据传输,数据库存储层负责数据的存储和管理。
3. 数据库设计在数据库设计方面,可以设计建筑物表、景点表、路径表等相关表格,通过主键和外键建立表与表之间的关联关系,以便实现数据的高效查询和管理。
三、系统开发1. 前端开发前端开发主要包括页面设计和交互逻辑编写。
通过HTML和CSS进行页面布局设计,通过JavaScript实现页面交互逻辑,如地图展示、搜索功能等。
2. 后端开发后端开发主要包括业务逻辑处理和数据传输。
使用Java语言编写后端服务程序,通过Spring框架实现业务逻辑处理,通过RESTful API实现前后端数据传输。
一、需求分析设计一个校园导游系统程序,为来访的客人提供各类效劳的信息查询。
(1).设计工商学院校园无向图,所含的景点很多于10个。
以图中极点表示校内各景点,寄存景点名称、代号、简介等信息;以边表示途径,寄存途径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单途径。
二、设计思路校园旅行模型是由景点和景点之间的途径组成的,因此这完全能够用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的途径。
因此第一应设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,因此需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短途径长度及线路,为方便操作,因此给每一个景点一个代码,用结构体类型实现。
计算途径长度和最短线路时可用弗洛伊德(Floyd)算法实现。
最后用switch选择语句选择执行阅读景点信息或查询最短途径。
3 算法设计概要设计3.1.1 程序中包括的模块(1)主程序模块主函数:void main(void)void cmd(void) cmd修改显示框大小,字体背景颜色,初始化景点,景点信息打印菜单,MGraph InitGraph(void); 3.1.2dj=INFINITY;[0][1].adj=80;/*途径度*/[0][2].adj=180;[0][6].adj=200;[1][11].adj=120;[1][2].adj=100;[2][5].adj=50;[3][4].adj=60;[4][9].adj=140;[5][9].adj=250;[5][7].adj=150;[6][7].adj=190;[6][9].adj=150;[8][7].adj=130;[8][6].adj=50;[10][12].adj=100;[9][10].adj=150;[3][4].adj=190;[5][13].adj=150;[14][7].adj=350;[2][3].adj=190;[2][9].adj=150;[2][11].adj=120;[0][8].adj=120;[1][2].adj=50;[10][12].adj=170;[12][15].adj=160;for(i=0;i<;i++)for(j=0;j<;j++)[j][i].adj=[i][j].adj;return G;界面菜单设计:菜单项选择择void Menu(){printf("\n 武汉工商学院院导游图\n");printf(" ┏━━━━━━━━━━━━━━━━━━━━┓\n"); printf(" ┃ 1.阅读校园全景┃\n"); printf(" ┃ 2.查看所有游览线路┃\n"); printf(" ┃ 3.确信两景点之间最短距离┃\n"); printf(" ┃ 4.查看景点信息┃\n"); printf(" ┃ 5.退出导游系统┃\n"); printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n"); printf("Option-:");}Menu();scanf("%d",&i);while(i!=5){switch(i){case 1:system("cls");Browser(&b);Menu();break;case 2:system("cls");ShortestPath_DIJ(&b);Menu();break;case 3:system("cls");Floyd(&b);Menu();break;case 4:system("cls");Search(&b);Menu();break;case 5:exit(1);break;default:break;}介绍景点:void Browser(MGraph *G){int v;printf("┏━━┳━━━━━━━━━━┳━━━━━━━━━┓\n"); printf("┃编号┃景点名称┃简介┃\n"); printf("┗━━┻━━━━━━━━━━┻━━━━━━━━━┛\n"); for(v=0;v<G->vexnum;v++)printf("┃%-4d┃%-20s┃%-60s\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);printf("┗━━┻━━━━━━━━━━┻━━━━━━━━━┛\n"); }要查找的两个景点的最短距离:用floyd算法求两个景点的最短途径void Floyd(MGraph *G)dj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){ p[v][w][v]=1;p[v][w][w]=1; }}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){ D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i]; }while(flag){ printf("请输入动身地编号:");scanf("%d",&k);if(k<0||k>G->vexnum){ printf("景点编号存!\n请输入动身地编号:");scanf("%d",&k); }printf("请输入目的地编号:");scanf("%d",&j);if(j<0||j>G->vexnum){ printf("景点编号存!\n请输入目的地编号:");scanf("%d",&j); }if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0; }printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总线路%dm\n",D[k][j]); }查看所有游览线路算法计算,引进一个辅助向量D,它的每一个分量D表示当前所找到的从始点v0到每一个终点vi的的长度。
Java基于Dijkstra算法实现校园导游程序本⽂实例为⼤家分享了Dijkstra算法实现校园导游程序的具体代码,供⼤家参考,具体内容如下应⽤设计性实验1.问题描述校⽹导游程序: ⼀个校园有若⼲景点,如正校门、⼈⼯湖、磁悬浮列车实验室、樱花⼤道、图书馆、体育场体育馆和礼堂等。
实现⼀个为来访客⼈提供信息在询服务的程序,如查询景点的详细信息,查询两个景点之间的⼀条最短路径。
2.实验要求(1)设计你所在学校的校园平⾯图,所含景点不少于10个。
(2)来访客⼈可以输⼈任⼀个景点的名称,查询景点的详细信息。
(3)来访客⼈可以输⼈任何两个景点的名称,查询这两个景点之间的⼀条最短路径。
3.实现提⽰以图中的顶点表⽰校园内各景点,存放景点代号、名称和简介等信息;以边表⽰路径,存放路径长度等相关信息,如实验图10.2所⽰。
本题可采⽤邻接⽅阵或邻接表实现图的存储结构,利⽤迪杰斯特拉算法求得最短路径。
该程序“见错就收”、“见好就收”效率⽐较⾼——“剪枝”。
import java.util.ArrayList;import java.util.Scanner;public class TourGuide {private static final Site[] sites = new Site[14];//以地点代号循序存放地点private static final ArrayList<String> arrSites = new ArrayList<>();private static final double[][] matrix = new double[14][14];//⽤来存放地点间的路径长度(对⾓线为0,不存在为INFINITY)static {sites[0] = new Site(0, "正校门", "正校门...");//初始化存放地点的数组sites[1] = new Site(1, "东校门", "东校门...");sites[2] = new Site(2, "西校门", "西校门...");sites[3] = new Site(3, "北校门", "北校门...");sites[4] = new Site(4, "⾷堂", "⾷堂...");sites[5] = new Site(5, "磁悬浮列车实验室", "磁悬浮列车实验室...");sites[6] = new Site(6, "樱花⼤道", "樱花⼤道...");sites[7] = new Site(7, "图书馆", "图书馆...");sites[8] = new Site(8, "体育场", "体育场...");sites[9] = new Site(9, "体育馆", "体育馆...");sites[10] = new Site(10, "游泳馆", "游泳馆...");sites[11] = new Site(6, "礼堂", "礼堂...");sites[12] = new Site(6, "教学楼", "教学楼...");sites[13] = new Site(6, "宿舍", "宿舍...");matrix[0][4] = 35;//初始化地点间的路径长度matrix[0][11] = 5;matrix[1][10] = 75;matrix[1][13] = 10;matrix[2][4] = 30;matrix[2][7] = 5;matrix[3][6] = 15;matrix[3][7] = 50;matrix[3][9] = 15;matrix[3][10] = 20;matrix[4][8] = 60;matrix[4][11] = 40;matrix[5][8] = 45;matrix[5][11] = 10;matrix[8][11] = 50;matrix[9][10] = 20;matrix[9][13] = 100;matrix[11][12] = 25;matrix[12][13] = 20;for (Site site : sites) arrSites.add(site.getName()); //初始化ArrayList,⽤于以字符串的形式按顺序存放地点的名字for (int i = 0; i < sites.length; i++) {//初始化地点间的路径长度if (i != j && matrix[i][j] == 0)matrix[i][j] = Double.POSITIVE_INFINITY;if (i > j)matrix[i][j] = matrix[j][i];}}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int select;while (true) {System.out.println("请输⼊您想了解的信息:\n1.查询地点详细信息\n2.查询地点间的最短路径\n3.退出系统"); select = scanner.nextInt();switch (select) {case 1:System.out.print("输⼊查询地点的名称: ");String siteIntro = query(scanner.next());if (siteIntro != null) {//其实这⾥也可以直接arrSites.indexOf(name)判断System.out.println(siteIntro);} else {System.err.println("输⼊的地点名称不存在!");}break;case 2:System.out.print("输⼊所要查询最短路径的两地的名称(例如:正校门-礼堂): ");String path = findShortestPath(scanner.next());if (path != null) {System.out.println(path);} else {System.err.println("输⼊的所要查询最短路径的两地的名称或者格式有误!");}break;case 3:System.exit(0);default:System.err.println("输⼊的选项有误!");}System.out.println();}}public static String query(String siteName) {int index = arrSites.indexOf(siteName);if (index == -1) {return null;} else {return sites[index].getIntro();}}public static String findShortestPath(String path) {int indexOfSeparator = path.indexOf('-');if (indexOfSeparator == -1) return null;String start = path.substring(0, indexOfSeparator);String end = path.substring(indexOfSeparator + 1);int indexOfStart = arrSites.indexOf(start);int indexOfEnd = arrSites.indexOf(end);if (indexOfStart == -1 || indexOfEnd == -1) return null;return dijkstra(indexOfStart, indexOfEnd);}private static String dijkstra(int start, int end) {int vertexCount = TourGuide.matrix.length;boolean[] isInUSet = new boolean[vertexCount];//数组元素默认初始化为falsedouble[] distant = new double[vertexCount];int[] parent = new int[vertexCount];for (int i = 0; i < vertexCount; i++) {distant[i] = TourGuide.matrix[start][i];parent[i] = start;}isInUSet[start] = true;distant[start] = 0;parent[start] = -1;double minCost = Double.POSITIVE_INFINITY;int minIndex = start;for (int j = 0; j < vertexCount; j++) {if (!isInUSet[j])if (distant[j] < minCost) {minCost = distant[j];minIndex = j;}}if (minCost < Double.POSITIVE_INFINITY) {isInUSet[minIndex] = true;} else {break; //处理的图为⾮连通图,即不输出相应路径(不存在能达到该顶点的路径)}if (minIndex == end)//找到后直接return提⾼效率return printDijkstra(parent, distant, start, end);for (int j = 0; j < vertexCount; j++) {//迭代优化if (!isInUSet[j] && distant[minIndex] + TourGuide.matrix[minIndex][j] < distant[j]) {distant[j] = distant[minIndex] + TourGuide.matrix[minIndex][j];parent[j] = minIndex;}}}return null;}private static String printDijkstra(int[] parent, double[] distant, int start, int end) {int p = parent[end];StringBuilder path = new StringBuilder(arrSites.get(end));while (p != -1) {path.insert(0, arrSites.get(p) + "->");p = parent[p];}return arrSites.get(start) + "->" + arrSites.get(end) + " [" + path + "]: " + distant[end];}}class Site {private int code;private String name;private String intro;public Site(int code, String name, String intro) {this.code = code; = name;this.intro = intro;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getName() {return name;}public void setName(String name) { = name;}public String getIntro() {return intro;}public void setIntro(String intro) {this.intro = intro;}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
校园导游课程设计一、问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
二、实验内容:基本要求:查询各景点的相关信息;查询图中任意两个景点间的最短路径;查询图中任意两个景点间的所有路径;增加、删除、更新有关景点和道路的信息。
选作内容:①求多个景点的最佳(最短)游览路径。
②区分机动车道和人行道。
③实现导游图的仿真界面。
三、数据结构:typedef struct message{int num;//景点代码char name[100];//景点名称char pro[500];//简介}Ciceroni;Ciceroni school[10]={{1,"行政楼\n"},{2,"食堂\n"},{3,"赛博楼,信息分院办公室所在地\n"},{4,"求是楼,实验楼计算机中心\n"},{5,"格致楼,法学管理学院"},{6,"工程实习中心,金工实习\n"},{7,"仰仪楼,机电计测分院\n"},{8,"体育馆,旁边有篮球场`足球场`还有网球场\n"},{9,"一号教学楼,主要以阶梯教室为主\n"},{10,"二号教学楼,小教室为多\n"}}; /*景点名称和简介*/操作:/*给景点之间的路径赋最大值*//*最短路径的C语言函数*//*输出最短路径和最短距离函数*//*输入景点代码查景点名称和简介*//*输入景点代码查到其它景点的最短距离*/四、需求分析:现在大多数学校由于不断扩张,造成学校面积大而造成人们人出游困难的问题,人们如果不熟悉该地点。
找到一个地方就会很困难,然而如果有一个校园导游系统,人们出行就会方便很多。
《数据结构与算法设计》课程设计任务书数据结构与算法设计课程设计专业:数学与应用数学班级:数学1001 学号:姓名:黄涛完成日期:2013.06.16 指导教师:1、程序设计说明书【设计题目】校园导游程序【问题描述】如今的大学校园占地面积广,建筑物繁多,对陌生人在校园很容易迷失方向或不易找到自己的目的地。
为了解决这一问题,我为我校本部校区建立校园导游图,以此给新生和来访客人提供方便快捷的咨询引导服务。
【软件功能】1. 能够对校园整体平面示意图进行浏览。
2. 能够对全校的主要景点的拓扑图进行一个整体情况的预览查询。
3. 能够实现对每个景点详细信息的查询。
4. 能够实现景点与景点间最短路线的查询,采用Dijkstra最短路径算法。
【算法思想】1.为各个功能模块用类封装。
2.采用数据结构有权图的知识来存储各个景点。
3.两个景点之间的最短路径采用Dijkstra算法求最短路径。
即由迪杰斯特拉(Dijkstra)提出的一个按路径长度递增的次序产生最短路径的算法。
该算法的基本思想是:设置两个顶点的集合S 和T=V-S,集合S中存放已找到最短路径的顶点,集合T存放当前还未找到最短路径的顶点。
初始状态时,集合S中只包含源点v0,然后不断从集合T中选取到顶点v0路径长度最短的顶点u加入到集合S中,集合S每加入一个新的顶点u,都要修改顶点v0到集合T中剩余顶点的最短路径长度值,集合T中各顶点新的最短路径长度值为原来的最短路径长度值与顶点u的最短路径长度值加上u到该顶点的路径长度值中的较小值。
此过程不断重复,直到集合T的顶点全部加入到S中为止。
4. 本实验中用到的数据结构:图ADT Graph {数据对象V:景点顶点集数据关系R:R = {VR}VR = {<v,w>| v,w∈V 且P(v,w),<v,w>表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}基本操作P:CreateGraph(&G,V,VR);初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义构造图G。
DestroyGraph(&G);初始条件:图G存在。
操作结果:销毁图G。
ShortestPath(&G,v1,v2);初始条件:图G存在,给定起点v1和终点v2。
操作结果:返回起点v1和终点v2的最短距离和路径。
}【类的设计】1.Jiemian.javaclass All();景点拓扑图界面。
class Plan ():校园平面示意图。
class ChaXun():景点详细信息查询界面。
class LuJing():单源最短路径查询界面。
public class jiemian();主界面。
2.GraphPath.javaclass GraphPath()类。
最短路径算法类。
主要成员变量有:static int MaxEdges = 50;最大边数。
static int MaxVertices = 10;最大顶点数。
static double MaxValue=9999.9; 最大值无。
private char VerticesList[]=new char[MaxVertices];存放顶点的数组。
private double Edge[][]=new double[MaxVertices][MaxVertices];邻接矩阵(存放两个顶点权值)。
private int CurrentEdges; 现有边数。
private int CurrentVertices; 现有顶点数。
public int path[]=new int[MaxVertices]; 存放最短路径上的最后一个经由点。
public double dist[]=new double[MaxVertices];存放最短路径的权值。
主要成员方法:public GraphPath ( ) :构造函数建立空的邻接矩阵。
public int FindVertex (char vertex):查找指定的顶点的序号。
public boolean IsGraphEmpty ( ):判断图是否为空。
public boolean IsGraphFull ( ):判断图是否为满。
public int NumberOfVertices ( ):取得顶点数。
public int NumberOfEdges ( ):取得边数。
public char GetValue ( int i ):按序号取得顶点值。
参数为顶点序号。
public double GetWeight ( int v1, int v2 ):取得一条边的权值,参数为该边的顶点。
public int GetFirstNeighbor ( int v ):取得第一个邻接点的序号。
public int InsertVertex ( char vertex ):插入一个顶点,参数为顶点数据。
public boolean InsertEdge( int v1, int v2, double weight):插入一条边,参数为连接该边的两个顶点及边上的权值。
public boolean RemoveVertex ( int v ):删除一个顶点。
public boolean RemoveEdge ( int v1, int v2 ):删除一条边,参数为所删除边的两个顶点,既删除v1,v2顶点之间的连接边。
public void display():打印邻接矩阵。
public void Dijkstra(int v0,int vj):最短路径的ijkstra算法,参数为起点和目的点。
public void Putpath(int v0):输出Dijkstra算法的结果。
【存储结构设计】图状结构是一种比树形结构更复杂的非线性结构。
在树状结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。
而在图状结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。
因此,图状结构被用于描述各种复杂的数据对象,在自然科学、社会科学和人文科学等许多领域有着非常广泛的应用。
数据存储:采用字符串数组,一维数组,二维数值来存储图中景点及其各边的信息。
1. 景点查询图片数组存储:String tu[]={"img/00.png","img/01.png","img/02.png","img/03.png", "img/04.png","img/05.png","img/06.png","img/07.png", "img/08.png","img/09.png","img/10.png","img/11.png",};2. 景点查询图片信息数组存储:String XX[]={"","西安石油大学校本部南大门,位于西安市电子二路18号!", "一号教学楼建于上个世纪,老的教学楼," +"现在主要用着实验","校本部图书馆,图书馆藏有大量图书","校本部室内体育馆","利学超市","校本部学生食堂","校本部室外体育场地,包括足球场,篮球场,游泳馆和旱冰场等室外运动场地!","西安石油大学校本部北门,位于西安" +"市电子一路!","石油大学校医院","东门主要机动车出入大门","二号教学楼,与西阶教学楼,西阶会议室,东街教学" +"楼为一体建筑,建于本世纪初期!"};3. 最短路径景点图片存储:String CXT[]={"","img/01.jpg","img/02.jpg","img/03.jpg","img/04.jpg","img/05.jpg","img/06.jpg","img/07.jpg","img/08.jpg","img/09.jpg","img/10.jpg","img/11.jpg",};4. 顶点储存:String c[]={"01","02","03","04","05","06","07","08","09","10","11"};5. 边的存储:int v[][]={ //弧{0,1},{0,2},{1,0},{1,2},{1,8},{1,10},{2,0},{2,1},{2,3},{2,4},{3,2},{3,5},{3,6},{4,2},{4,5},{5,3},{5,4},{5,6},{5,8},{5,10},{6,3},{6,5},{6,7},{7,6},{8,1},{8,5},{8,9},{8,10},{9,8},{10,1},{10,5},{10,8}};6. 边上权的存储Double d[]={15,10,15,10,130,280,10,10,80,100,80,150,250,100,20,150,20,100,300,150,250,100,200,200,130,300,100,100,100,280,150,100}; //权【模块划分及调用关系】2.主要模块之间的调用关系及各自功能:<1>.主要模块:模块一:显示校院平面示意图;模块二:主要景点拓扑图查询;模块三:景点详细信息查询;模块四:景点最短路径查询;模块五:单源最短路径查询,Dijkstra算法。
<2>.主要模块之间的调用关系:【模块流程图】1. 主界面2. 平面示意图界面3. 景点拓扑图界面4. 景点详细查询界面5. 景点之间最短路径查询【用户手册】1.安装运行myeclipse8.5.0。