数据结构课程设计报告(完整版)[1] 联系客服

发布时间 : 星期二 文章数据结构课程设计报告(完整版)[1]更新完毕开始阅读02ab3b5ab72acfc789eb172ded630b1c59ee9b96

第二题:电梯模拟

1、需求分析:

模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

而题目的最终要求输出时:

按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。 2、设计 2.1设计思想: (1)数据结构设计

本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来表示电梯的各种状态的:

enum {up,down,stop,home}State(home); 同时初始化最初状态为电梯在本垒层。而在电梯的运行过程中对于乘客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息: typedef struct passage { int now;//乘客当前所在的位置 int dis;//乘客的目地地 int wait;//最长的等待的时间 int waitnow;//已经等待的时间 struct passage *next; }Passage;

虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息: typedef struct lift { int count_C;//计数电梯已到达的层数 int count_A;//系统的总时间计数器 记得必须初始化为0 int flag_in[High];//九个楼层有无请求的标志 哪个楼层如果有请求 该标志置1 int num;//等待队列中的人数 记得要进行初始化为0 int people;//电梯中人数

文档

int flag_out[High]; }Lift; (2)算法设计

顾名思义本程序在运行的过程中用到的算法便是—“电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。

2.2设计表示

(1)、函数调用关系图及其说明如下 :

(2)函数接口说明:

函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:

int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ);//进和出电梯的总函数

int Update(Lift &L,Passage *Queue,Passage *LiftQ);//刷新的函

文档

int Run(Lift &L,Passage *Queue,Passage *LiftQ);//整个电梯各种状态转换的函数

int OpenTheDoor(Lift &L);//开门主要是用于解决其中的时间问题 int CloseTheDoor(Lift &L);//关门

int In(Lift &L);//进入 主要是解决每个人进入电梯的时间问题 int Out(Lift &L);//出去

int Test(Lift &L,Passage *Queue,Passage *LiftQ);//电梯测试关门还是开门的函数

int Request(Lift &L,Passage *Queue); 2.3详细设计

3、调试分析

该程序的调试过程较为轻松,基本在算法实现的基础上没有出现什么错误,因而在调试的过程中并无什么深刻印象。

4、用户手册

点击运行程序,在弹出的窗口中,会提示要输入的信息: 1、 提示信息为:“请输入图中的顶点数和弧数以及图的标志和弧

的标志:”按要求输入即可,本题即输入9 11 v a

2、 提示信息为“请完成该邻接表的输入”:由于邻接表的输入信

息一般较多,而且均是采用的链表来存储,因而该部分的输入要特别的小心

3、 在完成上面两步的输入后按enter键便能得到程序的运行结

果,即输出完成整项工程至少需要多少时间和影响工程进度的关键活动

5 测试数据及测试结果

测试数据如下: 9 11 v a 1 3 1 6 1 2 4 2 3 5 3 2 1 4 1 4 3 1 4 1 5 4 1 5 2 6

文档

5 2 6 9 7 7 7 8 6 1 7 4 9 7 1

8 2 10 8 1

8 4 11 9 0

程序运行结果如下:

6、原程序清单如下: /*

关键路径问题

2010年07月31日晚上08:36开始动工 */

#include using namespace std;

const int MAX_V_NUM=20;//最大存储顶点的数目 const int STACK_INIT_SIZE=20;//栈的存储空间分配量 ////数据存储部分 /*

一下是图的邻接表的存储表示,由于第一次用 用的比较的生疏…… */

typedef struct ArcNode {

int adjvex; //该弧所指向的顶点的位置 struct ArcNode *nextarc;//指下一条弧的指针 int info;//该弧相关信息 即权值 int name;//弧的名字 }ArcNode;

typedef struct VNode

文档