文档库 最新最全的文档下载
当前位置:文档库 › 数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告
数据结构课程设计报告

目录

一、需求分析 (2)

1.题目描述 (2)

2、需求描述 (2)

二、设计思想 (3)

1、数据与操作的特性 (3)

2、存储结构设计: (3)

3、逻辑结构设计 (3)

(1)设计一个乘客类,用来构造乘客。 (3)

(2)设计一个链表的类模板 (4)

(3)设计一个电梯的控制类 (4)

4、算法设计 (5)

㈠总体设计 (5)

㈡具体设计 (5)

①上楼 (5)

②下楼 (6)

③出人 (6)

④进人 (6)

⑤开门 (6)

⑥关门 (7)

三、程序详情 (7)

1、类定义 (7)

(1)电梯控制类 (8)

(2)链表类 (9)

(3)乘客类 (9)

2、程序文件包含关系 (10)

四、调试分析 (10)

六、测试数据和测试结果 (11)

1、测试数据 (11)

2、测试结果 (11)

七、思想感悟 (57)

八、感谢 (57)

九、详细代码 (58)

十、参考文献 (80)

一、需求分析

1.题目描述

模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一

层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

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

模拟时钟从0开始计时,时间单位t=0.1秒。人和电梯的各种动作均要消耗

一定的时间单位,规定:有人进出时,电梯每隔40t测试一次,若无人进出,

则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层

静止时间超过300t,则驶回1层侯命。电梯调度规则:

●就近原则:电梯的主要调度策略是首先响应沿当前行进方向上最近端的请

求直到满足最远端请求。若该方向上无请求时,就改变移动方向。

●在就近原则无法满足的情况下,首先满足更高层的请求。

●电梯的最大承载人数为12人,电梯人数达到12人后,在有人出电梯之前,

不接受进入电梯的请求。

●乘客上下电梯时先出后进。出电梯的时间固定是25t(与人数无关),进电

梯时乘客是按队列的顺序依次进入,每次只能进入一人且每个人花费的时

间都为25t。

●电梯在关门期间(电梯离开之前)所在层提出请求的乘客同样允许进入。

●电梯的运行速度为2t/层。

2、需求描述

根据题目要求,实现电梯模拟系统要解决以下几点问题:

(1)需要设置一个系统时钟,模拟电梯运行中的时钟变化,该时钟贯穿系统运行的始终。

(2)需要若干计时器,在电梯运行过程中来计算各个动作的时间。

(3)需要设置几个状态,用状态来表明电梯的情况。具体有以下七个状态:上楼中,下楼中,开门中,门开着(无人进出),进人中,出人中,空闲等待状态,无人乘坐返回一楼。

(4)需要设置总的等待队列和电梯内人的需求队列两个队列。

综上所述,实现该系统的关键是实现时钟、计时器、状态和等待队列的联系及交互。

二、设计思想

1、数据与操作的特性

数据由文件输入,结果从文件输出。输入文件格式为“等待楼层目标楼层申请时间”,输出格式为“某时刻事件”。由输入文件输入数据存在内存当中以备使用,程序根据输入的数据来控制内部逻辑和输出。

2、存储结构设计:

根据题目要求,本着简化设计逻辑的原则只设置了两个存储结构,并且由于涉及的数据量很小,都采用了链表的设计结构。

3、逻辑结构设计

(1)设计一个乘客类,用来构造乘客。

/*人员类*/

/*

属性:

id:添加人员时id顺序增加,是人员的唯一标识

startfloor:该人的起始楼层

endfloor:该人的目标楼层

starttime:该人提出申请的时间

*/

class Person{

public:

int Id;

int Startfloor;

int Endfloor;

int Starttime;

Person(int sf, int ef, int st);

Person();//默认构造函数,构造头结点时使用;

int ReturnStartFloor();

int ReturnEndfloor();

};

(2)设计一个链表的类模板

template

class LinList

