停车场管理系统C语言课程设计.docx

上传人:b****5 文档编号:7878535 上传时间:2023-01-26 格式:DOCX 页数:28 大小:184.39KB
下载 相关 举报
停车场管理系统C语言课程设计.docx_第1页
第1页 / 共28页
停车场管理系统C语言课程设计.docx_第2页
第2页 / 共28页
停车场管理系统C语言课程设计.docx_第3页
第3页 / 共28页
停车场管理系统C语言课程设计.docx_第4页
第4页 / 共28页
停车场管理系统C语言课程设计.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

停车场管理系统C语言课程设计.docx

《停车场管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统C语言课程设计.docx(28页珍藏版)》请在冰豆网上搜索。

停车场管理系统C语言课程设计.docx

停车场管理系统C语言课程设计

计算机科学与技术系

 

课程设计报告

20~20学年第学期

 

课程

C语言课程设计

课程设计名称

停车场管理系统

学生姓名

学号

专业班级

指导教师

 

目录

1.需求分析……………………………………………3

2.算法设计……………………………………………3

2.1总体设计思想………………………………………………………………3

2.2总体设计框图………………………………………………………………3

3.调试及测试…………………………………………4

3.1主界面及功能列表…………………………………………………………4

3.2停车函数getin()的实现…………………………………………………6

3.3取车函数getout()及biandao()的实现…………………………………10

3.4存车信息输出函数xinxi()的实现………………………………………13

3.5文件保存……………………………………………………………………14

4.用户手册……………………………………………16

5.问题与不足…………………………………………16

6.小结…………………………………………………17

附录1:

程序清单………………………………………17

附录2:

参考文献………………………………………26

 

1需求分析

本次设计,仅为一个简单的小型停车场管理系统。

采用C语言编写,主要强调车辆的进站和出站操作,以及车场和通道之间的相互关系。

根据车场内车道狭长且为一边开口的特点,将车库和便道中的车辆信息记录在一个结构体数组中,这样设计可以方便的记录车辆的数据,读取和删除。

本程序中的数据对象是汽车,为使操作更方便,将给每辆进车道的汽车编号,根据编号出场。

其中,还包括入场时间、出场时间、收取费用等项

 

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");

puts("\t\t*\t1.车库信息\t*");

puts("\t\t*\t2.有车进入\t*");

puts("\t\t*\t3.有车离开\t*");

puts("\t\t*\t4.信息保存\t*");

puts("\t\t*\t5.退出系统\t*");

puts("\n\n\t\t*********************************\n");

