停车场管理系统C语言课程设计Word文档格式.docx
- 文档编号:21011348
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:28
- 大小:184.39KB
停车场管理系统C语言课程设计Word文档格式.docx
《停车场管理系统C语言课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《停车场管理系统C语言课程设计Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
其中,还包括入场时间、出场时间、收取费用等项
2算法设计
2.1总体设计思想
为了实现车库中有空车位汽车停入车库,车库满则停入便道的要求,在整个设计中使用了一个结构体数组,这样可以使车库和便道的停泊车辆信息储存在连续的结构体中。
在本设计中,设车库的容量为N,便道的容量为M,当停泊的车辆不超过车库和便道容量总和的情况下,为使每个车位都有相对应的存储空间,则设结构体数组的容量为M+N,因此在整个结构体数组car[N+M]中,car[0]至car[N-1]对应储存车库中各车位的车辆信息,car[N]至car[N+M-1]对应储存便道中各车位的车辆信息。
为判断车库和便道各车位上是否有车停入,另设两个一维数组a[N]与b[M],并赋初值为0,表示车位为空,即没有车辆停入。
当有车停入车库或便道中时,数组a[N]和b[M]中相对应的数值被赋值为1,表示有车停入;
当停在车位中的车离开时,数组a[N]和b[M]中相对应的数值由1赋值为0,表示车已经离开。
设计中所设的结构体储存信息包括存入汽车的车牌号,汽车停泊的车位,停入车库中汽车的时间,其中时间记录方法采用系统自动调用当期时间的时间函数,当车库汽车离开车位后,系统自动记录当前时间,减去汽车存入的时间,按每分钟存车的价格自动计算出汽车存入的费用。
此外,本设计还包括车辆信息保存等功能。
2.2总体设计框图
3.调试及测试
3.1主界面及功能列表
系统首先调用菜单函数进入系统主界面,之后运用switch函数体进行功能选择。
当输入为1时,调用车库信息函数xinxi(),
当输入为2时,调用停车函数geyin(),
当输入为3时,调用取车函数getout(),
当输入为4时,调用信息保存函数xxbc(),
当输入为5时,退出系统。
如图1
图1主界面及功能列表截图
部分程序代码:
voidmenu()
{intn,w;
do
{printf("
\n\n\n"
);
printf("
\t\t\t欢迎进入停车场管理系统\n"
puts("
\t\t**************MENU**************\n\n"
\t\t*\t1.车库信息\t*"
\t\t*\t2.有车进入\t*"
\t\t*\t3.有车离开\t*"
\t\t*\t4.信息保存\t*"
\t\t*\t5.退出系统\t*"
\n\n\t\t*********************************\n"
\t\t请在(1-5)中选择:
"
scanf("
%d"
&
n);
system("
cls"
if(n<
1||n>
4)/*对选择的数字作判断*/
{
w=1;
getchar();
}
else
w=0;
}while(w==1);
switch(n)
{
case1:
xinxi();
break;
/*初始化函数**/
case2:
getin();
/*车辆进入函数*/
case3:
getout();
/*车辆离开函数*/
case4:
xxbc();
case5:
printf("
\n\n\n\t\t\t感谢您对本产品的支持\n"
exit(0);
/*退出**/
}
}
3.2停车函数getin()的实现
用停车函数后,系统首先要求用户输入要停入的汽车的车牌号。
图2停车功能中等待用户输入车牌界面的截图
当系统接收到用户输入的车牌号后,系统首先判断车库中是否有空余的车位。
这个功能是通过使用一维数组a[N]实现的,数组的初始值为0,代表车库中各个车位没有汽车停入,每当有汽车停入车库的车位时,其相对应的数组数值由0变为1,代表汽车的停入。
判断有无空车位,系统执行一个for循环,由a[0]执行到a[N-1],若其中有数值为0,则代表有空车位汽车可以停在车库内,若数组a[N]的值都为1,则车库已满,汽车需要停在便道上等候。
图3车辆停入车库空车位显示界面截面
图3车库有空位,汽车可以停入空位中.
图4车库已满,汽车需停在便道上等候
车库未满流程图如下
车库已满,车辆停在便道上的程序流程图如下图所示
便道停车函数流程图
voidgetin()
{
if(j<
N)
inti;
for(i=0;
i<
N;
i++)
if(a[i]==0)
j=i;
a[i]=1;
break;
}
printf("
\n\n\t\t请输入该车的车牌号(如“n12354”):
scanf("
%s"
car[i].car_num);
car[i].car_stay=j;
\n\t\t该车应该停在停车场内第%d位(从1道开始记)\n"
j+1);
car[i].car_stay=j;
\n\t\t请输入该车进停车场时刻(24小时制,如3:
20):
%d:
car[i].car_inh,&
car[i].car_inm);
j++;
printf("
\n\t\t车已成功停入\n"
pause"
system("
menu();
else
biandao();
voidbiandao()
{
intt,i;
=M;
i++)
if(i==M)
对不起,便道已满\n"
menu();
elseif(b[i]==0)
t=i+N;
b[i]=1;
\n\n请输入该车的车牌号(如“n12354”):
car[t].car_num);
车库已满,车辆停在便道的%d位\n"
i+1);
car[t].car_stay=t;
/*记录车的位置编号*/
停入车辆情况:
\n"
车牌号:
%s\n"
car[t].car_num);
车位置:
%d\n"
/*便道上的车位,bq从0开始记,在bj从1开始记,在车位bj=1位置上的车对应bc[0]*/
3.3取车函数getout()的实现
调用函数后,系统要求用户输入被提取的车辆的车牌号码.
图5取车功能中等待用户输入取车车牌号界面截图
用户输入的车牌号码,系统将其保存在一个字符串数组中,系统使用一个循环结构和strcmp()语句对车库中存储的车牌号码进行比较,找到相同的车牌号,记录其所在的结构体数组中的位置i,系统自动记录车辆驶出的时间并自动计算在库时间,计算出存车的花费。
当车辆取走后,判断数组b[M]中的b[0]是否为1,若为1则说明便道上有车停靠,因为车库中有车取走,因此车库中有了空车位,便道上的车可以停入车库中,并且系统自动记录车进入车库的时间。
若b[0]为0,则便道无车,不需要记录时间。
执行完取车、便车道车辆入库的命令后,系统根据记录的被提取车的车位(i+1)执行一个循环体,将c[i+1]的数据赋给c[i],之后i++。
通过这样一个循环可以使后一个结构体的数据赋给它的上一个,实现取车删除数据的功能.
图6车辆取出存车费用,车辆移动显示截图
voidgetout()/*取车函数*/
inti,g,w;
charp[6];
intouth,outm,min1,min2;
intstoph,stopm;
doublecost;
\n\t\t请输入要驶出的车的车牌号码"
scanf("
p);
if(!
strcmp(car[i].car_num,p))//查找要取出的车的车牌号
\n\t\t请输入该车出停车场时刻(24小时制,如3:
outh,&
outm);
\n\t\t车牌号%s驶出车库%d位置\n"
p,car[i].car_stay);
min1=outh*60+outm;
min2=(car[i].car_inh)*60+car[i].car_inm;
//将停车和取车的时间全部转化为分钟单位
cost=(min1-min2)*D;
//停车应收取的费用
stopm=(min1-min2)%60;
stoph=(min1-min2)/60;
//车在车库中停留的时间(时,分)
\t\t停留%d小时%d分钟\n"
stoph,stopm);
\t\t您应缴费用:
%f元\n\n\n\n\n"
cost);
g=i+1;
if(b[0]==1)
\n\n\t\t请让便道上的第一辆车%s进场\n"
car[N].car_num);
\t\t请输入该车出停车场时刻(24小时制,如:
3:
car[N].car_inh,&
car[N].car_inm);
\t\t停入车辆情况\n"
\t\t车牌号%s\n"
\t\t车库位置%d\n"
car[N-1].car_stay);
for(g=i+1;
g<
=N+M;
g++)//系统根据记录的被提取车的车位g执行一个循环体,将car[g]的数据赋给car[g-1],之后g++。
使后一个结构体的数据赋给它的上一个,实现取车删除数据的功能.
{
strcpy(car[g-1].car_num,car[g].car_num);
car[g-1].car_stay=car[g].car_stay-1;
car[g-1].car_inh=car[g].car_inh;
car[g-1].car_inm=car[g].car_inm;
for(w=0;
w<
M;
w++)
b[i]=b[i+1];
//将便道的车位停入数据进行覆盖
没有你要查询的车辆\n"
3.4存车信息输出函数xinxi()的实现
图7车库和便道信息显示功能截图
为了实现输出车库和便道信息的功能,系统首先需要判断车库中是否有车,如果a[0]为1则说明车库中停有车辆,执行for循环体逐个输出结构体数组中的车辆信息。
若a[0]为0,则代表车库中没有车辆,因为车库有车位车就优先停入,因此a[0]为0也同时代表便车道也无车停入,此时系统输出“当前车库没有车辆停入.
图8显示车库没有车辆界面截图
voidxinxi()
if(a[0]!
=0)
inti,j;
车库信息\n"
\t\t车位编号\t车牌号\t停入时间\n"
\t\t%d\t%s\t%d:
i+1,car[i].car_num,car[i].car_inh,car[i].car_inm);
便道信息\n"
\t\t车位编号\t车牌号\n"
for(j=0;
j<
j++)
\t\t%d\t%s\n"
j+1,car[j+N].car_num);
当前车库无车\n"
3.5文件保存
文件保存功能运用了c语言中的文件知识,首先系统使用fopen(”文件”,”w”)准备写入文件信息,在系统中车辆的存入信息保存在文件car.txt中,使用一个循环体读取结构体数组中存储的各个车辆信息,并且使用fprintf语句把信息输出到文件car.txt中。
图9信息保存截图
voidxxbc()/*信息保存*/
FILE*fp;
fp=fopen("
car.txt"
"
a+"
/*写入*/
fprintf(fp,"
\t\t%d\t\t%s\t%d:
\t\t%d\t\t%s\n"
\n\n\n信息保存成功\n\n"
system("
fclose(fp);
menu();
4用户手册
(1)在输入数据时,应按照提示操作,如菜单函数,在1-5之间选择才有效;
(2)如果输入的是大于5的数或者其他字母或符号,系统会自动返回到当前菜单,你可以重新输入。
对于停取车的时间输入,一定要按照格式输入(如:
4:
14),否则会导致停车时间的错乱。
一般输入完数据都是以回车键结束。
5问题与不足
1需求分析中存在的问题和分析
无法判断一辆车是否停如,当便道无车时,车库中取出车的信息无法删除。
2概要设计中存在的问题和分析
未能加入批量删除的功能。
3代码编制中存在的问题和分析
一些系统固有的功能函数未能使用,重新编译使程序冗长,程序内存较大,不够简洁。
4调试和测试中存在的问题和分析
调试时有些函数无变量返回而使用了int定义后改为了void才没有了系统警告。
5总结
语言程序设计是一门重要的专业基础课,通过这次课程设计使我了解了c语言程序设计的思想,并且掌握了程序设计的基本方法,为后续课程打下了坚实的基础。
同时,这次课程设计又是一次实践性较强的知识应用,在对我进行程序设计基础理论与技术技巧能力训练的同时,更加培养了我解决实际问题的编程能力。
在设计过程中,首先要解决的是与同学的合作,接下来分工与协商,共同探讨,大家取长补短,认清自己的不足之处和薄弱环节,加以弥补和加强,要做出一个好的程序就要有不懈追求的精神和对理想崇高的追求,有一种不完成不罢休的精神。
c语言作为一种高级编程语言具有方便灵活的特点,适合各种类型的软件开发,为我们以后学习单片机非常有用。
在设计初期,根据题目的要求和所学的知识,车库中的车辆是先进后出的,是栈结构,便道上的车辆是先进先出的,是一个队列,结构很明显,但是现阶段我所学的基础知识不够,掌握的不多,对应用栈和队列来解决这个问题有一定的困难,因此我在整个设计中使用了结构体数组,运用一个结构体数组来同时记录车库和便道中车辆的信息,这样也可以起到一个连续记录数据的功能,完成设计要求的任务。
课程设计为我提供了一个既动手又动脑,独立实践的机会,将课本上的知识与实践相结合起来,提高了我适应实际,实践编程的能力。
在这一系统中用到了结构体,它让我更加巩固了结构体的特点和用法,本设计最好使用的结构是栈和队列,但是我们现阶段还未作学习,使用起来不是很流畅,因此我在这个设计中使用了结构体,使用了新的思路。
总之,这次课程设计挖掘了我潜在的能力,是我更加自信,也对编程更加有兴趣,为以后的学习打下了良好的基础。
附录1:
程序清单
#include<
stdio.h>
stdlib.h>
string.h>
#defineN3/*预设停车场有3个车位**/
#defineM3/*预设便道有3个出位**/
#defineD0.1/*预设车辆停车费0.1元每小时*/
#defineXUHAO1000/*预设车辆次序号。
不管车辆到达时停在场内或便道,均依次设置一个次序号,由1开始*/
voidmenu();
//菜单函数
voidgetin();
//车辆进入函数
voidgetout();
//车辆离开函数
voidbiandao();
//便道车辆处理函数
voidxinxi();
//车辆信息查询函数
voidxxbc();
//信息保存函数
inta[N]={0,0,0};
//将数组中的各个元素初始化为0
intb[M]={0,0,0};
intj=0,t;
structcar/*车辆信息*/
charcar_num[6];
/*车辆次序号**/
intcar_inh;
/*车辆到达时间(时)*/
intcar_inm;
/*车辆到达时间(分)*/
intcar_stay;
/*车辆停放位置*/
}car[XUHAO];
voidmain()/*主函数**/
/*菜单函数*/
voidmenu()/*菜单函数*/
5)/*对选择的数字作判断*/
voidgetin()//车辆进入函数
N)//从0开始计停入停车场的车的数量
{
if(a[i]==0)//有车停入时,赋值为1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统 语言 课程设计