软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]

首先,在分组之前,我和室友薛亚杰已经详细阅读了往届学长的博客,认为电梯调度这个项目应该先做UI会比较好一点,于是动手展开了UI的编写。但分组结果并没有如我们所愿,但我们依然共同进行了UI的编写,最后在两个小组成员的共同努力下,大致实现了UI。希望在第二次结对编程中能够再一起对UI界面进行更新和完善。

UI编写人员

周敏轩 192

薛亚杰 193

另外,特别感谢毛宇大神对我们编写UI界面进行了细致入微的指导。。。

另外,也特别感谢同组队友周萱(149) 吴渊渊(177)对编写UI的支持..

[附加题改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享。目前的设计有什么缺点, 你会如何改进它?

从笔者这个c#白加面向对象白的角度来说,这个电梯调度做的挺不错的,可以让一些对C#不太熟的同学(比如笔者)通过调用一些方法来实现调度。但在做的过程中,笔者也发现了一些问题:

在电梯调度时,需要通过ReqStopAt()这个方法,当一部电梯接到了来自电梯外的方向请求时,他通过该方法前往该楼层,但是按下该请求的乘客并不会这么轻易的走进电梯,因为方向可能不满足其条件,这是,我们需要额外判断一下方向改变电梯的HistoryDirection值来让这个乘客上来,这里我觉得就不太方便了,因为如果要实现一个比较复杂的代码是,往往加入一个方向判断和改变的条件就会让编写难度上升好几个难度,因此导致很多同学也许有很好的算法,但被这些繁琐的条件弄得不从下手。因此,笔者想出的改进方法就是为每个电梯类增加一个访问列表,然后电梯每次根据访问列表自动停在某层,并改变方向,这样同学们只要根据请求规划电梯的访问列表就可以了。

[附加题] 目前的这个测试程序只有命令行界面, 请给它设计UI界面, 显示乘客/电梯的运动, 并实现之。

这个就是我们设计的UI。目前只能显示电梯运行的情况,关于请求和乘客暂时还没有显示。(我能说乘客列表调不出来么?)

TT...向大神咨询了根据算法添加UI的方法...很简单果然..

同一解决方案中新建一个窗体,在winform中实现简单绘图,这里我一开始用tablepanel辅助绘图(方便对齐),但是后来实现的时候发现闪烁感太强,删掉后效果好了很多...

然后新开两个线程,一个跑电梯调度算法,另一个刷新画面,这里采用的时候将四部电梯的label不停的刷Location的方法,还不错.

[附加题]  阅读有关 MVC 和  MVVM 设计模式的文章。说明你写的电梯调度的UI /Algorithm/interface 如何实现了MVC 或MVVM 的算法。

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

在编写UI的时候就用到了MVC的设计方法,首先我们要先搭建模型,然后设计界面,最后为每个部件添加代码(控制器)。这样做的好处有:

1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

[附加题] 我们现在的题目是假设所有电梯到达所有的楼层。  在现实生活中,  多部电梯到达的楼层都不一样。如果是这样 (例如3号电梯能到达10 – 20 层,    4 号电梯能到达5-15 层),整个程序框架和你的电梯调度模块要做什么改变? 请说明你的改进意见

只需要在电梯类中只能加一个可访问楼层的列表,当请求向每个电梯发出时,判断该楼层是否能到。这里可能还需要判断下乘客上电梯后,所到楼层不能到达的情况,为passenger类增加一个退出电梯的方法,然后重新生成请求。这里笔者又想到可以为每个passenger增加一个可上电梯的列表,一开始都可上,一旦执行的退出电梯的方法,就将该电梯拉黑,不再向其发出请求。

软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]的更多相关文章

  1. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    软件工程  ---   Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] 说明结对编程的优点和缺点. 结对编程的优点如下: 在独立设计.实现代码的过程中不 ...

  2. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    作业提交时间:10月9日上课前. Design and implement an Elevator Scheduler to aim for both correctness and performa ...

  3. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:谢勤政-11061197,吴润凡-11061185

    一,关于结对编程 结对编程的优点: 1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力. 2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高 ...

  4. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:刘耀先-11061183,罗凡-11061174

    本次为我们两个人的第一次结对编程.从总体而言,我们对结对编程比单人编程略显不适应.但是经过一段时间的磨合,我们逐渐的习惯了这种编程方式. 1.  结对编程的优缺点 结对编程的优点: (1)       ...

  5. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试][关于电梯调度算法的附加思考]:刘耀先-11061183,罗凡-11061174

    本文为对于电梯调度算法的三个附加题思考 1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. <1>进一步提高API定义 ...

  6. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] --11061188刘强

    结对编程总结 队员:刘强(11061188) 林谋武(11061169) 结对编程: 结对编程的优点: 1.  两个人合作,相比于一个人自己奋斗而言,更能激发自己的潜能:我们在合作过程中,互相学习,互 ...

  7. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:思考题——谢勤政11061197

    第一题: 大楼里面的电梯一般分区域,或考虑思考题第四题的情况,运行楼层不一样的电梯属于不同的区域.然后在接口IRequest和IPassenger还有IElevator里面都加上int area这个属 ...

  8. Pair Project —— Elevator Scheduler

    结对编程人员 12061153 刘丽萍 12061154 冯飘飘 说明结对编程的优点和缺点. 结对编程的优点: 以前都是自己一个人编程,对于相互结对或者团队编程都没有接触过.而自己在写代码时不可避免的 ...

  9. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

随机推荐

  1. C#基础(四)

                                                          语句          到目前为止,我们的程序还只能按照编写的顺序执行,中途不能发生任何变化 ...

  2. 10个实用的PHP正则表达式

    正则表达式是程序开发中一个重要的元素,它提供用来描述或匹配文本的字符串,如特定的字符.词或算式等.但在某些情况下,用正则表达式去验证一个字符串比较复杂和费时.本文为你介绍10种常见的实用PHP正则表达 ...

  3. jquery ajax请求 清除缓存

    使用jquery里load方法或者ajax调用页面的时候会存在cache的问题,清除cache的方法: 调用jQuery.ajaxSetup ({cache:false}) 方法即可.

  4. 利用dns解析来实现网站的负载均衡

    当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :) 传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理 ...

  5. hdu 4604 Deque(最长不下降子序列)

    从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后 ...

  6. HDU 5305 Friends (DFS,穷举+剪枝)

    题意: 给定n个人,m对朋友关系,如果对于每个人,只能刚好选择其所有朋友中的一半的人进行聊天(只是我和我的朋友,不是我的朋友和我的朋友),那么有多少种情况?只要一个选择不同,视为不同情况. 思路: 比 ...

  7. apache开源项目--Synapse

    Apache Synapse一个易于使用.轻量级的XML与Web Services管理和集成中间件.可用于搭建SOA和ESB的基础平台.Apache Synapse支持多种标准包括:XML.XSLT. ...

  8. Java [Leetcode 338]Counting Bits

    题目描述: Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculat ...

  9. git pull冲突解决

    场景:用户UserA修改了文件File1,用户UserB也修改了文件File1并成功merge到了服务器上,而UserA和UserB改动了同一个代码块,当UserA拉取代码时git无法merge此改动 ...

  10. Redis,Memcache,mongoDB的区别

    从以下几个维度,对redis.memcache.mongoDB 做了对比,欢迎拍砖 1.性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mo ...