软件工程 --- 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. 24个有用的PHP类库分享

    目前,PHP是用于Web开发的最流行的脚本语言.你可以在互联网上随手找到关于PHP大量资料,包括文档.教程.工具等等.PHP不仅是一种功能丰富的语言,它还能帮助开发人员轻松地创建更好的网络环境.为了进 ...

  2. java类的加载以及初始化顺序

    类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题.从网上查阅了若干文章,现总结如下: 我们通过一段代码来了解类加载和初始化的顺序: package com.classl ...

  3. 【转载】git命令和svn的对比

    首先,要明确的是,git和svn是完全不同的两种管理方式.他们的命令不是完全对等的. 下面只是一些相似方法的参考,而已. 参考 http://blog.csdn.net/chen198746/arti ...

  4. POJ2796 单调队列

    Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 8041   Accepted: 2177 Case Ti ...

  5. Qt之进程间通信(IPC)

    简述 进程间通信,就是在不同进程之间传播或交换信息.那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是& ...

  6. Jqgrid demo-史上最强大,没有之一

            为了大家能够更好的学习和使用Jqgrid网格插件,我决定用Strtus2+Spring+hibernate+Jquery+Jqgrid实现一个Jqgrid网格插件的demo.当然官方网 ...

  7. web请求报出 “超过了最大请求长度” 【注意:重启IIS】

    摘自:http://www.cnblogs.com/loalongblogs/archive/2012/10/16/2726372.html web请求报出 “超过了最大请求长度”   错误原因:as ...

  8. AJAX在GBK编码页面中传中文参数乱码的问题

    ---恢复内容开始--- 页面编码是GBK的情况下传递中文有乱码,解决方法如下: 在ajax传递前用若是Array,JSON,等其它对象,可用JSON.stringfy字符串序列化后,赋值给ajax传 ...

  9. 配置ORACLE 客户端连接到数据库

    --================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...

  10. context.Response.End()的用法和本质

    using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Web_C ...