交通信号灯模拟操作系统可设

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

交通信号灯模拟操作系统可设

名目

1需求分析 (2)

1.1 设计要求 (2)

1.2 解决方案 (2)

2 概要设计 (2)

2.1 函数定义说明 (2)

2.2 结构设计说明 (2)

2.3 算法流程图 (3)

3详细设计 (4)

3.1 核心函数的设计 (4)

3.2 主函数的设计 (7)

4调试分析 (8)

4.1 调试过程及结果 (8)

4.2 结果分析 (10)

5课设总结 (10)

6参考文献 (10)

1 需求分析

1.1 设计要求

一个十字路口,共有四组红绿灯,每个路口的车辆都遵循"红灯停,绿灯行"的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展现出合理的"十字路口交通治理"情形.

车辆通行设定:路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能连续通过交通灯,车辆通过路口的时刻能够固定,能够自行运算。

进程的互斥:交通灯进程实际上是互斥的,即不能同时为红或者同时为绿.

进程的消息通信或其他通信方式:对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆差不多通过了路口.

进程的调度:停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来操纵所有车辆的通行。

1.2 解决方案

依照设计要求,在VC++6.0环境下编译,设计了一个能够实现自由模拟某一时段交通状况并能推测某辆车需要多久才能到达路口的系统程序,改程序达到了设计要求,成功地实现了要求功能。

2 概要设计

2.1函数定义说明

本设计中,定义了两个函数实现P、V原语的操作,其中P(int i)函数实现了i 方向上车辆等待数目减一,车辆编号增一以及输出的功能,V(int i)函数实现了时刻的增加,交通转换灯的转换,无车标志的转换以及输出的功能。同时定义了东西调度函数ETW()和南北调度函数STN(),最后因此定义了main()来调用上述函数实现动态演示及推测功能。

2.2结构设计说明

为了实现题设的要求,在VC++6.0环境下编译实现,整个系统的要紧流程设计为如下步骤:

1.定义全局变量用来存放实验所需差不多信息

2.change函数实现交换无车标志的功能

3.P函数模拟P原语的功能

4.V函数模拟V原语的功能

5.ETW函数实现东西方向的车辆调度

6.STN函数实现南北方向的车辆调度

7.main函数实现程序的输入接口以及模拟演示

2.3算法流程图

选取部分核心流程图如下:

开始开始

终止终止

图2.1 P函数图2.2 V函数

开始

终止

图2.3 main函数

3 详细设计

3.1 核心函数的设计

设计P(int i)函数用来实现从i(东西南北)方向等待车辆中挑出当前的第一个并让其通行,同时记录此车的编号,输出此车的发车时刻,代码如下:

void P(int i) //P函数,i为方向判定标志

{

if(Max[i]>0)

{

Max[i] = Max[i]-1;//i方向上的车辆等待数目减一

R[i]++;//当前车辆编号

if((PS-1)==i&&R[i]==PN)

PT = Time;//储存推测时刻

cout<

<<"辆车开始动身!"<

}

if(Max[++i]>0)

{

Max[i] = Max[i]-1;

R[i]++;

if((PS-1)==i&&R[i]==PN)

PT = Time;

cout<

<<"辆车开始动身!"<

}

}

设计V(int i)函数实现时刻的流逝,红绿灯的转换以及无车标志的转换,同时输出上一时刻调用P函数车辆的到达时刻,代码如下:

void V(int i) //V函数,i为方向判定标志

{

Time=Time+4;//时刻流逝

if(Max[i]>=0)

{

if(Max[i]==0)

Max[i]=-1;

cout<

<<"辆车到达对面!"<

}

if(Max[++i]>=0)

{

if(Max[i]==0)

Max[i]=-1;

cout<

<<"辆车到达对面!"<

}

T=T-4;//绿灯时刻减少

if(T<=0)

{

change();

int temp;//换灯

temp = L[0];

L[0] = L[1];

L[1] = temp;

T = 30-Time%30;//修正红绿灯时刻

}

}

设计东西调度函数ETW()以及南北调度函数STN()在互斥方向无车且绿灯状态下循环调用P、V函数实现单方向队列上车辆的循环调度,代码如下:

void ETW()//东西调度函数

{

if(L[0]==0)//若为红灯则交换

change();

while(T>0&&L[0]==1&&EW==1)//绿灯有时刻且南北无车

{

int b = 0;

P(b);

V(b);

}

}

void STN()//南北调度函数

{

if(L[1]==0)

相关文档
最新文档