操作系统课程设计报告.docx
《操作系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
操作系统课程设计报告
操作系统
课程设计
题目:
交通灯问题
专业:
计算机科学与技术
姓名:
廖俊军
学号:
09041129
学院:
信息工程学院
2011年12月23日
一、课程设计题目:
信号灯模拟程序
1、设计目的:
一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停、绿灯行”的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的“十字路口交通管理”情况。
设计复杂路段信号灯控制,要求实现图形用户界面。
2、设计要求:
车辆数目:
每个路口的车辆数目不超过5辆,程序能够提供参数来设定初始的车辆数目。
交通灯设定:
初始情况一个路口为红灯、一个路口为绿灯;红灯变为绿灯的间隔为3秒,必须保持十字路口交通灯的设定正确。
车辆通行设定:
路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定、可以自行计算,但是不能为3秒。
(即必须体现交通灯对通行的管制)。
进程的互斥:
交通灯进程实际上是互斥的,即不能同时为红或者同时为绿。
进程的消息通信或其他通信方式:
对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口。
进程的调度:
停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
开发环境说明:
开发软件:
MicrosoftVisualstudio2010
二、功能需求分析:
程序需实现以下功能:
车辆正常通过十字路口
车辆都遵守交通规则
合理的使用资源
三、概念设计:
根据程序功能需求本程序涉及实体很简单,包括车实体和灯实体,根据实体属性和实体间的联系进行设计。
1.车实体
这里我们需要解决四类车辆对象的各种功能和操作,所以在设计过程中添加如下四个用户控件(即是四个不同的类)
此四个类各种实现不同车道上的车的相关动作。
如:
运动
2.灯实体
此次设计过程中,有一个极为重要的功能实现就是交通灯的计时和交通规则问题。
这里在设计红绿灯的亮灯规则有如下波形图:
还有如下等函数来控制亮灯的颜色:
在通过各种判断和控制就实现了最终的交通灯问题。
开始按钮后,交通灯将按照一定的逻辑开始变换亮灯,于此同时将随机的产生各种不同的车辆对象,开始在道路上按规则进行运动。
然后在车辆完成在道路上的运动时,合理撤销对象,释放其所占有的资源。
四、用户界面设计
道路设计:
简单,交通灯为label,车道是背景图片,没有进行加工,只是最简单的绘画。
下来车:
上来车:
左来车:
右来车:
运行界面:
注:
次车道为三车道,因为时间原因,车辆的左转和右转还没有实现,所以暂时只有直行的功能。
1.红灯停
车辆在还没有通过先时遇见红灯则在线之外等待绿灯才能通行。
2.绿灯行
车辆在绿灯情况下运行。
3.黄灯等待和通行问题
当黄灯时,已经通过先的车辆继续通行,未通过的则等待。
4.车辆间距问题
前后车辆必须保持一定的车距
五、语言代码:
1.main类
2.MyCarLeft等
3.各种参数的解释
ArrayList用来存储各个方向的对象,上的bool都是用来记录各个灯的红、黄和绿的状态。
4.控制交通灯颜色的函数(一个样式)
5.交通灯控制
6.#region通ª¡§灯Ì?
控?
制?
7.inttime=0;
8.privatevoidtimer1_Tick(objectsender,EventArgse)
9.{
10.time++;
11.btnstart.Text=time.ToString();
12.if(time>0&&time<30)label1.Left+=4;
13.if(time>30)label1.Top+=4;
14.if(time==1)
15.{
16.
17.light_SN_STRandRight();
18.}
19.if(time==31)
20.{
21.light_SN_yellow();
22.}
23.if(time==36)
24.{
25.light_SN_left();
26.}
27.if(time==66)
28.{
29.light_SNEW_yellow();
30.}
31.if(time==71)
32.{
33.light_EW_STRandRight();
34.}
35.if(time==101)
36.{
37.light_EW_yellow();
38.}
39.if(time==106)
40.{
41.light_EW_left();
42.}
43.if(time==136)
44.{
45.light_SN_EW_yellow();
46.}
47.if(time>141)
48.{
49.time=0;
50.}
51.}
52.#endregion
使用Timer控件计时来模拟进程,以time参数的值来调用不同的控制等的各个函数实现灯的亮。
53.创建车对象
54.privatevoidtimer2_Tick(objectsender,EventArgse)
55.{
56.System.RandomrdmCar=newRandom();
57.intcarFrom=rdmCar.Next(1,5);
58.System.RandomrdmDrction=newRandom();
59.intcarTo=rdmDrction.Next(1,4);
60.
61.//进?
入¨?
各¡Â自Á?
的Ì?
道̨¤
62.if(carFrom==1)//南?
路¡¤口¨²
63.{
64.
65.if(carTo==1)//左Á¨®
66.{
67.MyCarBottomcarbottom=newMyCarBottom(carFrom,carTo,Scount_1,this);
68.bottom_1.Add(carbottom);
69.Scount_1++;
70.}
71.if(carTo==2)//直¡À
72.{
73.MyCarBottomcarbottom=newMyCarBottom(carFrom,carTo,Scount_2,this);
74.bottom_2.Add(carbottom);
75.Scount_2++;
76.}
77.if(carTo==3)//右®¨°
78.{
79.MyCarBottomcarbottom=newMyCarBottom(carFrom,carTo,Scount_3,this);
80.bottom_3.Add(carbottom);
81.Scount_3++;
82.
83.}
84.}
85.
86.if(carFrom==2)//北À¡À路¡¤口¨²
87.{
88.if(carTo==1)//左Á¨®
89.{
90.MyCarTopcartop=newMyCarTop(carFrom,carTo,Ncount_1,this);
91.top_1.Add(cartop);
92.Ncount_1++;
93.
94.}
95.if(carTo==2)//直¡À
96.{
97.MyCarTopcartop=newMyCarTop(carFrom,carTo,Ncount_2,this);
98.top_2.Add(cartop);
99.Ncount_2++;
100.
101.}
102.if(carTo==3)//右®¨°
103.{
104.MyCarTopcartop=newMyCarTop(carFrom,carTo,Ncount_3,this);
105.top_3.Add(cartop);
106.Ncount_3++;
107.
108.}
109.}
110.
111.if(carFrom==3)//东?
路¡¤口¨²
112.{
113.if(carTo==1)//左Á¨®
114.{
115.MyCarRightcarright=newMyCarRight(carFrom,carTo,Ecount_1,this);
116.right_1.Add(carright);
117.Ecount_1++;
118.
119.}
120.if(carTo==2)//直¡À
121.{
122.MyCarRightcarright=newMyCarRight(carFrom,carTo,Ecount_2,this);
123.right_2.Add(carright);
124.Ecount_2++;
125.
126.}
127.if(carTo==3)//右®¨°
128.{
129.MyCarRightcarright=newMyCarRight(carFrom,carTo,Ecount_3,this);
130.right_3.Add(carright);
131.Ecount_3++;
132.
133.}
134.}
135.
136.if(carFrom==4)//西¡Â路¡¤口¨²
137.{
138.if(carTo==1)//左Á¨®
139.{
140.MyCarLeftcarleft=newMyCarLeft(carFrom,carTo,Wcount_1,this);
141.left_1.Add(carleft);
142.Wcount_1++;
143.
144.}
145.if(carTo==2)//直¡À
146.{
147.MyCarLeftcarleft=newMyCarLeft(carFrom,carTo,Wcount_2,this);
148.left_2.Add(carleft);
149.Wcount_2++;
150.
151.}
152.if(carTo==3)//右®¨°
153.{
154.MyCarLeftcarleft=newMyCarLeft(carFrom,carTo,Wcount_3,this);
155.left_3.Add(carleft);
156.Wcount_3++;
157.
158.}
159.}
160.}
随机产生两个数值来确定车辆所在的车道。
MyCarBottomcarbottom=newMyCarBottom(carFrom,carTo,Scount_1,this);
bottom_1.Add(carbottom);
这是向相应的类传送参数,并且每生产一个对象则在相应的ArryList中添加一个值。
161.具体车的控制
162.privatevoidMyCarRight_Load(objectsender,EventArgse)
163.{
164.timer1.Start();
165.}
166.
167.privatevoidtimer1_Tick(objectsender,EventArgse)
168.{
169.try
170.{
171.bool_index=false;
172.inti=0;
173.if(_form.right_1.Contains(this))
174.{
175.i=_form.right_1.IndexOf(this);
176.if(i>0)
177.{
178.MyCarRightcarright=(MyCarRight)_form.right_1[i-1];
179.if(this.Left-carright.Left>90)
180.{
181._index=true;
182.}
183.}
184.}
185.if(this.Left>368&&(_index||i==0))//已°?
经-红¨¬灯Ì?
但Ì?
是º?
还1没?
有®D超?
出?
线?
并¡é且¨°与®?
前¡ã面?
车¦Ì辆¢?
距¨¤离¤?
较?
大䨮
186.x1-=4;
187.if(_form.right_2.Contains(this))
188.{
189.i=_form.right_2.IndexOf(this);
190.if(i>0)
191.{
192.MyCarRightcarright=(MyCarRight)_form.right_2[i-1];
193.if(this.Left-carright.Left>90)
194.{
195._index=true;
196.}
197.}
198.}
199.if(this.Left>368&&(_index||i==0))//已°?
经-红¨¬灯Ì?
但Ì?
是º?
还1没?
有®D超?
出?
线?
并¡é且¨°与®?
前¡ã面?
车¦Ì辆¢?
距¨¤离¤?
较?
大䨮
200.x2-=4;
201.
202.if(_form.right_3.Contains(this))
203.{
204.i=_form.right_3.IndexOf(this);
205.if(i>0)
206.{
207.MyCarRightcarright=(MyCarRight)_form.right_3[i-1];
208.if(this.Left-carright.Left>90)
209.{
210._index=true;
211.}
212.}
213.}
214.if(this.Left>368&&(_index||i==0))//已°?
经-红¨¬灯Ì?
但Ì?
是º?
还1没?
有®D超?
出?
线?
并¡é且¨°与®?
前¡ã面?
车¦Ì辆¢?
距¨¤离¤?
较?
大䨮
215.x3-=4;
216.if(_form.EW_Str_R||this.Left<=116)//当Ì¡À绿¨¬灯Ì?
时º¡À前¡ã进?
217.{
218.x1-=4;
219.x2-=4;
220.x3-=4;
221.}
222.if(_form.EW_Str_R_Yellow&&this.Left<373)
223.{
224.x1-=10;
225.x2-=10;
226.x3-=10;
227.}
228.
229.
230.if(_from==3)
231.{
232.if(_to==1)
233.{
234.
235.y=212;
236.this.Left=430+x1;
237.this.Top=y;
238._form.Controls.Add(this);
239.}
240.if(_from==3&&_to==2)
241.{
242.y=192;
243.this.Top=y;
244.this.Left=430+x2;
245._form.Controls.Add(this);
246.}
247.if(_from==3&&_to==3)
248.{
249.y=162;
250.this.Top=y;
251.this.Left=430+x3;
252._form.Controls.Add(this);
253.}
254.}
255.}
256.finally
257.{
258.if(this.Left<=0)this.Dispose();
259.}
260.}
六、总结
本次课程设计虽然遇见许多困难,但最终都解决了,在设计过程中遇见问题而提出问题并且寻找解决方法的过程中颇是受益。
我们通过咨询有更多经验的人和在网上、书籍上查找相应的资料,最后在规定的收件内完成本次课程设计。
总体来讲,在表面上,基本已经实现了车辆和交通灯等基本操作功能,而且在设计过程中也有合理的逻辑。
但是,细观察设计内容可以发现许多的问题,一下是我个人认为的不足之处:
1.面向对象思想不够明确。
2.操作过于繁琐,就代码本身而言,代码的结构和功能都十分的杂乱,有待提高
3.设计过程中,存在许多不完整性的控制,整个设计流程简单,但是却没有阵中的使用进程机制。
4.许多功能没有能够实现。
最后、通过这次课程设计,我们对程序设计有了基本的认识,对计算机操作系统的进程机制也有了更进一步的理解,而且在设计过程中学习的团队合作精神和提高个人解决问题的能力都有了相应的见识。
相信在这次设计能为今后的开发设计做一个很好的铺垫。