东南大学C++红绿灯项目报告附程序讲解.docx
《东南大学C++红绿灯项目报告附程序讲解.docx》由会员分享,可在线阅读,更多相关《东南大学C++红绿灯项目报告附程序讲解.docx(12页珍藏版)》请在冰豆网上搜索。
![东南大学C++红绿灯项目报告附程序讲解.docx](https://file1.bdocx.com/fileroot1/2022-11/16/9d1af155-0605-46a6-9226-c27a75df65d1/9d1af155-0605-46a6-9226-c27a75df65d11.gif)
东南大学C++红绿灯项目报告附程序讲解
该文档仅供交流学习使用,挪作它用后果自负
C++课程设计报告
——十字路口红绿灯控制流程
小组成员:
闵剑02A13540
蔡元力02A13524
袁帅东02A13521
范青宏02A13506
指导老师:
***
学院:
机械工程
日期:
2013年12月29日
十字路口红绿灯控制流程
摘要
设计十字路口交通信号灯,以成员组成小组合作的形式,研究资料,集体研讨,实际编写、调试、运行,完成对路口红绿灯控制程序的设计。
程序运行结果在模拟红绿灯框架、灯变色、倒计时方面与实际吻合,在结题后对程序进行改进,使倒计时独立显示各个灯的等待时间。
关键词:
成员合作、模拟、交通信号灯、程序。
Intersectioncontrolprocess
abstract
Designofcrossroadtrafficlights,intheformofMembergroups,research,brainstorm,andactuallywrite,debug,runtocompletethedesignofintersectiontrafficlightscontrolprogram.Programresultsframeworkforsimulatingtrafficlights,lightcolor,consistentwiththeactualcountdown,makeimprovementstotheprogramaftertheconclusion,thewaitingtimecountdowntoindependenceofindividuallamps.
Keywords:
CooperationofmembersImitateTrafficlightsProgram
一、任务需求及分析
路口交通灯流程控制:
设计程序对路口交通灯进行流程控制,使东西、南北两个方向灯和实践匹配,在屏幕上显示两个方向当前的灯及倒计时间。
二、程序功能设计说明及框图(框图见附录)
1.实现红、绿、黄三色灯之间相互转换;
2.黄灯闪烁效果;
3.文字指向方向;
4.能够根据实践对红绿灯时间作相应调整;
5.控制红绿灯运行的时长。
三、算法设计描述
1、使用绘图函数显示画布及红绿灯框架;
2、使用Sleep函数通过覆盖的方法显示倒计时;
3、使用颜色填充函数通过覆盖的方法实现三色的相互转换;
4、通过for循环以及读数条件的限制实现周期更迭;
四、程序运行与调试记录与分析
东西、南北两个方向灯和实践匹配,在屏幕上显示两个方向当前的灯及倒计时情况。
分析:
运行结果界面清晰,布局结构合理,可读性好;考虑到主干道和次干道的车流量问题,对各种路况的适应性强;黄灯间歇闪烁,与实践相匹配;未实现车辆变向行驶的控制;在后期的改进中,使得绿灯与黄灯的倒计时可以独立显示。
五、项目工作情况总结
我们在工作之初组成四人小组,建立一个团队。
在大作业下发之后规划了我们们工作的三个阶段。
第一阶段,在第十三周完成任务的分析与分配并提交项目的开题报告;第二阶段,在第十四周初步形成程序的编写,达到最基本的要求;第三阶段,在第十五周对程序进行修饰改进,进一步完善,并完成个人以及小组的工作总结,提交报告。
工作的前期,我们通过各种渠道了解了程序的基本框架以及达成一致的目标,较为粗略地分配了每个人应当承担的工作(详见开题报告),完成了对电脑上与项目相关的插件的安装。
工作的中期是我们的瓶颈阶段,每个人都想尽早完成任务但却不知如何下手,项目的发展陷入短暂的停滞阶段。
最后,成员的合作打破了这种僵局,几个人合作用一晚上的时间完成了对红绿灯框架的制作与表达,项目取得了初步的进展,这也让我们初步认识到,完成一份较为系统复杂的工作是不能完全依赖个人的能力的,更需要团队的合作。
之后成员各自拿出看家本领,在交流之中产生思维的碰撞,由此激发出更多的想法与方案。
自从有了第一步,以后的工作开展就更加顺利了,我们利用晚上以及下午没课的时间集体讨论,研究,借助与项目帮助与网上的经验,最终在第十四周结束之前顺利完成了我们对程序设计的基本要求——即实现颜色的转换和与之相匹配的倒计时——虽然存在缺陷(倒计时只能在十以内才能正确运行),这让我们尝到了最初的“甜头”。
在工作的后期,我们借鉴了别的小组的程序,看到了一些亮点,并在课堂上得到了老师的启发,找到了我们下一步工作的切入点。
由于前期我们的程序并未采用函数的组合,这对我们进一步的工作产生了更大的不便,但是我们还是克服了困难,每个人都去了解别人负责编写的程序的功能并向他人表达自己的看法。
对程序进行大量的修改,弥补了前期工作中存留在程序中的的缺陷,并让黄灯以闪烁的方式表现出来,考虑到十字路口的道路的主次之分,我们在程序中应用了宏定义,来区别表示不同方向的通行时间,进一步地适应了实际的需要。
最后,我们又在第十五周周六开展了一次集体工作,在这次工作中我们集体制作程序框图、结题报告。
并达成在周日上传工作成果的意向。
在对代码、框图进行整合之后,完成此次的项目工作情况总结。
在结题答辩之后,我们发现了自己程序的不足之处,于是我们进行了改进。
使绿灯和黄灯的倒计时能独立显示,同时对程序进行了小范围的精简处理。
与预期的效果一致,在本次工作中,我们达到了预想到的程序运行效果,对工作本身交上了一份满意的答卷。
同时,在此次的合作中我们进一步地认识到了团队的力量,合作才能早就共赢。
最后,我们组全体成员对该报告达成一致意见,统一将此最为最终的结题报告并上传。
六、参考资料
1.Easy-Xhelp文档
2.在格子上随机填入不重复的数字-BenBenBears的专栏-博客频道-CSDN.NET
3.钟表模拟程序(表针形式)--EasyXLibraryforC++
附录
1.操作说明
1)根据实际路况,在源程序中设定南北东西方向绿灯通行时长(更改宏定义参数),设置后运行可明显观察到东西和南北方向的红灯亮的时长不一样,由此控制主次干道的车流量;
2)根据实际状况设定程序需运行的单位时间长度(可以做到无限循环);
运行程序。
2.程序源代码清单
#include
#include
#include
#include
#definetime_EW15//东西方向通行时间
#definetime_SN18//南北方向通行时间
#defineTotal20//程序运行周期
voidmain()
{
initgraph(600,400);//界面大小(横向X轴,纵向Y轴)
inti,j;
for(i=50;i<=550;i=i+100)//第一行画竖线
line(i,50,i,150);//(起始点横坐标,起始点纵坐标,终止点横坐标,终止点纵坐标)
for(i=50;i<=550;i=i+100)//第二行画竖线
line(i,250,i,350);
for(j=50;j<=400;j=j+100)//画横线
line(50,j,550,j);
for(i=100;i<=300;i+=100)//使用循环画圆,精简程序
{
circle(i,100,40);
circle(i,300,40);
}
settextstyle(45,0,_T("宋体"));
outtextxy(460,75,("东西"));
outtextxy(460,275,("南北"));
intm;
for(m=0;mchars[5]={0},s_1[5]={0};//字符数组初始化,防止越界
intQ,T;//Q控制前半个周期。
T控制后半个周期
for(Q=time_SN;Q>=0;Q--)
{
if(Q<10)//覆盖思想
{
chars1[1];
chars2[1];
_stprintf(s1,_T("%d"),0);
strcpy(s,s1);
_stprintf(s2,_T("%d"),Q);
strcat(s,s2);
}
if(Q>=3)
{
setfillcolor(RED);//颜色填充(覆盖)
fillcircle(100,100,40);
setfillcolor(GREEN);
fillcircle(200,300,40);
Sleep(1000);
}
if(Q<3)
{
setfillcolor(YELLOW);
fillcircle(300,300,40);
setfillcolor(BLACK);
fillcircle(200,300,40);
Sleep(500);
fillcircle(300,300,40);
Sleep(500);
fillcircle(300,300,40);
}
if(Q>=10)
{
sprintf(s,"%d",Q);
}
if((Q-3)<10&&(Q-3)>0)
{
chars1[1];
chars2[1];
_stprintf(s1,_T("%d"),0);
strcpy(s_1,s1);
_stprintf(s2,_T("%d"),Q-3);
strcat(s_1,s2);
}
if(Q-3<=0)
{
chars1[1];
chars2[1];
_stprintf(s1,_T("%d"),0);
strcpy(s_1,s1);
_stprintf(s2,_T("%d"),Q);
strcat(s_1,s2);
}
if(Q-3>=10)
{
sprintf(s_1,"%d",Q-3);
}
outtextxy(380,75,s);
outtextxy(380,275,s_1);
}
for(T=time_EW;T>=0;T--)//与前半个周期类似
{
if(T<10)
{
chars1[1];
chars2[1];
_stprintf(s1,_T("%d"),0);
strcpy(s,s1);
_stprintf(s2,_T("%d"),T);
strcat(s,s2);
}
if(T>=3)
{
setfillcolor(GREEN);
fillcircle(200,100,40);
setfil