




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计学 院: 信息科学与工程学院专 业: 计算机科学与技术班 级: 计算机1112班学 号: 20111221249学生姓名: 田 丰指导教师: 赵亚欧2013 年 3 月 10 日电梯模拟系统一、实验内容 基本要求:1、 模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五个楼层由下至上一次为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。2、 乘客可随机地进出于任何层。对每个人来说,他有一个能忍耐的最长等待时间,一旦等候电梯时间过长,他将放弃。3、 模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要耗费一定的时间单位(简记为t)。4、 按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。选作内容:1、 增加电梯数量,模拟多电梯系统2、 某高校的一座30层住宅楼有三部电梯,每梯最多15人。大楼每层8户,每户平均3.5人,每天早晨平均每户有3人必须在7时之前离开大楼去上班或上学。模拟该电梯系统,并分析分别在一梯、二梯和三梯运行情况下,下楼高峰期间各层的住户应提前多少时间后梯下楼?研究多提运行最佳策略。二、数据结构设计 栈的定义如下: /定义栈结构体typedef struct SNodeint Number; /乘客编号struct SNode *next;SNode,*Stack;/定义栈的操作int InitStack(Stack &S); /初始化栈int EmptyStack(Stack S); /检测栈是否为空int GetTop(Stack S); /获得栈顶元素int Push(Stack &S,int number); /入栈int Pop(Stack S); /出栈队列的定义如下:/定义队列节点typedef struct QNodeint Number; /乘客编号 int InFloor; /进电梯楼层int OutFloor; /出电梯楼层int GiveupTime; /忍耐时间int Time; /进入系统的时间struct QNode *next;QNode,*QueuePtr;/定义队列typedef structQueuePtr front; /队首指针QueuePtr rear; /队尾指针Queue;/定义队列的操作int InitQueue(Queue &Q); /初始化队列int EmptyQueue(Queue Q); /检测队列是否为空QNode GetFront(Queue Q); /获得队首元素QNode GetElem(Queue Q,int i); /获得第i个元素int GetLength(Queue Q); /测量队列长度int EnQueue(Queue &Q,QNode elem); /入队int DeQueue(Queue &Q); /出队int DeElem(Queue &Q,int i); /删除第i个元素void PrintQueue(Queue &Q); /输出队列三、算法设计3.1 功能模块图3.2 算法思路3.2.1实现方法void Welcome(void); /欢迎界面void EnSystem(void); /进入系统void QueueElevator(void); /排队等候电梯int IsQueue(void); /检测是否进入系统(可以排队等候电梯)void Giveup(void); /放弃等候电梯void EnElevator(void); /进入电梯void DeElevator(void); /离开电梯void ChangeState(void); /改变电梯状态void OpenDoor(void); /打开电梯门void CloseDoor(void); /关闭电梯门void InAndOut(void); /乘客进出电梯void UpElevator(void); /电梯上升void DownElevator(void); /电梯下降void Search(void); /查询下一步指示void SetState(void); /置Statevoid Thread(void); /线程控制3.2.2 设计思想(1)定义全局变量int MaxTime; /系统运行最长时间int SystemTime=0; /系统时间int Floor=1; /电梯当前位置int D1=0,D2=0,D3=0; int State=Idle; /电梯当前状态int CallCarMaxFloor=0; /出电梯按钮int CallUpMaxFloor=0; /进电梯按钮(上)int CallDownMaxFloor=0; /进电梯按钮(下) Queue Q; /系统队列Queue QueMaxFloor2; /等候电梯队列Stack ElevatorMaxFloor; /电梯栈 (2)主函数模块int main(int argc, char* argv)int i;int TimeMeter=0; /初始化系统队列InitQueue(Q); /初始化等候队列for(i=0;iMaxFloor;i+)InitQueue(QueiGoingUp-1);InitQueue(QueiGoingDown-1); /初始化电梯栈for(i=0;iMaxFloor;i+)InitStack(Elevatori); /欢迎界面Welcome(); /乘客进入系统EnSystem();printf(n电梯在1楼静候t(系统时间:%dt)n,SystemTime);while(SystemTime=MaxTime)/线程控制Thread();/初始化状态,电梯在一楼静候if(State=Idle & !D1 & !D3)for(i=0;iMaxFloor;i+)if(CallUpi | CallDowni)break;if(i=Floor) /乘客在该层等候 if(CallUpi) State=GoingUp; if(CallDowni) State=GoingDown; OpenDoor();else if(iFloor & i=300)D2=0;if(Floor!=1) printf(电梯已经静候300t,即将到达一楼静候t(系统时间:%dt)n,SystemTime); SetState();TimeMeter=0;return 0;(3)其他模块说明(用文字描述,不要代码)1、欢迎界面在运行界面中输出“欢 迎 来 到 电 梯 模 拟 系 统”和“请输入乘客信息”字样,提示用户输入相关信息。2、进入系统通过“请输入第i位乘客信息”等提示信息引导用户输入每一位乘客的信息,并对所输入的信息进行逻辑检查,若发现错误,提示用户重新输入。全部乘客信息输入结束后,计算出系统运行的最长时间(MaxTime),并将全部乘客信息暂时存储在队列Q中。3、 检测是否进入系统(可以排队等候电梯)检测队列Q中乘客进入系统的时间(Time)是否小于或等于系统时间(SystemTIme),若是,返回1;若非,返回0.4、 排队等候电梯将队列Q中的乘客信息转移到队列数组QueInFloorstate中,InFloor表示乘客等候电梯(进入电梯)的楼层,state表示乘客上楼还是下楼。5、 放弃等候电梯将队列数组Quefloorstate中忍耐时间(GiveupTime)小于系统时间(SystemTime)的乘客信息删除掉(出队)。6、 进入电梯将队列数组InFloorstate中的乘客信息转移到栈ElevatorOutFloor中,OutFloor表示乘客离开电梯的楼层,并将CallCarOutFloot置1。7、 离开电梯将栈ElevatorOutFloor清空。8、 改变电梯状态如果没有乘客等待电梯(CallCar、CallUp、CallDown都为零),置电梯的状态(State)为静候(Idle);如果电梯的状态为上升(GoingUp),检测电梯楼上(Floor+1MaxFloor)是否有乘客等候电梯,若有,状态不变,若没有,状态置反;如果电梯的状态为下降(GoingDown),检测电梯楼下(Floor-10)是否有乘客等候电梯,若有,状态不变,若没有,状态置反。9、 打开电梯门10、 关闭电梯门将CallCarFloor置零。如果电梯状态上升,将CallUpFloor置零;如果电梯状态下降,将CallDownFloor置零。11、乘客进出电梯检测是否有乘客进出电梯。若有,依次执行DeElevator()和EnElevator();若无,再进行76t时间的重复检测,76t之后,仍然没有乘客进出电梯,电梯门关闭。12、 电梯上升若电梯处于顶层(MaxFloor),停止上升,否则电梯上升一层。之后,检测是否要开门,需要则开门,否则执行ChangeState()和Search()。13、 电梯下降若电梯处于底层(0),停止下降,否则电梯下降一层。之后,检测是否要开门,需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实名制管理制度及流程在人力资源
- 江西省都昌鼓书的传承发展研究
- 兰州跨境电商综试区商务发展环境评价研究-基于生态系统视角
- 基于CNN和FPGA的稻米品种识别与质量检测研究
- 不同尺度的旋转压电能量收集器动力学研究
- 葛连调糖丸治疗湿热内蕴型2型糖尿病合并肥胖的临床研究
- 排球公开比赛活动方案
- 教育开年活动方案
- 捐赠帮扶活动方案
- 教师书香活动方案
- 中意纸质文物脱酸技术应用与思考
- 中央民族大学强基校测面试题
- 2025年安徽省中考生物试卷真题(含答案)
- 2024年中国陕西省煤炭工业行业调查研究报告
- 两金占用管理制度
- 2025年 中国南水北调集团新能源投资公司第一批中层及考试笔试试卷附答案
- 叙事护理学智慧树知到答案2024年中国人民解放军海军军医大学
- 六年级主题班队会记录表(6个表)
- 租赁房屋交接清单
- 吊顶检验报告(共5页)
- (word完整版)山西省普通高中毕业生登记表
评论
0/150
提交评论