[转]电梯调度模拟UI设计

Pairwork ## 祁彦博、黄杨

 

  后来我们听说上次的电梯调度程序要做个GUI?oh天哪调度算法都写出来了还一定要一个UI展现运行过程,早说嘛。早知道就先做个GUI再让写算法,debug的时候就不用眼前一黑……

设计&&实现

  时间很紧,用.NET开发一个不停刷新的窗口这个事情有点像写Java游戏,但是还要显示别的信息,实时更新。没干过,指不定出多少问题。于是我们计划计划设计一步,实现一步,看最后能多到什么程度。

  设计1、首先基本功能是要展现电梯上下的过程

  设计2、提供控制模拟程序运行的方法,按一定帧率自动模拟,暂停、手动下一帧。

  时间很紧,我们不希望改动太多的原有架构,于是选择基于原来的架构实现,将UI作为原控制台程序的一个子模块,同时在原有common中里提供一个IWorld接口,提供暂停、自动模拟、手动模拟等方法,同时提供获取模拟程序内电梯信息、乘客信息的借口,然后使控制台程序实现IWorld。

  虽然显然这不是一个很好的决定,程序员说以后有时间他会重构的你不要相信。

  使用一个Label来显示电梯和电梯剩余空间,改变字体颜色以显示电梯超重状态。将电梯的实际高度投射到窗口的指定高度。按照输入的帧率运行电梯模拟程序,按照不高于30fps的速率刷新窗口(防止刷新过快造成显示不出),这样便能够显示电梯上下的动画。  

  设计3、提供列表显示在楼层等待的乘客详细信息。

  设计4、提供列表显示电梯内的乘客详细信息。

  使用ComboBox来提供选择需要监视的电梯、楼层(可以选择监视所有楼层)。然后需要一个列表来显示乘客信息。我们对C# .NET不是很熟悉,先用ListView,不懂填充数据,然后试了试DataGridView,有问题而且效果不好,后来查了下资料,还是改用ListView来显示,用详细信息试图,每次刷新清空表重新填充内容。虽然刷新效果不是特别好……但是还是能看的。

  设计5、显示每个楼层在等待的乘客数量,并且显示上下行。

  将每个楼层高度投射到窗口高度,和电梯上下那一片放在一起,利用已经统计好的数据进行显示。这里并没有什么难度。

  设计6、实时统计已到达人数、活跃等待人数、实时平均到达时间。

  是一个计算的问题,前两个应该没有什么可以解释的,实时平均到达时间是只考虑当前已经到达的乘客所用的时间,不计算没有还在等待的人。这些信息和乘客详细信息放在一起。

  昨晚这些已然天快亮了,于是就到此为止,模拟的效果也不错。

  截个图

   

  保留了原有的控制台,乘客上下打印出的文字信息依然可以查看。

 

  代码行数就只看UI.sc的就够了,其他框架的改动不统计……

  

 

 

  设计心得:

    展现一个运行过程还是挺有趣的,发现自己的调度算法还是很愚蠢,上下班高峰总有那么几个楼层的人等电梯等的很惨烈……

    有时间就能展现更多……这个设计还是很没人性的,相信我门,有时间我们会写得更好的。PS。Window8下.NET怎么这么难看……

posted on 2013-01-09 20:32  Phoenix菜菜  阅读(390)  评论(0编辑  收藏  举报

导航