集中上机(C++Java)_第1页
集中上机(C++Java)_第2页
集中上机(C++Java)_第3页
集中上机(C++Java)_第4页
集中上机(C++Java)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、交通灯程序·徐栩集中上机实习报告课程名称: C+/Java集中上机 指导教师: 冯潇 姓 名: 徐栩 学 号: 2013211446 班 级: 0401302 时 间: 15年5月10日 集中上机报告要求一、报告内容:1需求分析。包括系统具备功能和算法分析。1系统设计(包括概要设计与详细设计)。包含以下内容:方案比较与选择,模块划分与说明;系统流程图和各模块详细流程图。2编码。提交带注释的源程序清单。3单元测试和综合测试。提交单元和综合测试方案和结果。4心得体会。在本次设计中所遇到问题及其解决方案,收获及心得。二、报告格式:1要求有封面,封面上标注课程名称、指导教师、班级、学号、姓名

2、、时间信息;2、报告内页每页有页眉页脚,总体页数不低于6页,排版符合出版物基本要求,字体字号统一。交通灯程序摘要设计十字路口交通信号灯,以单人自主研发形式,通过研究题目,查询资料,实际编写、调试、运行,完成对路口红绿灯控制程序的设计。程序运行结果在模拟道路方向、灯变色、倒计时方面与实际吻合,在二次分析时对程序进行改进,使倒计时独立显示各个灯的等待时间。 关键词:倒计时、模拟、交通信号灯、程序。Intersection control processAbstractDesign of crossroad traffic lights, in the form of Independent Dev

3、elopment, research, Consultation, and actually write, debug, run to complete the design of intersection traffic lights control program. Program results road direction for simulating traffic lights, light color, consistent with the actual countdown. Then make improvements to the program during the se

4、cond time analysis, change the waiting time countdown to independence of individual lamps.Keywords:CountdownImitateTraffic lightsProgram一、 任务需求及分析要求:在交通路口显示一个交通灯,分红色和绿色两种,红色表示停车,绿色表示通行。有两辆汽车在道路上行使,交通灯按设置的时间自动指挥交通,汽车按交通规则行驶。二、 程序功能设计说明及框图(框图见附录)1. 根据实际状况设定程序需运行的单位时间长度(可以做到无限循环);2. 实现红、绿、黄三色灯之间相互转换;3.

5、 绿灯闪烁效果;4. 规定道路方向;5. 能够根据实践对红绿灯时间作相应调整;6. 控制红绿灯运行的时长。三、 算法设计描述1、 使用windows 附带API绘图函数显示窗口及红绿灯框架;2、 使用Sleep函数通过覆盖的方法显示倒计时; 3、 使用颜色填充函数通过覆盖的方法实现三色的相互转换;4、 通过while循环以及if规定读数条件的限制实现周期内变色更迭;四、 程序运行与调试记录与分析东西、南北两个方向灯和道路方向匹配,在屏幕上显示两个方向当前的灯及倒计时情况。图1 红绿灯控制程序就位,等待设置时间图2 以6秒为例,控制程序开始运行,默认设置东西方来往车辆先行图3 进入3秒倒计时,绿

6、灯闪烁图4 倒计时结束,行进车辆黄灯注意,即将切换交通灯图5 执行交通信号自动切换,此时东西方向车辆停止行进,南北车辆遵顼绿灯行驶图6 第一次循环结束后,交通灯按设置的时间自动指挥交通,汽车按交通规则行驶。分析:运行结果界面清晰,布局结构合理,可读性好;考虑到不同路口车流量不同问题,对各种路况的交通灯等待时间可控,适应性强;绿灯倒计时闪烁,与实践相匹配;固定两方向车辆等待时间一致,未实现车辆变向行驶的控制;在最后的改进中,使得绿灯与黄灯的倒计时可以独立显示。五、 情况总结和心得在大作业下发之后规划了自己的项目为三个阶段。第一阶段,在第6周之内完成任务的分析列出相关知识点,针对自己并没有掌握但在

