泊车管理系统.docx
《泊车管理系统.docx》由会员分享,可在线阅读,更多相关《泊车管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
泊车管理系统
摘要
在科技高速发展的今天,汽车在人类社会中仍然占有重要的地位。
汽车是人类的主要代步工具之一,随着社会的发展,人们生活水平的提高,越来越多的人成为有车一族,这就不可避免的导致了停车位的紧张。
如何高效、快捷、方便地利用停车位成了缓解紧张的有效方法之一。
本课程设计为泊车管理系统。
利用VC++6.0编写程序模拟实现汽车停放管理的部分功能。
在软件设计中采用了模块化设计,使其维护、修改都变得十分方便,这样也利于团队开发。
该系统的主要功能有:
查看目前停车场的停车情况,显示停车位号及车牌号;停靠车辆:
显示剩余车位号,输入要停靠的车位号并检查是否存在该车位及该车位是否已停靠汽车,无则将该车停入该车位,有车则给出相应的错误提示;取走车辆:
输入车牌并检查是否有该车辆,有则计算停车费用并显示,并对该车位清空,无该车则给出相应的错误提示;
报告在第一章对泊车管理系统软件进行了分析和说明。
第二章里对系统进行了详细的分析,对数据库进行说明,讲述了总体设计思路及功能模块的具体设计,给出了系统的各个界面并用流程图描绘了功能的具体实现过程。
第三章是软件源代码及说明。
第四章为软件的调试和测试及测试结果和程序运行界面等。
关键词:
查询泊车取车计费
1设计题目、任务内容及具体要求
1.1设计题目
泊车管理系统
1.2任务内容
本程序属于非数值计算型算法设计,学生需要设计出一个简单的泊车模拟系统所需要的基本功能,并设计简单的界面。
假定有10个车位,汽车在到来的时候首先选择车位,然后记录当前停车的时间,在取车的时候再记录取车时间,根据停了多长时间来给出费用。
2.3具体要求
①通过提示菜单选择可以进行的操作。
②本系统设计不存在需要存放的数据,因此不需要文件操作。
③本系统假设收费时间固定,假定每小时收费为5元
④本停车场分为两个部分,一部分是停车位(10个),一部分是等候位(3个),所谓等候位就是目前停车场暂时全满,当有一辆车离开腾出一个停车位后,等候位的第一位用户就可以马上停车
⑤等用户选择离开停车场后,根据停车时间给出停车费用
⑥本系统主要包括的功能为:
1)查看目前停车场的停车情况
2)进入停车场,如果停车场满而等候位不满则可以提示用户是否要在等候位等候,如果用户选择是,则将该车辆放入等候位;如果停车场满而且等候位也满,则提示已无法停车。
用户在停车的时候需要选择要停靠的停车位,此时可以根据情况选择是否对输入的停车位正确性作判断,在停靠的时候需要输入牌照和停车位号码
3)离开停车场,此时输入牌照,系统将计算费用并显示,同时查看等候位是否有车辆,如果有车辆则将等候位的第一辆车移入刚刚的车位,同时将等候位的其他车辆往前移,如果等候位没有车辆则将该停车位清空,需要对输入的牌照进行判断,如果输入错误应给出提示
4)退出系统
2泊车管理系统总体设计思路
系统应能显示车位车辆停放信息,包括车位和车牌号,如果没有则给出相应提示。
停入汽车时,自动检查是否还有剩余停车位,有则提示可供选择车位,输入车位号、车牌号,停车成功;没有则检查是否还有剩余等候车位,有则提示车主是否进入等候车位。
取走汽车,输入车牌号,自动检查是否有该车,有则计算应付的停车费用,取出汽车;没有则给出提示。
当取车成功后自动检查等候车位是否停泊有车辆,有则将停泊在等候车位的汽车停放到停车位,若没有则清空该车位。
系统还应具有一定的错误检查功能并且检查到错误时给出提示。
图2.1为泊车管理系统的结构图,它包含了查看、停车、取车3个子系统。
图2.1泊车管理系统结构图
为了方便车主使用,软件采用菜单方式。
软件运行时,首先在屏幕时候那个显示各种功能,车主只要按一些简单的键,便可以进入相应的功能。
如图2.2所示为进入泊车管理系统后的菜单示意图。
共有3项功能,车主只要按一个数字(如“2”)便可进入下一层相应的功能──停车。
程序实现时根据车主的选择转向相应的函数由选择函数实现。
图2.2泊车管理系统的主菜单
3功能模块及设计
为了方便车主使用,软件采用菜单方式,模块化设计思想。
本程序共设计了查看目前停车场的停车情况、停车、取车3个模块。
先定义2个整形数组大小分别为10和3的一维数组,分别存储车位和车牌号等信息并初始化为0,例如:
intpark[10]={0},wait[3]={0},将车牌号保存到对应的数组中,可以通过0或非0分别表示车位无车或车位有车。
再定义一个整形变量用来存储总车辆数并初始化为0,例如:
sum=0。
最后定义查看、停车、取车均为void类型函数,例如:
voidsituation(),voidparking(),voidgetting()。
在主函数中,定义主函数为void类型。
首先利用printf()函数将菜单选项打印出来,根据车主的选择,进入到查看停车信息、停车或取车模块。
根据车主的选择转向相应的函数由选择函数实现。
要想函数循环运行,可使用do…while结构,例如:
voidmain()
{
do
{
printf("WelcometoCarParkingSystem!
\n");
printf("1.ShowParkingSituation");
printf("2.ParkingCar");
printf("3.GettingCar");
printf("4.Exit\n");
printf("\t\tPleaseSelect:
");
scanf("%d",&select);
switch(select)
{
case1:
situation();break;
}
while(select!
=4)
}
}
即当输入的不为4时,程序就反复执行。
在查看停车信息模块中,通过循环控制结构用if语句判断停车数组中的元素是否为0,为0的显示“nocar”,非0则显示数组元素并依次打印。
例如:
voidsituation()
{
inti;
printf("\parkareacarnumber\n");
for(i=0;i<10;i++)
{
if(park[i]==0)
printf("%dnocar\n",i+1);
else
printf("%d%d\n",i+1,park[i]);
}
进入停车模块,先判断总车辆数,当总车辆数等于13时,即sum==13,停车位和等候车位都满,提示车主已没有车位供停车。
当总车辆数大于10时,即sum>=10,即停车位满而等候车位未满,询问车主是否进入等候车位,如果车主选择是则提示输入车牌号并将车牌号信息存到等候车位数组中且sum+1,选否退出系统。
当总车辆数小于10时,即sum<10,还有停车位,利用for循环控制结构if语句判断停车位数组中有无非0元素,将非0元素的数组下标依次打印供车主选择,车主选择后将车牌号信息存入数组中,存车成功并开始计算停车时间,总车辆数加1,即sum+1。
例如函数可写为:
voidparking()
{
inti,j,b,c;
chard;
if(sum==13)
printf("Noparkingarea!
\n");
elseif(sum>=10)
{
printf("Therearetenparkingarea!
\n");
printf("NowLeftNoArea!
\n");
printf("Doyouwanttowait?
");
scanf("%s",&d);
switch(d)
{
case121:
{
intm,e;
printf("Pleaseinputcarnumber:
");
scanf("%d",&e);
for(m=0;m<3;m++)
{
if(wait[m]==0)
{
wait[m]=e;
break;
}
}
printf("Parktothewaitingareasuccess!
\n");
sum=sum+1;
}
case110:
select=4;
break;
}
}
elseif(sum<10)
{
printf("Therearetenparkingarea!
\n");
printf("NowLeft");
for(j=0;j<10;j++)
{
if(park[j]==0)
printf("%d",j+1);
}
printf("Area!
\n");
printf("Whichonedoyouwanttopark?
");
scanf("%d",&b);
if(b<1||b>10)
{
printf("Nothisparkingareanumbe!
\n");
}
else
{
printf("Pleaseinputyoucarnumber:
");
scanf("%d",&c);
park[b-1]=c;
printf("Parkingsuccess!
\n");
start[b-1]=clock();
sum=sum+1;
}
}
取车模块,首先提示车主输入车牌号,运用for循环控制结构将车主输入的车牌号依次与停车数组中的元素进行比较,当没有输入的车牌号的车辆,即park[n]!
=a时提示车主没有该汽车,当park[n]==a时则停止停车时间的计算,结算停车费用,取出汽车,总车辆数减1,即sum-1。
当取车成功后判断等候车位是否有汽车,即用for循环控制结构和if语句判断等候车位数组是否有元素非0,有则将该数值赋值到停车位数组刚才的元素中,并依次将等候车位中后一位元素的值赋值到前一为中,当没有时将该停车位数组元素赋值为0。
该函数可写位:
voidgetting()
{
intn,p,a;
doublet,pay;
printf("Pleaseinputyoucarnumber:
");
scanf("%d",&a);
for(n=0;n<10;n++)
{
if(park[n]==a)
{
end[n]=clock();
t=double(end[n]-start[n])/CLOCKS_PER_SEC;
pay=t/3600*5;
printf("Youmustpay%lfyuan\n",pay);
printf("Getingcarsuccess!
\n");
sum=sum-1;
if(wait[0]!
=0)
{
park[n]=wait[0];
intr;
for(r=0;r<2;r++)
{
wait[r]=wait[r+1];
}
wait[2]=0;
}
else
{
park[n]=0;
}
select=4;
break;
}
}
if(n==10)
printf("Cannotfindthiscar!
\n");
printf("\n");
}
各模块的程序流程图如下所示:
图3.3主函数流程图
图3.4situation()函数流程图
图3.2.3parking()函数流程图
图3.2.4getting()函数流程图
4程序调试及测试
4.1车位未停满汽车时
运行程序显示主菜单
图4.1.1主菜单
输入1显示目前停车场的停车情况
图4.1.2目前停车场的停车情况
输入2
①显示剩余车位
图4.1.3剩余车位
②输入车牌号,停靠汽车成功
图4.1.4输入车牌号,停靠汽车
输入3
①等待输入车牌号
图4.1.5等待输入车牌号
②输入要取走汽车的车牌号显示停车费,取车成功
图4.1.6显示停车费,取车成功
输入4退出程序
图4.1.7退出程序
4.2没有车位时
运行程序显示主菜单
输入1显示目前停车场的停车情况
图4.2.1显示目前停车场的停车情况
输入2
①显示没有剩余车位,是否进入等待车位
图4.2.2选择是否进入等待车位
②输入车牌,进入等待车位
图4.2.3进入等待车位,存入汽车
输入3
①输入要取走汽车的车牌号
图4.2.4.输入车牌号
②显示停车费,取车成功
图4.2.5显示停车费,取走车辆
③将在等候车位的汽车挪到停车位
图4.2.6将等候车位的汽车挪到停车位
输入4退出程序
5总结
通过本次的课程设计,在不断的修改和学习中,使我更进一步了解了C语言,从原来的片面理解升华到了一个新的高度。
在编写和调试程序的过程中,通过一次次的失败并不断从失败中吸取经验,总结错误,改正错误,终于将程序调通。
心情无比的高兴,我们不但要看重结果,根要注重过程。
在编写程序的过程中,我体验到了当程序调通时的那种喜悦的心情,也感受到程序不通时的那种久不得解的愤怒。
但是现在想想,觉得一切都是值得的。
通过这几天的程序编写,使我认识到总结众多不足,在今后一定要多多加强这方面的练习,提高自己编写C的水平。
总的说来,通过本次的课程设计,收获颇多。
致谢
通过坚持不懈的努力,在老师的指导和同学的帮助下,我终于完成了程序的编写和报告。
在此由衷的感谢在编写程序的过程中指导我们的向毅老师、刘海玲老师,以及帮助过我的同学、朋友。
我的成功与你们的帮助是分不开的。
参考文献
[1]谭浩强张基温.C语言程序设计教程第三版.高等教育出版社2006:
12-3
[2]谭浩强张基温.C语言习题集与上机指导第三版.高等教育出版社2006:
8-3
源程序清单
程序源代码如下:
#include"stdafx.h"
#include
#include
voidsituation();
voidparking();
voidgetting();
voidExit();
clock_tstart[10];
clock_tend[10];
intpark[10]={0},wait[3]={0},sum=0;
intselect;
voidmain()
{
do
{
printf("\t**************************************\n");
printf("\t*WelcometoCarParkingSystem!
*\n");
printf("\t*1.ShowParkingSituation*\n");
printf("\t********2.ParkingCar*****\n");
printf("\t*3.GettingCar*\n");
printf("\t**4.Exit**\n");
printf("\t***@***************************************@*****\n");
printf("\t**\n");
printf("\t\tPleaseSelect:
");
scanf("%d",&select);
switch(select)
{
case1:
situation();
break;
case2:
parking();
break;
case3:
getting();
break;
case4:
Exit();
break;
}
getch();
}
while(select!
=4&&select>=1&&select<4);
}
voidsituation()
{
inti;
printf("\t\t\tparkarea\tcarnumber\n");
for(i=0;i<10;i++)
{
if(park[i]==0)
printf("\t\t\t%d\t\tnocar\n",i+1);
else
printf("\t\t\t%d\t\t%d\n",i+1,park[i]);
}
printf("\n");
}
voidparking()
{
inti,j,b,c;
chard;
if(sum==13)
printf("\t\tNoparkingarea!
\n");
elseif(sum>=10)
{
printf("\t\tTherearetenparkingarea!
\n");
printf("\t\tNowLeftNoArea!
\n");
printf("\t\tDoyouwanttowait?
");
scanf("%s",&d);
switch(d)
{
case121:
{
intm,e;
printf("\t\tPleaseinputcarnumber:
");
scanf("%d",&e);
for(m=0;m<3;m++)
{
if(wait[m]==0)
{
wait[m]=e;
break;
}
}
printf("\t\tParktothewaitingareasuccess!
\n");
sum=sum+1;
}
case110:
printf("\t\tThankyouforusingthissystem!
\n");
printf("\t\tHaveApleasantjourney\n");
printf("\t\tBye-bye!
\n");
printf("\n");
select=4;
break;
}
}
elseif(sum>=0&&sum<10)
{
printf("\t\tTherearetenparkingarea!
\n");
printf("\t\tNowLeft");
for(j=0;j<10;j++)
{
if(park[j]==0)
printf("%d",j+1);
}
printf("Area!
\n");
printf("\t\tWhichonedoyouwanttopark?
");
scanf("%d",&b);
if(park[b-1]!
=0)
printf("\t\tSorry!
Thereisacarinthisarea!
\n");
elseif(b<1||b>10)
{
printf("\t\tNothisparkingareanumbe!
\n");
}
else
{
printf("\t\tPleaseinputyoucarnumber:
");
scanf("%d",&c);
park[b-1]=c;
printf("\t\tParkingsuccess!
\n");
start[b-1]=clock();
sum=sum+1;
}
}
printf("\n");
}
voidgetting()
{
intn,p,a;
doublet,pay;
printf("\t\tPleaseinputyoucarnumber:
");
scanf("%d",&a);
for(n=0;n<10;n++)
{
if(park[n]==a)
{
end[n]=clock();
t=double(end[n]-start[n])/CLOCKS_PER_SEC;
pay=t/3600*5;
printf("\t\tYoumustpay%lfyuan\n",pay);
printf("\t\tGetingcarsuccess!
\n");
printf("\t\tBye-bye!
\n");
sum=sum-1;
if(wait[0]!
=0)
{
park[n]=wait[0];
intr;
for(r=0;r<2;r++)
{
wait[r]=wait[r+1];
}
wait[2]=0;
}
else
{
park[n]=0;
}
select=4;
break;
}
}
if(n==10)
printf("\t\tCannotfindthiscar!
\n");
printf("\n");
}
voidExit()
{
printf("\t\tThankyouforusingthissystem!
\n");
printf("\t\tHaveApleasantjourney\n");
printf("\t\tBye-bye!
\n");
printf("\n");
}