软件工程 --- 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. 用paint 计算字符串的像素宽度

    方法1: //直接返回参数字符串所占用的像素宽度 Paint paint = new Paint(); width = paint.measureText(str); 有一些view可以直接得到pai ...

  2. WinCE启动次数的记录

    最近一周一直在忙于测试NAND文件系统的稳定性和可靠性,今天终于有所进展.测试组所有同事齐上阵,加上小高和我,测试了一天,都未发现问题.虽然还不能保证完全OK,但至少有所改善了. 测试组今天主要做了文 ...

  3. android线程池

    线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理.当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程 ...

  4. Ionic开发中常见问题和解决方案记录

    1npm按装包失败 更换源:npm config set registry https://registry.npm.taobao.org 或者使用cnpm sudo npm install -g c ...

  5. EF4.0和EF5.0增删改查写法区别

    1 public T AddEntity(T entity) 2 { 3 //EF4.0的写法 4 添加实体 5 //db.CreateObjectSet<T>().AddObject(e ...

  6. I.MX6 开启 1000Mb/s interface

    /*********************************************************************** * I.MX6 开启 1000Mb/s interfa ...

  7. HDU 3844 Mining Your Own Business(割点,经典)

    题意: 给出一个连通图,要求将某些点涂黑,使得无论哪个点(包括相关的边)撤掉后能够成功使得剩下的所有点能够到达任意一个涂黑的点,颜料不多,涂黑的点越少越好,并输出要涂几个点和有多少种涂法. 思路: 要 ...

  8. Java [Leetcode 136]Single Number

    题目描述: Given an array of integers, every element appears twice except for one. Find that single one. ...

  9. Ruby基础数据类型

    #数字分为证书Integer,浮点数Float(对应与其他语言中的double),和复数Complex #整数又分为Fixnum和Bignum,Fixnum和Bignum会互相转换,这些都是ruby自 ...

  10. android学习笔记五

    Android中的category大全 Api Level 3(SDK 1.5)和Api Level 4(SDK 1.6): android.intent.category.ALTERNATIVE a ...