目录
1引言 2
2需求分析 2
3 概设计 2
31数结构描述 2
32模块设计 3
33电梯模拟流程图 3
4详细设计实现 3
41全局变量定义 3
42具体情况定义 4
43队栈类型 4
44电梯类型 4
45系统类定义 5
5调试分析 6
6结体会 6
参考文献 7
附录 8
电梯模拟系统
1引言
现代社会水发展迅速楼房越建越高电梯成生活中必少工具电梯运行系统进行解研究定意义文c++环境模拟电梯运行情况电梯运行情况定解
2需求分析
(1)堆栈Lift模拟电梯队Qup[]Qdnow[]两数组模拟等候电梯排队进入系统进入队列进入电梯队列中删进入栈中离开系统队列中删
(2)户输入楼层数运行时间进入电梯中信息系统动运行直送方者运行时间止
(3)系统动手动两种操作方式户选择系统中显示均图形模拟方式显示
(4)系统够运行时输出相关种信息层层少时间等等
3 概设计
31数结构描述
设定栈抽象数类型定义:
ADT Stack
{
数象:
数关系:
约定端栈顶端栈底
}ADT Stack
设定队抽象数类型定义:
ADT Queue
{
数象:
数关系:
约定端队列头端队列尾
}ADT Queue
32模块设计
(1)全局变量定义
(2)具体情况定义
(3)队栈类型
(4)电梯类型
(5)系统类定义
33电梯模拟流程图
编程序前解电梯运行情况作出具体流程图便更编写程序面出电梯简单运行模拟图
图1电梯模拟运行流程图
4详细设计实现
41全局变量定义
全局说需知道楼层某时间电梯楼层电梯状态 首先定义出变量Floor_now定义电梯楼层state定义电梯状态MaxF定义楼层t1t2定义时间变量
int id
int R_W
int imgF
int Floor_now电梯楼层
int state电梯状态
int t1时间变量
int t2
int MaxF楼层
int t
int tt
char hand_auto
42具体情况定义
电梯求具体楼层目楼层根具体情况坐电梯定容忍时间旦等电梯花费时间超限度放弃坐电梯maxwaittime定义长容忍时间Nfloor定义楼层ToFloor定义坐电梯者目楼层
typedef struct pop
{
int maxwaittime长容忍时间
int NFloor楼层
int ToFloor目楼层
int ID
int ontim
}people
43队栈类型
44电梯类型
电梯固定层等电梯目标层电梯承载数电梯停时候出入需记录电梯时停需函数判断Maxman定义承载数Liftman定义电梯里stop[50]定义需停楼层run()关电梯运行函数wait()关电梯否静止等函数Stop()关电梯楼层间停函数open_shut()电梯开门关门函数run()运行函数中调Stop()函数判断否停楼层果调open_shut()电梯开门关门函数
class lift电梯类
{
public
int Maxman承载数
int Liftman电梯里
int stop[50]需停楼层
void run()电梯运行
void wait()电梯静止等
void Stop()电梯楼层间停
void open_shut()电梯开门关门
}
lift Lift
void liftopen_shut()电梯开关门函数
void liftStop()判断电梯停函数
void liftwait()电梯等函数
void liftrun()运行函数
45系统类定义
先系统进行初始化定义模拟系统中系统机产生设定initQ()函数初始化行队列initF()初始化楼层initL()初始化电梯void leave(people*)函数表示离开系统systState()函数首先判断电梯状态电梯停高层开始判断判断否高层高层想 高层等电梯没高层电梯电梯停目标层开电梯门判断电梯状态电梯开始循环工作电梯模拟系统中systimg(int os)函数通图形模拟输出systWord(int con1)输出状态语句模拟结果更加形象易懂
lass syst
{
public
void rand_man(int)产生
void initQ()初始化行队列
void initF()初始化楼层
void initL()初始化电梯
void initAll()构造函数
void leave(people*)离开系统
void out_in()
void State()
void help()
void Cout_S()
void img(int)
void Word(int)
syst()
{
f0
man0
}
void systleave(people*p)
void systout_in()
void systrand_man(int n8)
void systinitAll()
void systinitF()
void systinitL()
void systinitQ()
void systCout_S()
void systimg(int os)图形模拟输出
void systWord(int con1)输出语句
void main ()函数
{system(pause)
syshelp()
sysinitAll()
sysrand_man()
while(1)
{
Liftrun()
Liftwait()
}
}
5调试分析
1程序中函数state函数核心程序较难考虑方面较次搞定次运行原型程序断完善
2队栈操作程序中关键处没队栈全部操作文中写部分操作代码
3程序中部分代码输出函数部分文中图模拟方式显示结果程序中输出全集成两函数中 systimg()systword()两函数调电梯系统模拟图
4调试程序时助断点单步快找程序中错误
6结体会
文电梯模拟系统设计运队列栈部分知识电梯系统似简单具体运行麻烦需考虑细节掌握电梯具体流程写起程序利写完部分程序试着运行缺陷修改加入具体函数程序更加完美
课程设计学书外东西时提高查阅资料力解决问题力培养培养学生综合运学知识发现提出分析解决实际问题锻炼实践力重环节学生实际工作力具体训练考察程懂理实际相结合重性理知识远远够学理知识实践相结合起理中出结真正社会服务提高实际动手力独立思考力设计程中遇问题说困难重重毕竟第次做难免会遇种样问题时设计程中发现足处前学知识理解够深刻掌握够牢固
做次课程设计时候遇样样麻烦许宝贵验:
1设计程序前务必设计题目容系统解知道设计题目容包含资源
2设计程序关键清晰思路完整流程图先设计原理思路搞清楚流程图画出样设计起简单
3设计程序时妄想次整程序设计反复修改断改进程序设计必路发现错误取成绩种
4养成注释程序惯程序完美否仅仅实现功应该明白思路样资料保存交流提供方便
5设计程序程中遇问题正常应该次遇问题记录分析清楚免次碰样问题
参考文献
[1] 严蔚敏吴伟民.数结构题集(C语言版).北京:清华学出版社1999
[2] 徐孝凯 数结构课程实验 北京:清华学出版社2002
[3] 郭翠英 C语言课程设计案例精编 北京:中国水利水电出版社200403
网站:CSDN
程序员
附录
#include systh
class lift电梯类
{
public
int Maxman承载数
int Liftman电梯里
int stop[50]需停楼层
void run()电梯运行
void wait()电梯静止等
void Stop()电梯楼层间停
void open_shut()电梯开门关门
}
lift Lift
void liftopen_shut()电梯开关门函数
{
sysState()判断状态
tt10
wordOPEN
sysimg(1)输出函数
tt20
wordOUT_STA
sysimg(0)
sysout_in()进出函数
Liftstop[Floor_now]0
sysState()
tt40
wordOUT_END
sysimg(1)
}
void liftStop()判断电梯停函数
{
if(first)判断否第次运行
{
Floor_nowstate
if(state1)tt21
else if(state1)tt31设定时间
wordSTOP
sysimg(0)
tt30
wordSLOW
sysimg(0)
Floor_now+state
if(Liftstop[Floor_now]1)
state*(1)
if(state1)tt14
else if(state1)tt23
wordREADY
sysimg(0)
}
open_shut()开关门函数
tt20
wordSHUT
sysimg(0)输出函数
first1
}
void liftwait()电梯等函数
{
if(t37>20)
sysrand_man(0)产生
if(R_W)
return
if(Floor_nowidl)
{
if(Floor_nowidl>0)
state1
if(Floor_nowidl<0)
state1
while(Floor_nowidl)电梯驶等层
{
wordTO_IDL
sysimg(0)
Floor_now+state
if(state1)
tt51
else
if(state1)
tt61
if(Floor_nowidl)
state0
if(t37>20)
sysrand_man(0)产生
if(R_W)
return
}
}
tt310
wordWAIT
sysimg(0)
}
void liftrun()运行函数
{
while(state0)
{
if(t37>20)
sysrand_man(0)产生
sysState()
if(state1&&Qup[Floor_now]EmptyQ())电梯 想楼 电梯停
Stop()
else if(state1&&Qdnow[Floor_now]EmptyQ())电梯想楼 电梯停
Stop()
else if(Liftstop[Floor_now])前楼层高层 低层
Stop()
else first2
if(R_W1)
tt0
else {
if(first1)
tt50
else if(first2)
{
if(state1)
tt51
else if(state1)
tt23
}
}设定时间
R_W2运行停判断变量
wordRUN
sysimg(0)
Floor_now+state
}
R_W0
}
void systleave(people*p)
{
if(pNULL)
delete p离开系统
}离开系统
void systState()状态判断函数
{
int k
for(int n2n>0n)循环两次判断
{
if(state1||state0)电梯停
{
for(kMaxF1k>Floor_nowk)高层开始判断
{
if(Liftstop[k]1||Qup[k]EmptyQ())判断否高层 高层想
{
state1电梯
for(int iki>Floor_nowi)重新赋值stop数组
if(Liftstop[i]1)
Liftstop[i]0
break
}
else if(Qdnow[k]EmptyQ())高层
{
state1电梯
Liftstop[k]1标志电梯停位置
break
}
}
if(kFloor_now1)高层 没高层 判断前楼层
{
if(Qup[k+1]EmptyQ())想
state1
else if(Qdnow[k+1]EmptyQ())
state0
else if(Qdnow[k+1]EmptyQ())
state1
}
}
if(state1||state0)电梯电梯停
{
for(k0k
if(Qdnow[k]EmptyQ()||Liftstop[k]1) 低层低层
{
state1
for(int iki
Liftstop[i]0
break
}
else if(Qup[k]EmptyQ())低层
{
state1
Liftstop[k]1
break
}
}
if(kFloor_now+1)判断前楼层
{
if(Qdnow[k1]EmptyQ())
state1
else if(Qup[k1]EmptyQ())
state0
else if(Qup[k1]EmptyQ())
state1
}
}
}
}
void systout_in()
{
int n0k0n出k进入
while(InLiftEmptyS())
{
if(t37>20)
sysrand_man(0)产生
tt25
wordOUT
InLiftPopS(tem)出电梯
if(tem>ToFloorFloor_now)判断否离开
{ n++LiftLiftman
sysimg(0)
}层系统中删电梯数减1出数加1
else TempSPush(tem)层进入时栈
}电梯里全部出
if(InLiftEmptyS())
while(TempSEmptyS())
{
TempSPopS(tem)
InLiftPush(tem)
}时栈先进电梯
if(state1||Floor_now0)
{
while(Qup[Floor_now]EmptyQ())
{
if(t37>20)
sysrand_man(0)
tt25
wordIN
Qup[Floor_now]DelQ(tem)
InLiftPush(tem)
LiftLiftman++
k++
Liftstop[tem>ToFloor]1
sysimg(0)
}
}果电梯行队先进电梯
if(state1||Floor_nowMaxF1)
{
while(Qdnow[Floor_now]EmptyQ())
{
if(t40>20)
sysrand_man(0)
tt25
wordIN
temnew people
Qdnow[Floor_now]DelQ(tem)
InLiftPush(tem)
LiftLiftman++
k++
Liftstop[tem>ToFloor]1
sysimg(0)
}
}果行队先进电梯
if(LiftLiftman>LiftMaxman)判断否超载
{tt25
wordOVERW
sysimg(0)
while(LiftLiftman
if(t40>20)
sysrand_man(0)
tt25
n0
InLiftPopS(tem)
{
if(tem>NFloor>tem>ToFloor)
Qdnow[Floor_now]EntQ(tem)
else
Qup[Floor_now]EntQ(tem)
}
n++
wordOUT
sysimg(0)
}
wordNOMAL
sysimg(0)
}
}进出函数
void systrand_man(int n8)
{
char ch'n'否机
if(n)
{
int kclock()
k(rand()+k)9
if(k)
{
n1
ch'y'
wordR_M
img(0)
}
t1clock()
while(1)
{
t2clock()
if(t2t1+1000)
break
}
}
else nman
if(n)
{
if(ch'n')
{
cout<
cout<
cout<<═
cout<<╗\n
cout<
cout<<
cout<<楼层电梯模拟
for(iMaxFii)
cout<<
cout<<║\n
cout<
cout<<═
cout<<╝
cout<
}
for(nn)
{
cout<
tem>ontimt
int i0
if(ch'n'||ch'N')
{
cout<
{
if(i)
cout<
}
else
tem>IDid++
i0
if(ch'n'||ch'N')
{
cout<
{
if(i)
{cout<
else
{
int tclock()
tem>NFloor(rand()+t)f
}
i0
if(ch'n'||ch'N')
{
cout<
{
if(i)
{cout<
}
else
do
{
int tclock()
tem>ToFloor(rand()+tt)f
}while(tem>NFloortem>ToFloor)机生成
i0
if(ch'n'||ch'N')
{
cout<
{
if(i)
cout<
else
do
{
tem>maxwaittimerand()900+100
}while(tem>maxwaittime<100||tem>maxwaittime>1000)
if(ch'n'||ch'N')
wordMAKE
else
wordRAND
if(tem>ToFloor>tem>NFloor)
Qup[tem>NFloor]EntQ(tem)进入行队列
if(tem>ToFloor
Qdnow[tem>NFloor]EntQ(tem)进入行队列
if(state0)
{
if(Floor_now>tem>NFloor)
state1
else if(Floor_now
state1
else
{
if(Floor_now>tem>ToFloor)
state1
else if(Floor_now
state1
}
}判断状态
img(0)
}
wordRAND_O
img(0)
}
if(R_W2)
R_W1
if(first99)
first0
}
构造函数
void systinitAll()
{
char keyint i0
do
{
if(i)
cout<
cout<
if(key'n'||key'N')
{
i0 cout<
{
if(i)
cout<
cin>>fcout<
i0 cout<
{
if(i)
cout<
i0 cout<
do
{
if(i)
cout<
cin>>mancout<
i0 cout<
{
if(i)
{cout<
cout<
}
else
{
f6
man4
max_t10000
idl1
}
tt0
t0
id1
imgF0
CtrlSPACE
wordNUL
R_W1
Floor_nowidl
first99
initF()
initQ()
initL()
i0
do
{
if(i)
cout<
cout<
i0
if(hand_auto'A'||hand_auto'a')
{
do
{
if(i)
cout<
cout<
}
cout<
}
初始化楼层
void systinitF()
{
MaxFf
cout<
cout<
}
初始化电梯
void systinitL()
{
LiftMaxman20
LiftLiftman0
state0
for(int k0k
cout<
}
初始化队列
void systinitQ()
{
for(int i0i
queue up
Qup[i]up
queue dnow
Qdnow[i]dnow
}
cout<
}
void systhelp()
{
system(cls)
cout<< <
}
void systCout_S()
{
switch (state)
{
case(1)cout<<\36break
case(0)cout<
}
}状态表示符号输出
void systimg(int os)图形模拟输出
{
char *ifpepstatic int n0
t+tt
if(t>max_t)
wordOVER
if(hand_auto'a'||hand_auto'A')
system(cls)
if(first99)
{
cout<
else cout<
cout<
for( i(3*MaxF+18)2i>0i)
cout<<═
cout<<╗\n
cout<
cout<<
cout<<楼层电梯模拟
for(iMaxFii)
cout<<
cout<<║\n
cout<
cout<<═
cout<<╣\n
cout<
{
for(int i(MaxF4)2i>0i)
cout<<
Word(1)
for( i(2*MaxF5)2i>0i)
cout<<
cout<<║\n
cout<
cout<<
Word(0)
for( i(2*MaxF5)2i>0i)
cout<<
cout<<║\n
}
else
{
for(int i(MaxF4)2i>0i)
cout<<
Word(0)
for( i(2*MaxF5)2i>0i)
cout<<
cout<<║\n
}
cout<
cout<<═
cout<<╣\n
for( iMaxF*21i>1i)
{
ifpep
if(i2Floor_now)
{
if(i20)
{
if(Qup[i2]EmptyQ()||Qdnow[i2]EmptyQ())
ifpep\001
if(Qdnow[i2]EmptyQ())
cout<
cout<
else
{
if(Qup[i2]EmptyQ())
cout<
cout<
for(int k(3*MaxF+18)21k>0k)
cout<<
cout<< ║\n
}
else
{
if(i20)
{
if(imgF>man)
{switch(os)
{
case 0cout<
case 1cout<
}
}
else
{
if(Qup[i2]EmptyQ()||Qdnow[i2]EmptyQ())
ifpep\001
if(Qdnow[i2]EmptyQ())
cout<
cout<
}
for(int k0k
if(Liftstop[k]1)
cout<< \002
else
cout<<
}
if(MaxF20)
cout<< ▌ ║\n
else
cout<< ▌║\n
}
else
{
if(imgF>man)
{
switch(os)
{
case 0cout<
}
else
{
if(Qup[i2]EmptyQ())
{
cout<
else
{
cout<
}
for(int k0k
cout<< ▌ ║\n
else
cout<< ▌║\n
}
}
}
cout<
cout<<═
cout<<╝cout<
wordNULtt0
if(hand_auto'a'||hand_auto'A')
{
cout<
t1clock()
while(1)
{
t2clock()
if(t2>(t1+FRESH*1000))
break
}
}
else{
if(first99)
{
if(hand_auto'H'||hand_auto'h')
{
cout<
Ctrlgetch()
switch(Ctrl)
{
case SPACE break
case 'h'
case 'H'syshelp()break
case ESCexit(1)
case ENTER
cout<
{
system(cls)
sysinitAll()
sysrand_man()
}
break
}
}
}
else system(pause)}
if(wordOVER)
exit(1)
}
void systWord(int con1)输出语句
{
if(con1)
cout<< ID 目 状态 时
else
{
switch(word){
case NUL cout<< break
case SLOW cout<< 电梯开始减速 停 break
case OPEN cout<< 停铃响 开门灯亮 break
case OUT_STAcout<< 允许出入 开门灯灭 break
case OUT_ENDcout<< 关门灯亮 禁止出入 break
case SHUT cout<< 关门结束 准备移动 break
case END cout<< 退出系统 否确定 break
case R_M cout<< 进入 系统机 break
case OVER cout<< 时间超出 系统关闭 break
case OVERW cout<< 电梯超载 报警铃响 \16 \16 break
case NOMAL cout<< 数正常 电梯运行 break
case RAND_O cout<< 初始完 准备运行 break
case WAIT cout<< 电梯闲置 <
case MAKE cout<< <
case LEAVE cout<< ID<
}
}
void main ()函数
{
cout<<###############################################################################<
syshelp()
sysinitAll()
sysrand_man()
while(1)
{
Liftrun()
Liftwait()
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档