{

friend class LinListWithRear;

private:

ListNode *head; //头指针,指向第一个结点

int size; //单链表当前结点个数

ListNode *Index(const int& i) const;//定位,返回第i个结点的地址

public:

LinList(void); //构造函数

~LinList(void); //析构函数

int Size(void) const; //返回单链表当前结点个数

T GetData(const int& pos) const; //返回第pos个结点的data域值

void Insert(const T& item, const int& pos); //在第pos个结点前插入一个元素值为item的新结点

T Delete(const int& pos); //删除第pos个结点,返回被删节点的数据域值

void OrderInsert(const T& item); //有序插入:将x插入到单链表,且插入后单链表所有结点按值从小到大有序。

ListNode * Head() const; //取单链表头结点

int IsEmpty(void) const; //链表空否,空返回1,否则返回0

void Print() const; //输出单链表

void InsertEnd(const T& item); //在单链表的表尾插入值为item的新结点

void MoreDelete(const T& item); //删除单链表中所有值为item的结点void Merge(const LinList& La, const LinList& Lb); //将有序单链表La和Lb归并为表*this,且表*this按照值从小到大有序。

};

(3)设计一个电梯的控制类

class ElevatorControl{

public:

state State=STOP;

int Floor=1;

LinList TotalList;//总的电梯等待链表

LinList InList;//电梯里的人的链表

void AddPerson(Person &p);//当有一个人发出申请时把它加入总的链表

bool NoRequsest();//判断是否电梯内外均无请求

void JudgeDir();//根据当前状态根据就近原则给出最近楼层bool JudgeStation();//判断是否到站

void OpenDoor();//开门

bool JudgeOut();//判断当前楼层是否下人

void Out();//进行下人

bool JudgeIn();//判断是否上人

void In();//进行上人

void CloseDoor();//关门

bool IsFull();//判断电梯是否人满

void GoUp();//上楼

void GoDown();//下楼

void returnone();//没人用返回一层

void JudgeClose();//用计时器判断是否关门

void GoDir(int);

};

4、算法设计

㈠总体设计

㈡具体设计

①上楼

②下楼

③出人

④进人

⑤开门

⑥关门

三、程序详情 1、类定义

(1)电梯控制类

(2)链表类

(3)乘客类

2、程序文件包含关系

四、调试分析

问题一:电梯在进入GOONE状态(无人使用返回一楼状态)时会因为需要下楼而转换为下楼状态,从而不再是GOONE状态,此时电梯内外又没有任何请求,导致逻辑错误。

解决方法:单独设置GOONE时的判断条件,如果已经进入GOONE状态且没有任何请求就保持该状态不变。

问题二:为方便调试数据写在系统里,因此无法从外部读入数据,只能通过修改程序来修改数据,。

解决方法:加入头文件“readfile.h”,实现功能从文件中读入数据。同时通过改变流的方式来达到输出数据到文件的目的。

问题三:设置了关门函数,实现在无人进入时执行关门操作。但是这与题目的关门逻辑(每隔25t尝试一次,无人时关门)冲突。

解决方法:修改该函数,设置closeclock变量,在开门完成后开始执行,每25t 检查一次,某次检查发现没有人进出,则启动关门程序。

总体分析:程序的难点不在于bug的问题,只有最初设计时考虑的完善,将逻辑捋顺,才能减少问题,所以开始的程序设计是十分重要的。

五、用户手册

1、经检验,本程序在window8.1环境下正常运行。

2、本程序执行需在“data.txt”的文件中输入数据,格式为“申请楼层目标楼层申请时间”,每行一组,程序会自动读入文件,并将输出结果输出到文件“result.txt”中。

3、本程序的执行时间最长为2000t,如果需要延长,请更改main.cpp文件中的TotalTime,需要多少更改为多少即可。

六、测试数据和测试结果

1、测试数据

2 6 3

2 5 27

1 4 74

3 6 74

5 3 142

6 7 231

7 4 306

2 8 542

2、测试结果

第0时刻在1层空闲等待状态

第1时刻在1层空闲等待状态

第2时刻在1层空闲等待状态

第3时刻添加人1号在1层上楼

第4时刻在1层上楼

第5时刻在1层开门中开门中

第6时刻在2层开门中

第7时刻在2层开门中

第8时刻在2层开门中

第9时刻在2层开门中

第10时刻在2层开门中

第11时刻在2层开门中

第12时刻在2层开门中

第13时刻在2层开门中

第14时刻在2层开门中

