操作系统课程设计报告---信号灯模拟程序.docx_第1页
操作系统课程设计报告---信号灯模拟程序.docx_第2页
操作系统课程设计报告---信号灯模拟程序.docx_第3页
操作系统课程设计报告---信号灯模拟程序.docx_第4页
操作系统课程设计报告---信号灯模拟程序.docx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计题 目: 交通灯问题 专 业: 计算机科学与技术 姓 名: 学 号: 09041129 学 院: 信息工程学院 2011年 12 月 23 日一、 课程设计题目:信号灯模拟程序1、设计目的:一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停、绿灯行”的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的“十字路口交通管理”情况。设计复杂路段信号灯控制,要求实现图形用户界面。2、设计要求:车辆数目:每个路口的车辆数目不超过5辆,程序能够提供参数来设定初始的车辆数目。交通灯设定:初始情况一个路口为红灯、一个路口为绿灯;红灯变为绿灯的间隔为3秒,必须保持十字路口交通灯的设定正确。车辆通行设定:路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定、可以自行计算,但是不能为3秒。(即必须体现交通灯对通行的管制)。进程的互斥:交通灯进程实际上是互斥的,即不能同时为红或者同时为绿。进程的消息通信或其他通信方式:对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口。进程的调度:停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。开发环境说明:开发软件:microsoft visual studio 2010二、 功能需求分析:程序需实现以下功能:车辆正常通过十字路口车辆都遵守交通规则合理的使用资源三、 概念设计:根据程序功能需求本程序涉及实体很简单,包括车实体和灯实体,根据实体属性和实体间的联系进行设计。1. 车实体这里我们需要解决四类车辆对象的各种功能和操作,所以在设计过程中添加如下四个用户控件(即是四个不同的类)此四个类各种实现不同车道上的车的相关动作。如:运动2. 灯实体此次设计过程中,有一个极为重要的功能实现就是交通灯的计时和交通规则问题。这里在设计红绿灯的亮灯规则有如下波形图:还有如下等函数来控制亮灯的颜色:在通过各种判断和控制就实现了最终的交通灯问题。 开始按钮后,交通灯将按照一定的逻辑开始变换亮灯,于此同时将随机的产生各种不同的车辆对象,开始在道路上按规则进行运动。然后在车辆完成在道路上的运动时,合理撤销对象,释放其所占有的资源。四、 用户界面设计道路设计:简单,交通灯为label,车道是背景图片,没有进行加工,只是最简单的绘画。下来车:上来车:左来车:右来车:运行界面:注:次车道为三车道,因为时间原因,车辆的左转和右转还没有实现,所以暂时只有直行的功能。1. 红灯停车辆在还没有通过先时遇见红灯则在线之外等待绿灯才能通行。2. 绿灯行车辆在绿灯情况下运行。3. 黄灯等待和通行问题当黄灯时,已经通过先的车辆继续通行,未通过的则等待。4. 车辆间距问题前后车辆必须保持一定的车距五、 语言代码:1. main 类 2. mycarleft 等3. 各种参数的解释 arraylist用来存储各个方向的对象,上的bool都是用来记录各个灯的红、黄和绿的状态。4. 控制交通灯颜色的函数(一个样式)5. 交通灯控制6. #region 通灯?控?制?7. int time = 0;8. private void timer1_tick(object sender, eventargs e)9. 10. time+;11. btnstart.text = time.tostring();12. if (time 0 & 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. private void timer2_tick(object sender, eventargs e)55. 56. system.random rdmcar = new random();57. int carfrom = rdmcar.next(1,5);58. system.random rdmdrction = new random();59. int carto = rdmdrction.next(1, 4);60.61. /进?入?各自?的?道62. if(carfrom=1) /南?路口63. 64. 65. if (carto = 1)/左66. 67. mycarbottom carbottom = new mycarbottom(carfrom, carto, scount_1, this);68. bottom_1.add(carbottom);69. scount_1+;70. 71. if (carto = 2)/直72. 73. mycarbottom carbottom = new mycarbottom(carfrom, carto, scount_2, this);74. bottom_2.add(carbottom);75. scount_2+;76. 77. if (carto = 3)/右78. 79. mycarbottom carbottom = new mycarbottom(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. mycartop cartop = new mycartop(carfrom, carto, ncount_1, this);91. top_1.add(cartop);92. ncount_1+;93. 94. 95. if (carto = 2)/直96. 97. mycartop cartop = new mycartop(carfrom, carto, ncount_2, this);98. top_2.add(cartop);99. ncount_2+;100. 101. 102. if (carto = 3)/右103. 104. mycartop cartop = new mycartop(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. mycarright carright = new mycarright(carfrom, carto, ecount_1, this);116. right_1.add(carright);117. ecount_1+;118. 119. 120. if (carto = 2)/直121. 122. mycarright carright = new mycarright(carfrom, carto, ecount_2, this);123. right_2.add(carright);124. ecount_2+;125. 126. 127. if (carto = 3)/右128. 129. mycarright carright = new mycarright(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. mycarleft carleft = new mycarleft(carfrom, carto, wcount_1, this);141. left_1.add(carleft);142. wcount_1+;143. 144. 145. if (carto = 2)/直146. 147. mycarleft carleft = new mycarleft(carfrom, carto, wcount_2, this);148. left_2.add(carleft);149. wcount_2+;150. 151. 152. if (carto = 3)/右153. 154. mycarleft carleft = new mycarleft(carfrom, carto, wcount_3, this);155. left_3.add(carleft);156. wcount_3+;157. 158. 159. 160. 随机产生两个数值来确定车辆所在的车道。mycarbottom carbottom = new mycarbottom(carfrom, carto, scount_1, this); bottom_1.add(carbottom);这是向相应的类传送参数,并且每生产一个对象则在相应的arrylist中添加一个值。161. 具体车的控制162. private void mycarright_load(object sender, eventargs e)163. 164. timer1.start();165. 166.167. private void timer1_tick(object sender, eventargs e)168. 169. try170. 171. bool _index = false;172. int i = 0;173. if (_form.right_1.contains(this)174. 175. i = _form.right_1.indexof(this);176. if (i 0)177. 178. mycarright carright = (mycarright)_form.right_1i - 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. mycarright carright = (mycarright)_form.right_2i - 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. mycarright carright = (mycarright)_form.right_3i - 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论