没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构——电梯模拟的报告.doc
数据结构——电梯模拟的报告.doc
需积分: 34 14 下载量 25 浏览量
更新于2023-03-16
评论
收藏 813KB DOC 举报
不完整但是很有模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五个楼层由下至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来该层候命。五个楼层从下到上的编号为:0、1、2、3、4。除了地下层外,每一层都有一个要求向下的按钮除了第四层外,每一层都有一个要求向上的按钮。对应的变量为:CallUp[0..3]和CallDown[1..4]。电梯内的五个目标层按钮对应的变量为:CallCar[0..4]。
资源详情
资源评论
资源推荐
数据结构课程设计报告 第 1 页,共 页
1.课程设计目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指
定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并
在此过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计任务与要求:
任务
根据教材《数据结构题集(C 语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在
数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理
解和综合运用。
设计题目从《数据结构题集》“第二篇 实习篇”中选取,每班每题不得超过 2 人。
另选题:
学生自选课题
学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固
数据结构课程所学的知识。学生自选课题需在 17 周前报课程设计指导教师批准方可生效。
要求:
1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽
象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与
否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。
2、.设计的题目要求达到一定工作量(300 行以上代码),并具有一定的深度和难度。
3、程序设计语言推荐使用 C/C++,程序书写规范,源程序需加必要的注释;
4、每位同学需提交可独立运行的程序;
5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于 10 页
(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
3.课程设计说明书
数据结构课程设计报告 第 2 页,共 页
一 需求分析
(1)、模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五个楼层由下
至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电
梯的“本垒层”,电梯“空闲”时,将来该层候命。五个楼层从下到上的编号为:0、1、2、3、4。
除了地下层外,每一层都有一个要求向下的按钮除了第四层外,每一层都有一个要求向上的按
钮。对应的变量为:CallUp[0..3]和 CallDown[1..4]。电梯内的五个目标层按钮对应的变量
为:CallCar[0..4]。
(2)、电梯一共有七个状态,即正在开门( Opening)、已开门( Opened)、正在关门
( Closing ) 、 已 关 门 ( Closed ) 、 等 待 ( Waiting ) 、 移 动 ( Moving ) 、 减 速
(Decelerate)。
(3)、 乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦
等候电梯时间过长,他将放弃。对于在楼层内等待电梯的乘客,将插入在等候队列里,每一层有
两个等候队列,一队要求向上,一队要求向下,用链队列来实现。对于在电梯内的乘客,用五个
乘客栈来实现,该乘客要去哪一层,就把他放在相应编号的栈中,对应变量为 EleStack[0…
4]。
(4)、模拟时钟从 0 开始,时间单位为 0.1 秒。人和电梯的各种动作均要耗费一定的时间单
位(简记为 t):
有人进出时,电梯每隔 40t 测试一次,若无人进出,则关门
关门和开门各需要 20t
每个人进出电梯均需要 25t
电梯加速需要 15t
上升时,每一层需要 51t,减速需要 14t
下降时,每一层需要 61t,减速需要 23t
如果电梯在某层静止时间超过 300t,则驶回 1 层候命。
(5)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。
二 概要设计
1、 乘客类型
反映乘客的所有属性。
ADT Client
数据对象:D={a
i
∈乘客信息,I=1,2,…,n,n≥0}
数据关系:R={<a
i-1
,a
i
>|a
i-1
,a
i
∈D,i=2,…,n}
基本操作:
PrintClientInfo(Client const &e,ClientStatus s)
操作结果:输出乘客信息。
CreatClient(Client *&p)
操作结果:生成新的乘客。
DestoryClient(Client *&p)
操作结果:该乘客离开系统。
GoAbove(Client const &e)
操作结果:判断该乘客是否去往高层。
CIn@oor(Client const &e)
操作结果:返回乘客进入的楼层。
CInTime(Client const &e)
操作结果:返回乘客进入时间。
COut@oor(Client const &e)
数据结构课程设计报告 第 3 页,共 页
操作结果:返回乘客进入时间。
}
2、 乘客栈类型
电梯内的乘客用乘客栈表示,去不同楼层的乘客放在不同的栈中。
ADT Estack
数据对象:D={a
i
∈乘客信息,I=1,2,…,n,n≥0}
数据关系:R={<a
i-1
,a
i
>|a
i-1
,a
i
∈D,i=2,…,n}
基本操作:
略。
}
3、 等候队列类型
在电梯外等待的乘客用等待队列表示。每层各有两个等待队列,分别为上楼队列
和下楼队列。
与一般队列不同的是在基本操作中加入了放弃操作 CGiveUp(WQueue &Q,int
@oor)。
4、 电梯类型
表示电梯的各个属性和所有动作。
ADT Elevator
数据对象:D={a
i
∈电梯信息,I=1,2,…,n,n≥0}
基本操作:
InitEle(Elevator &E)
操作结果:初始化电梯类型。
DestoryEle(Elevator &E)
操作结果:销毁电梯类型。
EleDecide(Elevator &E,WQueue w[Max@oor+1][2])
操作结果:电梯动作决策。
ElevatorRun(Elevator &E,WQueue w[Max@oor+1][2]){
操作结果:电梯状态转换。
CountOver(Elevator &E)
操作结果:判断电梯计时是否完成。
EleFloor(Elevator const &E)
操作结果:返回电梯所在的层。
EleStatus(Elevator const &E)
操作结果:返回电梯状态。
RequireAbove(Elevator const &E)
操作结果:判断是否有高层请求。
RequireBelow(Elevator const &E)
操作结果:判断是否有低层请求。
EleAchieved(Elevator &E)
操作结果:判断电梯是否要停于当前层。
EleOpenDoor(Elevator &E)
操作结果:判断电梯是否要开门。
}
5、 高楼模块
实现电梯和乘客之间的互交功能。包括:
数据结构课程设计报告 第 4 页,共 页
InOut(Elevator &E,WQueue w[Max@oor+1][2])
操作结果:进行乘客的进出电梯活动。
NewClient(Elevator &E,WQueue w[5][2])
操作结果:进入新乘客。
PrintStatus(Elevator &E,WQueue w[5][2])
操作结果:输出当前状态。
Print(Elevator &E,Action a)
操作结果:输出电梯动作信息。
6、 主程序
主程序主要处理两类事件:乘客事件和电梯事件。除此之外,主程序还处理各个模块
的初始化和销毁工作,以及电梯状态的输出。
乘客事件包括新乘客到达事件,乘客放弃等待事件,乘客进出电梯事件。
电梯事件包括电梯运行事件。
7、 本程序包含 6 个模块:
(1) 主程序模块
(2) 乘客模块
(3) 乘客栈模块
(4) 电梯模块
(5) 等待队列模块
(6) 高楼模块:实现电梯和乘客之间的互交。
各模块之间的调用关系如下:
三 详细设计
//所有常量,全局变量和类型定义
#define NULL 0 //空指针
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define INT_MAX 32767
//Status 是函数类型,其值是函数结果状态代码
typedef int Status;
#define Empty 0
//------------------------------------------------------
//电梯状态
主程序
电梯模块
乘客栈模块
等待队列模块
乘客模块
高楼模块
数据结构课程设计报告 第 5 页,共 页
enum EleStatus{Opening,Opened,Closing,Closed,Moving,Decelerate,Waiting};
enum Action{DoorOpened,DoorClosed,GoingUp,GoingDown,Achieved,None};
enum EleStage{Up,Down,OpenDoor,Stop};
enum ClientStatus{New,GiveUp,In,Out,Finish};
#define CloseTest 40//电梯关门测试时间
#define OverTime 300 //电梯停候超时时间
#define Accelerate 15//加速时间
#define UpTime 51 //上升时间
#define DownTime 61 //下降时间
#define UpDecelerate 14 //上升减速
#define DownDecelerate 23 //下降减速
#define DoorTime 20 //开门关门时间
#define InOutTime 25 //进出电梯时间
#define Maxfloor 4 //最高层
#define Minfloor 0 //最低层
long Time=0; //时钟
long MaxTime;//系统运行最长时间
int InOutCount=0;//用于进出计时
int InterTime=0;//下一乘客进入系统的时间
int ID=0; //乘客编号
int GiveUpNumber=0;//乘客放弃的数目
int TotalTime=0;//总共等待时间
部分重要操作的算法:
1、判断运动方向函数 EleDecide 的算法:
2、统计高层和低层的请求(不包括当前层)。
3、高层和低层均无请求:发出 Stop 命令。
4、否则,
1)若电梯在上升期:
1. 若有高层请求:上升;
2.若无高层请求:转下降期,下降。
2)若电梯在下降期:
1. 若有低层请求:下降;
2. 若无有低层请求:转上升期,上升。
判断电梯是否要停于当前层函数 EleAchieved 的算法:
1. 该层的 CallCar 为 1;
2. 该层在上升(下降)期有上升(下降)请求(判断 CallUp 或 CallDown);
3. 上升(下降)期高(低)层没有请求而该层由下降(上升)请求,要转换运行时期。
判断电梯动作函数 ElevatorRun 的算法:
1. 若电梯在 Opening 状态,则转至 Opened 状态。
2. 若电梯在 Opened 状态,若无人进出,则转至 Closing 状态。
3. 若电梯在 Closed 状态,则根据电梯请求情况转至相应状态。
4. 若电梯在 Closing 状态,则转至 Closed 状态。
5. 若电梯在 Moving 状态,若达到目标层,则转至 Decelerate 状态。否
剩余21页未读,继续阅读
xiaoniu_love_program
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 27页智慧街道信息化建设综合解决方案.pptx
- 计算机二级Ms-Office选择题汇总.doc
- 单链表的插入和删除实验报告 (2).docx
- 单链表的插入和删除实验报告.pdf
- 物联网智能终端项目设备管理方案.pdf
- 如何打造品牌的模式.doc
- 样式控制与页面布局.pdf
- 武汉理工Java实验报告(二).docx
- 2021线上新品消费趋势报告.pdf
- 第3章 Matlab中的矩阵及其运算.docx
- 基于Web的人力资源管理系统的必要性和可行性.doc
- 基于一阶倒立摆的matlab仿真实验.doc
- 速运公司物流管理模式研究教材
- 大数据与管理.pptx
- 单片机课程设计之步进电机.doc
- 大数据与数据挖掘.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0