车辆通过十字路口的演示程序学号:姓名:指导老师:2010年12月目录1.需求分析…………………………………………………32.概要设计…………………………………………………53.测试……………………………………………………64.用户手册…………………………………………………65.总结提高…………………………………………………66.程序代码…………………………………………………71需求分析1.1功能与数据需求1.11基本功能(1)基本功能只考虑东西(或南北)方向有车辆,暂不考虑交叉方向的车辆。(2)显示十字路口和交通灯的图案。(3)按F1键开始出现车辆;按ESC键程序结束。(4)按规律定时切换交通灯。(5)各方向(即东西方向)在路的尾端随机出现车辆,出现的车辆逐渐进入屏幕,车辆大小随机设置;车辆达到屏幕另一端时逐渐消失。(6)各方向(即东西方向)的每辆车按自己的速度匀速运动,遇红灯或黄灯停车,绿灯前行。(7)各个车辆不能相撞。1.12拓展功能(1)车辆的速度随机产生(产生随机速度后,则保持此速度),以确保车辆的速度不相尽同。(2)可以通过鼠标点击按钮的方式或按键的方式将当前车辆行驶状况和交通灯的状况保存到文件中,并可从文件中恢复储存前的状态。(3)在四个方向都有车。1.13数据分析1.2界面需求界面的背景色是深灰色。因为只考虑了南北向通车,所以没有开启东西向的红绿灯,所以改为灰色以示关闭。车辆的大小,颜色,均是随机的。1.3界面展示1.4开发与运行环境需求本课设是在TC3.0的图形模式环境下开发的,得通过TC3.0(或者是TC2.0)来运行这个程序。2概要设计2.1主要数据结构这个程序的主要数据就是小车的数据。根据教材和辅导教师的指导,我利用该结构体构建链表。typedefstructcar{intlen;/*小车的长度*/intwei;/*小车的宽度*/intx,y;/*小车的位置*/intcolor;/*小车的颜色*/intspeed;/*小车的速度*/structcar*next;/*用于指向下一个小车结构体*/}CAR;2.2程序总体结构总体结构大体分为:#include<>/*声明函数*/typedefstructcar/*小车结构体*/voidsetbk()/*设置背景*/voidchangud(intc)/*设置红绿灯变化*/structcar*newcar()/*新出现的小车的结构体*/voiddrawcar(structcar*c,intcolor)/*画出新出现的小车*/structcar*drawutd(structcar*t,intlt)/*北通向南小车的链表*/structcar*drawdtu(structcar*t,intlt)/*南通向北小车的链表*/voidplay()/*利用键盘操作开始与结束及灯的变化*/main()/*主函数*/3测试程序开始的测试测试用例:在程序开始的之前按的键不是F1或者ESC;测试结果:没有任何反应,不会对其他按键产生回应。4用户手册用户可以通过按F1键开始程序,按ESC键结束程序。5总结提高5.1课程设计总计总结这次程序设计对于像我这种接触c语言不久的学生而言实在是太具有挑战性。在设计的过程中屡次出现让我束手无策的问题。例如我多次试用dowhile循环,想要使新出现的小车的颜色与背景颜色不同,然而无论我怎么更改,都还是会出现与背景色相同的小车最终迫使我只能减少可出现的颜色,才貌似解决了问题。总而言之,这次课设颇让人费尽脑筋,但也使我觉得,其实编程并非一件极其遥远的事。5.2对本课程的意见和建议对于初次接触C语言的学生而言,还是太具难度。虽然知道教师资源有限,但还是希望能够有人辅导。6程序代码#include<stdio.h>#include<math.h>#include<stdlib.h>#include<graphics.h>#include<dos.h>#include<conio.h>#include<bios.h>#defineF10x3b00#defineESC0x011btypedefstructcar{intlen;intwei;intx,y;intcolor;intspeed;structcar*next;}CAR;voidsetbk(){setbkcolor(DARKGRAY);setlinestyle(0,0,1);setfillstyle(SOLID_FILL,7);gotoxy(5,1);printf("F1=start");gotoxy(20,1);printf("ESC=quit");line(0,190,270,190);line(0,290,270,290);line(370,190,680,190);line(370,290,680,290);line(270,190,270,0);line(370,190,370,0);line(270,290,270,480);line(370,290,370,480);setlinestyle(1,0,1);line(0,240,270,240);line(370,240,640,240);line(320,0,320,190);line(320,290,320,480);circle(260,180,10);floodfi...