printf("\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();

break;/*车辆进入函数*/

case3:

getout();

break;/*车辆离开函数*/

case4:

xxbc();

break;

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

{

inti;

for(i=0;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;

printf("\n\t\t该车应该停在停车场内第%d位(从1道开始记)\n",j+1);

car[i].car_stay=j;

printf("\n\t\t请输入该车进停车场时刻(24小时制,如3:

20):

");

scanf("%d:

%d",&car[i].car_inh,&car[i].car_inm);

j++;

printf("\n\t\t车已成功停入\n");

system("pause");

system("cls");

menu();

 

}

else

biandao();

}

voidbiandao()

{

intt,i;

for(i=0;i<=M;i++)

if(i==M)

{

printf("对不起,便道已满\n");

menu();

}

elseif(b[i]==0)

{

t=i+N;

b[i]=1;

break;

}

printf("\n\n请输入该车的车牌号(如“n12354”):

");

scanf("%s",&car[t].car_num);

printf("车库已满,车辆停在便道的%d位\n",i+1);

car[t].car_stay=t;/*记录车的位置编号*/

printf("停入车辆情况:

\n");

printf("车牌号:

%s\n",car[t].car_num);

printf("车位置:

%d\n",i+1);/*便道上的车位,bq从0开始记,在bj从1开始记,在车位bj=1位置上的车对应bc[0]*/

system("pause");

system("cls");

menu();

 

}

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;

printf("\n\t\t请输入要驶出的车的车牌号码");

scanf("%s",&p);

for(i=0;i

{

if(!

strcmp(car[i].car_num,p))//查找要取出的车的车牌号

{

printf("\n\t\t请输入该车出停车场时刻(24小时制,如3:

20):

");

scanf("%d:

%d",&outh,&outm);

printf("\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;//车在车库中停留的时间(时,分)

printf("\t\t停留%d小时%d分钟\n",stoph,stopm);

printf("\t\t您应缴费用:

%f元\n\n\n\n\n",cost);

g=i+1;

if(b[0]==1)

{printf("\n\n\t\t请让便道上的第一辆车%s进场\n",car[N].car_num);

printf("\t\t请输入该车出停车场时刻(24小时制,如:

3:

20):

\n");

scanf("%d:

%d",&car[N].car_inh,&car[N].car_inm);

printf("\t\t停入车辆情况\n");

printf("\t\t车牌号%s\n",car[N].car_num);

printf("\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

b[i]=b[i+1];//将便道的车位停入数据进行覆盖

system("pause");

menu();

}

}

}

printf("没有你要查询的车辆\n");

system("pause");

menu();

}

 

3.4存车信息输出函数xinxi()的实现

图7车库和便道信息显示功能截图

为了实现输出车库和便道信息的功能,系统首先需要判断车库中是否有车,如果a[0]为1则说明车库中停有车辆,执行for循环体逐个输出结构体数组中的车辆信息。

若a[0]为0,则代表车库中没有车辆,因为车库有车位车就优先停入,因此a[0]为0也同时代表便车道也无车停入,此时系统输出“当前车库没有车辆停入.

图8显示车库没有车辆界面截图

部分程序代码:

voidxinxi()

{

if(a[0]!

=0)

{

inti,j;

printf("车库信息\n");

printf("\t\t车位编号\t车牌号\t停入时间\n");

for(i=0;i

printf("\t\t%d\t%s\t%d:

%d\n",i+1,car[i].car_num,car[i].car_inh,car[i].car_inm);

printf("便道信息\n");

printf("\t\t车位编号\t车牌号\n");

for(j=0;j

printf("\t\t%d\t%s\n",j+1,car[j+N].car_num);

system("pause");

menu();

}

else

{

printf("当前车库无车\n");

system("pause");

menu();

}

}

3.5文件保存

文件保存功能运用了c语言中的文件知识,首先系统使用fopen(”文件”,”w”)准备写入文件信息,在系统中车辆的存入信息保存在文件car.txt中,使用一个循环体读取结构体数组中存储的各个车辆信息,并且使用fprintf语句把信息输出到文件car.txt中。

图9信息保存截图

部分程序代码:

voidxxbc()/*信息保存*/

{

inti;

FILE*fp;

fp=fopen("car.txt","a+");/*写入*/

fprintf(fp,"车库信息\n");

fprintf(fp,"\t\t车位编号\t车牌号\t停入时间\n");

for(i=0;i

{

fprintf(fp,"\t\t%d\t\t%s\t%d:

%d\n",i+1,car[i].car_num,car[i].car_inh,car[i].car_inm);

}

fprintf(fp,"便道信息\n");

fprintf(fp,"\t\t车位编号\t车牌号\n");

for(j=0;j

{

fprintf(fp,"\t\t%d\t\t%s\n",j+1,car[j+N].car_num);

}

printf("\n\n\n信息保存成功\n\n");

system("pause");

fclose(fp);

menu();

}

4用户手册

(1)在输入数据时,应按照提示操作,如菜单函数,在1-5之间选择才有效;

(2)如果输入的是大于5的数或者其他字母或符号,系统会自动返回到当前菜单,你可以重新输入。

对于停取车的时间输入,一定要按照格式输入(如:

4:

14),否则会导致停车时间的错乱。

一般输入完数据都是以回车键结束。

5问题与不足

1需求分析中存在的问题和分析

无法判断一辆车是否停如,当便道无车时,车库中取出车的信息无法删除。

2概要设计中存在的问题和分析

未能加入批量删除的功能。

3代码编制中存在的问题和分析

一些系统固有的功能函数未能使用,重新编译使程序冗长,程序内存较大,不够简洁。

4调试和测试中存在的问题和分析

调试时有些函数无变量返回而使用了int定义后改为了void才没有了系统警告。

5总结

语言程序设计是一门重要的专业基础课,通过这次课程设计使我了解了c语言程序设计的思想,并且掌握了程序设计的基本方法,为后续课程打下了坚实的基础。

同时,这次课程设计又是一次实践性较强的知识应用,在对我进行程序设计基础理论与技术技巧能力训练的同时,更加培养了我解决实际问题的编程能力。

在设计过程中,首先要解决的是与同学的合作,接下来分工与协商,共同探讨,大家取长补短,认清自己的不足之处和薄弱环节,加以弥补和加强,要做出一个好的程序就要有不懈追求的精神和对理想崇高的追求,有一种不完成不罢休的精神。

c语言作为一种高级编程语言具有方便灵活的特点,适合各种类型的软件开发,为我们以后学习单片机非常有用。

在设计初期,根据题目的要求和所学的知识,车库中的车辆是先进后出的,是栈结构,便道上的车辆是先进先出的,是一个队列,结构很明显,但是现阶段我所学的基础知识不够,掌握的不多,对应用栈和队列来解决这个问题有一定的困难,因此我在整个设计中使用了结构体数组,运用一个结构体数组来同时记录车库和便道中车辆的信息,这样也可以起到一个连续记录数据的功能,完成设计要求的任务。

课程设计为我提供了一个既动手又动脑,独立实践的机会,将课本上的知识与实践相结合起来,提高了我适应实际,实践编程的能力。

在这一系统中用到了结构体,它让我更加巩固了结构体的特点和用法,本设计最好使用的结构是栈和队列,但是我们现阶段还未作学习,使用起来不是很流畅,因此我在这个设计中使用了结构体,使用了新的思路。

总之,这次课程设计挖掘了我潜在的能力,是我更加自信,也对编程更加有兴趣,为以后的学习打下了良好的基础。

 

附录1:

程序清单

#include

#include

#include

#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()/*主函数**/

{

menu();/*菜单函数*/

}

 

voidmenu()/*菜单函数*/

{intn,w;

do

{printf("\n\n\n");

printf("\t\t\t欢迎进入停车场管理系统\n");

puts("\t\t**************MENU**************\n\n");

puts("\t\t*\t1.车库信息\t*");

puts("\t\t*\t2.有车进入\t*");

puts("\t\t*\t3.有车离开\t*");

puts("\t\t*\t4.信息保存\t*");

puts("\t\t*\t5.退出系统\t*");

puts("\n\n\t\t*********************************\n");

printf("\t\t请在(1-5)中选择:

");

scanf("%d",&n);

system("cls");

if(n<1||n>5)/*对选择的数字作判断*/

{

w=1;

getchar();

}

else

w=0;

}while(w==1);

switch(n)

{

case1:

xinxi();

break;/*初始化函数**/

case2:

getin();

break;/*车辆进入函数*/

case3:

getout();

break;/*车辆离开函数*/

case4:

xxbc();

break;

case5:

printf("\n\n\n\t\t\t感谢您对本产品的支持\n");

exit(0);/*退出**/

}

}

 

voidgetin()//车辆进入函数

{

if(j

{

inti;

for(i=0;i

if(a[i]==0)//有车停入时,赋值为1

{

j=i;

a[i]=1;

break;

}

printf("\n\n\t\t请输入该车的车牌号(如“n12354”):

");

scanf("%s",&car[i].car_num);

car[i].car_stay=j;

printf("\n\t\t该车应该停在停车场内第%d位(从1道开始记)\n",j+1);

printf("\n\t\t请输入该车进停车场时刻(24小时制,如3:

20):

");

scanf("%d:

%d",&car[i].car_inh,&car[i].car_inm);

j++;

printf("\n\t\t车已成功停入\n");

system("pause");

system("cls");

menu();

 

}

else

biandao();

}

 

voidgetout()/*取车函数*/

{

inti,g,w;

charp[6];

intouth,outm,min1,min2;

intstoph,stopm;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1