设计题目: 电梯模拟系统。
院系: 计算机科学与技术学院
班级。学号。
设计者。语言:delphi
运行环境:delphi 7.0
硬件:无要求。
问题及难点所在。
本次程序的难点是处理电梯在某一时刻的状态、动作以及对下一时刻的状态和动作作出**和判断。程序的重点在于确定电梯的各个状态以及运行方向,处理各种请求,对每一个动作和状态的时间进行处理。其它的活动体如乘客则相对独立,处理起来更为容易一些。
由于电梯运**况比较复杂,所以采用面向对象的编程语言,使程序实现起来比较简单,并且界面也比较容易设计。
算法设计的思想。
1、初始化。
初始化电梯基本信息,如运动状态,所在层数,是否收到请求等。
2、响应各请求。
响应前先判断电梯对应此时刻的运动状态,若此时处于停留在某一楼层,则先判断目标运动方向是否相同,若相同,则采用就近原则,若目标运动方向不相同,则采用先请求先响应原则。若此时处于运动状态,则要考虑请求是内部请求还是外部请求。总的原则是若有内部请求,则先响应。
只有内部请求时,采用最短路程原则。在内部响应进行时,若有外部请求,则要判断其外部请求的运动方向是否与电梯运动方向相同,若相同,则响应外部请求。否则等内部请求响应完成后再响应外部请求。
3、输出信息。
通过delphi编译出可视化界面,形象地输出电梯基本信息,如运动状态,所在层数,开关门状态等。
算法的流程图。ny
ny外请求。内请求。ny
图一:算法流程图。
算法的设计与分析。
private
mshowin:boolean判断groupboxin是否可见。
mshowout:boolean判断groupboxout是否可见。
canmove:boolean用来延迟一会循环。
whichclick:integer判断是开门还是关门。
imagel:integer门**的left
imagew:integer门**的width
elet:integereleshape的top
doorready:boolean电梯门是否准备好。
elemove:boolean电梯是否运动。
movedrect:integer电梯运动方向。
elelocatefloor:integer电梯所在楼层。
nowcall:integer现在几楼要求电梯运动。
targetfloor:integer电梯运动的目标楼层。
mincallup:integer电梯外部向下运动的最低楼层。
maxcalldown:integer电梯外部向上运动的最高楼层。
targetobject:integer电梯内部要求运动的楼层。
nowtarget:integer现在电梯内部要求运动的楼层。
downarray:array[2..7] of boolean; /外部向下运动的按纽。
uparray:array[1..6] of boolean外部向上运动的按纽。
targetarray:array[1..7] of boolean; /内部运动的按纽。
procedure waittwosecond等待2秒,一等待过程,不一定是1秒。
procedure waitonesecond等待1秒,同上。
procedure dooropenclose开门关门动作。
procedure eleincall(now:integer); 电梯里面要求运动。
procedure eleoutcall(now:integer); 电梯外面要求运动。
procedure lighton(nowstate:integer); 点亮所在楼层字体。
procedure lightoff(nowstate:integer); 关掉所在楼层字体。
procedure downoff(nowstate:integer); 关掉向下按纽。
procedure upoff(nowstate:integer); 关掉向上按纽。
procedure targetoff(nowstate:integer); 关掉内部按纽。
procedure doorbitopen实现开门动作。
procedure doorbitclose实现关门动作。
procedure wait3sec实现等待3秒。
procedure waitformove用来等待shape的运动。
procedure showin用来使groupboxin可见。
procedure showout用来使groupboxout可见。
procedure lightofftarget用来是关掉内部按纽颜色。
function moverequire():integer; /运动一回合后是否还要运动。
function getnowcallup():boolean; /是否还有向上的请求。
function getnowcalldown():boolean; /是否还有向下的请求。
function getinman(sender:tobject): integer;//计算进入电梯人数。
function getoutman(sender:tobject):integer;//计算走出电梯人数。
运行结果与分析(测试)
运行成功后界面如下:
图二:初始化界面(2)
图三: 电梯运动界面(1)
图四: 电梯开门界面(3)
总结(收获与体会)
在两周内就完成了数据结构课程设计。虽然课程设计已告一段落,但是还有好多东西需要去调试,学习。通过这次设计,我学到了许多书本上学不到的知识,增强了自己的动手能力,熟悉了delphi语言。
我十分珍惜这次锻炼的机会,我如期的完成了自己的设计任务,但由于知识水平有限,仍然存在很多的不足之处。今后在学习其他专业课时,我会珍惜每一次上机机会,锻炼自己的动手能力,加强专业知识,以适应毕业后从事计算机等方面的工作。
附:源**。
unit unit1;
interface
useswindows, messages, sysutils, classes, graphics, controls, forms, dialogs,stdctrls, buttons, extctrls;
typetform1 = class(tform)
groupbox1: tgroupbox;
floor7: tlabel;
floor2: tlabel;
floor1: tlabel;
floor5: tlabel;
floor3: tlabel;
floor4: tlabel;
floor6: tlabel;
groupbox2: tgroupbox;
eledoorstate: tlabel;
eledown2: tbitbtn;
eleup2: tbitbtn;
eleup3: tbitbtn;
eledown3: tbitbtn;
eledown4: tbitbtn;
eleup4: tbitbtn;
eledown5: tbitbtn;
eleup5: tbitbtn;
eleup6: tbitbtn;
eledown6: tbitbtn;
eledown7: tbitbtn;
target7: tbitbtn;
target6: tbitbtn;
target1: tbitbtn;
target4: tbitbtn;
target5: tbitbtn;
target2: tbitbtn;
target3: tbitbtn;
doorclose: tbitbtn;
eleup1: tbitbtn;
doortimer: ttimer;
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...