资源描述
XXXXXX
C程序设计
课程设计说明书
设计(论文)题目:停车场管理系统
所在院:信息工程学院
专业班级: 14通信工程2班
学生姓名:
学号:201451032
指导教师:XXX
2016年3月7日
一、问题描述
某停车场有20车位(1-20号),车辆信息包括:车位号,车牌号,进入时间,离开时间,计费(按每天20元收费)。
编程实现如下菜单驱动的停车场管理系统:
(1)查找空车位并显示车位号。
(2)车辆进入(判断有没有空车位,如果有,允许车辆进入,同时记录车位号,车牌号及辆进入时间)。
(3)查找车辆并显示车辆信息。
(4)车辆离开(按照车位号查找车辆,如果在车位,计费,同时让车辆离开)。
(5)显示所有在位车辆信息。
二、设计要求
1. 界面清晰,美观大方。
2. 要求使用菜单的形式描述功能项,菜单设计美观大方、实用,可仿照课程说明书模板或自行设计。
3. 模块化程序设计:要求在设计的过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现。
4. 程序以缩进格式书写,要求清晰、易懂。
5. 各功能模块要求必须有准确描述函数功能的注释,重要语句最好也加上注释,以更好地让读者理解。
6. 要求对2-3个重要功能模块进行描述。
7. 课程设计题目选择要求一个班最多有两人可选择同一题目,但要求不得抄袭,最终每个人(即使题目相同)内容都是独立的。
8. 课程设计至少包含5-10个功能模块,若题目中不够5-10个功能项,请自行设计功能项(5-10个功能项数目不同,得分也不同)。
9. 可以选择老师提供的参考选题,也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用。
10. 要求利用结构化程序设计方法以及C的编程思想来完成系统的设计。
11. 编辑平台选用Microsoft Visual C++ 6.0。
三、分析与实现
本程序采用模块化设计,主函数清晰、明了,各功能分别在不同模块中实现。共有七个功能模块,每个功能模块以函数的形式表示,实现了有关停车场管理的七项功能。
具体实现如下:
首先声明必要的变量及数据结构。
//相关头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//符号常量定义
struct Garage
{
char carnum[8]; /*车牌号*/
int lay; /*层号*/
intgaragenum; /*车位号*/
int time; /*停车时间*/
intisempty; /*该车位是否为空,1表示空0表示有车*/
};
void Instruction()
{
printf("停车场管理系统使用说明\n");
printf("停车请输入1 \n");
printf("取车请输入2 \n");
printf("查看全部车辆的信息请输入3 \n");
printf("退出请输入0 \n");
}
/*初始化停车场信息初始状态为第一层已经停有4辆车, *其车位号依次为1
—4 , 停车时间依次为20, 15, 10 , 5 */
voidInit(struct Garage gar[][6])
{
int i, j; /*给所有的车位的层号车位号初始化停车时间初始化为0停车位
全都初始化为空*/
for (i=0; i<2; i++)
{
for (j=0; j<6; j++)
{
gar[i][j].lay = i+1;
gar[i][j].garagenum= j+1;
gar[i][j].time = 0;
gar[i][j].isempty = 1;
}
}
/*第一层的1-4号车位停车*/
for (i=0; i<4; i++)
{
gar[0][i].isempty =0;
}
strcpy(gar[0][0].carnum, "0000"); /*初始化的车牌号*/
gar[0][0].time = 20;
strcpy(gar[0][1].carnum,
"1111"); gar[0][1].time = 15;
strcpy(gar[0][2].carnum, "2222");
gar[0][2].time = 10;
strcpy(gar[0][3].carnum, "3333");
gar[0][3].time = 5;}
/*新停入的汽车后将在此之前的所有车的停车时间加5*/
voidAddTime(struct Garage gar[][6])
{
int i, j;
for (i=0; i<2; i++)
{
for (j=0; j<6; j++)
{
if (gar[i][j].isempty == 0)
{
gar[i][j].time += 5;
}
}
}
}
/*停车模块*/
void Park(struct Garage gar[][6])
{
int i;
charnum[8];
printf("请输入车牌号");
scanf("%s", num); /*查找空车位*/
for (i=0; i<6; i++)
{
if (gar[0][i].isempty == 1)
{
printf("第一层第%d号车位空着请在此处停车\n", i+1);
strcpy(gar[0][i].carnum, num);
printf("车牌号%s 层号1 车位号 %d \n", num, i+1);
AddTime(gar); /*在此之前停车的所有汽车时间加5*/
gar[0][i].isempty = 0; /*表示该车为已经停车*/
gar[0][i].time = 5; /*将时间设为5*/
return;
}
}
printf("第一层已经没有空车位\n");
for (i=0; i<6; i++)
{
if (gar[1][i].isempty == 1)
{
printf("第二层第%d号车位空着请在此处停车\n", i+1);
strcpy(gar[1][i].carnum, num);
printf("车牌号%s 层号2 车位号 %d \n", num ,i+1);
AddTime(gar); /*在此之前停车的所有汽车时间加5*/
gar[1][i].isempty = 0; /*表示该车位已经停车*/
gar[1][i].time = 5; /*将时间设为5*/
return;
}
}
printf("对不起1 2层都没有空车位您现在不能在此停车\n");
}
/*查看所有车辆信息*/
void Information(struct Garage gar[][6])
{
int i, j;
printf(" 车牌号层号车位号停车时间\n");
for (i=0; i<2; i++)
{
for(j=0; j<6; j++)
{
if (gar[i][j].isempty == 0)
printf(" %s%8d%8d%8d\n", gar[i][j].carnum, gar[i][j].lay,
gar[i][j].garagenum, gar[i][j].time);
}
}
printf("\n");
}
/*取车模块*/
double Leave(struct Garage gar[2][6])
{
int i, j;
charnum[8];
double charge = 0;
printf("请输入要取的车牌号");
scanf("%s", num);
for (i=0; i<2; i++)
{
for (j=0; j<6; j++)
{
if (!strcmp(gar[i][j].carnum, num))
{
printf("您在%d层%d车位停车%d分钟\n", gar[i][j].lay,
gar[i][j].garagenum, gar[i][j].time);
charge = gar[i][j].time/5*0.2;
printf("停车费用为每5分钟0.2元您需交%.2lf元\n", charge);
gar[i][j].isempty = 1;
return charge;
}
}
}
printf("没有您输入的车号。\n\n");
return charge;
}
/*是否查看总收入*/
voidIsPrintTotal(double total)
{
charch;
printf("是否查看停车收费总计Y/N");
scanf("%c", &ch);
while (ch!='y' &&ch!='Y' &&ch!='n' &&ch!='N')
{
printf("请输入Y或N ");
scanf("%c", &ch);
printf("\n");
}
switch (ch)
{
case 'Y':
case 'y':
printf("停车收费总计为%.2lf元\n", total);
break;
case 'N':
case 'n':
break;
}
}
/*主函数模块*/
main()
{
int choice;
double total = 0;
struct Garage gar[2][6];
Init(gar); /*初始化第一层已经停有的4辆车 */
while (1)
{
Instruction();
printf("请输入要进行的操作:");
scanf("%d", &choice);
while (choice<0 || choice>3)
{
printf("输入的不合法请输入0-3选择");
scanf("%d", &choice);
}
switch (choice)
{
case 1:
Park(gar);
break;
case 2:
total += Leave(gar);
IsPrintTotal(total);
break;
case 3:
Information(gar);
break;
case 0:
exit(0);
}
}
return 0;
}
四、运行与测试
五、 总结与思考
两个星期的努力终于总算把课程设计给完成了。这是一个坚苦而又漫长的过程。看着辛苦得来的劳动成果很是欣慰。刚开始可以说是一点头绪都没有于是就去图书馆找资料。找到了一些关于停车场管理系统的。可是这点进展却远远不够。这只是一个小小的开始。下一步是上网。查找到了些与这个题目相似的,可以从中吸取一些知识。又查到了些有关这方面的函数。最后经过奋战终于完成了这个程序。虽然设计程序很累。可是当设计结束时真是别有一番滋味在心头。世上无难事只怕有心人。此次课程设计我受益匪浅,学会了很多,也知道了自己需要需要学的更多,同时,我也爱上了C,体会到了它的奇妙,实在是觉得它是一门大学问,它所蕴含的知识自己永远也学不完,唯有不断奋进,不断进步。
展开阅读全文