停车场管理系统C语言.docx
《停车场管理系统C语言.docx》由会员分享,可在线阅读,更多相关《停车场管理系统C语言.docx(14页珍藏版)》请在冰豆网上搜索。
停车场管理系统C语言
停车场管理系统
【要求】
(1)有一个两层的停车场,每层有6个车位,当第一层车停满后才允许使用第二层(停车场可用一个二维数组实现,每个数组元素存放一个车牌号),每辆车的信息包括车牌号、层号、车位号、停车时间共4项,其中停车时间按分钟计算。
(2)假设停车场初始状态为第一层已经有4辆车,其车位号依次为1~4,停车时间依次为20,15,10,5,即先将这4辆车的信息存入文件car.dat中(数组的对应元素也要进行赋值)。
(3)停车操作:
当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空位则必须停在第一层),停车时间设为5,最后将新停入的汽车的信息添入文件car.dat中,并将在此之前的所有停车时间加5。
(4)收费管理(取车):
当有车离开时,输入其车牌号,先按其停车时间计算费用,每5分钟0.2元(停车费用可设置一个变量进行保存),同时从文件car.dat中删除该车的信息,并将该车对应的车位设置为可用状态(即二维数组对应元素清零),按用户的选择来判断是否要输出停车收费的总计。
(5)输出停车场中全部车辆的信息。
(6)退出系统。
【提示】
(1)需求分析:
车辆信息要用文件储存,提供文件的输入输出操作;当车要离开时要删除文件中该车的信息,因而要提供文件的删除操作;另外还要用键盘式菜单实现功能选择。
(2)总体设计:
整个管理系统可设计为停车模块、取车模块、车辆信息浏览模块。
二、总体设计
根据上面的需求分析,可以将这个系统的设计分为四大模块(如图2-1):
停车、取车、车辆信息浏览、退出。
其中主要功能是停车、取车、车辆信息浏览三个模块。
图2-1系统功能模块图
根据模块图可画出总的流程图(图2-2)
图2-2总流程图
三、详细设计
1、车辆信息
车辆信息包括车牌号、层号、车位号、停车时间,将这四类数据组合成结构体car,以便于引用。
【程序】
structcar
{
intcarnumber;
intfloor;
intposition;
inttime;
}car[12];
2、车位信息
由于停车场有两层,每层六个车位,故车位信息可由一个二维数组park[2][6]表示,注意停车场中已经停放了4辆车,设这四辆车的车牌号为6840,4167,3548,9201。
【程序】
intpark[2][6]={6840,4167,3548,9201,0,0,0,0,0,0,0,0};
car[0].carnumber=6840;
car[0].floor=1;
car[0].position=1;
car[0].time=20;
car[1].carnumber=4167;
car[1].floor=1;
car[1].position=2;
car[1].time=15;
car[2].carnumber=3548;
car[2].floor=1;
car[2].position=3;
car[2].time=10;
car[3].carnumber=9201;
car[3].floor=1;
car[3].position=4;
car[3].time=5;
3、主菜单
共包括四项功能:
停车、取车、车辆信息浏览、退出。
【程序】
for(;;)
{
printf("\n\n*********************主菜单*********************\n\n");
printf("请输入数字键:
\n");
printf("1.停车\n");
printf("2.取车\n");
printf("3.车辆信息浏览\n");
printf("4.退出\n\n");
printf("************************************************\n\n");
scanf("%c",&a);
4、各功能模块设计
(1)停车模块
【需求分析】
题目要求必须在一层停满的情况下才能在第二层停车,因此可以利用for语句保证先将第一层停满,设置停车时间为5分钟并将原有车辆的停车时间加5分钟。
进行分析时先打开文件检查停车车牌号,若打开文件操作出错则提示不能执行。
停车模块流程图如图3-1所示。
图3-1停车模块流程图
【程序】
if(a=='1')
{
printf("\n请输入车牌号:
");
scanf("%d",&car[i].carnumber);
for(j=0;j<2;++j)
{
for(k=0;k<6;++k)
{
if(park[j][k]==0)
{
park[j][k]=car[i].carnumber;break;
}
}
if(park[j][k]==car[i].carnumber)break;
}
car[i].floor=j+1;
car[i].position=k+1;
car[i].time=5;
for(j=0;j
car[j].time=car[j].time+5;
if((fp=fopen("car.dat","w"))==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}
for(j=0;j
fprintf(fp,"car[%d].carnumber=%d\ncar[%d].floor=%d\ncar[%d].position=%d\ncar[%d].time=%d\n",j,car[j].carnumber,car[j].floor,car[j].position,car[j].time);
fclose(fp);
printf("\n停车成功!
\n");
printf("\n");
++i;
}
(2)取车模块
【需求分析】
首先输入所取车辆的车牌号,若及车库中所停车辆相符,则取车成功。
之后根据用户的选择判断是否需要显示停车费用,此功能可用if条件语句实现。
若需要,按每5分钟0.2元算出金额并显示出来。
取车后须将该车停车纪录从文件中删除。
若输入的车牌号及车库中所停车辆不符,则应给予提示。
取车模块流程图如图3-2所示。
图3-2取车模块流程图
【程序】
elseif(a=='2')
{
charb;
printf("\n请输入车牌号:
");
scanf("%d",&carNO);
for(j=0;j
{
if(carNO==car[j].carnumber)
{
printf("\n是否输出停车费用?
(Y/N)");
scanf("%c",&b);
if(b=='Y')
{
fee=car[j].time/5.0*0.2;
printf("车牌号:
%d停车费:
",carNO);
printf("%f元\n欢迎下次光临!
\n",fee);
}
elseif(b=='N')
printf("\n欢迎下次光临!
\n");
else
printf("\n输入错误!
\n");
printf("\n");
park[j/6][j%6]=0;
if((fp=fopen("car.dat","w"))==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}
for(k=0;kfprintf(fp,"car[%d].carnumber=%d\ncar[%d].floor=%d\ncar[%d].position=%d\ncar[%d].time=%d\n",k,car[k].carnumber,car[k].floor,car[k].position,car[k].time);
for(++k;k
fprintf(fp,"car[%d].carnumber=%d\ncar[%d].floor=%d\ncar[%d].position=%d\ncar[%d].time=%d\n",k,car[k].carnumber,car[k].floor,car[k].position,car[k].time);
fclose(fp);
printf("\n");break;
}
}
if(j==i)
{
printf("\n输入错误!
\n\n");
}
elsecontinue;
}
(3)车辆信息浏览模块
【需求分析】
该模块的功能是显示所有学生的纪录信息。
其流程图如图3-3所示。
图3-3车辆信息浏览模块流程图
【程序】
elseif(a=='3')
{
printf("\n停车场所有车辆信息如下:
\n\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].carnumber,car[j*6+k].floor,car[j*6+k].position,car[j*6+k].time);
elsecontinue;
}
}
if((fp=fopen("car.dat","w"))==NULL)
{
printf("cannotopenthisfile\n");
exit(0);
}
}
(4)退出模块
【程序】
elseif(a=='4')break;
四、运行结果
(1)主菜单:
效果如图4-1所示。
图4-1主菜单
(2)停车模块
输入”1”按下”enter”键进入停车操作,如图4-2所示。
图4-2停车模块
根据提示输入车牌号按下”enter”键,如图4-3所示。
图4-3输入车牌号
根据需要再停入两辆车,如图4-4、4-5所示。
图4-4停入第二辆车
图4-5停入第三辆车
(3)取车模块
输入”2”按下”enter”键进入取车操作,如图4-6所示。
图4-6取车模块
根据提示输入车牌号,如图4-7所示。
图4-7输入车牌号
根据提示输入”Y”,如图4-8所示。
图4-8输出停车费
(3)车辆信息浏览模块
输入”3”按下”enter”键进入车辆信息浏览模块,如图4-9所示。
图4-9车辆信息浏览模块
(4)退出模块
输入”4”按下”enter”键退出系统,如图4-10所示。
图4-10退出系统