7、项目中需要用到的只是进行重点学习;第二阶段,在第10周初步形成程序的编写,达到最基本的要求;第三阶段,在第11周大部分同学都完成程序之后,在寝室内寻味舍友意见,对程序进行修饰改进,进一步完善,并完成总结,撰写报告。工作的前期,我通过上网搜索以及看书等各种渠道了解了红绿灯控制程序的基本框架,较为粗略地列出了项目所需要的功能,完成了对电脑上调试软件的安装和配置。(刚刚换成win8系统的时候安装的vs是英文版的,根本不知道从哪里新建项目)工作的中期是我的瓶颈阶段,总是想尽早完成任务但却不知如何下手,再加上运动会开幕式彩排以及准备期中考试等乱七八糟的事情,让项目的发展陷入短暂的停滞阶段。最后,我专门利

8、用周末的时间给自己上闹钟,早上爬起来看教学视频,在初步掌握了相关知识并具有大致思路之后,用两个晚上的时间完成了对红绿灯框架的制作,项目取得了初步的进展,这也让我认识到,写程序不能追求一蹴而就,要静下心来,一步一步,一条一条的按部就班写下去,遇到不懂得知识就立刻去网上查或者咨询同学,争取马上掌握马上应用。自从有了第一步,以后的工作开展就更加顺利了,我利用课余时间和晚上,借助与网上的经验,最终在第10周结束之前顺利完成了对程序设计的基本要求即实现颜色的转换和与之相匹配的倒计时在第11周的时候,寝室大部分同学也都做好了自己的项目,通过给他们看我的作品,我发现了自己程序的不足之处,于是进行了修改,使绿

9、灯和黄灯的倒计时能独立显示,同时对程序进行了小范围的精简处理。与预期的效果一致,在本次作业中,我达到了预想到的程序运行效果,同时也学到了不少在目前的C+课上并没有接触过的知识,了解并能看懂windows图形参数的部分用法。六、 参考资料1. C+语言程序设计(第四版) 郑莉2. 如何获取控制台窗口句柄 (HWND)3. 无聊了,写个函数图像程序_c语言吧_百度贴吧附录一:源程序代码/红绿灯控制.cpp/#include <stdio.h> #include <windows.h> #include <math.h> #include <iostream

10、> #include"diytime.h" using namespace std;/ 获取控制台窗口句柄 微软官方网站的程序 直接拿来用了HWND GetConsoleHwnd(void)#define MY_BUFSIZE 1024 / Buffer size for console window titles.HWND hwndFound; / This is what is returned to the caller.char pszNewWindowTitleMY_BUFSIZE; / Contains fabricatedchar pszOldWindo

