|
|
# UrbanHighwayNavigationSystem
|
|
|
|
|
|
# 项目名称 城市公路导航系统
|
|
|
|
|
|
杨腾泽,刘鑫成,李培毅,孙英皓
|
|
|
|
|
|
**摘要**:本项目针对什么问题,实现了哪些功能。为了有效地存储和处理何种数据,采用了何种数据结构。为了解决什么问题,采用了什么算法,算法效率如何。针对其他特定需求做了哪些工作。项目的整体效果如何,有何亮点和创新。
|
|
|
|
|
|
|
|
|
|
|
|
任务分工及完成情况。
|
|
|
|
|
|
|
|
|
|
|
|
工作量占比。
|
|
|
|
|
|
|
|
|
|
|
|
# 1. 系统分析
|
|
|
|
|
|
## 1.1 问题描述
|
|
|
|
|
|
设计一个城市公路导航系统,能够计算出省内及周边任意两个城市之间的导航路径及最短距离。选择一个合适的省份,省内及周边城市数量在 100 个左右(最少不低于 80 个)。查阅相关资料获取邻近城市之间的公路里程数据,建立导航地图。任意指定两个城市作为起点和终点,系统能够计算出两个城市之间的最短距离和导航路径。
|
|
|
|
|
|
(1)基于真实的公路地图数据建立导航地图模型,编制成格式简单的数据文件,包括城市名称,以及邻近城市之间的公路里程数。
|
|
|
|
|
|
(2)系统能够读取导航地图数据文件,建立地图模型,也能够将模型输出成地图数据文件,以便验证模型的正确性。
|
|
|
|
|
|
(3)通过人机交互的方式输入起点和终点城市名称,系统给出最短路径和导航路径上途径的城市名称。
|
|
|
|
|
|
(4)能够读取不同的导航地图进行功能测试。
|
|
|
|
|
|
要求系统运行正常、功能完整;数据结构使用得当,算法有较高的效率;代码规范、可读性高,结构清晰;具备一定的健壮性、可靠性和可维护性。
|
|
|
## 1.2 可行性分析
|
|
|
|
|
|
地图可以用图结构建立模型,每个城市作为图中的一个顶点,城市之间的公路对应图中的边。给定起点和终点的条件下,可以利用最短路径算法求得导航路径。
|
|
|
|
|
|
真实的公路地图数据需要经过预先处理,编辑并保存成便于程序读取和处理的格式。在数据量比较大的情况下,要根据数据的特点采用合适的数据结构。
|
|
|
|
|
|
除了基于真实数据的测试,还可以采用小规模的模拟数据进行测试,以便验证算法的正确性。
|
|
|
|
|
|
明确解决问题的关键,核心数据结构,核心算法等。
|
|
|
|
|
|
确定解决问题的总体思路和方案。
|
|
|
|
|
|
## 1.3 需求分析
|
|
|
|
|
|
### (1)输入和输出
|
|
|
|
|
|
确定系统的主要输入和输出,如可以设定的参数,数据文件等,明确其主要作用。
|
|
|
|
|
|
### (2)数据字典
|
|
|
|
|
|
描述系统中需要处理的所有数据包含的具体信息。例如:
|
|
|
|
|
|
学生 = 学号 + 姓名 + 成绩
|
|
|
|
|
|
### (3)数据文件
|
|
|
|
|
|
系统中需要读取xx数据文件以获取xx数据,或者需要导出xx数据。举例说明xx数据文件的具体格式。
|
|
|
|
|
|
### (4)参数设定
|
|
|
|
|
|
系统开始运行时,需要设置的参数。可以用户手册的形式给出设定参数的过程,如系统提示信息和用户输入等。
|
|
|
|
|
|
### (5)XX功能
|
|
|
|
|
|
其他具体功能。
|
|
|
|
|
|
首先简要说明该功能的主要作用,可以用户手册的形式给出系统提示信息、用户输入和系统输出等。
|
|
|
|
|
|
### (6)XX功能
|
|
|
|
|
|
其他功能逐项列出。
|
|
|
|
|
|
|
|
|
|
|
|
# 2. 系统设计
|
|
|
|
|
|
## 2.1 概要设计
|
|
|
|
|
|
系统划分为几个模块,可以画模块图。
|
|
|
|
|
|
逐个说明每个模块的功能(输入、输出、做什么,这里不写怎么做)。
|
|
|
|
|
|
|
|
|
|
|
|
## 2.2 数据结构设计
|
|
|
|
|
|
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
|
|
### (1)xxx结构
|
|
|
|
|
|
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。
|
|
|
|
|
|
### (2)xxx结构
|
|
|
|
|
|
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。
|
|
|
|
|
|
###
|
|
|
|
|
|
## 2.3 算法设计
|
|
|
|
|
|
首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
|
|
### (1)XXX算法
|
|
|
|
|
|
给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。
|
|
|
|
|
|
### (2)XXX算法
|
|
|
|
|
|
给出核心算法的设计,包括伪代码或流程图。
|
|
|
|
|
|
|
|
|
|
|
|
# 3. 系统实现
|
|
|
|
|
|
说明所使用的语言、开发工具等。
|
|
|
|
|
|
介绍项目的文件结构,以及主要函数的功能。
|
|
|
|
|
|
## 3.1 核心数据结构的实现
|
|
|
|
|
|
描述数据结构的实现方法。
|
|
|
|
|
|
可以配合程序代码加以说明。如:
|
|
|
|
|
|
```cpp
|
|
|
struct LNode {
|
|
|
E data; // 数据元素
|
|
|
LNode *next; // 指向下一个结点的指针
|
|
|
};
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
对该数据结构的特点进行分析。
|
|
|
|
|
|
|
|
|
|
|
|
## 3.2 核心算法的实现
|
|
|
|
|
|
描述算法的实现方法。
|
|
|
|
|
|
可以配合程序代码加以说明。如:
|
|
|
|
|
|
```cpp
|
|
|
// 冒泡排序
|
|
|
void bubble_sort(T a[], int n)
|
|
|
{
|
|
|
......
|
|
|
}
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
对该算法的时间和空间复杂度进行分析。
|
|
|
|
|
|
|
|
|
|
|
|
# 4. 系统测试
|
|
|
|
|
|
描述测试的思路和方法。比如,先用小数据量进行测试,再用真实数据进行测试。
|
|
|
|
|
|
测试应考虑到输入数据的特殊情况。
|
|
|
|
|
|
给出若干测试用例,包括输入、预期结果、运行结果或是否通过测试。运行结果和预期结果一致,为通过测试。
|
|
|
|
|
|
|
|
|
|
|
|
# 5. 总结
|
|
|
|
|
|
概况项目和完成情况。
|
|
|
|
|
|
遇到的问题和解决方法。
|
|
|
|
|
|
个人小结:
|
|
|
|
|
|
杨腾泽:
|
|
|
|
|
|
刘鑫成:
|
|
|
|
|
|
李培毅:
|
|
|
|
|
|
孙英皓:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 参考文献
|
|
|
|
|
|
[1] 严蔚敏, 吴伟民. 数据结构(C语言版). 北京: 清华大学出版社, 2007.
|
|
|
[山东省国道里程表](http://www.onegreen.net/maps/HTML/50213.html)
|