JAVA
航空管理系统
包含欧洲的机场和机场之间航行的飞机。 后者为随机情况,以图像形式展示。
人(GUI), 程序(API)
1、 系统, 实现API
2、 Test harness, 使用API测试系统
3、 基本的GUI, 可以控制和观察到系统运行。必须使用API。
Java Eclipse Project
Oxygen version with JDK 1.8
需求:
系统包含机场和飞机,都呈现在欧洲地图上。系统以“ticks”进行,飞机都从出发点到达目的地。
已给:描述API的接口,欧洲地图,input例子。
API
ISimulation, IPlane, IAirport, ISimulationPublisher, SimulationListener, ISimulationIO, ISimulationLoader, ISimulationLogger
具体的class: GridLocation, SimulationEvent, Traffic, SimulationException
一、
1.1 Class Airport
Airport 实行接口IAirport
至少包含public Airport ( String code,
String name,
GridLocation location)
1.2 Class Plane
Plane 实行接口IPlane
至少包含 public Plane ( String callsign)
1.3 Class ATMSimulation
ATMSimulation 实行接口ISimulation
至少包含默认结构 public STMSimulation ()
实现getPlane(), getPlanes(), getAirport(), getAirports(), getMapDimensions(), setMapDimensions(), movePlaneTo().
实现tick()方法
实现getSimTime()方法
如果客户尝试以同一个呼号增加两架飞机,addPlane() 方法扔出SimulationException
如果给一架新飞机无效的机场作为起始或到达站, addPlane()方法扔出SimulationException()
当飞机到达目的地,让飞机在系统和GUI上消失(飞机应该在到达后落在不同的tick上)
飞机从机场随机起飞,IAirport.setTakeOffProb()设置每个tick可能性
可能性设置为0,1两位数,1为飞机起飞
当新飞机起飞后,它应该出现在出发机场的相同位置
第一架飞机起飞应该称为_001, 例如LHR_001, LHR_002
新飞机不能在起飞的tick上移动
目的地为随机的,但不能是起飞的机场
如果没有其他机场,没有飞机可以起飞
默认下,新机场的飞机不能起飞
要为所有的classes建立JUnit test,使用version 4 来进行测试。 Unit test必须在另一个package, 命名为japrc.test
二、I/O 需要重构类ATMSimulation
2.1 检测并记录airprox incidents
意为当两架飞机过于靠近。当两架飞机在tick出现在相同的格子时,发生airprox。
每一个airprox应该记录一次。如果p1和p2一起出现airprox,只记录一个。
名字应为callsign1, callsign2, x, y, time 2个callsigns代表两架飞机相撞时,x和y为碰撞坐标,time为碰撞发生时间,例如p1, p2, 10, 12, 15; p2, p3, 15, 17, 20。 时间应为相同或增量。文件名为airprox_log_txt
2.2 实现类 SimulationTextLoader, 这个类实现ISimulationLoader.SimulatioinTextLoader至少包含 public SimulationTextLoader ( InputStream airports, InputStream traffic)…
airports 包含机场的信息, traffic包含交通的信息。SimulationTextLoader可以启用应用从文件中读取。文件名字包含line,每一个line被新的line分隔开,如
callsign, source, destination, x, y
x, y为此时飞机坐标, 例如p1, LHR, TXL, 10, 12; P2, LHR, MAN, 15, 27
应要通过ISimulationLoader, 使用ISimulation.loadTraffic()方法,来将内容提供给文件。不能使用其他方法。
当traffic从文件中装载,它应替换已存在的traffic。
三、GUI 需要重构ATMSimulation
3.1 GUI要实现SimulationListener界面,和 通过来自ATMSimulation实现的ISimulationPublisher的addSimulationListener()方法的,用ATMSimulation的注册。 每个对ATMSimulation的更改都要通过notifySimHasChange()方法展示在GUI上。
3.2 增加一个有所有机场的表单,允许使用者选择其中一个。一旦被选择,出现另两个表单—出发和到达表。
每一个机场都要有名字,代码和地点
到达表应有所有正在飞往这里的飞机
出发表应有所有从此处出发,但还没有到达的飞机
3.3 当飞机到达后,在GUI的出发表上将该飞机去掉。
3.4 默认下,新机场的起飞概率为0,在GUI上所有机场应设为0.01
3.5 在GUI上设置欧洲地图,大小适当。
3,6 在每一个tick上,地图上用交叉表示机场,点表示飞机,适当大小和颜色。系统的格和地图的像素比例为1:5, 例如格的坐标为(10,12),地图上应为(50,60);如果飞机和机场重叠,飞机的点应在上;方向箭头要在地图左上角。
3.7 当飞机或机场在GUI上被选中时,图标颜色相应变化。
3.8 在GUI,用户应可以选择机场或飞机。当被选中时,在表单里的相应机场或飞机也应被选中,也要更改颜色。对机场来说,若机场被选中,到达和出发表也要改变。
3.9 GUI里,航班号和机场代号在飞机和机场下面,添加一个按钮来切换。
3.10 在GUI添加一个按钮,切换play和pause, 使用start()和pause()方法。刚开始,GUI应该在pause状态;在play模式下,应禁用tick按钮;GUI随时更新
3.11 增加一个现实airprox incidents的功能
3.12 增加一个按钮,从文本文件中装载traffic 和 airport。
四、文件格式:
所有文件都应在默认下。Eclipse project directory。对于所有的文件,至少要创建一个自己的文件,为了testing。
4.1 Airporx Log File
callsign1, callsign2, x, y, time
例p1, p2, 10, 12, 15
p2, p3, 15, 17,20
4.2 Traffic File
callsign, source, destination, x, y
例p1, LHR, TXL,10, 12
p2, LHR, MAN, 15, 27
Traffic file可以为空。 加载一个文件之后,系统中应没有飞机。文件名为traffic.txt