第15时刻在2层开门中

第16时刻在2层开门中

第17时刻在2层开门中

第18时刻在2层开门中

第19时刻在2层开门中

第20时刻在2层开门中

第21时刻在2层开门中

第22时刻在2层开门中

第23时刻在2层开门中

第24时刻在2层开门完成关门测试第1t 正在进人第1个人第25时刻在2层正在进人关门测试第2t

第26时刻在2层正在进人关门测试第3t

第27时刻添加人2号在2层正在进人关门测试第4t

第28时刻在2层正在进人关门测试第5t

第29时刻在2层正在进人关门测试第6t

第30时刻在2层正在进人关门测试第7t

第31时刻在2层正在进人关门测试第8t

第32时刻在2层正在进人关门测试第9t

第33时刻在2层正在进人关门测试第10t

第34时刻在2层正在进人关门测试第11t

第35时刻在2层正在进人关门测试第12t

第36时刻在2层正在进人关门测试第13t

第37时刻在2层正在进人关门测试第14t

第38时刻在2层正在进人关门测试第15t

第39时刻在2层正在进人关门测试第16t

第40时刻在2层正在进人关门测试第17t

第41时刻在2层正在进人关门测试第18t

第42时刻在2层正在进人关门测试第19t

第43时刻在2层正在进人关门测试第20t

第44时刻在2层正在进人关门测试第21t

第45时刻在2层正在进人关门测试第22t

第46时刻在2层正在进人关门测试第23t

第47时刻在2层正在进人关门测试第24t

第48时刻在2层正在进人关门测试第25t

第49时刻在2层人进来了关门测试第26t

第50时刻在2层关门测试第27t 正在进人第2个人

第51时刻在2层正在进人关门测试第28t

第52时刻在2层正在进人关门测试第29t

第53时刻在2层正在进人关门测试第30t

第54时刻在2层正在进人关门测试第31t

第55时刻在2层正在进人关门测试第32t

第56时刻在2层正在进人关门测试第33t

第57时刻在2层正在进人关门测试第34t

第58时刻在2层正在进人关门测试第35t

第59时刻在2层正在进人关门测试第36t

第60时刻在2层正在进人关门测试第37t

第61时刻在2层正在进人关门测试第38t

第62时刻在2层正在进人关门测试第39t

第63时刻在2层正在进人关门测试第40t

第64时刻在2层正在进人

第65时刻在2层正在进人关门测试第1t

第66时刻在2层正在进人关门测试第2t

第67时刻在2层正在进人关门测试第3t

第68时刻在2层正在进人关门测试第4t

第69时刻在2层正在进人关门测试第5t

第70时刻在2层正在进人关门测试第6t

第71时刻在2层正在进人关门测试第7t

第72时刻在2层正在进人关门测试第8t

第73时刻在2层正在进人关门测试第9t

第74时刻添加人3号添加人4号在2层正在进人关门测试第10t 第75时刻在2层人进来了关门测试第11t

第76时刻在2层关门测试第12t

第77时刻在2层关门测试第13t

第78时刻在2层关门测试第14t

第79时刻在2层关门测试第15t

第80时刻在2层关门测试第16t

第81时刻在2层关门测试第17t

第82时刻在2层关门测试第18t

第83时刻在2层关门测试第19t

第84时刻在2层关门测试第20t

第85时刻在2层关门测试第21t

第86时刻在2层关门测试第22t

第87时刻在2层关门测试第23t

第88时刻在2层关门测试第24t

第89时刻在2层关门测试第25t

第90时刻在2层关门测试第26t

第91时刻在2层关门测试第27t

第92时刻在2层关门测试第28t

第93时刻在2层关门测试第29t

第94时刻在2层关门测试第30t

第95时刻在2层关门测试第31t

第96时刻在2层关门测试第32t

第97时刻在2层关门测试第33t

第98时刻在2层关门测试第34t

第99时刻在2层关门测试第35t

第100时刻在2层关门测试第36t

第101时刻在2层关门测试第37t

第102时刻在2层关门测试第38t

第103时刻在2层关门测试第39t

第104时刻在2层关门测试第40t

第105时刻在2层关门中

第106时刻在2层关门中

第107时刻在2层关门中

