停车场管理系统C语言课程设计.docx
- 文档编号:7878535
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:28
- 大小:184.39KB
停车场管理系统C语言课程设计.docx
《停车场管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统C语言课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
停车场管理系统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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统 语言 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)