热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

电梯调度实施

关于电梯调度的实施过程(二)

                                                                                 关于电梯调度的实施过程(二)

                                                        ——杨波 崔海营

        一.需求分析    

                 为了更加好的完成结对项目的开发,我们又做了进一步需求分析。对于一座大厦中电梯的运行,首先无疑是要更加好的满足于乘客的需求,争取在最短的时间中调度电梯给予乘客使用,与此同时还应该考虑到一天中各个楼层的乘客流量,相应的为其分配载重最为合适的电梯。然后我们所要考虑的便是突发情况的处理,其中突发情况包括电梯停电,火灾预警,电梯自身故障等。在处理过程中,可以在电梯内部设置报警按钮或者是在主操控室中采用人工处理等方法。

       二. 分析与设计

                1).电梯类   lift

                        属性的设置如下:

                         

        public int order;                           //电梯的序号
public int direct_lift; //电梯运行方向,1表示向上,0表示静止,-1表示向下
public double time; //乘客和电梯相对应时的等待时间
public int Tf; //电梯位置
public double t; //电梯经过一层的时间
public double mostWeight; //电梯的最大载重量
public int mostPeopleNumber;//电梯的最大载人数
public double presentWeight;//电梯的当前载重量
public double presentPeopleNumber;//电梯的当前人数
public double tCloseDoor; //电梯的关门时间
public double tOpenDoor; //电梯的开门时间

                    方法设计如下:

lift(int d, int T, int order1, int mostPeopleNumber1)
{
order
= order1;
direct_lift
=d;
Tf
=T;
t
=5;//注意延时函数调用
mostPeopleNumber = mostPeopleNumber1;
}
int getd()
{
return direct_lift;
}
int getTf()
{
return Tf;
}
public double liftPassenger_time(passenger a)//计算乘客选择需求后,需要等待的时间
{
if (a.direct_p == 1) //乘客需求向上
{
if (Tf > a.Tp)
{
if (direct_lift == 1)
time
= (40 - Tf + a.Tp) * t;
else if (direct_lift == -1)
time
= (Tf + a.Tp) * t;
else
time
= (Tf - a.Tp) * t;
}
else if (Tf < a.Tp)
{
if (direct_lift == 1)
time
= (a.Tp - Tf) * t;
else if (direct_lift == -1)
time
= (Tf + a.Tp) * t;
else
time
= (a.Tp - Tf) * t;
}
else
time
= 0;
}
if (a.direct_p == -1) //乘客需求向下
{
if (Tf > a.Tp)
{
if (direct_lift == 1)
time
= (40 - Tf - a.Tp) * t;
else if (direct_lift == -1)
time
= (Tf - a.Tp) * t;
else
time
= (Tf - a.Tp) * t;
}
else if (Tf < a.Tp)
{
if (direct_lift == 1)
time
= (40 - a.Tp - Tf) * t;
else if (direct_lift == -1)
time
= (40 + Tf - a.Tp) * t;
else
time
= (a.Tp - Tf) * t;
}
else
time
= 0;
}
return time;
}
public void liftReply(passenger p) //电梯对乘客到达响应
{
int temp;
System.DateTime currentTime
= new System.DateTime();
temp
= currentTime.Second;
do
{
if ((temp + (Math.Abs(p.getTR()-p.getTp()))*t)%60== currentTime.Second)
{
Console.WriteLine(
"您已到达!");
break;
}
}
while(true);
}
//注意不断更新电梯位置和方向的函数。
public int peopleNumberlimit() //乘客人数超载响应处理
{
if (presentPeopleNumber > mostPeopleNumber)
return 1;
else
return 0;

}

 

   

              2).乘客类  passenge

                    属性设置如下:

        public  int direct_p;     //1表示向上,-1表示向下
public double weight; //单个乘客重量
public int Tp; //乘客按铃时所在楼层
public int TRequire; //乘客需求楼层

                   方法设计如下:

passenger()
{
weight
=75.0;
}
public void setPassengerD(int d)//乘客的需求方向
{
direct_p
=d;
}
public void setPassengerTp(int d)
{
Tp
=d;
}
public void PassengerRequire(int TRequire1)//乘客想要去的位置
{
TRequire
= TRequire1;
}
public int getTR()
{
return TRequire;
}
public int getTp()
{
return Tp;
}
public int passengerdangerous() //乘客的应急危险响应
{
return 1;
}

              3)界面设计如下:

                    最上面的四个textbox显示的是四个电梯运行状态;

                    下面0-20为楼层的层数;

                     UP和DW分别为各个楼层对应的上或下,即乘客的需求方向选择按键;

                     一号电梯,二号电梯,三号电梯和四号电梯分别对应着乘客对于电梯的选择;

                     中间的textbox对应着给乘客推荐的电梯以及相应信息的提示;

                     接下来的0-20为电梯内部的选择按钮;

                     开门,关门和呼叫按钮;

                     最下面的为主操控室对于电梯的应急处理操作;

                     TEXTBOX为主控室的各个电梯的运行状态;

       三.调试过程中所遇到的问题

           1). 做界面中对一些控件和自定义类的交互,真心感到无力,泪奔啊。

    2),对怎样将程序包装成一个可用可跨平台的成熟软件,也感到无力迷茫啊。

        四.思想感触

            这次的编程过程让我们都感触颇深,而我个人的感受便是如果一个人的思想使应用程序可以供给十个人实施,那么一个团队的思想便可以使其融入整个世界。而相应的

        在团队中自己才可以真正的发现自己的缺点和不足,那样才有机会加以改正。其中我发现了自己当初学习时的马虎以及知识的不扎实的缺点,同时也发现编程能力确实有

        待提高。

         附录1:时间记录日志(2014年)

           

工作者 时间 工作内容
杨波,崔海营

 3.8 8:40-12:00

 3.9 16:20-18:40

讨论整个编程过程以及查阅相应的资料
杨  波  3.12  12:00-15:00  编译环境的安装
杨  波  3.13   16:20-17:40 图形界面的设计
崔海营  3.13  20:00-21:20 编写等待时间函数
杨  波  3.15   14:18-16:40 编写电梯类和乘客类及相应调度函数
 杨波,崔海营  3.15    17:10-21:20 代码的最后整合
  崔海营  3.16    13:45-15:20 博客书写
杨  波  3.16     15:25-16:10 博客校正

                电梯的算法设计请见:stud_bo的博客  !                   

 

                    

   

   


推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
手机用户2502921281_649
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有