停车场管理系统——C语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
停车场管理系统
【要求】
(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,以便于引用。
【程序】
struct car
{
int carnumber;
int floor;
int position;
int time;
}car[12];
2、车位信息
由于停车场有两层,每层六个车位,故车位信息可由一个二维数组park[2][6]表示,注意停车场中已经停放了4辆车,设这四辆车的车牌号为6840,4167,3548,9201。
【程序】
int park[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("cannot open this file\n");
exit(0);