【软工个人项目-地铁出行路线规划程序】

---恢复内容开始---

1.源代码地址:https://github.com/qiao1406/BeijingSubway

2.使用的语言:C++

 编程环境:Visual Studio 2015/Windows 8 64-bit 虚拟机(ps:自己的电脑上死活装不成功世界上最好的IDE,只好装在虚拟机上了

3.PSP表格-计划时间与实际花费时间

3.测试样例

具体详见GitHub,这里贴几个帮助我改正了bug的样例

3.1 -b 苹果园 土桥

1号线和八通线的换乘模式是【双换乘】即:四惠和四惠东这两个站是同时属于一号线和八通线的,而根据我之前写的判断换乘的算法从【苹果园】-【土桥】在经过这两个站的时候没有输出换乘的信息,我原先的算法是根据连续的三个站是否在同一条线上来判断的,这样的判断方式对于其他的站点来说都是适用的,然而在这里,由于【四惠】、【四惠东】、【高碑店】都属于八通线,所以之前的判断方式不对,这里应该要有四个站来判断,所以,我根据这一特殊的情况,使用了【高碑店】、【大望路】两个站来判断【1号线】和【八通线】的换乘,修正了bug

3.2 -c 丰台东大街 泥洼

当选择以换乘最少原则的时候,从丰台东大街到泥洼的方案是坐到六里桥倒10号线,而原先的算法在判断换乘的时候是在到达【西局】的时候判断其和【六里桥】和【七里庄】是否在一条线上,然而这个奇妙的三角形上的三个站居然是两两共线的,所以之前的判断方式就失效了,于是我针对这一特殊情况增加的新的判断代码,有点类似于3.1中的方式,于是这个bug也修复了

3.3 -c 知春路 北京南站

按照换乘最少的原则,从【知春路】到【北京南站】的最佳方案是从【知春路】上车坐13号线到【西直门】换4号线,换乘1次

然而有另外一种换乘1次的方案:坐10号线到【角门西】再倒4号线,我的程序最先找到的是第二种方案,因为我最先的算法是只要找到了换乘最小的方案立即停止寻找,没有考虑到距离的因素,于是我的改进是增加了对每次换乘最小的方案进行距离的测算,在满足最小换乘原则的先决条件下,优先选择距离最短的那个方案

4.性能改进

4.1性能分析图

在改进性能之前我的程序中消耗cpu资源最多的是getStationIndex(string name)这个函数,它的代码如下,它的作用是遍历车站的数组,寻找到车站名称和name相同的那个,并且返回那个车站的下标值,若不存在则返回-1

int getStationIndex(string name) {
	int rst = -1;

	for (int i = 0; i < st_num; ++i) {
		if (st_arr[i].name == name) {
			rst = i;
			break;
		}
	}

	return rst;

}

 我改进这个函数的方式:用map<string,int>来存储<车站名,下标>的键值对,然后要得到下标的时候直接可以返回

4.2 改进后的性能分析图

效果显著,占用的百分比从32降到了7

5 个人所得

5.1 这是我第一次写C++的程序,而且规模还不小,代码总行数大概有7、800行吧,刚开始因为不太了解这个语言,所以踩了挺多坑的,但是经过查阅C++相关的书籍以及在网上查找了一些有关C++的资料之后,这些问题都得到了很好的解决

5.2 这一次也是我第一次使用Visual Studio 2015来编码,虽然它难装难卸还经常卡死,但我知道它是个好IDE

5.3 当一个程序写出来之后不能就不管了,因为你只是对它进行了简单的测试,并不能认为它就是完美无缺的,后期的维护及其重要

---恢复内容结束---

时间: 2024-10-20 07:18:18

【软工个人项目-地铁出行路线规划程序】的相关文章

结对项目-地铁出行路线规划程序

1 本程序由14061041谷大鑫和14061035崔正龙共同编写. github项目网址:https://github.com/nrm1/subway_GUI 注:由于之前github管理的问题,我与崔正龙同学的代码均为手动合并,初步完成后才由我上传,因此github上提交记录次数较少,而且全由我提交,提交时间也比较晚,但实际上我们从一接收到题目就开始编写题目了. 本程序使用方法: subway_GUI.exe (输入线路名则输出整个线路站名) subway_GUI.exe -b 知春路 北京

软件工程个人项目-地铁出行路线规划程序

项目前时间预测(非附加要求): PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 6.5h Development 开发 · Analysis · 需求分析 (包括学习新技术) 20min · Design Spec · 生成设计文档 - · Design Review · 设计复审 (和同事审核设计文档) - · Coding Standard · 代码规范 (为目前的开发制定

个人项目-地铁出行路线规划程序

PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 1day Development 开发 · Analysis · 需求分析 (包括学习新技术) 10min · Design Spec · 生成设计文档 1min · Design Review · 设计复审 (和同事审核设计文档) 1min · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 1mi

结对项目-地铁出行路线规划程序(续)

结对人员:杨金键 谢振威 金豪(顺序无特殊含义,仅因照片从左到右这个顺序) 结对编程优点:及时发现bug,纠正编程习惯,及时纠正可能带来问题的编程思路 缺点:效率太低,时间开销大. 个人优点: 金豪:积极主动,想法灵活,认真学习 谢振威:刻苦努力,代码质量高bug较少,认真负责 杨金键:认真刻苦,勤于实践,思路明了 个人缺点: 金豪:遇到奇怪问题.. 谢振威:闷声发大财 杨金键:眼高手低,当修复bug的时候经常改这里忘了那里,导致产生新的bug..动手能力还是太差了. 设计方法: 在动手写代码之

结对项目—地铁出行路线规划

结对项目—地铁出行路线规划 我的搭档:陈鸿超 14061216 https://github.com/ChengFR/PairProgramming_SubwayRoute- 会在十一期间发布新版本 结对编程体会: 结对编程的优点: 站在软件开发的角度,两个人共同面对同一台电脑进行开发,无论是效率还是软件质量都要超过一个人进行开发的情况. 对于还处于学习阶段的年轻软件开发者来说,结对编程是一个很好的互相学习的机会 结对编程时动力.责任感更强 结对编程的缺点: 对于我们来说,寻找两个人共同的时间进

地铁出行路线规划程序

工程:实现一个帮助进行地铁出行路线规划的命令行程序. 使用PSP表格记录预估将在程序的各个模块的开发上耗费的时间. PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 10h Development 开发 · Analysis · 需求分析 (包括学习新技术) 30min · Design Spec · 生成设计文档 无 · Design Review · 设计复审 (和同事审核设

个人项目-地铁出行路线

---恢复内容开始--- 地铁出行路线 https://github.com/ChengFR/PersonalProgram_SubwayRoute 时间预期 PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 Development 开发 · Analysis · 需求分析 (包括学习新技术) 3h · Design Spec · 生成设计文档 1h · Design Revie

个人项目-地铁出行线路规划程序

PSP表格 PSP 2.1 Personal Software Process Stages Planning Time(H) Used Time(H) Planning 计划 0.5 0.25 · Estimate · 估计这个任务需要多少时间 0.5 0.25 Development 开发 25.5 45.9 · Analysis · 需求分析 (包括学习新技术) 10 13 · Design Spec · 生成设计文档 2 3 · Design Review · 设计复审 (和同事审核设计

个人项目-地铁出行路线规划的简要分析

guthub repositories 个人博客园主页 支持环境: windows7,10,macOS,Linux 需求分析: 读取自定义地铁文件: 程序需要能够成功地解析并载入不同的地铁系统,实现数据与程序的解耦 查看地铁线路: 实现地铁系统的详情查询操作 最短线路: 帮助用户推算出最优乘坐路线 实现思路: 所有数据文件都采用.csv的格式储存 站点名称, 所属线路及坐标, 是否开通 刘园, (1号线,0), 是 西横堤, (1号线,1), 是 果酒厂, (1号线,2), 是 西站, (2号线