title: theSubway
date: 2019-09-17 16:54:00
tags: cnbolgsWork
---

地铁线路项目需求及实践简要分析

地址:GitHub Pages(提高阅读体验)
GitHub: Repo(项目地址)

需求分析

  1. 设计地铁线路的文件存储格式
  2. 设计读取文件的命令行程序
  3. 能够输出具体地铁线的所有站点
  4. 能够查询两个站点间的最短路线
  5. 通过code analyze
  6. 进行性能检查
  7. 进行单元测试

实现思考

本次作业的最大两个任务是设计文件存储的格式,和查询两个站点的线路。

文件存储的格式的最简陋设计就是常见的sample input规定按次序输入有意义字符的模式,但是从人的理解和容易编写来说,可以使用json或者xml语言来描述地铁线路。对于我来说json便于减低我的编码难度,并且描述一段地铁线路可能更加简洁。但是xml的标签形式非常便于人类理解。本着尽可能压榨自己的劳动来体现实力的原则,我决定使用xml类似的标签语言。
对程序来说,地铁线路的关键是两条线路的公共节点。所以这种存储类型应该规定是否要显式的声明一个地铁站点是公共节点。或者用户只要输入每个地铁线的站点自动推测公共站点。后者除了方便使用之外也会带来一些问题,就是同名站点的会被推测为公共站点,和可能会有多个对象描述同一站点的问题。但是从现实角度来看,没有一个城市的地铁会存在相同名字的站点,而后一个问题能够从程序设计方面来规避,所以应该选择不显式声明的模式。

查询线路功能用简单的图的遍历算法就能完成了,从实现后的性能考虑和我对算法实现的熟练度来说应该选择c++来完成项目。不过考虑到本次实现的功能简单,城市地铁的线路在java也能够在可接受的时间内完成,并且已经选择了xml形式的路线声明,选择java来编写项目能够使用的技术环境更完善,所以最后确定使用java来编写这次项目。
这也带来了额外好处,就是code analyze 和性能检查的复杂度显著减低了。

文件存储格式设计

标签设计

1.xml声明

<?xml version="1.0"?>

在文件的最开始,需要声明这是一个xml文件

2.根节点

<root>

这是根节点,所有的有效内容都需要被包含在内

3.线路标签

<line name="lines'name">

在root标签内,用line标签标识一个地铁线路,用name属性来标识线路的名称,如“一号线”
4.站台标签

<station name="stations'name">

在line标签内用station标签声明一个地铁站,这标识这个地铁站已经被添加进该条线路。如果这是一个公共站点,需要在两条线路都添加这个地铁站,程序会自动的将它识别为公共站点。

设计说明

以上就是暂定的文件存储设计。最终从易用性的角度考虑,我选择了标准xml语言来实现文件存储。
显然,用上面的三种标签已经能够很好的表示一个城市的所有地铁线路,并且用这种方式来存储,能够有很好的可拓展性,如果未来有其他的需求,可以继续添加标签,并且以前的程序不会因为新的标签的加入就不能工作。

01-18 10:39