第108时刻在2层关门中

第109时刻在2层关门中

第110时刻在2层关门中

第111时刻在2层关门中

第112时刻在2层关门中

第113时刻在2层关门中

第114时刻在2层关门中

第115时刻在2层关门中

第116时刻在2层关门中

第117时刻在2层关门中

第118时刻在2层关门中

第119时刻在2层关门中

第120时刻在2层关门中

第121时刻在2层关门中

第122时刻在2层关门中

第123时刻在2层关门中

第124时刻在2层关门中

第125时刻在2层关门完成上楼

第126时刻在2层上楼

第127时刻在2层开门中开门中

第128时刻在3层开门中

第129时刻在3层开门中

第130时刻在3层开门中

第131时刻在3层开门中

第132时刻在3层开门中

第133时刻在3层开门中

第134时刻在3层开门中

第135时刻在3层开门中

第136时刻在3层开门中

第137时刻在3层开门中

第138时刻在3层开门中

第139时刻在3层开门中

第140时刻在3层开门中

第141时刻在3层开门中

第142时刻添加人5号在3层开门中

第143时刻在3层开门中

第144时刻在3层开门中

第145时刻在3层开门中

第146时刻在3层开门完成关门测试第1t 正在进人第4个人第147时刻在3层正在进人关门测试第2t

第148时刻在3层正在进人关门测试第3t

第149时刻在3层正在进人关门测试第4t

第150时刻在3层正在进人关门测试第5t

第151时刻在3层正在进人关门测试第6t 第152时刻在3层正在进人关门测试第7t 第153时刻在3层正在进人关门测试第8t 第154时刻在3层正在进人关门测试第9t 第155时刻在3层正在进人关门测试第10t 第156时刻在3层正在进人关门测试第11t 第157时刻在3层正在进人关门测试第12t 第158时刻在3层正在进人关门测试第13t 第159时刻在3层正在进人关门测试第14t 第160时刻在3层正在进人关门测试第15t 第161时刻在3层正在进人关门测试第16t 第162时刻在3层正在进人关门测试第17t 第163时刻在3层正在进人关门测试第18t 第164时刻在3层正在进人关门测试第19t 第165时刻在3层正在进人关门测试第20t 第166时刻在3层正在进人关门测试第21t 第167时刻在3层正在进人关门测试第22t 第168时刻在3层正在进人关门测试第23t 第169时刻在3层正在进人关门测试第24t 第170时刻在3层正在进人关门测试第25t 第171时刻在3层人进来了关门测试第26t 第172时刻在3层关门测试第27t

第173时刻在3层关门测试第28t

第174时刻在3层关门测试第29t

第175时刻在3层关门测试第30t

第176时刻在3层关门测试第31t

第177时刻在3层关门测试第32t

第178时刻在3层关门测试第33t

第179时刻在3层关门测试第34t

第180时刻在3层关门测试第35t

第181时刻在3层关门测试第36t

第182时刻在3层关门测试第37t

第183时刻在3层关门测试第38t

第184时刻在3层关门测试第39t

第185时刻在3层关门测试第40t

第186时刻在3层关门中

第187时刻在3层关门中

第188时刻在3层关门中

第189时刻在3层关门中

第190时刻在3层关门中

第191时刻在3层关门中

第192时刻在3层关门中

第193时刻在3层关门中

第194时刻在3层关门中

第195时刻在3层关门中

第196时刻在3层关门中

第197时刻在3层关门中

第198时刻在3层关门中

第199时刻在3层关门中

第200时刻在3层关门中

第201时刻在3层关门中

第202时刻在3层关门中

第203时刻在3层关门中

第204时刻在3层关门中

第205时刻在3层关门中

第206时刻在3层关门完成上楼

第207时刻在3层上楼

第208时刻在3层上楼

第209时刻在4层上楼

第210时刻在4层开门中开门中

第211时刻在5层开门中

第212时刻在5层开门中

第213时刻在5层开门中

第214时刻在5层开门中

第215时刻在5层开门中

第216时刻在5层开门中

第217时刻在5层开门中

第218时刻在5层开门中

第219时刻在5层开门中

第220时刻在5层开门中

第221时刻在5层开门中

