Xxxxx大学xxxxxxxxxxx系20xx-20xx学年第一学期《C程序设计》课程设计题目名称:停车场管理系统设计姓名:学号:班级:指导教师:编写日期: 20 年1月5日—20 年1月31日成绩:目录(一)需求分析 (3)1-1停车 (3)1-2取车 (3)1-3功能的选择 (3)(二)总体设计(程序设计组成框图) (3)2-1停车模块 (3)2-2取车模块 (3)2-3车辆信息浏览模块 (4)2-4程序设计组成框图 (4)(三)详细设计 (4)3-1停车场分析 (4)3-2停车操作 (4)3-3收费管理(取车) (5)3-4车辆信息 (5)3-5退出系统 (5)(四)程序运行结果测试与分析 (5)(五)结论与心得 (7)(六)参考文献 (7)(七)致谢 (8)附录: (8)(一)需求分析1-1停车车辆信息要用文件存储,因而要提供文件的输入输出操作。
1-2取车当车离开时,要删除文件中该车的信息,因而要提供文件的删除操作。
1-3功能的选择提供现实操作和用键盘式菜单实现功能选择。
(二)总体设计(程序设计组成框图)2-1停车模块对车辆信息赋值,分配前检查车位使用情况(按行查找park 数组,元素为0 表示车位为空,则允许分配)。
把新添加的车辆信息以追加的方式写入汽车信息文件,并更改汽车信息文件中其他汽车信息的停车时间(停车时间加5)。
2-2取车模块计算费用(停车费用=停车时间*0.2 元),从文件中删除该车信息。
并将该车位对应的二位数组变量设为0,表示该车位可用。
输出提示信息:是否输出停车费用总计?(Y/N)如果选择Y,则输出停车费用,否则回到上级菜单。
2-3车辆信息浏览模块输出车辆信息文件中的记录。
另外,用户按Esc 键退出系统。
2-4程序设计组成框图(三)详细设计3-1停车场分析有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层。
( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car.dat”中。
( 数组的对应元素也要进行赋值 )3-2停车操作当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号(分配前先查询车位的使用情况, 如果第一层有空则必须停在第一层), 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5。
3-3收费管理(取车)当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元. (停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零). 按用户的选择来判断是否要输出停车收费的总计。
3-4车辆信息输出停车场中全部车辆的信息。
3-5退出系统退出系统。
(四)程序运行结果测试与分析系统初始运行时,会显示如图4-1所示的输入界面,用户可以根据提示,进行相应的选择,来完成系统提供的各种功能。
根据系统提示提示用户选择相应的数字键,按ENTER键后进入相应的功能菜单。
如下图4-2是输入1,显示停车以及所需用户的车牌号输入后按ENTER键进入所要放车的停车位菜单,其中包含了系统分配的层号和一个车位号即图4-3下面即为此程序执行此功能时的截图:图4-1输入界面图4-2输入1和车牌号界面图4-3详细信息界面(五)结论与心得通过这次实习,让我初步有了编写小系统的能力,我对很多的函数有了新的认识,也学会了运用多种函数,也明白了编写软件的基本过程和基本方法。
编写软件的过程中我又学到了曾经自己不知道的函数或是自己不会的函数的用法。
这次课程设计课总的来说让我受益匪浅。
在软件的设计过程中遇到了很多的困难。
在软件一次一次的调试失败下,曾经想过要放弃。
我最后还是坚持了下来,毫不畏惧困难,在一起讨论论证到底是用什么函数,什么样的循环来最简单的实现程序的功能,经过几个日夜的努力我总算是顺利的完成了软件的设计。
在程序的编写过程中我发现有很多的知识漏洞和缺陷,需要进一步努力学习来巩固完善自己的知识面。
在这几天的编写过程中我对c语言有了更进一步的认识和了解。
此次编程过程的经验和知识肯定能促进我以后的学习,更是对我今后参加电子设计类软件编程大赛有较大的帮助(六)参考文献[1]谭浩强,《C程序设计(第四版)》,北京:清华大学出版社,2010.6[2](七)致谢能够完成这次课程设计要感谢c语言课程的老师,感谢老师的悉心教导,帮助改错,还要感谢各位同学的帮助,我会继续努力的。
附录:程序源代码:#include <stdio.h>#include <string.h>#include <stdlib.h>struct Garage{char carnum[8]; /*车牌号*/int lay; //层号int garagenum; /*车位号*/int time; /*停车时间*/int isempty; /*该车位是否为空,1表示空,0表示有车*/};/*打印使用说明*/void Instruction(){ printf(" 停车场管理系统使用说明\n");printf(" 停车请输入 1 取车请输入 2 \n");printf(" 查看全部车辆的信息请输入 3 退出请输入 0 \n");}/*初始化停车场信息,初始状态为第一层已经停有4辆车, * 其车位号依次为1-4 , 停车时间依次为20, 15, 10 , 5 */void Init(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*/void AddTime(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; char num[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; char num[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("没有您输入的车号。