软件工程团队项目——subway

 

目录

零、分工

一、GitHub地址

二、PSP表格

三、控制台程序解题思路

1. 建模思路和文本信息

2. Dijkstra算法——/b功能

3. /c功能实现

4. /a功能实现

5. 换乘优化

6./z测试功能实现

四、控制台程序实现

1. Dijkstra算法——/b功能代码

2. /a功能代码

3./z测试功能代码

五、控制台程序性能分析

六、控制台黑盒测试

1./b功能

2./a功能 部分结果

3./c功能

4./z测试功能

七、界面设计

1.界面设计思路

2.将C++封装为dll

3.图形界面的实现

4.绘图功能的实现

5.界面功能基本完成

八、个人感悟


零、分工

控制台:张玉伟

GUI:   徐志涛

一、GitHub地址

github地址:https://github.com/ZhangWuren/SE-Team-Project

二、PSP表格

PSP 过程

预估耗时

(分钟)

实际耗时

(分钟)

Planning 计划 10  
·Esitimate ·估计耗时 10 15
Development 开发 1020  
·Analysis ·需求分析 30 120
·Design Spec ·生成设计文档

120 

200
·Design Review ·设计复审 30 20
·Coding Standard ·代码规范 30 60
·Design ·具体设计 150 120
·Coding ·编码 300 2400
·Code Review ·代码复审 60 30
·Test ·测试 300 100
Reporting 报告 130  
·Test Repor ·测试报告 60 30
·Size Measurement ·计算工作量 10 30

·Postmortem & 

 Process Improvement

 Plan

·总结,改进计划 60 30
  总计 1160 3155

 

三、控制台程序解题思路

1. 建模思路和文本信息

在本项目中,建模的对象是北京地铁图,在建模的过程中,建立了两个类,分别为类Station类Map。类Map包含了类Station,具体的类图在项目完成后展示。

在文本数据beijing-subway.txt中,记录了地铁站及其对应的线路,举例如下

1 苹果园
1 古城
1 八角游乐园
1 八宝山
1 玉泉路
1 五棵松
1 万寿路
1 公主坟-10
1 军事博物馆-9
1 木樨地
1 南礼士路
1 复兴门-2
1 西单-4
1 天安门西
1 天安门东

首列为当前线路,接着是对应的站名,-表示当前车站为换乘车站,跟着的是换乘线路,多个换乘线路用“,”隔开

经统计,北京市地铁最新的不重复地铁站数量为330。

 

2. Dijkstra算法——/b功能

在/b功能的实现过程中,将问题抽象出来,就是一个无向图最短路问题,整个地铁图为无向图,寻找两点之间站点最少的路线。很容易想到的就是曾经学过的Dijkstra算法。在Dijkstra算法中,重要的是设置邻接矩阵。

 

3. /c功能实现

/c功能是输出整条线路,只需要简单的输出同一条线路上的地铁站即可。

 

4. /a功能实现

/a功能是从选定站点出发,遍历全部的站点。在思考全遍历功能时,想起了之前相似的问题有tsp问题,哈密顿回路,欧拉回路等。其中tsp问题要求每个节点只能访问一次,和哈密顿回路类似。欧拉回路则是要求每个边都访问一次。这里的全遍历功能和它们都不太一样,本题强调要遍历所有站点,对于边并不做要求,只要点遍历到了,有的边甚至是可以忽略的,同时每个点的访问次数也可以是多次的。

经过在网络上搜索相关资料,决定采用贪心策略+dijkstra算法,从给定起点start开始,随机选取一个没有路过的节点作为end,用之前/b功能的dijkstra算法找到这两个点之间的最短路。接着将end作为新的start,再选取没有经历的节点最后end,直到所有点都遍历结束,最后再返回给定的初始start。在这个过程中,dijkstra算法的结果是局部最优解,运用贪心的策略,可以判定整个遍历的过程也可取到最优的解。

5. 换乘优化

题目中要求,换乘时因为各种原因,相当于坐了三个站。一开始我陷入了难题,因为每个站点都是独立的,譬如“公主坟”这个换乘站,公主坟既在1号线,又在10号线,在不考虑换乘为3站的情况下,它和“万寿路”军事博物馆“”莲花台“西钓鱼台”这四个站点的邻接矩阵权值都是1,但是考虑换乘优化时,权值要根据上一站点变化,陷入了僵局。

(所说权值均表示邻接矩阵权值)后来经过很长时间的思考,就是设置多个同名的换乘站表示不同地铁线上的同一个换成站,同名换乘站之间权值为0,同线路前后站权值为1,不同线路前后站权值为3。用“公主坟”举例,即创建一个1号线上的公主坟,一个10号线上的公主坟,1号线上的公主坟和“万寿路”军事博物馆“权值为1,和”莲花台“西钓鱼台”权值为3表示换乘,和10号线上的公主坟权值为0,因为同个站点本质上是在一起的,能够成功的解决换乘优化问题。

6./z测试功能实现

/z功能也比较简

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值