个人项目-地铁出行路线规划程序
截止时间2016.09.17,12:00。
图 1 北京地铁线路
任务:实现一个帮助进行地铁出行路线规划的命令行程序。
要求:
1. 使用Visual Studio Community 2015进行开发,采用C++或者C#语言实现,可以使用.Net Framework,运行环境为64-bit Windows 10。
2. 提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。Code Quality Analysis工具的用法参见:
http://msdn.microsoft.com/en-us/library/dd264897.aspx
3. 请使用性能分析工具来找出代码中的性能瓶颈并进行改进。
4. 写出至少10个测试用例确保你的程序能够正确处理各种情况。
5. 使用Github来管理源代码和测试用例。
作业提交:
- 在个人博客上发布项目源代码的Github链接,以便助教下载,助教将会在测试环境中检查程序的正确性。
- 正确的程序会再进行性能测试,根据性能的好坏进行评分;不正确的程序没有性能的分数。
- 撰写一个博客,要求参见博客作业要求。
需求:
1. 把图1中的所有地铁线路、站点和换乘信息等用一个文本文件(假设名字叫 beijing-subway.txt)的形式保存起来,应保存的信息应包括地铁线路名称、各个地铁站点的名称以及车站换乘信息,使得应用程序可以通过读取这个文件,就能掌握关于北京地铁线路的所有信息。请设计一种文件格式用于保存信息并方便应用程序读取,并说明你采取这种格式的理由。 为了简单起见,所有暂缓开通的站点都认定为已经开通。
2. 实现一个命令行程序(不妨叫 subway.exe),这个程序启动时会读取beijing-subway.txt中的信息,然后等待用户的输入,用户可以输入地铁线路的名称,然后程序就输出此地铁线路的所有站点名称(按某一方向顺序输出即可)。输出站点名称后,程序再次进入等待状态。每一线路的起始站点如下:
地铁线路名称 |
起始站点 |
地铁一号线 |
苹果园 |
地铁二号线 |
积水潭 |
地铁四号线 |
安河桥北 |
地铁五号线 |
宋家庄 |
地铁六号线 |
海淀五路居 |
地铁七号线 |
北京西站 |
地铁八号线 |
朱辛庄 |
地铁九号线 |
郭公庄 |
地铁十号线 |
巴沟 |
地铁十三号线 |
西直门 |
地铁十四号线东段 |
善各庄 |
地铁十四号线西段 |
张郭庄 |
地铁十五号线 |
俸伯 |
地铁八通线 |
四惠 |
地铁昌平线 |
南邵 |
地铁亦庄线 |
宋家庄 |
地铁房山线 |
苏庄 |
地铁机场线 |
东直门 |
3. 程序在读取beijing-subway.txt中信息时,不仅能够处理格式正确的文件,还能够处理各种异常的情况。
4. 在命令行中以-b参数加两个地铁站点名称执行程序时,例如
subway.exe -b station1 station2
将计算从第一个站点station1到第二个站点station2的最短(经过的站点数最少)路线,并返回经过的站点的个数和路径,如果有换乘,请列出换乘的线路。输出格式如下:
4
知春路
知春里
海淀黄庄换乘地铁四号线
中关村
5. 在命令行中以-c参数加两个地铁站点名称执行程序时,例如
subway.exe -c station1 station2
将计算从第一个站点station1到第二个站点station2的换乘最少的最短路线,并返回经过的站点的个数和路径,如果有换乘,请列出换乘的线路。输出格式同上。
附加题:
扩展命令行程序,使其以-a参数加一个地铁站点名称执行程序时,例如
subway.exe –a station
将计算从站点station出发,最快(经过的站点数最少,若一个站点经过多次需重复计算)地遍历地铁的所有车站并回到起点的路线,要求
a. 换乘不出地铁系统,即不能从一个地铁口走到路面,然后从另一个站进去;
b. 只用经过一次,就算经过车站。
程序输出总共经过多少站,以及经过的站名。举例来说,假如地铁系统只有知春路和西土城两个站,从知春路站出发,那么这个程序应该输出:
3
知春路
西土城
知春路
博客撰写要求:
发表在你的个人博客上,也可以同时转发到你的团队博客上来增加你们团队博客的人气。具体要求如下:
1)在开始实现程序之前,使用下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。
2)在你实现完程序之后,使用下述PSP表格记录下你在程序的各个模块上实际花费的时间。
3)记录你在改进程序性能上花费了多少时间,描述你改进的思路,并展示一张性能分析的图(由VS 2015的性能分析工具自动生成),并展示你程序中消耗最大的函数。
4)共享你对程序进行测试的至少10个测试用例,以及说明为什么你能确定你的程序是正确的。
5)说明你在个人项目中学到了什么。
PSP 2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
|
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
|
· Design Spec |
· 生成设计文档 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
|
· Design |
· 具体设计 |
|
· Coding |
· 具体编码 |
|
· Code Review |
· 代码复审 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
|
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
|
· Size Measurement |
· 计算工作量 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
|
合计 |
|