11、wTitleMY_BUFSIZE; / Contains originalGetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);/获取控制台标题存入pszOldWindowTitle中/设置控制台的标题为 时间数 进程IDwsprintf(pszNewWindowTitle, "%d/%d",/把获取的数目,和当前进程ID输出到缓冲区pszNewwindowtitle中GetTickCount(),/用于获取操作系统启动后的毫秒数GetCurrentProcessId();/获取当前进程IDSetConsoleTitle(pszNew

12、WindowTitle);/更改控制台的标题为新内容Sleep(40);hwndFound = FindWindow(NULL, pszNewWindowTitle);/获取控制台的HWND号SetConsoleTitle(pszOldWindowTitle);/更改控制台的标题为原始内容return(hwndFound);/返回句柄void main(void)#define WEST_EAST 50,50,100,100#define SOUTH_NORTH 350,50,300,100int minute = 0, second = 0;int minute1 = 0, second1

13、= 0;int ir = 1, i;cout << "输入倒计时时间(单位:秒,03600秒):" << endl;cin >> second;system("cls");cout << " 东西方向 南北方向" << endl << endl;if (second>59)minute = second / 60;second = second % 60;minute1 = minute; second1 = second;HPEN hPen = Creat

14、ePen(0, 5, RGB(200, 256, 256);HBRUSH hBrushy = CreateSolidBrush(RGB(255, 255, 0);HBRUSH hBrushg = CreateSolidBrush(RGB(0, 255, 0);HBRUSH hBrushr = CreateSolidBrush(RGB(255, 0, 0);HBRUSH hBrushb = CreateSolidBrush(RGB(0, 0, 0);HWND hConsole = GetConsoleHwnd();HDC pdcg = GetDC(hConsole);HDC pdcr = Get

15、DC(hConsole);HDC pdcy = GetDC(hConsole);HDC pdcb = GetDC(hConsole);HPEN hOldPen = (HPEN)SelectObject(pdcg, hBrushg);hOldPen = (HPEN)SelectObject(pdcr, hBrushr);hOldPen = (HPEN)SelectObject(pdcy, hBrushy);hOldPen = (HPEN)SelectObject(pdcb, hBrushb);while (1)if (ir)Ellipse(pdcg, WEST_EAST);Ellipse(pdc

16、r, SOUTH_NORTH);i = destime_n(minute, second, 3);Ellipse(pdcb, WEST_EAST);OutputTime1(0, 3);cout << 'r'Sleep(500);Ellipse(pdcg, WEST_EAST);OutputTime2(0, 3);cout << 'r'Sleep(500);Ellipse(pdcb, WEST_EAST);OutputTime1(0, 2);cout << 'r'Sleep(500);Ellipse(pdcg,

17、WEST_EAST);OutputTime2(0, 2);cout << 'r'Sleep(500);Ellipse(pdcb, WEST_EAST);OutputTime1(0, 1);cout << 'r'Sleep(500);Ellipse(pdcg, WEST_EAST);OutputTime2(0, 1);cout << 'r'Sleep(500);Ellipse(pdcy, WEST_EAST);OutputTime1(0, 0);cout << 'r'Sleep(100

18、0);ir = 0;elseEllipse(pdcg, SOUTH_NORTH);Ellipse(pdcr, WEST_EAST);i = destime_n(minute, second, 3);Ellipse(pdcb, SOUTH_NORTH);OutputTime1(0, 3);cout << 'r'Sleep(500);Ellipse(pdcg, SOUTH_NORTH);OutputTime2(0, 3);cout << 'r'Sleep(500);Ellipse(pdcb, SOUTH_NORTH);OutputTime1(

19、0, 2);cout << 'r'Sleep(500);Ellipse(pdcg, SOUTH_NORTH);OutputTime2(0, 2);cout << 'r'Sleep(500);Ellipse(pdcb, SOUTH_NORTH);OutputTime1(0, 1);cout << 'r'Sleep(500);Ellipse(pdcg, SOUTH_NORTH);OutputTime2(0, 1);cout << 'r'Sleep(500);Ellipse(pdcy, S

20、OUTH_NORTH);OutputTime1(0, 0);cout << 'r'Sleep(1000);ir = 1;ReleaseDC(hConsole, pdcr);ReleaseDC(hConsole, pdcg);ReleaseDC(hConsole, pdcb);ReleaseDC(hConsole, pdcy);/daytime.h/#include<windows.h>#include<iostream>#include<stdio.h>#ifndef TIMH_H#define TIMH_Husing names

21、pace std;/时间输出函数void OutputTime1(int minute, int second)if (minute<10) cout<<'0'cout<<minute;cout<<':'if (second<10) cout<<'0'cout<<second;void OutputTime2(int minute, int second)if (minute<10) cout<<'0'cout<<minute;c

22、out<<' 'if (second<10) cout<<'0'cout<<second;/倒计时函数(到3秒)int destime_3(int minute, int second)int dot = 1;int time = 2;while (second != -1 && minute != -1)if (dot = 1)OutputTime1(minute, second);dot = 0;time-;elseOutputTime2(minute, second);dot = 1;time-;i

23、f (time = 0)second-;if (second = -1)minute-;second = 59;time = 2;cout<<'r'Sleep(500);if (minute = 0 && second = 3) return 1;return 0;/倒计时函数(差1秒)int destime_1(int minute, int second)int dot = 1;int time = 2;while (second != -1 && minute != -1)if (dot = 1)OutputTime1(minu

24、te, second);dot = 0;time-;elseOutputTime2(minute, second);dot = 1;time-;if (time = 0)second-;if (second = -1)minute-;second = 59;time = 2;cout<<'r'Sleep(500);if (minute = 0 && second = 0) return 1;return 0;/倒计时函数(正常)int destime_0(int minute, int second)int dot = 1;int time = 2;while (second != -1 && minut

温馨提示

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

评论

0/150

提交评论