C语言综合程序设计 停车场管理系统.docx
C语言综合程序设计 停车场管理系统综合性程序设计报告 设计题目:_停车场管理系统_ 指导教师: _ 班 级: _ 学 号: _ 设 计 者: _ 成 绩: _ 设计时间: 年 月 日 停车场管理系统 目录 1.题目描述 2.功能模块分解及说明 3.数据库设计及说明 4.界面说明 5.主要算法说明 6.代码清单及注释 7.设计测试说明 8.设计体会 停车场管理系统 1.题目描述 停车场的基本概述:用于利用计算机实现停车场的管理,包括车位调度,停车记费。车位记录,收费管理与计算。 停车场的主要功能: 1.车位调度。 2.停车时间与费用的计算。 3.车位记录。 2.功能模块分解及说明 根据题目要求,可以用结构体实现,在程序中,需要知道每辆来车的具体停放位置,应提供提示、查找、标记工作。车辆离开要计时计费。另外,每天开始时,停车场要初始化。 所以,这个系统可以分为:初始化、有车进入、有车离开、退出四个模块。 1菜单函数: main函数体内包含了界面选则部分menu,并单独 抽出来作为一个独立函数,目的在于系统执行每部分 模块后能够方便返回到系统界面。即main函数写为 如下: void main/*主函数*/ menu;/*菜单函数*/ void menu int n,w; do puts("tt*MENU*nn"); puts("ttt 1.初始化"); puts("ttt 2.有车进入"); puts("ttt 3.有车离开"); puts("ttt 4.退出"); puts("nntt*n"); printf("Please choice your number(1-4): bb"); scanf("%d",&n); if(n<1|n>4) /*对选择的数字作判断*/ w=1; getchar; else w=0; while(w=1); switch(n) case 1:chushi;break; /*初始化函数*/ case 2:jinru;break; /*车辆进入函数*/ case 3:likai;break; /*车辆离开函数*/ case 4:exit(0); /*退出*/ 2车道信息 该模块是将每一天开始的停车场内和便道车位清零。首先建立场内场外的结构体,结构体内成员即车位的状态。用循环实现车位的致零即可。 struct changnei/*场内车道信息*/ int neikong; chnN-1; struct changwai/*场外车道信息*/ int waikong; chwM-1; N和M分别是停车场和便道的车位预设值,用宏定义。用户可根据实际情况改变。 #define N 100/*预设停车场有100个车位*/ #define M 100/*预设便道有100个出位*/ void chushi/*初始化函数*/ int i,j; for(i=0;i<=N-1;i+) chni.neikong=0;/*将场内车道设置为空*/ for(j=0;j<=M-1;j+) chwi.waikong=0;/*将便道车道设置为空*/ printf("nntt已初始化nn"); menu; 函数出示化后将回到菜单界面。 3车辆进入函数: 该模块车辆到达后,要指定车辆的停车位置。用户根据菜单函数进入车辆进入模块。按照每辆车的到达次序给予车辆次序号,由0号开始。车辆信息也建立结构体。 struct car/*车辆信息*/ int car_num;/*车辆次序号*/ int car_arr;/*车辆到达时间*/ int car_lef;/*车辆离开时间*/ int car_stay;/*车辆停放位置*/ carCIXUHAO; 其中,CIXUHAO是车辆次序号的宏定义: #define CIXUHAO 1000/*预设车辆次序号。不管车辆到达时停在场内或便道,均依次设置一个次序号,由0开始*/ 给予车辆次序号之后,用循环判断停车场是否停满,再分别给予选择: void jinru/*车辆进入函数*/ int i,a; int h=0; printf("nn请输入该车次序号:"); scanf("%d",&a); for(i=0;i<N;i+) if(chni.neikong=0);/*无车标记0*/ if(chni.neikong=1)/*有车标记1*/ h=h+1; if(h=N) printf("停车场内已停满,请停在便道上n"); else cara.car_stay=h; chnh.neikong=1; printf("该车应该停在停车场内第道%dn",h); printf("请输入该车进停车场时刻:n"); scanf("%d",&cara.car_arr); 便道上还有车吗? menu; 程序执行完后回到菜单。 4车辆离开函数: 该模块一辆车要离开,则需要记 录该车的离开时间,以计算出该车 在停车场内的停车时间和应该缴纳 的费用。该车离开后,要判断便道 上是否有车等待进入,如有,则将 便道上第一辆车停放在停车场内最 后的位置并记录好进场时间;若无, 则返回菜单. N void likai/*车辆离开函数*/ int i,k,choi,time; double fee; printf("请输入离开车辆次序号 ,并将此车之后的车先全部退出停车场!"); scanf("%d",&i); printf("n请输入离开车辆的离开时刻:n"); scanf("%d",&cari.car_lef); fee=D*(cari.car_lef-cari.car_arr); time=cari.car_lef-cari.car_arr; printf("次序号为%d的车停车时间%d小时,应收费%f元n",i,time,fee); printf("nnn请让场内退出的车再依次进场!nnn"); printf("便道上现在有车吗?(请选择1或2)n1.有n2.没有n");/*因便道上可能没有车,因此要做选择*/ scanf("%d",&choi); if(choi=2) menu; if(choi=1) Y printf("请让便道上的第一辆车进场n"); printf("该车次序号为:n"); scanf("%d",&k); printf("请输入该车进场时间:n"); scanf("%d",&cark.car_arr); menu; D为预设停车场单位小时费用,用宏定义,便于以后修改。 #define D 1.2/*预设车辆停车费为1.2元每小时*/ 3.数据库设计及说明 1停车车道:用宏定义管理数据。N和M分别是停车场和便道的车位预设值 原因以及说明:用户可根据实际情况改变。 2预设车辆次序号:用宏定义。 原因及说明不管车辆到达时停在场内或便道,均依次设置一个次序号,由0开始*/ 给予车辆次序号之后,用循环判断停车场是否停满,再分别给予选择: 3停车费用:用宏定义。 原因及说明:以后便于修改。 4车辆号码:用数组。 原因及说明:车辆数目较大,用数组更加有条理。 5车道号码:用数组。 原因及说明:车辆数目较大,用数组更加有条理。 4.界面说明 1主菜单函数 2初始化操作 3有车进入 以上分别举例0,1,2三个车的进场情况 4有车离开 5若便道上没车,则退回到主菜单 6若便道上有车 5.主要算法说明 1.主菜单 开始 2车道是否停满。 N 显示一系列选项功能 输入n,判断n是不是1-4? Y 根据n的值调用各功能模块函数 结束 场内是否已满 已满,将车停在便道 未满,指定停车场位置 3便道上是否有车辆。 有车离开 记录该车离开时间 得到停车时间和费用 6.代码清单及注释 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 100/*预设停车场有100个车位*/ #define M 100/*预设便道有100个出位*/ #define D 1.2/*预设车辆停车费为1.2元每小时*/ #define CIXUHAO 1000/*预设车辆次序号。不管车辆到达时停在场内或便道,均依次设置一个次序号,由0开始*/ void menu; void chushi; void jinru; void likai; struct car/*车辆信息*/ int car_num;/*车辆次序号*/ int car_arr;/*车辆到达时间*/ 返回主菜单 令其进场 输入次序号和进场时间 便道上还有车吗? int car_lef;/*车辆离开时间*/ int car_stay;/*车辆停放位置*/ carCIXUHAO; struct changnei/*场内车道信息*/ int neikong; chnN-1; struct changwai/*场外车道信息*/ int waikong; chwM-1; void main/*主函数*/ menu;/*菜单函数*/ void menu int n,w; do puts("tt*MENU*nn"); puts("ttt 1.初始化"); puts("ttt 2.有车进入"); puts("ttt 3.有车离开"); puts("ttt 4.退出"); puts("nntt*n"); printf("Please choice your number(1-4): bb"); scanf("%d",&n); if(n<1|n>4)/*对选择的数字作判断*/ w=1; getchar; else w=0; while(w=1); switch(n) case 1:chushi;break;/*初始化函数*/ case 2:jinru;break;/*车辆进入函数*/ case 3:likai;break;/*车辆离开函数*/ case 4:exit(0);/*退出*/ void chushi/*初始化函数*/ int i,j; for(i=0;i<=N-1;i+) chni.neikong=0;/*将场内车道设置为空*/ for(j=0;j<=M-1;j+) chwi.waikong=0;/*将便道车道设置为空*/ printf("nntt已初始化nn"); menu; void jinru/*车辆进入函数*/ int i,a; int h=0; printf("nn请输入该车次序号:"); scanf("%d",&a); for(i=0;i<N;i+) if(chni.neikong=0);/*无车标记0*/ if(chni.neikong=1)/*有车标记1*/ h=h+1; if(h=N) printf("停车场内已停满,请停在便道上n"); else cara.car_stay=h; chnh.neikong=1; printf("该车应该停在停车场内第道%dn",h); printf("请输入该车进停车场时刻:n"); scanf("%d",&cara.car_arr); menu; void likai/*车辆离开函数*/ int i,k,choi,time; double fee; printf("请输入离开车辆次序号 ,并将此车之后的车先全部退出停车场!"); scanf("%d",&i); printf("n请输入离开车辆的离开时刻:n"); scanf("%d",&cari.car_lef); fee=D*(cari.car_lef-cari.car_arr); time=cari.car_lef-cari.car_arr; printf("次序号为%d的车停车时间%d小时,应收费%f元n",i,time,fee); printf("nnn请让场内退出的车再依次进场!nnn"); printf("便道上现在有车吗?(请选择1或2)n1.有n2.没有n");/*因便道上可能没有车,因此要做选择*/ scanf("%d",&choi); if(choi=2) menu; if(choi=1) printf("请让便道上的第一辆车进场n"); printf("该车次序号为:n"); scanf("%d",&k); printf("请输入该车进场时间:n"); scanf("%d",&cark.car_arr); menu; 7.设计测试说明 8.设计体会 c 语言程序设计是一门重要的专业基础课,通过这次课程设计使我了解了,c语言程序设计的思想,并且掌握了程序设计的基本方法,为后续课程打下了坚实的基础。同时这次课程设计又是一次实践性较强的知识应用,在对我进行程序设计基础理论与技术技巧能力训练的同时,更加培养了我解决实际问题的编程能力。 在设计过程中,首先要解决的是与同学的合作,接下来分工与协商,共同探讨,大家取长补短,认清自己的不足之处和薄弱环节,加以弥补和加强,要做出 一个好的程序就要有不懈追求的精神和对理想崇高的追求,有一种不完成不罢休的精神。c语言作为一种高级编程语言具有方便灵活的特点,适合各种类型的软件开发,为我们以后学习单片机非常有用。 在设计初期,根据题目的要求和所学的知识,车库中的车辆是先进后出是栈结构,便道上的车辆是先进先出的,是一个队列,结构很明显,但是现阶段我所学的基础知识不够,掌握的不多,对应用栈和队列来解决这个问题有一定的困难,因此我在整个设计中使用了结构体数组,运用一个结构体数组来同时记录车库和便道中车辆的信息,这样也可以起到一个连续记录数据的功能,完成设计要求的任务。课程设计为我提供了一个既动手又动脑,独立实践的机会,将课本上的知识 与实践相结合起来,提高了我适应实际,实践编程的能力。 在这一系统中用到了结构体,它让我更加巩固了结构体的特点和用法,本设计最好使用的结构是栈和队列,但是我们现阶段还未作学习,使用起来不是很流畅,因此我在这个设计中使用了结构体,使用了新的思路。 总之,这次课程设计挖掘了我潜在的能力,是我更加自信,也对编程更加有 兴趣,为以后的学习打下了良好的基础。