第222时刻在5层开门中

第223时刻在5层开门中

第224时刻在5层开门中

第225时刻在5层开门中

第226时刻在5层开门中

第227时刻在5层开门中

第228时刻在5层开门中

第229时刻在5层开门完成关门测试第1t 正在出人第2个人第230时刻在5层正在出人关门测试第2t

第231时刻添加人6号在5层正在出人关门测试第3t

第232时刻在5层正在出人关门测试第4t

第233时刻在5层正在出人关门测试第5t

第234时刻在5层正在出人关门测试第6t

第235时刻在5层正在出人关门测试第7t

第236时刻在5层正在出人关门测试第8t

第237时刻在5层正在出人关门测试第9t

第238时刻在5层正在出人关门测试第10t

第239时刻在5层正在出人关门测试第11t

第240时刻在5层正在出人关门测试第12t

第241时刻在5层正在出人关门测试第13t

第242时刻在5层正在出人关门测试第14t

第243时刻在5层正在出人关门测试第15t

第244时刻在5层正在出人关门测试第16t

第245时刻在5层正在出人关门测试第17t

第246时刻在5层正在出人关门测试第18t

第247时刻在5层正在出人关门测试第19t

第248时刻在5层正在出人关门测试第20t

第249时刻在5层正在出人关门测试第21t

第250时刻在5层正在出人关门测试第22t

第251时刻在5层正在出人关门测试第23t

第252时刻在5层正在出人关门测试第24t

第253时刻在5层正在出人关门测试第25t

第254时刻在5层人出去了关门测试第26t

第255时刻在5层关门测试第27t 正在进人第5个人第256时刻在5层正在进人关门测试第28t

第257时刻在5层正在进人关门测试第29t

第258时刻在5层正在进人关门测试第30t

第259时刻在5层正在进人关门测试第31t

第260时刻在5层正在进人关门测试第32t

第261时刻在5层正在进人关门测试第33t

第262时刻在5层正在进人关门测试第34t

第263时刻在5层正在进人关门测试第35t

第264时刻在5层正在进人关门测试第36t

第265时刻在5层正在进人关门测试第37t

第266时刻在5层正在进人关门测试第38t

第267时刻在5层正在进人关门测试第39t

第268时刻在5层正在进人关门测试第40t

第269时刻在5层正在进人

第270时刻在5层正在进人关门测试第1t

第271时刻在5层正在进人关门测试第2t

第272时刻在5层正在进人关门测试第3t

第273时刻在5层正在进人关门测试第4t

第274时刻在5层正在进人关门测试第5t

第275时刻在5层正在进人关门测试第6t

第276时刻在5层正在进人关门测试第7t

第277时刻在5层正在进人关门测试第8t

第278时刻在5层正在进人关门测试第9t

第279时刻在5层正在进人关门测试第10t

第280时刻在5层人进来了关门测试第11t

第281时刻在5层关门测试第12t

第282时刻在5层关门测试第13t

第283时刻在5层关门测试第14t

第284时刻在5层关门测试第15t

第285时刻在5层关门测试第16t

第286时刻在5层关门测试第17t

第287时刻在5层关门测试第18t

第288时刻在5层关门测试第19t

第289时刻在5层关门测试第20t

第290时刻在5层关门测试第21t

第291时刻在5层关门测试第22t

第292时刻在5层关门测试第23t

第293时刻在5层关门测试第24t

第294时刻在5层关门测试第25t

第295时刻在5层关门测试第26t

第296时刻在5层关门测试第27t

第297时刻在5层关门测试第28t

第298时刻在5层关门测试第29t

第299时刻在5层关门测试第30t

第300时刻在5层关门测试第31t

第301时刻在5层关门测试第32t

第302时刻在5层关门测试第33t

第303时刻在5层关门测试第34t

第304时刻在5层关门测试第35t

第305时刻在5层关门测试第36t

第306时刻添加人7号在5层关门测试第37t 第307时刻在5层关门测试第38t

第308时刻在5层关门测试第39t

第309时刻在5层关门测试第40t

第310时刻在5层关门中

第311时刻在5层关门中

第312时刻在5层关门中

第313时刻在5层关门中

第314时刻在5层关门中

