第一篇:c语言实习报告 停车场管理系统
C语言课程设计
院系:工程学院 姓名:姚 品 品 学号:20051001635 班号:05205224 指导教师:王老师 日期:2007年9月
一
课程设计编号、名称、内容 编号:第二十七题 名称:停车场管理系统2 内容:
[要求]
(1)有一个两层的停车场,每层有6个车位,当第一层车停满是才允许在第二层停车,(停车场可用一个二维数组来实现,每个数组中存放一个车牌号)每辆车的信息包括车牌号,层号,车位号,停车时间共4项,其中停车时间按分钟计算
(2)假设停车场初始状态为第一层已经停有四辆,车其车位号依次为1—4,停车时间依次为20,15,10,5。即先将这四俩车的信息存入文件“car.dat”中(数组的对应元素也要进行赋值)
(3)停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空则必须停在第一层),停车时间设为5,最后将新停入的汽车的信息添加文件”car.dat”中,并将在此之前的所有车的 停车时间加5.(4)收费管理(取车):当有车离开时,输入其车牌号,先按其停车时间计算费用每5分钟0.2元.(停车费用可设置一个变量进行保存),同时从文件”car.dat”中删除该车的 信息,并将该车对应的车位设置为可使用状态(即二维数组对应元素清零).按用户的选择来判断是否要输出停车收费的总计.(5)输出停车场中全部车辆的信息.(6)退出系统.[提示](1)需求分析
车辆信息要用文件存储,提供文件的输入输出操作;当车离开时要删除文件中该车的信息,因而要提供文件的删除操作;另外还要用键盘式菜单实现功能选择.(2)总体设计
整个管理系统可设计为停车模块、取车模块、车辆信息浏览模块.二.总体设计
该题目为一个两层停车场的停车,取车以及对停车场内现有所有车辆信息的浏览问题。车辆的信息包括车牌号码,层号,车位号以及停车时间4四项信息,可以用一个结构体来实现。双层停车场的信息可以有一个二维数组来实现。三.模块设计
1.停车信息结构体
车辆信息包括车牌号carNO,层号floor,车位号position,停车时间time,把四个成员作为结构体Car的成员以便处理
struct Car
{
int carNO;int floor;int position;int time;}car[12] 2.车位信息数组
因为停车场为两层,每层6个车位,所以定义一个二维数组park[2][6]来存储结构体 int park[2][6] 3.主菜单
四项功能
1)停车(TING CHE)
2)取车(QU CHE)
3)浏览(LIU LAN)
4)退出(TUI CHU)程序: for(;;){
printf(“ please choose: 1停车
2取车
3输出停车场中全部车辆的信息
0退出n”);
4.车位分析和停车模块
因为只有第一层车位停满才能在第二层停车,所以在停车之前先要对车位的情况进行分析,然后停车,停车时停车时间为5分钟,原有车辆停车时间加5分钟。进行分析时先打开文件检查停车车牌号是否为NULL,是的话就可以在该车位停车,否则就不行,应用FOR语句来保证第一层优先停车。停车后存储文件。
scanf(“ %c”, &a);
if(a== '1')
{
printf(“ 请输入车牌号
fprintf(stderr,”error opening filen“);
exit(1);}
for(j = 0;j
fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position
=
%dn
car[%d].time = %dn“,j,car[j].carNO,j,car[j].floor ,j,car[j].position,j,car[j].time);
fclose(fp);
printf(”n“);for(j = 0;j<2;++j)
{
for(k = 0;k<6;++k)
{
} if(park[j][k] ==0){park[j][k] = car[i].carNO;break;}
if(park[j][k] == car[i].carNO)
break;
}
car[i].floor = j+1;
car[i].position = k+1;
car[i].time = 5;
for(j = 0;j
car[j].time += 5;
printf(” 停车操作完成n “)5.取车模块
取车时,输入一车牌号,如果与文件中任何一个车牌号相同,便可以取车,并按一分钟0.2元算出停车费用,并且把该车停车记录从文件中删除。如果没有这个车牌号就给出提示。if(a== '2')
{
printf(” 请输入要离开车的车牌号: “);
scanf(” %d“,&carNUM);
for(j = 0;j
{ if(carNUM == car[j].carNO){
fee =(float)car[j].time/5*0.2;
printf(” 车牌号为%d的停车费为:
“ ,carNUM);printf(”%fn“,fee);printf(”---n “);
park[j/6][j%6] = 0;
if((fp=fopen(”car.dat“,”w“))==NULL)
{
fprintf(stderr,”error opening filen“);
exit(1);}
for(k = 0;k fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position = %dn car[%d].time = %dn“,k,car[k].carNO,k,car[k].floor ,k,car[k].position,k,car[k].time); for(++k;k fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position = %dn car[%d].time = %dn“,k,car[k].carNO,k,car[k].floor ,k,car[k].position,k,car[k].time); fclose(fp); printf(”n“); } } break; if(j == i) printf(” 没有此号码或者输入错误!n“); else continue;printf(”---n “); } 6.浏览模块 浏览即是输出所有停车车辆的所有信息 if(a== '3') { printf(” 停车场所有车辆信息如下: n “);printf(” 车牌号 层号 车位号 停车时间n “);for(j = 0;j<2;++j){ for(k = 0;k<6;++k) { if(park[j][k]!=0) %d %d %d n printf(”%d “,car[j*6+k].carNO,car[j*6+k].floor,car[j*6+k].position,car[j*6+k].time); else continue; } } if((fp=fopen(”car.dat“,”w“))==NULL) { fprintf(stderr,”error opening filen“); exit(1);} printf(”---n “); } 7.退出模块 if(a== '0') { printf(” press any key to continue...“); break;四.实习心得 在老师的带领下进行了C语言程序实践学习。在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。 C语言是需要有一定基础、而且动手能力强的学科。上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力,这些都必须通过充分的实际上机操作才能完成。 课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。 这次上机实习让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。 我认为,这次实习对于我是非常有意义的,对我个人的影响比较大,对我的动手能力有了很大的提高。程序原代码: #include #define MAX 2 /*车库容量*/ #define price 0.2 /*每车每分钟费用*/ struct Car /* 车的信息*/ { int carNO;int floor;int position;int time;}car[12]; int main(){ int i,j,k;int carNUM;float fee;/*计算停车费用*/ char a; FILE *fp; int park[2][6]={1001,1002,1003,1004,0,0,0,0,0,0,0,0};/*停车场状态 若为0表示车位空,否则值为carNO*/ /* 初始化已停车的信息------------*/ car[0].carNO = 1001; car[0].floor = 1; car[0].position = 1; car[0].time = 20;car[1].carNO = 1002;car[1].floor = 1;car[1].position = 2;car[1].time = 15;car[2].carNO = 1003;car[2].floor = 1;car[2].position = 3;car[2].time = 10;car[3].carNO = 1004;car[3].floor = 1;car[3].position = 4;car[3].time = 5; if((fp=fopen(”car.dat“,”w“))==NULL){ fprintf(stderr,”error opening filen“); exit(1);} for(i = 0;i<4;++i) fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position = %dn car[%d].time = %dn“,i,car[i].carNO,i,car[i].floor ,i,car[i].position,i,car[i].time);fclose(fp);printf(”n“);/*初始化完毕---------------------------------*/ for(;;){ printf(” please choose: 1停车 2取车 3输出停车场中全部车辆的信息 0退出n“); scanf(” %c“, &a); if(a== '1') { printf(” 请输入车牌号: “); scanf(” %d“,&car[i].carNO); for(j = 0;j<2;++j) { for(k = 0;k<6;++k) { if(park[j][k] ==0) {park[j][k] = car[i].carNO;break;} } if(park[j][k] == car[i].carNO) break; } car[i].floor = j+1; car[i].position = k+1; car[i].time = 5; for(j = 0;j car[j].time += 5; if((fp=fopen(”car.dat“,”w“))==NULL)/*将所有停车信息刷新后写出到car.dat*/ { fprintf(stderr,”error opening filen“); exit(1); } for(j = 0;j fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position = %dn car[%d].time = %dn“,j,car[j].carNO,j,car[j].floor ,j,car[j].position,j,car[j].time); fclose(fp); printf(”n“); printf(” 停车操作完成n “); printf(”---n “); ++i; } else if(a== '2') { printf(” 请输入要离开车的车牌号: “); scanf(” %d“,&carNUM); for(j = 0;j { if(carNUM == car[j].carNO) { fee =(float)car[j].time/5*0.2; printf(” 车牌号为%d的停车费为: “ ,carNUM); printf(”%fn“,fee); printf(”---n “); park[j/6][j%6] = 0; if((fp=fopen(”car.dat“,”w“))==NULL)/*将所有停车信息刷新后写出到car.dat*/ { fprintf(stderr,”error opening filen“); exit(1); } for(k = 0;k fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position = %dn car[%d].time = %dn“,k,car[k].carNO,k,car[k].floor ,k,car[k].position,k,car[k].time); for(++k;k fprintf(fp,”car[%d].carNO = %dn car[%d].floor = %dn car[%d].position = %dn car[%d].time = %dn“,k,car[k].carNO,k,car[k].floor ,k,car[k].position,k,car[k].time); fclose(fp); printf(”n“); break; } } if(j == i) printf(” 没有此号码或者输入错误!n“); else continue; printf(”---n “); } else if(a== '3') { printf(” 停车场所有车辆信息如下: n “); printf(” 车牌号 层号 车位号 停车时间n “); for(j = 0;j<2;++j) { for(k = 0;k<6;++k) { if(park[j][k]!=0)printf(”%d %d %d %d n “,car[j*6+k].carNO,car[j*6+k].floor,car[j*6+k].position,car[j*6+k].time); else continue; } } if((fp=fopen(”car.dat“,”w“))==NULL)/*将所有停车信息刷新后写出到car.dat*/ { fprintf(stderr,”error opening filen“); exit(1); } printf(”---n “); } else if(a== '0') { printf(” press any key to continue...“); break; } else { printf(” input error!please input again!n“); printf(”---n "); } } } 程序运行结果: (1)对于停车模块的操作如下:输入“1”按下”enter”进入停车操作。根据提示输入车牌号,停车操作完成。数据运行结果见下图: (2):这一部分是取车模块的操作。步骤类似于停车模块,具体操作如下:输入“2”按下”enter”进入停车操作。根据提示输入车牌号,取车操作完成。数据运行结果见下图:(图中分别取得车为1001号,1005号,1007号) (3):这一部分是车辆信息浏览模块的内容。它的操作是在(1),(2)的基础之上的具体操作步骤如下:输入“3”按下”enter”进入停车操作。根据提示输入车牌号,车辆信息浏览模块操作完成。数据运行结果见 停车场收费管理系统 需求报告 目录 1 2 3 摘要 项目背景介绍 停车场收费管理系统的现状 功能需求 4.1 通用基本功能 4.2 图像识别比较功能 4.3 先进的闸机安全安装 4.4 可增设中远距离车辆感应 5 性能需求 5.1 系统基本要求 5.2 数据管理能力要求 5.3 故障处理要求 外部接口说明 6.1 入口和出口部分 6.2 数据流程 7 修正系统开发计划 摘要 停车场电脑收费管理系统是现代化停车场车辆收费及设备自动化管理的统称,是将车场完全置于计算机管理下的高科技机电一体化产品。 根据多年设计、安装停车场收费系统的实际经验,我们在软件和系统设计上为停车场提供了一套最严格、最先进、易用、便于维护和运行可靠的收费系统;一套能有效的堵塞收费漏洞,降低操作成本,提高经济效益和减轻劳动强度,提高工作效率的现代化收费管理系统 随着时代的发展,私家车越来越多,而车位却十分紧张。在市区内有很多空间没 有被充分利用,大多车辆是停在路边或者简易停车场,缺乏管理,这样导致了资源的浪费,也造成了街道的拥堵。为了适应社会的发展,大量的现代化大规模的停车场会被投入使用,但管理方面又容易出现问题。因此,停车场管理系统的开发和应用是十分必要的。 此报告的目的重在分析此程序的总体需求,实现方案,并分析开发系统的可行性,为决策者提供是否开发该系统的依据和建议。项目背景介绍 2.1 开发软件名称:停车场管理系统 2.2项目开发者: 某软件开发小组 2.3用户单位: 某公司 2.4大体框架: 智能停车场收费管理系统 门禁管理系统 智能通道管理系统 考勤管理系统 智能巡更管理系统 收费管理系统等子系统 闭路监视系统(CCTV) 消防安全系统(FA)和保安系统(SA)紧急广播系统 停车场收费管理系统的现状 该系统具有很大的市场潜力,以现在的车辆增长速度推测,在不久的将来肯定会有许多大规模停车场(包括住宅小区)建成,此系统的开发很有价值。本系统现有的技术条件完全有能力顺利完成开发工作,硬件、软件上的配置也很容易满足开发者的要求,开发系统的计算机硬件已经非常普及,完全没有问题;现在的计算机各方面的技术都非常成熟,相对来说开发此系统的技术也要求比较简单,因此在技术方面是可行的;各类技术人员的数量、水平、来源等也能很容易满足;而且此系统的专业性不强,因此不需要相关行业人士,开发人员的选择就有很大余地。停车场计费管理系统的主要工作是减少人工计费带来的不便,提高办事效率,使车辆管理工作更加信息化,电子化。充分发挥计算机的信息传输速度快、准确度高的优势。功能需求 4.1通用基本功能: 入口读卡升闸、出口读卡验卡收费、车满显示、出入口与收费亭对讲、公正收费等等。 4.2 图像识别比较功能: 其他有图像识别功能的系统,其识别都是单向识别,即仅入口摄取,出口须由管理员目测比较。本系统入口、出口均采用摄像机比较,方便管理员直观比较。 4.3 先进的闸机安全安装: 道闸栏杆配的自动平稳装置,以及防抬杆、防砸车功能,检测功能具有高灵敏度和高可靠性。能很好地识别非机动车及人员等误报情况。 4.4 可增设中远距离车辆感应: 采用50-80cm中距离或5-8m远距离感应范围的读卡器,经多次实际认证为最方便的操作距离。系统如果没有特殊要求一般车辆经过读卡器的距离约为10--15cm。性能需求 5.1 系统基本要求 响应时间:系统的响应时间不能超过1分钟 警告时间及次数:每隔三分钟重复警告一次,每次警告时间持续一分钟。主存容量:内存:128MB RAM 磁盘容量:不小于1G 显示器:256色,800*600以上的兼容显示器 5.2 车辆管理能力要求 计费 分为入口和出口,中间设立岗楼,一人操作,高峰时期可两人操作,入口处发放计费卡,出口处凭借计费卡缴费,放行,操作简单快速方便。长期客户可办理月票。客户也可购买车位,实现车位预留 监控 全范围监控,无死角,监控画面与保安室相连接,可录像。一旦出现事故或意外,保安可第一时间赶到现场,必要时可以直接报警。出现紧急情况,如火灾时,会自动启动消防设备,并自动开启大门,放行车辆。自动引导车位 停车更加快速,有效,方便。 5.3 故障处理要求 列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。输出发生错误时,在系统的代码部分进行修改 外部接口说明 6.1 入口和出口部分 入口控制部分: 智能停车场收费管理系统 门禁管理系统 智能通道管理系统 考勤管理系统 智能巡更管理系统 出口控制部分: 收费管理系统等子系统 闭路监视系统(CCTV) 消防安全系统(FA)和保安系统(SA)紧急广播系统 6.2 数据流程 修正系统开发计划 对于车辆的管理有待提高,如停车位置,出场路线等。在以后的系统中,会提供诸如此类的更加人性化的服务。 本系统会提供多国语言的电子录音,使此系统对不懂中文的客户也适用。 重庆邮电大学计算机科学与技术学院 《数据结构》实验设计报告 题目:停车场管理系统 姓名:** 学号: 2010211998 班级:0491002 学院:计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 目录 一、问题描述………………………………………………………03 二、问题分析………………………………………………………03 三、数据结构描述…………………………………………………04 四、算法设计………………………………………………………04 五、程序优缺点分析及优化………………………………………05 六、程序源代码……………………………………………………07 七、程序运行结果…………………………………………………13 八、心得体会………………………………………………………15 附 一、优化后的程序…………………………………………………16 附 二、优化后程序的运行结果………………………………………23 重庆邮电大学计算机科学与技术学院 一、问题描述 设计一个停车场管理系统。 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车‚到达‛或‚离去‛信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。 (3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 二、问题分析 该问题需要以栈和队列作为基本的存储结构,以顺序栈模拟停车场,以链队列模拟车场外的便道。汽车进入停车场,即是在顺序栈上执行进栈操作,退出停车场即是在顺序栈上执行出栈操作;汽车进入便道,即是在链队列上执行入队操作,退出便道即是在链队列上执行出队操作。 当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。设要删除的元素在顺序表St中位置为i,则从i到top之间的全部元素进入到一个临时栈St1中, 其次再删除该元素,然后将临栈St1的元素按照‚先进后出‛的原则重新回到St中。若链队不空,则使队头进栈St,并以当前时刻开始计费。 程序需要构造两个顺序栈St和St1,其中St用于模拟停车场,St1用作临时栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。此外还需要构 重庆邮电大学计算机科学与技术学院 造一个链队列Qu用于模拟便道。 三、数据结构描述 /*定义顺序栈类型*/ typedefstruct { intCarNo[N]; /*车牌号*/ intCarTime[N]; /*进场时间*/ int top; /*栈指针*/ } SqStack; /*定义顺序栈类型*/ /*定义链队类型*/ typedefstructqnode { intCarNo; /*车牌号*/ structqnode *next;} QNode;typedefstruct { QNode *front;/*队首和队尾指针*/ QNode *rear;} LiQueue; 四、算法设计 1.对于子函数模块,则调用顺序栈的基本操作和链队列的基本操作。如下: /*顺序栈的基本运算算法*/ voidInitStack(SqStack *&s) intStackEmpty(SqStack *s) intStackFull(SqStack *s) /*S中的插入新元素*/ int Push(SqStack *&s,int e1,int e2) 重庆邮电大学计算机科学与技术学院 /*删除S的栈顶元素,并用e1,e2返回其值*/ int Pop(SqStack *&s,int&e1,int &e2) voidDispStack(SqStack *s) /*以下为链队列的基本运算算法*/ voidInitQueue(LiQueue *&q) intQueueLength(LiQueue *q) intQueueEmpty(LiQueue *q) voidenQueue(LiQueue *&q, int e)} intdeQueue(LiQueue *&q,int&e) voidDisplayQueue(LiQueue *q) 2.主程序模块 void main(){ 初始化; do { 接受命令; 处理命令; } while(命令!=‛退出‛); } 五、程序优缺点分析及优化 1.程序的优点 在程序中设置了kind变量,用于保存车的类别,便于计算不同类别车的停车费用,如下程序段: printf(“n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);scanf(“%d”,&kind); 其中kind可取值1,2,3;若kind取2,则表示一辆客车单位时间内的停车费用 重庆邮电大学计算机科学与技术学院 是一辆小汽车的2倍,若kind取3,则表示一辆卡车单位时间内的停车费用是一辆小汽车的3倍。 当然printf(“n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);中的1.2.3也可以根据实际情况改变。比如,若实际中,一辆小汽车单位时间内的停车费用 是一辆客车的2倍,一辆卡车单位时间内的停车费用是一辆客车的4倍,则可以改成: printf(“n请输入车的类别【车的类别:1.代表客车2.代表小汽车 4.代表卡车】:n”); 则kind可取值1,2,4; kind取1时对应的是客车,表示计算停车费用时以一辆客车单位时间内的停车费用为基数,若kind取2,则表示一辆小汽车单位时间内的停车费用是一辆客车的2倍,若kind取4,则表示一辆卡车单位时间内的停车费用是一辆客车的4倍。 2.程序的缺点 (1)输入时间时,程序没有检测错误功能 程序的输入形式如下: 设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出结束(end)。 设每个输入项的形式为(Choose, CarNumber, Time),其中Choose表示每个括号中的第一项数据,即A/D/E; CarNumber表示每个括号中的第二项,即1/2/3;Time表示每个括号中的第三项,即5/10/15。设前后两次输入的数据中的第三项分别为Time1,Time2;则必须满足Time2≧Time1。而在实际输入过程中用户可能会忽略这一点,所以应该在输入Time是设置一个判断语句,若前后两次输入的Time不满足Time2≧Time1,则要求用户重新输入,直至满足要求为止。 (2)程序的界面不够清晰,一次性输入的数据项比较多,容易出错。3.改进思想(1) 为了保证前后两次输入的Time必须满足Time2≧Time1,使程序具有错误检测功能,在程序输入部分添加了如下代码: printf(“输入现在的时刻:n”); scanf(“%d”,&time2); while(time2 { printf(“时间输入错误,请重新输入:n”); scanf(“%d”,&time2); 重庆邮电大学计算机科学与技术学院 } time1=time2;//time1定义为静态变量 (2)为了使程序有更清晰的界面,可在主函数中加入菜单的显示方式。且数据可以采用一次输入一个数据项,分步输入的方式,使输入过程少出错。于是可以将主函数进行修改。(见附录一) 六、程序源代码 #include /*停车场内最多的停车数*/ #define Price 2 /*每单位停车费用*/ typedefstruct { intCarNo[N]; /*车牌号*/ intCarTime[N]; /*进场时间*/ int top; /*栈指针*/ } SqStack; /*定义顺序栈类型*/ /*定义链队类型*/ typedefstructqnode { intCarNo; /*车牌号*/ structqnode *next;} QNode;typedefstruct { QNode *front;/*队首和队尾指针*/ QNode *rear;} LiQueue; /*顺序栈的基本运算算法*/ voidInitStack(SqStack *&s){ s=(SqStack *)malloc(sizeof(SqStack));s->top=-1; 重庆邮电大学计算机科学与技术学院 } intStackEmpty(SqStack *s){ return(s->top==-1);} intStackFull(SqStack *s){ return(s->top==N-1);} /*S中的插入新元素*/ int Push(SqStack *&s,int e1,int e2){ if(s->top==N-1) return 0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return 1;} /*删除S的栈顶元素,并用e1,e2返回其值*/ int Pop(SqStack *&s,int&e1,int &e2){ if(s->top==-1) return 0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return 1;} voidDispStack(SqStack *s){ int i;for(i=0;i<=s->top;i++) printf(“%d ”,s->CarNo[i]);printf(“n”);} /*以下为链队列的基本运算算法*/ 重庆邮电大学计算机科学与技术学院 voidInitQueue(LiQueue *&q){ q=(LiQueue *)malloc(sizeof(LiQueue));q->front=q->rear=NULL;} intQueueLength(LiQueue *q){ int n=0;QNode *p=q->front;while(p!=NULL){ n++; p=p->next;} return(n);} intQueueEmpty(LiQueue *q){ if(q->rear==NULL) return 1;else return 0;} voidenQueue(LiQueue *&q, int e){ QNode *s;s=(QNode *)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若链队为空,则新结点是队首结点又是队尾结点*/ q->front=q->rear=s;else { q->rear->next=s;/*将*s结点链到队尾,rear指向它*/ q->rear=s;} } intdeQueue(LiQueue *&q,int&e){ QNode *t;if(q->rear==NULL)/*队列为空*/ return 0; 重庆邮电大学计算机科学与技术学院 if(q->front==q->rear)/*队列中只有一个结点时*/ { t=q->front; q->front=q->rear=NULL;} else /*队列中有多个结点时*/ { t=q->front; q->front=q->front->next;} e=t->CarNo;free(t);return 1;} voidDisplayQueue(LiQueue *q){ QNode *p=q->front;while(p!=NULL){ printf(“%d ”,p->CarNo); p=p->next;} } void main(){ char choose;/*用于选择命令*/ int no,e1,time,e2,kind;/*用于存放车牌号、当前停车时刻*/ inti,j;SqStack *St,*St1;/*临时栈St1,当停车场中间的车要推出去时,用于倒车*/ LiQueue *Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf(“ #”);printf(“n# #”);printf(“n# 欢迎使用停车场管理系统 #”); 重庆邮电大学计算机科学与技术学院 printf(“n# #”);printf(“n# 【输入提示】:汽车状态由A、D、E 表示。其中,A:表示汽车到达 D:表示汽车离去, #”);printf(“n# E:表示输出结束。每次输入的数据由三项构成,即:(汽车状态,车牌号,当前时刻)#”);printf(“n# 数据项之间以逗号分开。例如输入示范:A,1,5 #”);printf(“n #n”);printf(“n正在读取汽车信息...n”); do { printf(“n*****************************************************************”);printf(“n请分别输入汽车状态(A/D/E)、车牌号和当前时刻(数据之间以逗号分开):n”);scanf(“ %c,%d,%d”,&choose,&no,&time); switch(choose){ /*************************** 汽车到达 ******************************/ case 'A': case 'a': if(!StackFull(St)) /*停车场不满*/ { Push(St,no,time); printf(“该车在停车场中的位置是:%dn”,St->top+1); } else /*停车场满*/ { enQueue(Qu,no); printf(“n停车场已满,该车进入便道,在便道中的位置是:%dn”,QueueLength(Qu)); } break;/************************* 汽车离开 ********************************/ case 'D': case 'd': 重庆邮电大学计算机科学与技术学院 printf(“n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);scanf(“%d”,&kind); for(i=0;i<=St->top && St->CarNo[i]!=no;i++); if(i>St->top)/*要离开的汽车在便道上*/ { /*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/ while(Qu->front->CarNo!=no) { enQueue(Qu,Qu->front->CarNo); // deQueue(Qu,Qu->front->CarNo); Qu->front = Qu->front->next; } deQueue(Qu,no);printf(“n便道上车牌号为%d的汽车已离开!n”,no); printf(“n当前便道中的车辆的车牌号分别是:”); DisplayQueue(Qu); printf(“n”); } else /*要离开的汽车在停车场中*/ { for(j=i;j<=St->top;j++) { Pop(St,e1,e2);/*e1,e2用来返回被删元素的车牌号和停车时刻*/ Push(St1,e1,e2);/*倒车到临时栈St1中,将e1,e2插入到临时栈中*/ } Pop(St,e1,e2); /*该汽车离开*/ printf(“n车牌号为%d的汽车停车时间为:%d。停车费用为:%dn”,no,time-e2,(time-e2)*Price*kind); /*对小汽车而言:当前时刻 减去 该车当时停车的时刻,再乘以价格就是费用,而对于客车和卡车而言,就要乘以kind倍小汽车的价格*/ while(!StackEmpty(St1))/*将临时栈St1重新回到St中*/ { Pop(St1,e1,e2); Push(St,e1,e2); } if(!QueueEmpty(Qu))/*队不空时,将队头进栈St*/ { 重庆邮电大学计算机科学与技术学院 deQueue(Qu,e1); Push(St,e1,time);/*以当前时间开始计费*/ } printf(“n当前停车场中的车辆的车牌号分别是:”);//输出停车场中的车辆 DispStack(St); } break;/************************ 结束 *********************************/ case 'E': case 'e': printf(“n正在退出系统...n”); if(!StackEmpty(St))//显示停车场情况 { printf(“n当前停车场中的车辆的车牌号分别是:”);//输出停车场中的车辆 DispStack(St); printf(“n”); } else printf(“n当前停车场中无车辆nn”); break;/************************ 结束 *********************************/ default: /*其他情况*/ printf(“输入的命令错误!n”); break;} } while(choose!='E'&&choose!='e');} 七、程序运行结果 取N=2,即停车场内最多的停车数为2 取 Price=2,即每单位停车费用为2 输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),重庆邮电大学计算机科学与技术学院 (‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。程序演示结果如下图所示: 重庆邮电大学计算机科学与技术学院 八、心得体会 (1)该实验涉及到顺序栈的建立、插入、删除等操作,涉及到了链队列的建立、插入、删除等操作。做这个实验,加深了我对以上知识点的认识和理解。(2)提高了 C 语言编程的能力。在程序设计过程中,需要经过反复地编写,调试,运行,发现问题并解决问题,在这次实验的设计中,我加深对程序的了解,提高自己的实际动手能力和独立思考的能力同时我也学会了综合以前学到的基本知识来解决较大问题的方法。 (3)一方面我养成了注重程序细节的意识。例如: printf(“n请分别输入汽车状态(A/D/E)、车牌号和当前时刻(数据之间以逗号分开):n”);scanf(“ %c,%d,%d”,&choose,&no,&time); 重庆邮电大学计算机科学与技术学院 %c,前面必须留一个空格,否则程序在显示的时候就会有一些问题。 (4)另一方面我也深刻地认识到了《数据结构》这门课程的重要性。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及到计算机硬件的研究,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须 考虑如何组织数据,以便使查找和存取数据元素更为方便。可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一个核心内容,是从事计算机科学研究及其应 用的科技工作者必须掌握的重要内容 附 一、优化后的程序 #include /*停车场内最多的停车数*/ #define Price 2 /*每单位停车费用*/ typedefstruct { intCarNo[N]; /*车牌号*/ intCarTime[N]; /*进场时间*/ int top; /*栈指针*/ } SqStack; /*定义顺序栈类型*/ /*定义链队类型*/ typedefstructqnode { intCarNo;/*车牌号*/ structqnode *next;} QNode;typedefstruct { QNode *front;/*队首和队尾指针*/ QNode *rear;} LiQueue; /*顺序栈的基本运算算法*/ voidInitStack(SqStack *&s){ s=(SqStack *)malloc(sizeof(SqStack));s->top=-1;} 重庆邮电大学计算机科学与技术学院 intStackEmpty(SqStack *s){ return(s->top==-1);} intStackFull(SqStack *s){ return(s->top==N-1);} /*S中的插入新元素*/ int Push(SqStack *&s,int e1,int e2){ if(s->top==N-1) return 0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return 1;} /*删除S的栈顶元素,并用e1,e2返回其值*/ int Pop(SqStack *&s,int&e1,int &e2){ if(s->top==-1) return 0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return 1;} voidDispStack(SqStack *s){ int i;for(i=0;i<=s->top;i++) printf(“%d ”,s->CarNo[i]);printf(“n”);} /*以下为链队列的基本运算算法*/ voidInitQueue(LiQueue *&q){ q=(LiQueue *)malloc(sizeof(LiQueue)); 重庆邮电大学计算机科学与技术学院 q->front=q->rear=NULL;} intQueueLength(LiQueue *q){ int n=0;QNode *p=q->front;while(p!=NULL){ n++; p=p->next;} return(n);} intQueueEmpty(LiQueue *q){ if(q->rear==NULL) return 1;else return 0;} voidenQueue(LiQueue *&q, int e){ QNode *s;s=(QNode *)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若链队为空,则新结点是队首结点又是队尾结点*/ q->front=q->rear=s;else { q->rear->next=s;/*将*s结点链到队尾,rear指向它*/ q->rear=s;} } intdeQueue(LiQueue *&q,int&e){ QNode *t;if(q->rear==NULL)/*队列为空*/ return 0;if(q->front==q->rear)/*队列中只有一个结点时*/ { t=q->front; 重庆邮电大学计算机科学与技术学院 q->front=q->rear=NULL;} else /*队列中有多个结点时*/ { t=q->front; q->front=q->front->next;} e=t->CarNo;free(t);return 1;} voidDisplayQueue(LiQueue *q){ QNode *p=q->front;while(p!=NULL){ printf(“%d ”,p->CarNo); p=p->next;} printf(“n”);} void main(){ int choose;/*用于选择命令*/ int no,e1,time2,e2,no_away;/*no_away:汽车离开时输入车牌号;time2:当前停车时刻;*/ static int time1;/*静态变量time1用于存放上次时刻*/ inti,j;int kind;/*车的类别*/ time1=time2=0;SqStack *St,*St1;/*临时栈St1,当停车场中间的车要推出去时,用于倒车*/ LiQueue *Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf(“ ”);printf(“n# #”); 重庆邮电大学计算机科学与技术学院 printf(“n# 欢迎使用停车场管理系统 #”);printf(“n# #”);printf(“n n”);do { printf(“n******************** 主菜单 ****************************n”); printf(“** 1:车辆到达 **n”); printf(“** 2:车辆离开 **n”); printf(“** 3:显示停车场的车辆 **n”); printf(“** 4:显示便道中的车辆 **n”); printf(“** 0:退出 **n”); printf(“********************************************************n”); printf(“请选择:”); scanf(“%d”,&choose); switch(choose) { case 1: // #汽车到达 ###### printf(“输入输入车牌号、当前时刻(数据之间以逗号隔开):n”); scanf(“%d,%d”,&no,&time2);/*依次输入车牌号、当前停车时刻*/ while(time2 { printf(“时间输入错误,请重新输入当前时刻:n”); scanf(“%d”,&time2); } time1=time2; if(!StackFull(St)) /*停车场不满*/ { Push(St,no,time1); printf(“该车在停车场中的位置是:%dn”,St->top+1); 重庆邮电大学计算机科学与技术学院 } else /*停车场满*/ { enQueue(Qu,no); printf(“n停车场已满,该车进入便道,在便道中的位置是:%dn”,QueueLength(Qu)); } break; case 2: // ##汽车离开 #### printf(“输入车牌号:n”); scanf(“%d”,&no_away); printf(“请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);scanf(“%d”,&kind); printf(“输入现在的时刻:n”);/*现在的时刻time1得大于之前的时刻time1*/ scanf(“%d”,&time2); while(time2 { printf(“时间输入错误,请重新输入:n”); scanf(“%d”,&time2); } time1=time2; for(i=0;i<=St->top && St->CarNo[i]!=no_away;i++); if(i>St->top)/*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/ { while(Qu->front->CarNo!=no_away) { enQueue(Qu,Qu->front->CarNo); Qu->front = Qu->front->next; } deQueue(Qu,no_away);printf(“n便道上车牌号为%d的汽车已离开!n”,no_away); printf(“n当前便道中的车辆的车牌号分别是:”); DisplayQueue(Qu); printf(“n”); } else 重庆邮电大学计算机科学与技术学院 { for(j=i;j<=St->top;j++) { Pop(St,e1,e2);/*e1,e2用来返回被删元素的车牌号和停车时刻*/ Push(St1,e1,e2);/*倒车到临时栈St1中,将e1,e2插入到临时栈中*/ } Pop(St,e1,e2); /*该汽车离开*/ printf(“n车牌号为%d的汽车停车费用为:%dn”,no_away,(time2-e2)*Price*kind);/*对小汽车而言:当前时刻 减去 该车当时停车的时刻,再乘以价格就是费用,而对于客车和卡车而言,就要乘以kind倍小汽车的价格*/ while(!StackEmpty(St1))/*将临时栈St1重新回到St中*/ { Pop(St1,e1,e2); Push(St,e1,e2); } if(!QueueEmpty(Qu))/*队不空时,将队头进栈St*/ { deQueue(Qu,e1); Push(St,e1,time1);/*以当前时间开始计费*/ } } break; case 3: // #####显示停车场情况 if(!StackEmpty(St)) { printf(“当前停车场中的车辆的车牌号分别是:”);/*输出停车场中的车辆*/ DispStack(St); } else printf(“停车场中无车辆!n”); break; case 4: // ######显示便道情况 # if(!QueueEmpty(Qu)) { 重庆邮电大学计算机科学与技术学院 printf(“ 当前便道中的车辆的车牌号分别是:”);/*输出便道中的车辆*/ DisplayQueue(Qu); } else printf(“便道中无车辆!n”); break; case 0: // # 结束 ### printf(“n正在退出系统...n”); if(!StackEmpty(St)) { printf(“当前停车场中的车辆的车牌号分别是:”);/*输出停车场中的车辆*/ DispStack(St); } if(!QueueEmpty(Qu)) { printf(“ 当前便道中的车辆的车牌号分别是:”);/*输出便道中的车辆*/ DisplayQueue(Qu); } break; /**********************************************************/ default: /*其他情况*/ printf(“输入的命令错误!n”); break; } } while(choose!=0);} 附 二、优化后程序的运行结果 取N=2,即停车场内最多的停车数为2 取 Price=2,即每单位停车费用为2 输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。程序演示结果如下图所示: 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 停车场收费管理系统 停车场收费管理系统是指基于现代化电子与信息技术,在停车区域的出入口处安装自动识别装置,通过非接触式卡或车牌识别来对出入此区域的车辆实施判断识别、准入/拒绝、引导、记录、收费、放行等智能管理,其目的是有效的控制车辆与人员的出入,记录所有详细资料并自动计算收费额度,实现对场内车辆与收费的安全管理。 出入口处安装自动识别装置,通过非接触式卡或车牌识别来对出入此区域的车辆实施判断识别、准入/拒绝、引导、记录、收费、放行等智能管理,其目的是有效的控制车辆与人员的出入,记录所有详细资料并自动计算收费额度,实现对场内车辆与收费的安全管理。停车场收费管理系统集感应式智能卡技术、计算机网络、视频监控、图像识别与处理及自动控制技术于一体,对停车场内的车辆进行自动化管理,包括车辆身份判断、出入控制、车牌自动识别、车位检索、车位引导、会车提醒、图像显示、车型校对、时间计算、费用收取及核查、语音对讲、自动取(收)卡等系列科学、有效的操作。这些功能可根据用户需要和现场实际灵活删减或增加,形成不同规模与级别的豪华型、标准型、节约型停车场收费管理系统。 停车场收费管理系统的组成 1、入口部分: 入口部分主要由入口票箱(内含感应式ID卡读写器、自动出卡机、车辆感应器、语音提示系统、语音对讲系统)、自动路闸、车辆检测线圈、入口摄像系统等组成。 2、出口部分: 出口部分主要由出口票箱(内含感应式ID卡读写器、自动吞卡机、语音提示系统、语音对讲系统)、自动路闸、车辆检测线圈、出口摄像系统等组成。 3、收费控制处: 收费控制处设备由收费控制电脑、UPS,报表打印机、操作台、入口手动按 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 钮、出口手动按钮、语音提示系统、语音对讲系统组成[2]。 主要设备 停车场收费管理系统配置包括停车场控制器(也叫停车场出入口控制器)、自动吐卡机、远程遥控、远距离卡读感器、感应卡(有源卡和无源卡)、自动道闸、车辆感应器、压力波检测器、地感线圈、通讯适配器、摄像机、传输设备、停车场系统管理软件等。 这种系统有助于公司企业、政府机关等对于内部车辆和外来车辆的进出进行现代化的管理,对加强企业的管理力度和提高公司的形象有较大的帮助。 控制器介绍 停车场专用控制器:专为停车场系统自主研制,四层板设计,信号和电源分层走线,集成度高、可靠性强,功能全面,接口丰富,电压适应范围大,防脉冲冲击,确保使用的安全性和可靠性。 停车场收费管理系统设立在小区内,有若干入口和出口。所有出入口都要求联网,实现数据通讯,并采用统一的计算机管理。最远的出入口之间的距离约为800米,和两个办公楼的地下室设有一个出入口,整个停车场采用IC卡和视频图像管理。 停车场收费管理系统流程 车辆感应IC卡,可以存储持卡人的各种信息。感应IC卡安装在每辆车的驾驶室里面,当车驶过读感器的感应区(离读感器2米左右)时,感应IC卡通过读感器发过来的激发信号产生回应信号发回给读感器。读感器再将这个读取信号传递给停车场控制器,停车场控制器收到信息后,经自动核对为有效卡后,车闸自动开启,数字录像机开始录像,拍下该车进入时的照片,电脑记录车子牌号及驾驶员姓名和进出入的信息。 临时车收费功能,临时车进场时从出票机中领取临时卡,出场时需缴纳规定的费用,并经保安确认后方能离开。临时车进入停车场时,地感线圈自动检测到车辆的到来,自动出票机的中文电子显示屏上显示“欢迎光临,请取卡”。根据出票机上的提示,司机按“入口自动出票机”上的出票按钮,自动出票机将自己 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 吐出一张感应IC卡,并且读卡器已自动读完临时卡。道闸开启,MP4NET数字录像机启动拍照功能,控制器记录下该车进入时间。临时车驶出停车场时,司机将感应IC卡(临时卡)在出口票箱处的感应区一晃,停车场控制自动检测出是临时卡,道闸将不会自动开启。出口票箱的中文电子显示屏上显示“请交**元”,司机将卡还给保安,交完费后,保安将各市停车特用发票给司机。交完费后,经保安载收费电脑上确认,道闸开启,数字录像机启动拍照功能,照片存入电脑硬盘,控制器记录下该出场时间。临时车将实行按次和时间停车交费,交费条件由用户自己在电脑的管理软件中设置。 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 停车场收费管理系统功能 可选用读感距离和近距离两种形式,选远距离时,采用车载 有源卡最远可达到3-25米。可以根据用户实际需要进行选择。 图像对比功能:车辆进出停车场时,摄像机自动启动摄像功能,并将照片文件存储在电脑里。出场时,电脑自动将新照片和该车最后入场的照片进行对比,监控人员能实时监视车辆的安全情况。 常用卡管理:固定车主使用常用卡,确定有效期限(可精确到分、秒),在确认的时限内可随意进出车场,否则不能进入车场,常用卡资料包括卡号、车号、有效时间等。常用卡实行按月交费,到期后软件和中文电子显示屏上将提示该卡已到期,请办理续期和交款手续。 临时车收费功能,临时车进场时从出票机中领取临时卡,出场时需缴纳规定的费用,并经保安确认后方能离开。临时车进入停车场时,地感线圈自动检测到车辆的到来,自动出票机的中文电子显示屏上显示“欢迎光临,请取卡”。根据出票机上的提示,司机按“入口自动出票机”上的出票按钮,自动出票机将自己吐出一张感应IC卡,并且读卡器已自动读完临时卡。道闸开启,摄像机启动拍照功能,控制器记录下该车进入时间。临时车驶出停车场时,司机将感应IC卡(临时卡)在出口票箱处的感应区一晃,停车场控制自动检测出是临时卡,道闸将不会自动开启。出口票箱的中文电子显示屏上显示“请交**元”,司机将卡还给保安,交完费后,保安将各市停车特用发票给司机。交完费后,经保安载收费电脑上确认,道闸开启,MP4NET数字录像机启动拍照功能,照片存入电脑硬盘,控制器记录下该出场时间。临时车将实行按次和时间停车交费,交费条件由用户自己在电脑的管理软件中设置。 自动切换视频,进出场无冲突。所有摄入的车辆照片文件存在电脑的硬盘中,可备以后查证。每一幅图片都有时间记录,查验方便。 实时监视功能:无车进入时,可在监控电脑上实时监视进出口的车辆及一切事物的活动情况。 支持永久卡和临时卡的工作方式,自动识别,记录存储。 防砸车功能:当车辆处于道闸的正下方时,地感线圈检测到车辆存在,道闸 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 将不会落下,直至车辆全部驶离其正下方。 满位检测功能:在管理电脑中设置好该停车场的车位,如进入该停车场的车辆到达车位数时,电脑提醒管理员,并在电子显示屏上显示车位已满。 支持脱机运行,网络中断或PC故障时,停车场系统工作正常。手动控制功能,停电时道闸能正常使用。系统自动维护,数据自动更新,自动检测复位。 停车场控制器支持局域网网络通讯功能,可实现多个出入口的联网。出入口联网时,必须安装局域网网络服务器和通讯服务器。 支持Wiegand26、Wiegand27、Wiegand32读感器格式,自动检测输入。支持5000个用户,可编辑用户详细信息。各种事件查询功能,提供摄像的图片时间查询。 强大的报表功能,能生成各类报表,并提供多功能数据检索。具有延时、过压、欠压自动保护。 停车场收费管理系统应用 随着科技的进步和人类文明的发展停车场无论是从外形、功能、操作方面都有跨越式的改进,国内目前最薄的停车场收费管理系统达到令人惊讶的170MM的厚度,而且配备双发卡模式和双倍卡量来降低故障率。 智能停车场收费管理系统在住宅小区、大厦、机关单位的应用越来越普遍。而人们对停车场管理的要求也越来越高,智能化程度也越来越高,使用更加方便快捷,也给人类的生活带来了方便和快乐。不仅提高了现代人类的工作效率,也大大的节约了人力物力,降低了公司的运营成本,并使得整个管理系统安全可靠。包括车辆人员身份识别、车辆资料管理、车辆的出入情况、位置跟踪和收费的管理等等。 停车场收费管理系统发展 前些年,我国停车场智能管理技术还是一片空白,也谈不上技术理念。为了摆脱这种现状,有关部门采取了相应的措施,制定了长远的发展规划,为我国停 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 车场收费管理系统奠定了坚实的基础,技术获得较快发展。 目前,随着新的智能化停车管理技术不断发展,停车场管理正在向更开放、更灵活的方向发展。今后,车库系统将作为楼宇自控系统的一个子系统纳入建筑自动化网络,形成一个综合的计算机管理网络信息系统。远距离的管理人员可以通过联网的方式,直接监视与控制车库情况;停车场的信息也可通过网络传送到各部门,再由中心计算机对各部门的信息统一管理,形成决策支持信息系统,确保管理人员做出正确的决策。 停车场收费管理系统的一个主流技术是采用感应式IC/ID卡和图像识别作为管理手段,同时具有红外遥感控车门开关和防盗报警及倒车限位等功能。这套系统是伴随着ID/IC卡、近距RF射频识别卡、远距离RF射频识别卡等新型识别技术的兴起而发展起来的。它克服了磁卡及条码技术的缺点,具有寿命长、使用方便、不易损坏、高保密性等特点,使停车场智能管理上升到一个新的高度。 感应式ID/IC卡加图像识别的管理技术,支持远距离和近距离两种读感器,支持永久卡和临时卡的工作方式,具有自动识别、记录存储等功能,能够防止资金流失。由于这项技术是图形对比与ID卡配合使用,达到防盗车的目的。 此外,目前业内还有一种主流技术:非接触RFID卡识别技术。它继承了IC/ID卡技术的优点,保密性高,省去了刷卡过程,提高了识别速度。由于该技术在识别系统中不存在活动机械装置,杜绝了塞卡现象,提高了系统的可靠性。对于收费停车场而言,识别系统的可靠性就意味着停车场的可靠性。因此,只读式RFID非接触识别卡成为停车场收费管理系统中理想的识别技术。 停车场收费系统是小区建设的必然趋势 随着社会的进步和科学技术的迅猛发展,社会生活方式在不断变化,人类开始迈入以数字化、网络化为平台的智能化社会。人们追求人性化、智能化的生活条件。其中正在兴起的智能化小区,反映和适应了社会信息化和智能化的要求,是21世纪住宅的发展方向。 智能化小区为住户提供了一种更加安全、舒适、方便、快捷和开放的智能化、信息化的生活空间,同时,它依靠高科技,实现了回归自然的环境氛围,促进了 大手控制 www.xiexiebang.com |引|领|停|车|管|理|新|概|念| 优秀的人文环境发展,并依托先进的科学技术,实现小区物业运行的高效化、节能化、环保化。 根据这一发展形势,建设部1999年发布了《全国住宅小区智能化技术示范工程工作大纲》。目前,建设部正组织实施全国住宅小区智能化示范工程,根据建设部规定,将智能建筑分为三个层次:即普及型住宅小区、先进型住宅小区与领先型住宅小区。三个层次都将一卡通管理系统作为大纲的基本要求,如今一卡通系统已成为楼市经营的必备内容和重要卖点,而智能停车场收费管理系统又是一卡通管理系统的重要组成部分,是智能小区建设的必然。 智能停车场收费管理系统采用先进技术和高度自动化的机电设备,将机械、电子计算机和自控设备以及智能IC卡技术有机地结合起来,通过电脑管理可实现车辆出入控制管理、自动数据存储等功能,实现自动化运行,并提供—种高效管理服务的系统。非接触式IC卡是智能IC卡技术中应用最广的一种。非接触式IC卡停车场收费管理系统是目前较先进的电脑收费管理系统之一,具有方便快捷、收费准确可靠、保密性好、灵敏度高、使用寿命长、形式灵活、功能强大等众多优点,是磁卡、接触式IC卡所不能比拟的,它已取代磁卡、接触式IC卡而成为应用的主流。文章来源自:www.xiexiebang.com 武汉科技学院毕业设计(论文)开题报告 课题名称 智能停车场管理系统的设计与实现 院系名称 计算机科学学院 专业 网络工程 班级 计科077 学生姓名 黄易欣 一.课题的意义 当前,在停车场的信息化过程中,有许多信息需要处理和管理。现今,有很多门诊信息都是初步开始使用,甚至尚未使用计算机进行信息处理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于管理过程中的很多信息都是用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。 数据处理手工操作,工作量大,出错率高,出错后不易更改。基于这此问题,我认为有必要建立一个停车场管理系统,使停车场管理工作规范化,系统化,程序化,避免停车场管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改停车场情况。因此开发一个智能停车场管理系统是非常有必要的。二.开发背景 在停车场的信息化中,涉及停车场车位管理的信息化、车主管理的信息化、停车信息管理的信息化,做好信息化工作利于提高停车场的管理效率,提升停车场的竞争力。 要提高竞争力,既要有好的硬件环境,同时也要有好的客户服务,而要实现这些目标的办法就是信息化。本选题,针对停车场过程中的一些信息,对其进行信息化处理。 在停车场管理过程中,主要涉及固定车位信息、自由车位信息、车主信息、停车信息,通过对以上各个环节的信息化,提高档案的规范化管理,为以后的查询、统计打下基础。通过这前段时间的市场调查和分析,初步了解到现在各种停车场软件的优点及不足。比如说有些传统停车场软件是为替代手工录入,从传统数据记录中产生的,这些软件面对Internet及电子商务迅猛发展的网络经济时代显得如此脆弱,具体来说有以下几点不足: 1、体系封闭,无法实现网络化管理,更无法支持电子商务。传统软件由于产生的技术背景落后,无法实现网络化管理或只支持局部网络应用,更无法支持电子商务,不能适应网络时代企业的需求。 2、信息单 一、落后且缺乏前瞻性。由于技术方面的限制,传统软件无法做到库存信息的实时动态处理、事前的预测并提供前瞻性信息。 3、对管理考虑甚少。软件依旧没有摆脱传统束缚,以对外报告为其存在目的。三.研究内容 本系统应用有如下功能模块: (1)系统管理者部分:至少具有相应的添加、修改、删除用户的功能,具有修改用户权限的功能,并且进行用户分类的功能,还有对不同的用户进行停车费用的设置的功能。(2)系统使用者部分:对停车相关信息进行定时和临时管理,查询,统计和上报。四.研究方法 4.1 设计方法 1.查询相关资料,了解本系统的研究意义。可以上网搜索或者是去图书馆查阅相关资料。2.通过查询资料了解该系统要如何做,及要做哪些东西。3.设计出大体上的功能模块,画出模块图。 4.通过进一步的了解,对每个功能模块进行细化,将每一步都想清楚。制定出每一步的做法和注意的地方。 5.对设计好的程序进行调试,通过调试发现存在的问题并解决,从而达到完善系统的目的。6.最后,整理各阶段的设计记录文档,写成论文稿。4.2 开发工具 选用设计语言 目前的可用的设计技术在设计此类系统上的数据库技术已经非常成熟,可提供的开发工具也很多,例如:Visual C++ ,Visual Basic,PowerBuilder,Dephi, visual foxpro等,它们都是很好的数据库开发工具,都是可视化开发工具,功能强大,开发容易,开发周期短,对于本任务都能够胜任。 VC6.0是Microsoft Visual Studio 6.0家族成员之一,是一个功能极为强大的可视化软件开发工具,它提供了一个集源程序编辑、代码编译和调试于一体的可视化开发环境,即所谓的集成开发环境,包含文本编辑器、资源编辑器、工程编译工具、源代码浏览器、集成调试工具,以及一套联机文档。与其他的可视化编程环境(如Visual Basic)一样,VC6.0集程序的代码编辑、编译、链接、调试等功能于一体,加上AFX小组为VC6.0精心打造的、功能强大的MFC类库,给程序员提供了一个完整、全面而又方便的开发环境,并提供了许多有效的辅助开发工具。 VC6.0基于C/C++,所以它拥有两种以下编程方式。 一种是传统的基于Windows API的C编程方式,虽然其代码效率较高,但开发难度与开发工作量也随着增高,目前使用这种编程方式的用户已经很少。一种是基于MFC的C++编程方式,虽然其代码运行效率相对较低,但开发难度小、开发工作量小、源代码效率高,已成为Visual C++开发Windows应用程序的主流。 为了帮助开发人员开发Windows应用程序,VC6.0提供了丰富的向导窗口。用户在构建各种工程时,几乎都可以找到相应的工程向导窗口,利用向导窗口可以为用户生成工程框架。例如,用户在设计一个对话框应用程序时,只要选择MFC应用程序向导,根据向导提示的步骤进行操作,不需要编写一行代码,就可以创建一个窗口;用户只要在窗口中添加一些控件,在控件的命令消息中编写代码,就可以设计出一个简单的应用程序。4.3 选用SQL server作为后台数据库 SQL server 2000 就是关系数据库管理工具,数据库能汇集各种信息以供查询、存储和检索。SQL 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel的电子表格,可以使数据库一目了然。另外,SQL允许创建自定义报表用于打印或输出数据库中的信息。SQL也提供了数据存储库,可以使用桌面数据库文件把数据文件置于网络文件服务器,与其他网络用户共享数据库。SQL 是一种关系数据库管理工具,关系数据库是已开发的最通用的数据库之一。如上所述,SQL 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。4.4 设计要求 智能停车场管理是一个典型的数据库管理信息系统,系统的开发用到许多数据库相关的理论,因此要求作者具有这方面的基础知识,能够正确运用数据库理论进行系统的分析、逻辑设计、实体属性以及ER图等的转换,明白范式的相关内容,从而能够根据系统实际要求,设计出满足要求的合理的数据库。 面向对象理论。当前流行的编程思想是面向对象思想,而且许多工具,如Visual C++,体现的也正是这种思想。面向对象思想与传统的面向过程编程思想相比,具有明显的优势,而且智能停车场管理系统的设计也要求用面向对象编程工具来实现。这就要求作者在进行毕业设计时,应该明白面向对象的思想,并能够运用其思想到实际的工作中。软件工程思想。大型系统的开发要用到软件工程相关的理论。虽然智能停车场管理系统比较小,但是最好也能按照系统设计的生命周期模型来进行。严格按照软件工程思想和管理信息系统的开发步骤,设计并实现一个智能停车场管理信息系统。以系统开发过程为主线,从需求分析,逻辑设计,总体设计,详细设计以及系统测试、实施各阶段的主要内容和成果,包括系统结构图、业务流程图、数据流程图、E-R模型、数据字典、物理表实现及其关系、功能模块算法流程、界面设计等等。 一定的实际动手能力和实际编程经验。系统最后要落实到windows下的编程,因此要求作者对windows下的数据库编程具有一定的基础,能够较为熟练的进行数据库相关程序的开发。以Microsoft公司的Visual Basic 6.0为开发工具,以SQL为后台数据库,对上述逻辑设计的成果进行转换,实现一个完整的可运行的智能停车场管理系统。4.5 设计环境 硬件环境: 随着计算机硬件的高速发展,现在普通的机子已经可以做为一个服务器端使用。CPU: 2.0Ghz或更高 硬盘:40G或更多 内存:512M或更高 软件环境: 操作系统 Windows 2000 Server /Windows XP 数据库 SQL Server 开发环境 Visual C++ 其它辅助软件:Microsoft Word等 五.实现步骤: 阶段一:11年01月01日-08年01月15日文献搜集与整理,撰写开题报告, 外文翻译;阶段二:11年02月16日-08年03月15日对要实现的处理进行需求分析,模块划分; 阶段三:11年03月16日-08年04月01日系统设计,包括模块分解,详细设计以及编写代码; 阶段四:11年04月02日-08年05月20日对开发的系统进行简单的测试和维护; 阶段五:11年05月21日-08年05月28日根据所做系统,撰写毕业论文。六.参考书目 [1] 王珊:《数据库系统概论》,高等教育出版社,2006年。[2] 赛奎春等:《VC数据库开发关键技术与实例应用》,人民邮电出版社,2003年。[3] 汪诗林等:《数据结构算法与应用》,机械工业出版社,2005年。[4] 约翰逊鲍尔:《面向对象程序设计:C++语言描述(原书第2版)》,机械工业出版社,2003年。 [5] 冯博琴等:《面向对象分析与设计》,机械工业出版社,2003年。[6] Awad.E.M, Gotterer M.H: Visual C++ 6.0, 1992.[7] Robert.H.Dependahl:《Database Principles and Applications》.Williams Brown,2003.指导教师签名: 年月日第二篇:停车场管理系统需求报告
第三篇:《停车场管理系统》实验设计报告
第四篇:停车场收费管理系统
第五篇:停车场系统开题报告