C语言实现的电梯模拟程序源代码分享

4星 · 超过85%的资源 需积分: 14 30 下载量 133 浏览量 更新于2024-12-11 4 收藏 6KB TXT 举报
该资源是一个使用C语言编写的电梯功能模拟程序,旨在帮助初学者理解C语言编程和数据结构的应用。程序中定义了电梯、楼层和乘客的数据结构,并实现了随机生成乘客、电梯运行方向控制等功能。 在代码中,首先包含了几个必要的头文件,如`stdio.h`用于输入输出,`windows.h`用于Windows系统的特定操作,`time.h`用于时间操作,`stdlib.h`和`malloc.h`用于动态内存分配。 接下来定义了一些常量,例如`top`表示楼层数,`bot`表示地下层数,`max`是每层的最大乘客数量,`ex`表示电梯等待时间的随机范围,`csf`是电梯速度的设定值。这些常量方便了程序中的数值管理。 在数据结构部分,定义了三个结构体:`psn`表示乘客,包含性别(bool型的`sex`)、目标楼层(int型的`aim`)以及指向下一个乘客的指针;`flo`表示楼层,包含楼层号(int型的`num`)、当前乘客列表(`psnext`)和电梯状态(`lch`);`ele`表示电梯,包括乘客数(`pnum`)、当前楼层(`fnum`)、运行方向(`dir`)以及乘客列表(`psnext`)。 `randomize()`函数用于初始化随机数生成器,确保每次运行程序时生成的乘客和电梯行为有所不同。`kg()`函数用于输出电梯的上升或下降提示,根据参数`i`判断电梯的状态。 `pscreatp()`函数用于创建指定数量的乘客,每个乘客的目标楼层随机生成,避免重复。函数返回生成的乘客链表。 `flinitf()`函数初始化楼层,创建一个包含所有楼层的链表,并且为每个楼层分配随机的初始乘客。此函数会生成指定层数的`flo`结构体实例,并将它们连接成链表。 这个电梯模拟程序通过这些数据结构和函数,能够模拟电梯接收乘客、移动、停靠等实际操作,对学习C语言和数据结构的实现有很好的实践意义。
2008-12-27 上传
1. 楼层由上至下依次编号为9,8,7,6,5,4,3,2,1,0。每层都有向上和向下两个按钮,对应20个变量callup[0...9]和calldown[0...9]。电梯内10个目标层按钮对应变量out[0...9]。有人按下某个按钮时,相应的变量就增1,一旦要求满足后,该变量就减1。当有多人的需求相同时,相应的处理时间就增长,用于模拟真实的情况。 2. 电梯处于三种状态之一:UP(上行),DOWN(下行)和Idle(等候)。如果电梯处于Idle状态且不在1层超过20个时间单位时,则驶回1层。当电梯处于Idle状态时,一旦收到前往另一层的命令,就转入UP或DOWN状态,执行相应的操作。 3. 其它重要的变量有: floor----当前电梯外乘客所在楼层; calling----当前电梯外按下按钮的乘客所在的楼层; up_or_down----电梯外某层按钮的状态(向上箭头或向下箭头); waittime----电梯空闲时的等待时间; total----电梯内的总人数(上限为15人); 电梯的数据结构: state ---- 电梯的状态(UP,DOWN,IDLE) current ----- 电梯目前所处楼层 imovingto ---- 电梯的目标楼层 队列成员的数据结构: floor―――所在楼层 up_down―――目标方向(向上或向下) struct queue *next―――指向下一个成员 4. 【进入排队】先在等候队列中查找,若有信息相同(所在楼层相同,目标方向一致)的成员,则对队列无任何操作。若没有,则在队列末尾插入该人。 5. 【进入电梯】电梯根据人数停留一定时间单位,每进入一个人,从队列中删除该人,callup[ele.current]或者calldown[ele.current]减一,total加一。 6. 【走出电梯】电梯根据人数停留一定时间单位,每出去一个人out[ele.current]减一. 7. 【电梯的活动】 E1.[在一楼停候]若有人按下一个按钮,则调用相关函数(比如入队,置楼层标志位为1等)处理当前事件. E2.[改变状态]如果电梯处于Up(或Down)状态,但该方向的楼层却无人等待,则要看反方向楼层是否有人等待,而决定置State为Down(或Up)还是Idle。 E3.[让人出入]如果电梯不空且out[ele.current]!=0时,则电梯等候在该楼层出电梯的人离开。接着检验在该楼层是否有等候前往同一方向去的乘客,若有则等候他们进入电梯。总原则是先下后上。 E4.[在某楼层(非1楼)停候]若电梯到达目标楼层后,队列为空,则电梯在该楼层停候一定时间,在停候期间若有新的呼叫,则立即转入处理程序处理,否则返回一楼停候。 8. 电梯在上升或下降过程中需要不停地对当前方向上的最终楼层作调整。比如当前向上,最终楼层为6楼,而有乘客在8楼按了按钮,则最终楼层调整为8楼。相反方向同理。