1、停车场管理系统C语言课程设计计算机科学与技术系课程设计报告20 20 学年第 学期 课程C语言课程设计课程设计名称停车场管理系统学生姓名学号专业班级指导教师目录1.需求分析32.算法设计3 2.1总体设计思想 3 2.2总体设计框图 33.调试及测试 43.1 主界面及功能列表 4 3.2 停车函数getin()的实现 6 3.3 取车函数getout()及biandao()的实现 10 3.4 存车信息输出函数xinxi()的实现 13 3.5文件保存 144.用户手册 165.问题与不足 166.小结 17附录1:程序清单17附录2:参考文献26 1 需求分析本次设计,仅为一个简单的小型停
2、车场管理系统。采用C语言编写,主要强调车辆的进站和出站操作,以及车场和通道之间的相互关系。根据车场内车道狭长且为一边开口的特点,将车库和便道中的车辆信息记录在一个结构体数组中,这样设计可以方便的记录车辆的数据,读取和删除。本程序中的数据对象是汽车,为使操作更方便,将给每辆进车道的汽车编号,根据编号出场。其中,还包括入场时间、出场时间、收取费用等项2 算法设计2.1 总体设计思想为了实现车库中有空车位汽车停入车库,车库满则停入便道的要求,在整个设计中使用了一个结构体数组,这样可以使车库和便道的停泊车辆信息储存在连续的结构体中。在本设计中,设车库的容量为N,便道的容量为M,当停泊的车辆不超过车库和
3、便道容量总和的情况下,为使每个车位都有相对应的存储空间,则设结构体数组的容量为M+N,因此在整个结构体数组carN+M中,car0至carN-1对应储存车库中各车位的车辆信息,carN至carN+M-1对应储存便道中各车位的车辆信息。为判断车库和便道各车位上是否有车停入,另设两个一维数组aN与bM,并赋初值为0,表示车位为空,即没有车辆停入。当有车停入车库或便道中时,数组aN和bM中相对应的数值被赋值为1,表示有车停入;当停在车位中的车离开时,数组aN和bM中相对应的数值由1赋值为0,表示车已经离开。设计中所设的结构体储存信息包括存入汽车的车牌号,汽车停泊的车位,停入车库中汽车的时间,其中时间
4、记录方法采用系统自动调用当期时间的时间函数,当车库汽车离开车位后,系统自动记录当前时间,减去汽车存入的时间,按每分钟存车的价格自动计算出汽车存入的费用。此外,本设计还包括车辆信息保存等功能。2.2 总体设计框图3.调试及测试3.1 主界面及功能列表系统首先调用菜单函数进入系统主界面,之后运用switch函数体进行功能选择。当输入为1时,调用车库信息函数xinxi(),当输入为2时,调用停车函数geyin(),当输入为3时,调用取车函数getout(),当输入为4时,调用信息保存函数xxbc(),当输入为5时,退出系统。如图1图1主界面及功能列表截图部分程序代码:void menu() int
5、n,w; do printf(nnn); printf(ttt 欢迎进入停车场管理系统n); puts(tt *MENU*nn); puts(tt *t 1.车库信息 t *); puts(tt *t 2.有车进入 t *); puts(tt *t 3.有车离开 t *); puts(tt *t 4.信息保存 t *); puts(tt *t 5.退出系统 t *); puts(nntt *n); printf(tt请在(1-5)中选择:); scanf(%d,&n); system(cls); if(n4)/*对选择的数字作判断*/ w=1; getchar(); else w=0; whi
6、le(w=1); switch(n) case 1:xinxi();break;/*初始化函数*/ case 2:getin();break;/*车辆进入函数*/ case 3:getout();break;/*车辆离开函数*/case 4:xxbc();break; case 5:printf(nnnttt感谢您对本产品的支持n);exit(0);/*退出*/ 3.2停车函数getin()的实现用停车函数后,系统首先要求用户输入要停入的汽车的车牌号。图2停车功能中等待用户输入车牌界面的截图当系统接收到用户输入的车牌号后,系统首先判断车库中是否有空余的车位。这个功能是通过使用一维数组aN实现的
7、,数组的初始值为0,代表车库中各个车位没有汽车停入,每当有汽车停入车库的车位时,其相对应的数组数值由0变为1,代表汽车的停入。判断有无空车位,系统执行一个for循环,由a0执行到aN-1,若其中有数值为0,则代表有空车位汽车可以停在车库内,若数组aN的值都为1,则车库已满,汽车需要停在便道上等候。图3 车辆停入车库空车位显示界面截面图3车库有空位,汽车可以停入空位中.图4车库已满,汽车需停在便道上等候车库未满流程图如下车库已满,车辆停在便道上的程序流程图如下图所示 便道停车函数流程图部分程序代码:void getin() if(jN) int i; for(i=0;iN;i+) if(ai=0
8、) j=i; ai=1; break; printf(nntt请输入该车的车牌号(如“n12354”):); scanf(%s,&cari.car_num); cari.car_stay=j; printf(ntt该车应该停在停车场内第%d位(从1道开始记)n,j+1); cari.car_stay=j; printf(ntt请输入该车进停车场时刻(24小时制,如3:20):); scanf(%d:%d,&cari.car_inh,&cari.car_inm); j+; printf(ntt车已成功停入n); system(pause); system(cls); menu(); else b
9、iandao(); void biandao() int t,i; for(i=0;i=M;i+) if(i=M) printf(对不起,便道已满n); menu(); else if(bi=0) t=i+N; bi=1; break; printf(nn请输入该车的车牌号(如“n12354”):); scanf(%s,&cart.car_num); printf(车库已满,车辆停在便道的%d位n,i+1); cart.car_stay=t;/*记录车的位置编号*/ printf(停入车辆情况:n); printf(车牌号:%sn,cart.car_num); printf(车位置:%dn,i
10、+1);/*便道上的车位,bq从0开始记,在bj从1开始记,在车位bj=1位置上的车对应bc0*/ system(pause); system(cls); menu();3.3 取车函数getout()的实现调用函数后,系统要求用户输入被提取的车辆的车牌号码.图5 取车功能中等待用户输入取车车牌号界面截图用户输入的车牌号码,系统将其保存在一个字符串数组中,系统使用一个循环结构和strcmp()语句对车库中存储的车牌号码进行比较,找到相同的车牌号,记录其所在的结构体数组中的位置i,系统自动记录车辆驶出的时间并自动计算在库时间,计算出存车的花费。当车辆取走后,判断数组bM中的b0是否为1,若为1则
11、说明便道上有车停靠,因为车库中有车取走,因此车库中有了空车位,便道上的车可以停入车库中,并且系统自动记录车进入车库的时间。若b0为0,则便道无车,不需要记录时间。执行完取车、便车道车辆入库的命令后,系统根据记录的被提取车的车位(i+1)执行一个循环体,将ci+1的数据赋给ci,之后i+。通过这样一个循环可以使后一个结构体的数据赋给它的上一个,实现取车删除数据的功能.图6 车辆取出存车费用,车辆移动显示截图部分程序代码:void getout()/*取车函数*/int i,g,w;char p6;int outh,outm,min1,min2;int stoph,stopm;double cos
12、t;printf(ntt请输入要驶出的车的车牌号码 );scanf(%s,&p); for(i=0;iN;i+) if(!strcmp(cari.car_num,p)/查找要取出的车的车牌号 printf(ntt请输入该车出停车场时刻(24小时制,如3:20):); scanf(%d:%d,&outh,&outm); printf(ntt车牌号%s驶出车库%d位置n,p,cari.car_stay); min1=outh*60+outm; min2=(cari.car_inh)*60+cari.car_inm;/将停车和取车的时间全部转化为分钟单位 cost=(min1-min2)*D;/停车
13、应收取的费用 stopm=(min1-min2)%60; stoph=(min1-min2)/60; /车在车库中停留的时间(时,分) printf(tt停留%d小时%d分钟n,stoph,stopm); printf(tt您应缴费用:%f元nnnnn,cost); g=i+1; if(b0=1) printf(nntt请让便道上的第一辆车%s进场n,carN.car_num); printf(tt请输入该车出停车场时刻(24小时制,如:3:20):n); scanf(%d:%d,&carN.car_inh,&carN.car_inm); printf( tt停入车辆情况n); printf(
14、tt车牌号%sn,carN.car_num); printf(tt车库位置%dn,carN-1.car_stay); for(g=i+1;g=N+M;g+)/系统根据记录的被提取车的车位g执行一个循环体,将carg的数据赋给carg-1,之后g+。使后一个结构体的数据赋给它的上一个,实现取车删除数据的功能. strcpy(carg-1.car_num,carg.car_num); carg-1.car_stay=carg.car_stay-1; carg-1.car_inh=carg.car_inh; carg-1.car_inm=carg.car_inm; for(w=0;wM;w+) bi
15、=bi+1;/将便道的车位停入数据进行覆盖 system(pause); menu(); printf(没有你要查询的车辆n); system(pause); menu();3.4存车信息输出函数xinxi()的实现图7车库和便道信息显示功能截图为了实现输出车库和便道信息的功能,系统首先需要判断车库中是否有车,如果a0为1则说明车库中停有车辆,执行for循环体逐个输出结构体数组中的车辆信息。若a0为0,则代表车库中没有车辆,因为车库有车位车就优先停入,因此a0为0也同时代表便车道也无车停入,此时系统输出“当前车库没有车辆停入.图8 显示车库没有车辆界面截图部分程序代码:void xinxi()
16、 if(a0!=0) int i,j; printf(车库信息n); printf(tt车位编号t车牌号t停入时间n); for(i=0;iN;i+) printf(tt %d t%st%d:%dn,i+1,cari.car_num,cari.car_inh,cari.car_inm); printf(便道信息n); printf(tt车位编号t车牌号n); for(j=0;jM;j+)printf(tt %d t%sn,j+1,carj+N.car_num); system(pause); menu(); else printf(当前车库无车n); system(pause); menu()
17、; 3.5 文件保存文件保存功能运用了c语言中的文件知识,首先系统使用fopen(”文件”,”w”)准备写入文件信息,在系统中车辆的存入信息保存在文件car.txt中,使用一个循环体读取结构体数组中存储的各个车辆信息,并且使用fprintf语句把信息输出到文件car.txt中。图9 信息保存截图部分程序代码:void xxbc()/*信息保存*/ int i; FILE *fp; fp=fopen(car.txt,a+);/*写入*/ fprintf(fp,车库信息n); fprintf(fp,tt车位编号t车牌号t停入时间n); for(i=0;iN;i+) fprintf(fp,tt%dt
18、t%st%d:%dn,i+1,cari.car_num,cari.car_inh,cari.car_inm); fprintf(fp,便道信息n); fprintf(fp,tt车位编号t车牌号n); for(j=0;jM;j+) fprintf(fp,tt%dtt%sn,j+1,carj+N.car_num);printf(nnn信息保存成功nn);system(pause);fclose(fp);menu();4 用户手册(1)在输入数据时,应按照提示操作,如菜单函数,在1-5之间选择才有效;(2)如果输入的是大于5的数或者其他字母或符号,系统会自动返回到当前菜单,你可以重新输入。对于停取车
19、的时间输入,一定要按照格式输入(如:4:14),否则会导致停车时间的错乱。一般输入完数据都是以回车键结束。5问题与不足1 需求分析中存在的问题和分析无法判断一辆车是否停如,当便道无车时,车库中取出车的信息无法删除。 2 概要设计中存在的问题和分析 未能加入批量删除的功能。 3 代码编制中存在的问题和分析 一些系统固有的功能函数未能使用,重新编译使程序冗长,程序内存较大, 不够简洁。 4 调试和测试中存在的问题和分析 调试时有些函数无变量返回而使用了int定义 后改为了void才没有了系统警告。5 总结语言程序设计是一门重要的专业基础课,通过这次课程设计使我了解了c语言程序设计的思想,并且掌握了
20、程序设计的基本方法,为后续课程打下了坚实的基础。同时,这次课程设计又是一次实践性较强的知识应用,在对我进行程序设计基础理论与技术技巧能力训练的同时,更加培养了我解决实际问题的编程能力。在设计过程中,首先要解决的是与同学的合作,接下来分工与协商,共同探讨,大家取长补短,认清自己的不足之处和薄弱环节,加以弥补和加强,要做出一个好的程序就要有不懈追求的精神和对理想崇高的追求,有一种不完成不罢休的精神。c语言作为一种高级编程语言具有方便灵活的特点,适合各种类型的软件开发,为我们以后学习单片机非常有用。在设计初期,根据题目的要求和所学的知识,车库中的车辆是先进后出的,是栈结构,便道上的车辆是先进先出的,
21、是一个队列,结构很明显,但是现阶段我所学的基础知识不够,掌握的不多,对应用栈和队列来解决这个问题有一定的困难,因此我在整个设计中使用了结构体数组,运用一个结构体数组来同时记录车库和便道中车辆的信息,这样也可以起到一个连续记录数据的功能,完成设计要求的任务。课程设计为我提供了一个既动手又动脑,独立实践的机会,将课本上的知识与实践相结合起来,提高了我适应实际,实践编程的能力。在这一系统中用到了结构体,它让我更加巩固了结构体的特点和用法,本设计最好使用的结构是栈和队列,但是我们现阶段还未作学习,使用起来不是很流畅,因此我在这个设计中使用了结构体,使用了新的思路。总之,这次课程设计挖掘了我潜在的能力,
22、是我更加自信,也对编程更加有兴趣,为以后的学习打下了良好的基础。附录1:程序清单#include #include #include#define N 3/*预设停车场有3个车位*/ #define M 3/*预设便道有3个出位*/ #define D 0.1/*预设车辆停车费0.1元每小时*/#define XUHAO 1000/*预设车辆次序号。不管车辆到达时停在场内或便道,均依次设置一个次序号,由1开始*/ void menu();/菜单函数void getin();/车辆进入函数 void getout();/车辆离开函数void biandao();/便道车辆处理函数void xin
23、xi();/车辆信息查询函数void xxbc();/信息保存函数int aN=0,0,0;/将数组中的各个元素初始化为0int bM=0,0,0;int j=0,t;struct car/*车辆信息*/ char car_num6;/*车辆次序号*/ int car_inh;/*车辆到达时间(时)*/ int car_inm;/*车辆到达时间(分)*/ int car_stay;/*车辆停放位置*/ carXUHAO; void main()/*主函数*/ menu();/*菜单函数*/ void menu()/*菜单函数*/ int n,w; do printf(nnn); printf(
24、ttt 欢迎进入停车场管理系统n); puts(tt *MENU*nn); puts(tt *t 1.车库信息 t *); puts(tt *t 2.有车进入 t *); puts(tt *t 3.有车离开 t *); puts(tt *t 4.信息保存 t *); puts(tt *t 5.退出系统 t *); puts(nntt *n); printf(tt请在(1-5)中选择:); scanf(%d,&n); system(cls); if(n5)/*对选择的数字作判断*/ w=1; getchar(); else w=0; while(w=1); switch(n) case 1:xi
25、nxi();break;/*初始化函数*/ case 2:getin();break;/*车辆进入函数*/ case 3:getout();break;/*车辆离开函数*/case 4:xxbc();break; case 5:printf(nnnttt感谢您对本产品的支持n);exit(0);/*退出*/ void getin()/车辆进入函数 if(jN)/从0开始计停入停车场的车的数量 int i; for(i=0;iN;i+) if(ai=0)/有车停入时,赋值为1 j=i; ai=1; break; printf(nntt请输入该车的车牌号(如“n12354”):); scanf(%
26、s,&cari.car_num); cari.car_stay=j; printf(ntt该车应该停在停车场内第%d位(从1道开始记)n,j+1); printf(ntt请输入该车进停车场时刻(24小时制,如3:20):); scanf(%d:%d,&cari.car_inh,&cari.car_inm); j+; printf(ntt车已成功停入n); system(pause); system(cls); menu(); else biandao(); void getout()/*取车函数*/int i,g,w;char p6;int outh,outm,min1,min2;int stoph,stopm;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1