21停车场管理系统.docx
《21停车场管理系统.docx》由会员分享,可在线阅读,更多相关《21停车场管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
21停车场管理系统
C语言课程设计
题目停车场管理系统
学生姓名曹鑫鑫
学号
专业勘查技术与工程(钻探方向)
学校中国地质大学(武汉)
1设计内容与设计要求
系统功能简介
⏹系统有简洁明了的菜单界面,用户可以通过输入简单的选项来完成相应的工作。
⏹用户可以选择1,2,3,4分别进行相应的操作,统一查看,统一输出。
题目如下:
(1)有一个两层的停车场,每层有6个车位,当第一层车停满后才允许使用第二层.(停车场可用一个二维数组实现,每个数组元素存放一个车牌号)每辆车的信
(2)假设停车场初始状态为第一层已经停有4辆车,其车位号依次为1—4,停车时间依次为20,15,10,5.即先将这四辆车的信息存入文件”car.dat”中(数组的对应元素也要进行赋值)
(3)停车操作:
当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空则必须停在第一层),停车时间设为5,最后将新停入的汽车的信息添加文件”car.dat”中,并将在此之前的所有车的停车时间加5.
(4)收费管理(取车):
当有车离开时,输入其车牌号,先按其停车时间计算费用,每5分钟0.2元.(停车费用可设置一个变量进行保存),同时从文件”car.dat”中删除该车的信息,并将该车对应的车位设置为可使用状态(即二维数组对应元素清零).按用户的选择来判断是否要输出停车收费的总计.
(5)输出停车场中全部车辆的信息.
(6)退出系统.
⏹
2.系统的运行流程:
系统初始运行时,会显示如图4-1所示的输入界面,用户可以根据提示,进行相应的选择,来完成系统提供的各种功能。
图4-1输入界面
根据系统提示提示用户选择相应的数字键,按ENTER键后进入相应的功能菜单。
如下图4-2是输入1,显示停车以及所需用户的车牌号输入后按ENTER键进入所要放车的停车位菜单,其中包含了系统分配的层号和一个车位号。
下面即为此程序执行此功能时的截图:
4.运行设计
首先打开软件,根据给出的信息输入相应的功能模块数字,输入完毕后按“ENTER”键进入,再根据提示执行相应的操作,程序使用完毕后输入数字0退出程序。
1、车辆信息
车辆信息包括车牌号、层号、车位号、停车时间,将这四类数据组合成结构体car,以便于引用。
【程序】
structGarage
{
charcarnum[8];
intlay;
intgaragenum;
inttime;
2、车位信息
由于停车场有两层,每层六个车位,故车位信息可由一个二维数组park[2][6]表示,注意停车场中已经停放了4辆车。
【程序】
for(i=0;i<4;i++)
{gar[0][i].isempty=0;}
strcpy(gar[0][0].carnum,"1234");/*初始化的车牌号*/
gar[0][0].time=20;
strcpy(gar[0][1].carnum,"3792");
gar[0][1].time=15;
strcpy(gar[0][2].carnum,"5895");
gar[0][2].time=10;
strcpy(gar[0][3].carnum,"4494");
gar[0][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");
scanf(" %c",&a);
4、各功能模块设计
(1)停车模块
【需求分析】
题目要求必须在一层停满的情况下才能在第二层停车,因此可以利用for语句保证先将第一层停满,设置停车时间为5分钟并将原有车辆的停车时间加5分钟。
进行分析时先打开文件检查停车车牌号,若打开文件操作出错则提示不能执行。
【程序】 if(a=='1')
{inti;charnum[8];
printf("请输入车牌号:
");
scanf("%s",num);
for(i=0;i<6;i++)
{if(gar[0][i].isempty==1)
{printf("第一层第%d号车位空着,请在此处停车\n",i+1);
strcpy(gar[0][i].carnum,num);
printf("车牌号:
%s层号:
1车位号:
%d\n",num,i+1);
AddTime(gar);/*在此之前停车的所有汽车时间加5*/
gar[0][i].isempty=0;/*表示该车为已经停车*/
gar[0][i].time=5;/*将时间设为5*/
return;
}
}
printf("第一层已经没有空车位\n");
for(i=0;i<6;i++)
{
if(gar[1][i].isempty==1)
{printf("第二层第%d号车位空着,请在此处停车\n",i+1);
strcpy(gar[1][i].carnum,num);
printf("车牌号:
%s层号:
2车位号:
%d\n",num,i+1);
AddTime(gar);/*在此之前停车的所有汽车时间加5*/
gar[1][i].isempty=0;/*表示该车位已经停车*/
gar[1][i].time=5;/*将时间设为5*/
return;
}
}
printf("对不起,12层都没有空车位,您现在不能在此停车\n");
}
}
(2)取车模块
【需求分析】
首先输入所取车辆的车牌号,若与车库中所停车辆相符,则取车成功。
之后根据用户的选择判断是否需要显示停车费用,此功能可用if条件语句实现。
若需要,按每5分钟0.2元算出金额并显示出来。
取车后须将该车停车纪录从文件中删除。
若输入的车牌号与车库中所停车辆不符,则应给予提示。
【程序】
if(a=='2'){
{inti,j;charnum[8];
doublecharge=0;
printf("请输入要取的车牌号:
");
scanf("%s",num);
for(i=0;i<2;i++)
{for(j=0;j<6;j++)
{if(!
strcmp(gar[i][j].carnum,num))
{printf("您在%d层%d车位停车%d分钟\n",gar[i][j].lay,gar[i][j].garagenum,gar[i][j].time);
charge=gar[i][j].time/5*0.2;
printf("停车费用为每5分钟0.2元,您需交%.2lf元\n",charge);
gar[i][j].isempty=1;
returncharge;
}
}
}
printf("没有您输入的车号。
\n\n");
returncharge;
}
/*是否查看总收入*/
voidIsPrintTotal(doubletotal)
{
charch;
printf("是否查看停车收费总计?
Y/N");
scanf("%c",&ch);
while(ch!
='y'&&ch!
='Y'&&ch!
='n'&&ch!
='N')
{printf("请输入Y或N");
scanf("%c",&ch);
printf("\n");
switch(ch)
{
case'Y':
case'y':
printf("停车收费总计为%.2lf元\n",total);
break;
case'N':
case'n':
break;
}
(3)车辆信息浏览模块
【需求分析】
该模块的功能是显示所有学生的纪录信息。
其流程图如图3-3所示。
图3-3 车辆信息浏览模块流程图
【程序】
elseif(a=='3')
voidInformation(structGaragegar[][6])
{inti,j;
printf("车牌号层号车位号停车时间\n");
for(i=0;i<2;i++){for(j=0;j<6;j++)
{if(gar[i][j].isempty==0)
printf("%s%8d%8d%8d\n",gar[i][j].carnum,gar[i][j].lay,gar[i][j].garagenum,gar[i][j].time);
}printf("\n");
(4)退出模块
【程序】
else if(a=='4')break;
附件:
源程序清单
#include
structGarage
{
charcarnum[8];
intlay;
intgaragenum;
inttime;
intisempty;/*该车位是否为空,1表示空,0表示有车*/
};
voidInstruction()
{printf("停车场管理系统菜单\n");
printf("停车请输入1
取车请输入2
查看全部车辆的信息请输入3
退出请输入0
\n");
}
voidInit(structGaragegar[][6])
{
inti,j;
for(i=0;i<2;i++)
{for(j=0;j<6;j++)
{gar[i][j].lay=i+1;
gar[i][j].garagenum=j+1;
gar[i][j].time=0;
gar[i][j].isempty=1;
}
}
for(i=0;i<4;i++)
{gar[0][i].isempty=0;}
strcpy(gar[0][0].carnum,"1234");/*初始化的车牌号*/
gar[0][0].time=20;
strcpy(gar[0][1].carnum,"3792");
gar[0][1].time=15;
strcpy(gar[0][2].carnum,"5895");
gar[0][2].time=10;
strcpy(gar[0][3].carnum,"4494");
gar[0][3].time=5;}
/*新停入的汽车后,将在此之前的所有车的停车时间加5*/
voidAddTime(structGaragegar[][6])
{inti,j;for(i=0;i<2;i++)
{for(j=0;j<6;j++)
{if(gar[i][j].isempty==0)
{gar[i][j].time+=5;
}
}
}
}
/*停车*/
if(a=='1')
{inti;charnum[8];
printf("请输入车牌号:
");
scanf("%s",num);
for(i=0;i<6;i++)
{if(gar[0][i].isempty==1)
{printf("第一层第%d号车位空着,请在此处停车\n",i+1);
strcpy(gar[0][i].carnum,num);
printf("车牌号:
%s层号:
1车位号:
%d\n",num,i+1);
AddTime(gar);/*在此之前停车的所有汽车时间加5*/
gar[0][i].isempty=0;/*表示该车为已经停车*/
gar[0][i].time=5;/*将时间设为5*/
return;
}
}
printf("第一层已经没有空车位\n");
for(i=0;i<6;i++)
{
if(gar[1][i].isempty==1)
{printf("第二层第%d号车位空着,请在此处停车\n",i+1);
strcpy(gar[1][i].carnum,num);
printf("车牌号:
%s层号:
2车位号:
%d\n",num,i+1);
AddTime(gar);/*在此之前停车的所有汽车时间加5*/
gar[1][i].isempty=0;/*表示该车位已经停车*/
gar[1][i].time=5;/*将时间设为5*/
return;
}
}
printf("对不起,12层都没有空车位,您现在不能在此停车\n");
}
/*取车*/
if(a=='2'){
{inti,j;charnum[8];
doublecharge=0;
printf("请输入要取的车牌号:
");
scanf("%s",num);
for(i=0;i<2;i++)
{for(j=0;j<6;j++)
{if(!
strcmp(gar[i][j].carnum,num))
{printf("您在%d层%d车位停车%d分钟\n",gar[i][j].lay,gar[i][j].garagenum,gar[i][j].time);
charge=gar[i][j].time/5*0.2;
printf("停车费用为每5分钟0.2元,您需交%.2lf元\n",charge);
gar[i][j].isempty=1;
returncharge;
}
}
}
printf("没有您输入的车号。
\n\n");
returncharge;
}
/*是否查看总收入*/
voidIsPrintTotal(doubletotal)
{
charch;
printf("是否查看停车收费总计?
Y/N");
scanf("%c",&ch);
while(ch!
='y'&&ch!
='Y'&&ch!
='n'&&ch!
='N')
{printf("请输入Y或N");
scanf("%c",&ch);
printf("\n");
switch(ch)
{
case'Y':
case'y':
printf("停车收费总计为%.2lf元\n",total);
break;
case'N':
case'n':
break;
}
/*查看所有车辆信息*/
elseif(a=='3')
voidInformation(structGaragegar[][6])
{inti,j;
printf("车牌号层号车位号停车时间\n");
for(i=0;i<2;i++){for(j=0;j<6;j++)
{if(gar[i][j].isempty==0)
printf("%s%8d%8d%8d\n",gar[i][j].carnum,gar[i][j].lay,gar[i][j].garagenum,gar[i][j].time);
}printf("\n");
else if(a=='4')break;
return0;
}