【软件工程】电梯调度的初步实现 李亚文&&郭莉莉
一、开门见山,代码粘

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace lift
{
public partial class Form1 : Form
{
int destion = ;//目的楼层
int number = ;//所到楼层
public Form1()
{
InitializeComponent();
//this.skinEngine1.SkinFile = "Vista2_color5.ssk";
} private void button21_Click(object sender, EventArgs e)
{
if (destion == )
{
lblWarming.Visible = true;
}
else
{
tmrSeconds.Start();
} } private void lift_click(object sender, EventArgs e)
{
if (destion == )
{
destion = Convert.ToInt32(((Button)sender).Tag);
((Button)sender).BackColor = Color.Red;
if (destion > )
{
number = destion / * + number;
}
}
else
{
MessageBox.Show("你只能选择一个楼层","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
} private void tmrSeconds_Tick(object sender, EventArgs e)
{ if (number < destion)
{
// FormmoveUp();
number++;
foreach (Control item in this.Controls)
{ if (item is Button)
{
if(number<=destion)
{
item.BackColor = Color.LightGray;
}
int index = Convert.ToInt32(item.Tag);
if (index == number)
{
item.BackColor = Color.Green;
}
}
}
lblPostion.Text = (number%).ToString();
}
else if(number>destion)
{
// FormmoveDown();
number--;
foreach (Control item in this.Controls)
{
if (item is Button)
{
//number=destion / 100 * 100 + number;
if (number >= destion)
{
item.BackColor = Color.LightGray;
}
int index = Convert.ToInt32(item.Tag);
if (index == number)
{
item.BackColor = Color.Green;
}
}
}
lblPostion.Text = (number%).ToString();
}
else
{
tmrSeconds.Stop();
foreach(Control item in this.Controls )
{
if (item is Button)
{
int index = Convert.ToInt32(item.Tag);
if (index == destion)
{
item.BackColor = Color.LightGray;
}
}
}
MessageBox.Show(destion%+"层到了", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
destion = ;
number = number % ;
}
} private void button21_MouseLeave(object sender, EventArgs e)
{
lblWarming.Visible = false;
} private void lblWarming_Click(object sender, EventArgs e)
{ } }
}

二、实现思路
1、首先考虑一部电梯运行的情况,乘客上电梯后,通过按按钮确定目的楼层,因此,按钮的click事件是同一个道理,因此用一个函数实现即lift_click;
2、其次考虑按下按钮后,电梯上升和下降,首先比较当前楼层与目的楼层的数值大小,如果目的楼层destion大于当前楼层number,则上升一层则number(所到楼层)加一,否则number-1,将按钮变成绿色表示到达该楼层;
3、然后思考当到达该楼层时候,给出提示框提示。
4、最后考虑四部电梯的情况。
三、开发日志
3月12日 星期三 14:00-16:30
万事开头难,我们今天讨论了具体思路和编程的策略,并且查找了很多资料,做了个界面:

3月13日星期四 16:30-18:50
一部电梯调度的click事件,界面很简单,做好界面以后开始写函数,完成如下:

private void lift_click(object sender, EventArgs e)
{
if (destion == )
{
destion = Convert.ToInt32(((Button)sender).Tag);
((Button)sender).BackColor = Color.Red;
}
else
{
MessageBox.Show("你只能选择一个楼层","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}

3月14日 星期五 18:00-22:00
按下电梯运行按钮,实现了电梯上下楼的功能:

private void tmrSeconds_Tick(object sender, EventArgs e)
{ if (number < destion)
{
FormmoveUp();
number++;
foreach (Control item in this.Controls)
{
if (item is Button)
{
if(number<=destion)
{
item.BackColor = Color.LightGray;
}
int index = Convert.ToInt32(item.Tag);
if (index == number)
{
item.BackColor = Color.Green;
}
}
}
lblPostion.Text = number.ToString();
}
else if(number>destion)
{
FormmoveDown();
number--;
foreach (Control item in this.Controls)
{
if (item is Button)
{
if (number >= destion)
{
item.BackColor = Color.LightGray;
}
int index = Convert.ToInt32(item.Tag);
if (index == number)
{
item.BackColor = Color.Green;
}
}
}
lblPostion.Text = number.ToString();
}
else
{
tmrSeconds.Stop();
foreach(Control item in this.Controls )
{
if (item is Button)
{
int index = Convert.ToInt32(item.Tag);
if (index == destion)
{
item.BackColor = Color.LightGray;
}
}
}
MessageBox.Show(destion+"层到了", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
destion = ;
}
}

这样程序已经可以运行了:
运行结果如下


2014年3月16日 14:00-18:00
编写四个电梯的程序,首先修改界面,但是遇到了很大的问题,如果复制粘贴以后的按钮属性全都相同,四个电梯就像一个电梯一样,后来我们看了半天也没找到解决方案,于是放弃了。界面修改如下:

2014年3月17日 星期一 18:00-23:00
提交程序在即,但是我们还是一个电梯,我们本来想就此罢手,但是我们能这么做吗?不能!!!!!!我们于是仔细看了问题的症结,发现只要修改Tag值和number值就可以达到效果,于是,将第二个电梯的值加了100,第三个电梯的值加了200,第四个电梯Tag值加了300然后修改了number让他变成postion/100*100+number实现利用整型除法的弊端来解决了问题。得到了如下结果:





【软件工程】电梯调度的初步实现 李亚文&&郭莉莉的更多相关文章
- 【软件工程】电梯调度程序需求分析 李亚文&&郭莉莉
2014年3月4日(14:00-16:00) 为了进一步理解电梯工作的原理,我们特地到石家庄铁道大学春晖楼坐了电梯:春晖楼东办共有电梯两部,最高楼层为11层,最低楼层为-1,两电梯可共同使用.结合调查 ...
- [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...
- 电梯调度--c++--软件工程
一.设计思路 (1)将乘客要去的楼层数存起来. (2)假设yi为乘客要爬楼层数之和,yi=n1*|(n1-ni)|+n2*|(n2-ni)|+..+n18*|(n18-ni)| (3)比较y1到y18 ...
- OO电梯调度
告别了三次奇妙无比的求导作业之后,我们就开始搭建一部自己的电梯了.相信我们不同同学的电梯运行方式肯定各具特色吧,但值得肯定的是,在艰苦的走完了三次电梯逐步改进的作业之后,我们的电梯在正常情况下应该是可 ...
- OO第二次博客作业——电梯调度
OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...
- 电梯调度编写(oo-java编程)
第二单元的问题是写一个关于电梯调度的程序. 需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 主要锻炼学生的多线程程序 ...
- OO第二单元总结(多线程的电梯调度)
经过第一单元作业的训练,在做第二单元的作业的时候,要更加的有条理.但是第二次作业多线程的运行,带来了更多的运行的不确定性.呈现出来就是程序会出现由于线程安全问题带来的不可复现的bug.本单元的作业也让 ...
- 电梯调度系统(界面由C图形库编绘)
1.编程题目 电梯调度系统 2.结对编程组员 黄冠译,刘畅 3.编程语言 C语言图形库 4题目要求 编写人员:刘畅,黄冠译 代码如下: # include <stdio.h> # incl ...
- PairProject 电梯调度 【附加题】
[附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. 目前的设计有什么缺点, 你会如何改进它? 1.之前判断电梯是否闲置的函 ...
随机推荐
- 重新安装配置ubuntu的引导菜单
查看分区挂在情况,找到ubuntu所在分区(boot)$sudo fdisk -l 卸载isodevice镜像设备所在盘分区(boot) $sudo umount -l /isodev ...
- 【转载】7 Steps for Calculating the Largest Lyapunov Exponent of Continuous Systems
原文地址:http://sprott.physics.wisc.edu/chaos/lyapexp.htm The usual test for chaos is calculation of the ...
- Learning to write a compiler
http://stackoverflow.com/questions/1669/learning-to-write-a-compiler?rq=1 Big List of Resources: A N ...
- CentOS6.8 MySQL 5.6实现主从复制
主库操作 1.将mysqldump命令添加到/usr/bin中 ln -s /application/mysql/bin/mysqldump /usr/bin/ 2.开启master上的log-bin ...
- MSSQL 创建自定义异常
创建时,必须先创建英文的,否则会报错:必须添加此消息的 us_english 版本后,才能添加 '简体中文' 版本. EXEC sp_addmessage 50001, 15, 'option wro ...
- 不使用spring的情况下原生java代码两种方式操作mongodb数据库
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- php源码之计算两个文件的相对路径
<?php //计算出两个文件的相对路径即path2相对于$path1的相对路径 // http://www.manongjc.com/article/1342.html function ge ...
- 华为RH2285安装过程及经验总结
安装测试 1.由于服务器为二手服务器,噪音相对较大,如果未经改造无法正常使用,当机器第一次运行的时候,我的血压一下升高不少. 第一步 服务器的远程端口和路由器连接在一起 第二步 设置服务器的bio ...
- hive 全局排序
不分发数据,使用单个reducer ; select * from dw.dw_app where dt>='2016-09-01' and dt <='2016-09-18' order ...
- C++ malloc new 的区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存. malloc实现了在堆内存管理中进行按需分配的机制,但是它不提供在C ...