第315时刻在5层关门中

第316时刻在5层关门中

第317时刻在5层关门中

第318时刻在5层关门中

第319时刻在5层关门中

第320时刻在5层关门中

第321时刻在5层关门中

第322时刻在5层关门中

第323时刻在5层关门中

第324时刻在5层关门中

第325时刻在5层关门中

第326时刻在5层关门中

第327时刻在5层关门中

第328时刻在5层关门中

第329时刻在5层关门中

第330时刻在5层关门完成上楼

第331时刻在5层上楼

第332时刻在5层开门中开门中

第333时刻在6层开门中

第334时刻在6层开门中

第335时刻在6层开门中

第336时刻在6层开门中

第337时刻在6层开门中

第338时刻在6层开门中

第339时刻在6层开门中

第340时刻在6层开门中

第341时刻在6层开门中

第342时刻在6层开门中

第343时刻在6层开门中

第344时刻在6层开门中

第345时刻在6层开门中

第346时刻在6层开门中

第347时刻在6层开门中

第348时刻在6层开门中

第349时刻在6层开门中

第350时刻在6层开门中

第351时刻在6层开门完成关门测试第1t 正在出人第1个人第4个人

第352时刻在6层正在出人关门测试第2t

第353时刻在6层正在出人关门测试第3t

第354时刻在6层正在出人关门测试第4t

第355时刻在6层正在出人关门测试第5t

第356时刻在6层正在出人关门测试第6t

第357时刻在6层正在出人关门测试第7t

第358时刻在6层正在出人关门测试第8t

第359时刻在6层正在出人关门测试第9t

第360时刻在6层正在出人关门测试第10t

第361时刻在6层正在出人关门测试第11t

第362时刻在6层正在出人关门测试第12t

第363时刻在6层正在出人关门测试第13t

第364时刻在6层正在出人关门测试第14t

第365时刻在6层正在出人关门测试第15t

第366时刻在6层正在出人关门测试第16t

第367时刻在6层正在出人关门测试第17t

第368时刻在6层正在出人关门测试第18t

第369时刻在6层正在出人关门测试第19t

第370时刻在6层正在出人关门测试第20t

第371时刻在6层正在出人关门测试第21t

第372时刻在6层正在出人关门测试第22t

第373时刻在6层正在出人关门测试第23t

第374时刻在6层正在出人关门测试第24t

第375时刻在6层正在出人关门测试第25t

第376时刻在6层人出去了关门测试第26t

第377时刻在6层关门测试第27t 正在进人第6个人第378时刻在6层正在进人关门测试第28t

第379时刻在6层正在进人关门测试第29t

第380时刻在6层正在进人关门测试第30t

第381时刻在6层正在进人关门测试第31t

第382时刻在6层正在进人关门测试第32t

第383时刻在6层正在进人关门测试第33t

第384时刻在6层正在进人关门测试第34t

第385时刻在6层正在进人关门测试第35t

第386时刻在6层正在进人关门测试第36t

第387时刻在6层正在进人关门测试第37t

第388时刻在6层正在进人关门测试第38t

第389时刻在6层正在进人关门测试第39t

第390时刻在6层正在进人关门测试第40t

第391时刻在6层正在进人

第392时刻在6层正在进人关门测试第1t

第393时刻在6层正在进人关门测试第2t

第394时刻在6层正在进人关门测试第3t

第395时刻在6层正在进人关门测试第4t

第396时刻在6层正在进人关门测试第5t

第397时刻在6层正在进人关门测试第6t

第398时刻在6层正在进人关门测试第7t

第399时刻在6层正在进人关门测试第8t

第400时刻在6层正在进人关门测试第9t

第401时刻在6层正在进人关门测试第10t

第402时刻在6层人进来了关门测试第11t

第403时刻在6层关门测试第12t

第404时刻在6层关门测试第13t

第405时刻在6层关门测试第14t

第406时刻在6层关门测试第15t

第407时刻在6层关门测试第16t

第408时刻在6层关门测试第17t

第409时刻在6层关门测试第18t

第410时刻在6层关门测试第19t

第411时刻在6层关门测试第20t

第412时刻在6层关门测试第21t

第413时刻在6层关门测试第22t

相关文档