Code Monkey home page Code Monkey logo

bit-software-engineering-homework's Introduction

软件工程项目:电梯调度系统

一、作业要求

  1. 阅读个人软件开发流程(PSP)的相关资料。
  2. 可选的语言包括:C++,C#,Java,Python。运行环境为64bit Windows 10。
  3. 提交的代码要求经过代码质量分析工具的分析并消除所有的警告。如Code Quality Analysis
  4. 完成项目的首个版本之后,请使用性能分析工具来找出代码中的性能瓶颈并进行改进。
  5. 使用单元测试对项目进行测试,并查看测试分支覆盖率等指标;并写出至少10个测试用例确保你的程序能够正确处理各种情况。如Studio Profiling Tools
  6. 使用Git来管理源代码和测试用例,代码有进展即签入本地仓库,定期将进展推送到服务器上,并向主仓库发送Merge Request提交每周工作内容。签入记录不合理的项目会被抽查询问项目细节。
  7. 按照要求发布博客,结合结对项目的实践经历,撰写解决项目的心路历程与收获。 博客与项目明显不符的作业将取消作业成绩。

注意:要求3、4、5根据所选编程语言使用对应的开发工具来完成。

二、需求(共3个阶段)

问题假设

一幢21层的大厦,有4部电梯,乘客的体重:平均70kg,最大120kg,最小40g)。

其他的常量包括:电梯的速度,电梯门开关时间,乘客进出电梯的时间。

大厦的楼层为-1,0,...,20,-1层是地下停车场,1层是大厅。以下是4部电梯的参数:

电梯编号 服务楼层 乘客人数限制 重量限制
1 所有楼层 10 800kg
2 1-10层 10 800kg
3 -1,1-10层 20 1600kg
4 -1,1,11-20层 20 2000kg

注意: 以上参数信息是可以修改,即电梯调度程序可以在初始化时读取配置信息来设置上述参数值。

第1阶段:接口定义

设计一组可用于电梯调度的接口和类定义。主要考虑:

  • 简单
  • 如何提供足够的信息给调度器,以便于能顺利完成调度?
  • 实际驱动电梯的组件是什么?
  • 对何规定乘客的行为?例如当乘客需要从3层到20层时,但是当前电梯不能直达,乘客应如何行动?

第2阶段:实现一个基准调度算法

模仿公交车的调度算法,实现一个“BUS”算法,这大概是用于电梯调度中性能最差的一个算法,也就是说你下一阶段实现的算法的性能至少应高于这个算法。

算法的**是:将电梯当作公交车,从-1层一直到最高层(20层),每一层都停,并且开门,让乘客进出,然后关门,继续向上走。直到最高层,再向下。

第3阶段:实现你的算法,测试及展示

阅读项目wiki中电梯调度算法,自行了解算法的**,尝试实现其中2种算法,并进行性能的比较。

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

使用相同的大厦+电梯参数,同样的乘客模拟数据,可以同时运行两个调度界面,分别加载一个调度算法,显示乘客+电梯在系统中的运行情况,并且有专门的状态显示(时间,载客人数,KPI等)。

模拟运行完之后,可以直观看到哪个调度算法是快速的。

三、实现:

该项目由本人与魏慧聪同学共同完成

代码位于code/elesys中,使用C++ Qt 共同实现

代码的相关文档位于根目录中

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.