一、开门见山,代码粘

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实现利用整型除法的弊端来解决了问题。得到了如下结果:

【软件工程】电梯调度的初步实现 李亚文&&郭莉莉的更多相关文章

  1. 【软件工程】电梯调度程序需求分析 李亚文&&郭莉莉

    2014年3月4日(14:00-16:00) 为了进一步理解电梯工作的原理,我们特地到石家庄铁道大学春晖楼坐了电梯:春晖楼东办共有电梯两部,最高楼层为11层,最低楼层为-1,两电梯可共同使用.结合调查 ...

  2. [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

    一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...

  3. 电梯调度--c++--软件工程

    一.设计思路 (1)将乘客要去的楼层数存起来. (2)假设yi为乘客要爬楼层数之和,yi=n1*|(n1-ni)|+n2*|(n2-ni)|+..+n18*|(n18-ni)| (3)比较y1到y18 ...

  4. OO电梯调度

    告别了三次奇妙无比的求导作业之后,我们就开始搭建一部自己的电梯了.相信我们不同同学的电梯运行方式肯定各具特色吧,但值得肯定的是,在艰苦的走完了三次电梯逐步改进的作业之后,我们的电梯在正常情况下应该是可 ...

  5. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  6. 电梯调度编写(oo-java编程)

    第二单元的问题是写一个关于电梯调度的程序. 需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 主要锻炼学生的多线程程序 ...

  7. OO第二单元总结(多线程的电梯调度)

    经过第一单元作业的训练,在做第二单元的作业的时候,要更加的有条理.但是第二次作业多线程的运行,带来了更多的运行的不确定性.呈现出来就是程序会出现由于线程安全问题带来的不可复现的bug.本单元的作业也让 ...

  8. 电梯调度系统(界面由C图形库编绘)

    1.编程题目 电梯调度系统 2.结对编程组员 黄冠译,刘畅 3.编程语言 C语言图形库 4题目要求 编写人员:刘畅,黄冠译 代码如下: # include <stdio.h> # incl ...

  9. PairProject 电梯调度 【附加题】

    [附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. 目前的设计有什么缺点, 你会如何改进它? 1.之前判断电梯是否闲置的函 ...

随机推荐

  1. 重新安装配置ubuntu的引导菜单

     查看分区挂在情况,找到ubuntu所在分区(boot)$sudo fdisk   -l   卸载isodevice镜像设备所在盘分区(boot) $sudo  umount  -l  /isodev ...

  2. 【转载】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 ...

  3. Learning to write a compiler

    http://stackoverflow.com/questions/1669/learning-to-write-a-compiler?rq=1 Big List of Resources: A N ...

  4. CentOS6.8 MySQL 5.6实现主从复制

    主库操作 1.将mysqldump命令添加到/usr/bin中 ln -s /application/mysql/bin/mysqldump /usr/bin/ 2.开启master上的log-bin ...

  5. MSSQL 创建自定义异常

    创建时,必须先创建英文的,否则会报错:必须添加此消息的 us_english 版本后,才能添加 '简体中文' 版本. EXEC sp_addmessage 50001, 15, 'option wro ...

  6. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  7. php源码之计算两个文件的相对路径

    <?php //计算出两个文件的相对路径即path2相对于$path1的相对路径 // http://www.manongjc.com/article/1342.html function ge ...

  8. 华为RH2285安装过程及经验总结

    安装测试 1.由于服务器为二手服务器,噪音相对较大,如果未经改造无法正常使用,当机器第一次运行的时候,我的血压一下升高不少. 第一步  服务器的远程端口和路由器连接在一起 第二步  设置服务器的bio ...

  9. hive 全局排序

    不分发数据,使用单个reducer ; select * from dw.dw_app where dt>='2016-09-01' and dt <='2016-09-18' order ...

  10. C++ malloc new 的区别

    1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存. malloc实现了在堆内存管理中进行按需分配的机制,但是它不提供在C ...