交通信号灯模拟PV操作Word下载.docx
- 文档编号:17738826
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:21
- 大小:407.19KB
交通信号灯模拟PV操作Word下载.docx
《交通信号灯模拟PV操作Word下载.docx》由会员分享,可在线阅读,更多相关《交通信号灯模拟PV操作Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。
在PV原语行期间不允许有中断的发生。
本课题利用P操作和V操作来模拟车辆的出发和到达。
2.3课程设计内容
假设在一个十字路口,共有四组红绿灯,每个路口的车辆都遵循"
的原则,假设将每一台汽车都作为一个进程,要求设计良好的调度机制,展示出合理的"
对于本程序,对于车辆通行,设定为路口的宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,并且可以自行计算。
交通灯的进程实际上是互斥的,即不能同时为红或者同时为绿.对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口.
同时,停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
在模拟车辆运行的进程中,要求可以按要求捕捉所需要的车辆的出发时间。
在进程程序设计的过程中要保证程序运行的流畅度,合理模拟车辆遇到红绿灯变换是黄灯的暂停情况。
对于结果的分析要能够得到具有代表性的数据,比如可以根据用户需要捕获特定的某辆车的情况等。
第三章详细设计说明
3.1模块描述
对于交通信号灯模拟程序,其功能模块图如下图3-1所示:
图3-1交通信号灯模拟程序功能模块图
对于交通信号灯模拟程序,系统需要实现的功能包括:
1、模拟车辆驶出十字路口的一端。
2、模拟车辆到达路十字路口的另一端。
3、可以记录需要的车辆的出发时间和编号。
4、利用有效的调度程序对车辆的行进进行相应的控制。
5、要能对车辆是否能行进进行合理的判断。
6、要能合理的进行红绿灯的变换操作。
3.2性能描述
交通信号灯模拟程序,要求能模拟出交通信号灯处的车辆运行状况,要求能进行合理的调度和红绿灯切换,不考虑车辆在十字路口中间行驶的过程,视为离开后下一时刻直接到达对面。
要求能记录想要记录的车辆的运行时间以及车辆编号。
车辆的运行通过P操作和V操作执行,P操作进行车辆驶出的操作,V操作进行车龄到达的操作。
车辆运行调度通过ETW和STN执行,分别判断南北向和东西向是否有车,由此来控制是否能进行通车。
红绿灯的变换用来调整南北和东西是否有车的状态,同时进行输出,报告红绿灯切换状态并暂停2秒。
3.3输入项
对于交通信号灯模拟程序,需要的输入项包括:
东、西、南、北四个方向的车辆数量,需要记录的车两的驶来方向和需要记录的车辆的编号,如表3-1所示。
表3-1自行输入数据表
数据项名称
东车数量
南车数量
西车数量
北车数量
编号
方向
数据类型
int
数据值有效范围
0~100
任意
输入媒体
键盘
需要在定义里定义的数据,可自行更改,如下:
绿灯持续时间,如表3-2所示。
表3-2初始定义数据表
输入项名称
红绿灯变幻时间
有效范围
任意(建议30~40)
3.4输出项
对于交通信号灯模拟程序,需要的输出项包括:
车辆行驶的方向、车辆编号、车辆出发时间,如表3-3所示:
表3-3输出项表
输出项名称
行驶方向
车辆编号
出发时间
char
可选值
E、W、S、N
长度
1
输出位置
屏幕
3.5数据结构
为了实现题设的要求,在VC++6.0环境下编译实现,整个系统的主要流程设计为如下步骤:
1.定义全局变量用来存放实验所需基本信息
2.change函数实现交换无车标志的功能
3.P函数模拟P原语的功能
4.V函数模拟V原语的功能
5.ETW函数实现东西方向的车辆调度
6.STN函数实现南北方向的车辆调度
7.main函数实现程序的输入接口以及模拟演示
3.6算法介绍
设计P(inti)函数用来实现从i(东西南北)方向等待车辆中挑出当前的第一个并让其通行,同时记录此车的编号,输出此车的发车时间。
设计V(inti)函数实现时间的流逝,红绿灯的转换以及无车标志的转换,同时输出上一时刻调用P函数车辆的到达时间。
设计东西调度函数ETW()以及南北调度函数STN()在互斥方向无车且绿灯状态下循环调用P、V函数实现单方向队列上车辆的循环调度。
设计main()函数用来提供程序的输入接口,并实现南北东西方向函数的交叉调度,以及预测车辆出发时间的输出显示。
3.7流程图
3.7.1主程序流程图
交通信号灯模拟程序,运行开始时显示制作人信息,确定后按要求输入各个方向的车辆数量,之后输入初始红绿灯状况并输入要记录的车辆的来向和车辆编号。
组程序的流程图如图3-2所示。
图3-2交通信号灯模拟主程序流程图
3.7.2算法流程图
P(inti)函数用来实现从i(东西南北)方向等待车辆中挑出当前的第一个并让其通行,同时记录此车的编号,输出此车的发车时间,P操作算法流程图如图3-3所示。
图3-3P操作算法流程图
V(inti)函数实现时间的流逝,红绿灯的转换以及无车标志的转换,同时输出上一时刻调用P函数车辆的到达时间,V操作算法流程图如图3-4所示:
图3-4V操作算法流程图
3.8接口描述
intMax[4]
说明:
记录东、西、南、北四个方向的车数量。
intTime
记录当前行进时间。
intR[30]
记录当前车辆的编号。
intPS
用来存储东西南北的数字编号。
intPN
存储预测车辆编号。
intPT
用来存储测车辆出发时间。
intSN
东西有无车(1无车,0有车)
intEW
南北有无车(1无车,0有车)
intT
红绿灯变幻时间。
intL[2]
东西方向红绿灯状态,0时为红灯,1时为绿灯。
charFX[4]
用来存储东西南北四个方向的名字,分别为E、W、S、N。
3.9限制条件
交通信号灯模拟程序限制条件如下:
1、每个方向的车辆数量不能超过100;
2、车辆按照先后次序进行排号,不能自定义编号;
3、必须指定程序开始执行时的红绿灯状况。
第四章软件使用说明
4.1系统开发与运行环境
代码实现:
C++语言程序
开发工具:
MicrosoftVisualC++6.0
运行环境:
windowsXP或更高版本操作系统
执行方式:
文件打开后直接执行
窗口界面:
MS-DOS窗口界面
操作方式:
全键盘控制
操作需要相关专业技能:
无
4.2系统的运行说明
交通信号灯模拟程序的运行说明如下:
1、按照系统提示一步一步向下走即可顺利执行程序。
2、输入数据的过程中一定要尽量保证数据的正确性,防止因数据不正确而造成程序的崩溃等问题。
3、在所有数据都输入之后,程序会自动直接开始运行,运行过程中程序会自动执行到最后,而不会运行一步停下来等待用户的指示,因此为了保证用户检验数据,请在运行之前做好充分的数据记录,以便与理论值进行对照。
本系统是一款多功能,操作方便,界面友好的软件。
软件所提供的所有功能都可以通过键盘操作实现,简单易行,会给用户的相关操作带来很大方便。
4.3运行结果
1、系统初始界面如图4-1所示。
图4-1系统初始界面
2、如果这里输入错误,会显示如图4-2所示的界。
图4-2错误报警
3、当输入正确后,会显示如图4-3所示的内容。
图4-3输入正确显示
4、选择红绿灯状态后会出现图4-4的界面。
图4-4选择红绿灯
5、依次输入四个方向的车的数量之后出现如图4-5所示的画面。
图4-5输入车辆数
6、选择预测方向之后会出现如果4-6所示的画面。
图4-6选择预测方向
7、输入预测的车辆编号之后会直接开始执行,出现如图4-7所示的画面。
图4-7输入编号开始执行
8、在运行过程中遇到红绿灯切换的状态,如图4-8所示。
图4-8红绿灯切换文字及延时
9、最终运行完毕后,程序会给出相应预测的结果,内容如图4-9所示。
图4-9预测结果
第五章课程设计心得体会
三周的课程设计结束了,我的课程设计题目是交通信号灯模拟,通过课程设计我对P操作和V操作又有了更深入的认识,同时更加熟练的掌握了利用VC++6.0去解决这类模拟问题的方法。
这次课程设计的题目不难,应该说是比较简单的,实现的过程也比较的顺利,没有特别大的难点,虽然比较简单,但是依然能从中学到不少程序设计的方法,虽然是在windows平台上进行设计,但也能从一定的程度上对Linux系统的设计方法得到了更深入的了解,加深了自己对课本上知识的认识。
最后,感谢老师对我的学习的指导!
附录1:
参考文献
[1]胡志刚,谭长庚等,《计算机操作系统》,中南大学出版社2005年
[2]罗宇,邹鹏等,《操作系统》(第二版),电子工业出版社2007年4月
[3]汤子瀛,哲风屏,汤小冉等,《计算机操作系统》,西安电子科技大学出社,2001年8月
[4]张尧学,史美林,《计算机操作系统课程》,清华大学出版社,2000年
[5]庞丽萍,《操作系统原理》,华中理工大学出版社,2000年
[6]马季兰等Linux操作系统,电子工业出版社2002年
[7]任爱华,李鹏,刘方毅,操作系统实验指导,清华大学出版社,2004年
[8]谭浩强著.C程序设计,清华大学出版社,1999年12月第2版
[9]谭浩强著.C++程序设计实践指导,清华大学出版社,2005年7月底1版
[10]【美】D.C.Malik:
C++编程——从问题分析到程序设计,电子工业出版社,2003年7月第1版
附录2:
程序清单
交通信号灯模拟:
#include<
iostream>
windows.h>
string>
stdio.h>
usingnamespacestd;
intMax[4];
intTime=0;
intR[30];
intPS=1,PN=1,PT=1,SN=0,EW=1;
intT=30;
intL[2];
charFX[4];
voidP(int);
voidV(int);
voidchange();
voidSTN();
voidETW();
voidP(inti)//P函数,i为方向判断标志
{
if(Max[i]>
0)
{
Max[i]=Max[i]-1;
//i方向上的车辆等待数目减一
R[i]++;
//当前车辆编号
if((PS-1)==i&
&
R[i]==PN)
PT=Time;
//保存预测时间
cout<
<
Time<
"
时刻向"
FX[i]<
方向行驶的第"
R[i]
<
辆车开始出发!
endl;
}
if(Max[++i]>
PT=Time;
}
voidV(inti)//V函数,i为方向判断标志
Time=Time+4;
//时间流逝
=0)
if(Max[i]==0)
Max[i]=-1;
cout<
辆车到达对面!
R[i]<
T=T-4;
//绿灯时间减少
if(T<
change();
inttemp;
//换灯
temp=L[0];
L[0]=L[1];
L[1]=temp;
T=30-Time%30;
//修正红绿灯时间
voidETW()//东西调度函数
if(L[0]==0)//若为红灯则交换
while(T>
0&
L[0]==1&
EW==1)//绿灯有时间且南北无车
intb=0;
P(b);
V(b);
voidSTN()//南北调度函数
if(L[1]==0)
L[1]==1&
SN==1)//绿灯有时间且东西无车
inta=2;
P(a);
V(a);
voidchange()
红绿灯变换,所有未通过车辆停止运行。
intss;
ss=SN;
SN=EW;
EW=ss;
Sleep(2000);
intmain()
inta;
charb;
for(;
;
)
******************交通信号灯模拟*********************"
endl
*班级:
网络工程102001班*"
*学号:
201020030103*"
*制作人:
崔雷*"
*****************************************************"
输入Y继续:
cin>
>
b;
if(b=='
Y'
||b=='
y'
break;
else
cout<
您的输入有误,请重新输入"
system("
cls"
);
while
(1)
欢迎进入模拟信号灯系统"
请选择东西方信号灯状态:
\t1.红灯\n"
\t2.绿灯\n"
inta;
a;
if(a==1)
{
L[0]=0;
L[1]=1;
}
if(a==2)
L[0]=1;
L[1]=0;
请依次输入东、西、南、北等待的车辆数:
cin>
Max[0]>
Max[1]>
Max[2]>
Max[3];
//输入各方位车辆数量
请输入选择预测的方向:
\t1.E-东\n"
\t2.W-西\n"
\t3.S-南\n"
\t4.N-北\n"
PS;
请输入预测车辆的编号:
PN;
Time=0;
T=32;
EW=1;
SN=1;
FX[0]='
E'
FX[1]='
W'
FX[2]='
S'
FX[3]='
N'
while(Max[0]!
=-1&
Max[1]!
Max[2]!
Max[3]!
=-1)//表示四个方向有车循环,无车就停止循环
if(L[0]==0)
STN();
ETW();
向"
FX[PS-1]<
行驶编号为"
PN<
的车辆预测出发时间为:
PT<
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通 信号灯 模拟 PV 操作