电梯多线程调度——最终版详细设计

                        ——小组成员:何晓楠,刘铸辉

  1.时间进度表

时间

3.10-3.12

    3.12

3.13

3.14上午

3.14下午

3.15上午

3.16上午

3.16下午

  3.17

3.18-3.19

3.20

何晓楠

通过查阅资料和视频学习C#界面制作和多线程的处理

编写elevator类和

ElevatorController类

设计电梯界面

研究多线程的实例,编写电梯开关门,内部外部按钮事件

把我们做的代码和界面进行整合

讨论电梯调度的优化问题,并进行单元测试,设置测试用例

 界面的完善

完成alpha

和其他组讨论载重限制问题,并尝试我们的设想

载重与出入功能的界面设计

编写载重功能测试用例

刘铸辉

添加事件代码

界面的设计与修改

优化部分方法

编写出入人数和载重限制的代码

完成最终版

 

    经过几天的奋战,我们终于完成了最终版。

  2.电梯说明

  1.电梯内部视图 1~20为相应的楼层。 按下即可响应相应楼层,按下后变成红色即被响应;

  2.最右边是楼层示意图,当电梯到达相应楼层后,红色的响应就会取消,会有关门图片变为开门图片;

  3.中间外部的38个按钮(4部电梯共享此按钮),△表示向上请求,▽表示向下请求;

  4.最上面的电梯运行参数设置,是设置每台电梯运行速度,载重限制,上下人数是否正常运行等参数的;

  下面是整个界面:

 【结对项目开发】电梯多线程调度——最终版

  3.程序设计图

    3.1电梯状态转移图

【结对项目开发】电梯多线程调度——最终版

  4.程序关键实现思想

  4.1多线程调度

  在这里我们用的C#多线程Thread方法进行调度。下面用具体过程介绍在电梯中C#多线程的用法。

  当外部请求按下4楼向上的请求时

  1。程序首先初始化所有按钮及四部电梯,然后调用电梯调度类ElevatorController中upOrDown方法,判断是内部请求还是外部请求,以及是上楼还是下楼,此时是外部,上请求然后当前面板被显示为红色。

  2.此时判断电梯是否在执行任务,发现电梯1未执行任务,初始化多线程Thread类,调用ThreadStart方法启动线程1。关键代码如下:

 

 1  /// <summary>
 2         /// 操作电梯判断
 3         /// </summary>
 4         /// <param name="BiaoJi">标记选择</param>
 5         /// <param name="type">响应类型</param>
 6         /// <param name="select">选择哪一个类型</param>
 7         public void upOrDown(int BiaoJi, int type, int select)
 8         {
 9             if (BiaoJi == INTERIOR)
10             {
11                 if (type == ELE1)
12                 {
13                     ele_1.setPanel(select);
14                 }
15                 else if (type == ELE2)
16                 {
17                     ele_2.setPanel(select);
18                 }
19                 else if (type == ELE3)
20                 {
21                     ele_3.setPanel(select);
22                 }
23                 else if (type == ELE4)
24                 {
25                     ele_4.setPanel(select);
26                 }
27                 else
28                 {
29                     Exception ex = new Exception("电梯类型出错!");
30                     throw ex;
31                 }
32             }
33             else if (BiaoJi == EXTERIOR)
34             {
35                 if (type == UP)
36                 {
37                     uppanel[select] = true;
38                 }
39                 else if (type == DOWN)
40                 {
41                     downpanel[select] = true;
42                 }
43                 else
44                 {
45                     Exception ex = new Exception("EXTERIOR type 错误");
46                     throw ex;
47                 }
48             }
49             else
50             {
51                 Exception ex = new Exception("BiaoJi错误");
52                 throw ex;
53             }
54 
55             //判断电梯是否在执行任务
56             if (!ele_1.nowrun)
57             {
58                 ele_1.nowrun = true;
59                 Thread th1 = new Thread(new ThreadStart(run_ele1));
60                 th1.IsBackground = true;
61                 th1.Start();
62             }
63             else if (!ele_2.nowrun)
64             {
65                 ele_2.nowrun = true;
66                 Thread th2 = new Thread(new ThreadStart(run_ele2));
67                 th2.IsBackground = true;
68                 th2.Start();
69             }
70             else if (!ele_3.nowrun)
71             {
72                 ele_3.nowrun = true;
73                 Thread th3 = new Thread(new ThreadStart(run_ele3));
74                 th3.IsBackground = true;
75                 th3.Start();
76             }
77             else if (!ele_4.nowrun)
78             {
79                 ele_4.nowrun = true;
80                 Thread th4 = new Thread(new ThreadStart(run_ele4));
81                 th4.IsBackground = true;
82                 th4.Start();
83             }
84         }
upOrDown(电梯操作方法)

相关文章:

  • 2022-01-04
  • 2022-01-30
  • 2022-01-24
  • 2021-12-31
  • 2021-06-18
  • 2021-09-27
  • 2022-01-03
猜你喜欢
  • 2021-07-25
  • 2022-12-23
  • 2022-12-23
  • 2021-10-11
  • 2021-07-08
  • 2022-01-06
  • 2022-02-10
相关资源
相似解决方案