一、电梯模拟1§ 1课程设计题目和要求1§1.1问题描述1§1.2基本要求1§1.3环境需求1§ 2需求分析2§ 3设计2§ 3.1设计思想2§ 3.2设计表示4§ 3.3详细设计6§ 4调试分析30§ 5 用户手册30§ 6 测试数据及测试结果31§ 7 源程序清单37二、西文图书管理系统38§ 1课程设计题目和要求38§1.1问题描述38§1.2基本要求38§1.3环境需求38§ 2需求分析39§ 3设计39§ 3.1设计思想39§ 3.2设计表示40§ 3.3详细设计42§ 4调试分析48§ 5 用户手册48§ 6 测试数据及测试结果49§ 7 源程序清单53三、课程设计总结53
一、电梯模拟****
§ 1课程设计题目和要求****
§1.1问题描述****
模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
电梯一共有七个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、已关门(Closed)、等待(Waiting)、移动(Moving)、减速(Decelerate)。
乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
模拟时钟从 0 开始,时间单位为 0.1 秒。人和电梯的各种动作均要消耗一定的时间单位(简记为 t),比如:
有人进出时,电梯每隔 40t 测试一次,若无人进出,则关门关门和开门各需要 20t
每个人进出电梯均需要 25t
电梯加速需要 15t
上升时,每一层需要 51t,减速需要 14t
下降时,每一层需要 61t,减速需要 23t
如果电梯在某层静止时间超过 300t,则驶回 1 层候命。
§1.2基本要求****
按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
扩展要求:
实现电梯模拟的可视化界面。
§1.3环境需求****
Windows操作系统以及相应的软硬件
Visual Studio 2017
§ 2需求分析****
1)就近原则:电梯的主要调度策略是首先响应沿当前行进方向上最近端的请求直到满足最远端请求。若该方向上无请求时,就改变移动方向;
2)在就近原则无法满足的情况下,首先满足更高层的请求;
3)电梯的最大承载人数为13人,电梯人数达到13人后,在有人出电梯之前,不接受进入电梯的请求;
4)乘客上下电梯时先出后进。进电梯时乘客是按发出乘坐请求的顺序依次进入,每次只能进入一人且每个人花费的时间都为25t;
5)电梯在关门期间(电梯离开之前)所在层提出请求的乘客同样允许进入。
§ 3设计****
§ 3.1设计思想****
§ 3.1.1数据结构设计****
采用电梯外的等待队列是单链表,电梯内部采用数组存储。等待队列的单链表设计为存储乘客类数据的结点,这样可以更加方便的访问乘客的相关信息,但是放弃了链表内部的排序,因为等待队列每次都需要遍历,所以排序会浪费更多的时间,因此抛弃该项功能。电梯内部的数组是开辟了10个大小,因为数组的下标是由0开始,所以为了更好地储存乘客前往的楼层,选择开辟10个大小的数组,每个下标里存储的数字代表着在该楼层下电梯的人数为多少人,选取数组存储的原因是一旦乘客进入电梯,有用的信息就仅仅只是下电梯的楼层,因此数组是一个较优解。
§ 3.1.2算法设计****
数据由用户自定义输入,也可以进行改变使得通过用伪随机数方式来产生相关数据。此程序采用用户自定义输入,这种输入方式可以更加自由化的决定相关数据,但是同样有弊端,不适合中途随意更改数据。操作的功能如下:添加乘客、是否有乘客请求、判断电梯方向、开关门的判断设计、乘客进出设计、电梯移动的判断设计、改变电梯状态、判断是否有人放弃来改变电梯的最远请求。主要的操作必须每次都遍历,所以时间会有点耗费过大,并且存储结构设计不大合理,导致每次都需要遍历所有数据,从而浪费时间。
该程序中涉及最多的算法是穷举搜索法,该算法设计是为了每次都能够遍历所有的数据,但是该算法存在缺陷,无法应对很多数据的操作,因此限制了该程序的数据量。该算法使用for循环和while循环对数据进行遍历,并且在循环中插入判断语句,使得能够在得到需要的数据后进行一系列的操作。
主程序流程图:
§ 3.2设计表示****
§ 3.2.1 函数调用关系图****
§ 3.2.1 函数接口规格说明****
§ 3.3详细设计****
链表结点类node中
成员有:
(1)乘客类数据data:存储乘客的相关信息,以便于在电梯模块中使用。
(2)node*类型的next,用于链接下一个节点。
(3)电梯类,存放电梯的一系列操作函数以及电梯状态枚举。
乘客类passenger中
class passenger
{
public:
int ID;
int nowfloor;
int gofloor;
int whenwait;
void setdata(int ID1);
void setnowfloor(int nowfloor1);
void setgofloor(int gofloor1);
void setwhenwait(int whenwait1);
int getnowfloor()const;
int getgofloor()const;
int getID()const;
int getwhenwait()const;
passenger();
~passenger();
};
成员有:
(1)ID:用于设置乘客的编号。
(2)nowfloor:用于记录乘客当前楼层。
(3)gofloor:用于记录乘客需要去的楼层。
(4)whenwait:用于记录乘客多久进入等待队列。
函数有:
(1)默认构造函数以及接口函数。
(2)setdata(参数为乘客ID):对该ID下的乘客进行赋值,并且限制乘客的当前楼层和所要前往的楼层为1-9,一旦超出范围则提示需要重新输入数据。
电梯类elevator中
//用枚举 0-9
enum state {
Opening,