c语言程序停车场管理系统课程设计报告-基于huffman算法的编码与译码技术的探究大学论文.doc
重庆科技学院C语言课程设计报告停车场系统1 课 程 设 计题 目 基于Huffman算法的编码与译码技术的探究系 (部) 电子与信息工程系 班 级 15级电子与信息工程专业一班 姓 名 郭 威 学 号 2015021029 指导教师 王 静 2010年01月07日重庆科技学院C语言课程设计报告课程设计任务书设计题目:停车场管理系统设计学生姓名郭威课程名称C语言程序设计课程设计专业班级2015级电本一班地 点B302起止时间2016年6月20日6月24日设计要求设计内容1有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层. ( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 每辆车的信息包括车牌号, 层号, 车位号, 停车时间共4项. 其中停车时间按分钟计算2. 假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为14 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car.dat”中( 数组的对应元素也要进行赋值 )3. 停车操作: 当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号(分配前先查询车位的使用情况, 如果第一层有空则必须停在第一层), 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5.4. 收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元. (停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零). 按用户的选择来判断是否要输出停车收费的总计.5. 输出停车场中全部车辆的信息.6. 退出系统.(1)系统分析、设计正确。(2)结果以图表方式显示。(3)界面简洁、美观。(4)报告格式规范。工作进度与计划安排1月6日第一大节、第二大节 讲解课程设计任务1月6日第三大节、第四大节 阅读课程设计指导书,选择课题1月7日第一大节、第二大节 讲解结构体相关知识1月7日第三大节、第四大节 学生练习结构体的使用1月8日第一大节、第二大节 程序编码1月8日第三大节、第四大节 程序编码1月9日第一大节、第二大节 程序编码1月9日第三大节、第四大节 编写课程设计报告1月10日第一大节、第二大节 课程设计答辩1月10日第三大节、第四大节 课程设计答辩参考资料1何钦铭 颜晖.语言程序设计.高等教育出版社.2008年2谭浩强 张基温.语言程序设计教程.高等教育出版社.2006年其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任: 指导教师:伍建全/王双明/王成敏/张亚军/彭军 2013年12月29日摘要停车场管理系统先利用了结构对停车场中车牌号,车位号,层数等看成了一个逻辑整体对停车产进行描述,在使用停车功能,取车功能时都需要使用文本读写对信息的保存和删减等,使用自定义函数分别对停车,读写,取车进行描述,使程序更加清晰,也运用了if对一些语句进行判断。for则是循环或的多组数据,switch对功能进行选择。关键词:数组 结构 文本读写 停车场管理系统目录摘要11软件需求分析说明.52系统分析与设计62.1 软件界面设计62.2 软件的数据(结构)设计62.3 软件的算法设计73.软件的实现84软件测试165软件使用说明书17参考文献20致谢21 1软件需求分析说明书 这是停车管理系统当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号(分配前先查询车位的使用情况, 如果第一层有空则必须停在第一层), 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5,当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元. (停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零). 按用户的选择来判断是否要输出停车收费的总计.本程序包含了四大核心功能为:1.1停车:从文本“car.dat”读出停车场当前车牌号,车位号,状态,并在屏幕中显现出来,在分配车位停车。同时将增加量改存入“car.dat”.1.2信息查询:从文本“car.dat”读出停车场当前车牌号,车位号,状态,并在屏幕中显现出来.1.3取车:从文本“car.dat”读出停车场当前车牌号,车位号,状态,输入你所想取走的车然后将该车信息归零即删除。1.4退出程序2系统分析与设计2.1 软件界面设计进入根据屏幕显示从键盘上进行操作 欢迎来到肥肥停车管理系统1. 停车2. 取车3. 信息查询4. 退出系统1.输入1停车请输入车牌号:输入3信息查询输入2取车输入4退出系统主动分配车位号,停车成功显示信息查询结果是否存在车位是否输出信息是,输出费用否退出系统否,请到别处停车 2.2 软件的数据(结构)设计对整个软件使用的文件功能、文件内部的数据格式进行说明本程序是要将文本文件里面停车场车辆信息的内容读入程序内,并对信息进行保存和修改。文件的功能便是一个停车场信息存放库,便于我们对停车信息的利用。2.3 软件的算法设计进入停车场管理系统 开始 查询信息退出系统取车停车停车系统停车成功停车,请输入车牌号:for( i=0;i<12;i+)利用循环查找车位并停车if(cari.state=0)flag=1;break;if(flag=0)printf("无车位n");elsefor(j=0;j<12;j+)if(carj.state=1) carj.time+=5;cari=tempcar;无法停车否该车是否存在取车系统取车,输入车牌号输出费用退出是否输出费用否是是 for(k=0;k<12;k+)if(bring.num = cark.num ) printf("是否输出停车费用(Y/N)?");scanf("%c",&b); if(b='Y') fee=cark.time/5.0*0.2; printf("车牌号:%dnn",bring.num ); printf("停车费:%f元n",fee); printf(".欢迎下次光临.nn"); else if(b='N') printf("n欢迎下次光临!n"); else printf("输入错误!nn"); printf("n"); cari=bring; else printf("不能取车"); 3 软件的实现3.1定义了一个结构体数组:struct _carint num; /车牌号int time; /时间 int state; /状态car12;/car结构体的名字,定义一个一维数组,car0为一层一车位3.2自定义函数: 3.2.1.void load()/文件读写函数FILE *fp;int i=0;fp=fopen("car.dat","r");while(!feof(fp)fscanf(fp,"%d%d%d",&cari.num,&cari.time,&cari.state );i+;fclose(fp);3.2.2void park(); 停车函数struct _car tempcar;int i=0;FILE *fp;int flag=0,j=0;tempcar.time=5;tempcar.state=1;printf("请输入车牌号:");scanf("%d",&tempcar.num);for( i=0;i<12;i+)if(cari.state=0)flag=1;break;if(flag=0)printf("无车位n");elsefor(j=0;j<12;j+)if(carj.state=1) carj.time+=5;cari=tempcar; fp=fopen("D:car.txt","w"); i=0;fprintf(fp,"%d %d %dn",cari.num,cari.state,cari.time);fclose(fp);fp=fopen("car.txt","a");for(i=1;i<12;i+)fprintf(fp,"%d%d%d",cari.num,cari.time,cari.state);fclose(fp);3.2.3.void cha(); 查询函数int j=0;for(j=0;j<12;j+) printf("%dt%dt%dn",carj.num,carj.time,carj.state)3.2.3.void qu();取车函数 struct _car bring;int k=0,i;char b;double fee;FILE *fp; fp=fopen("d:car.txt","w");i=0;fprintf(fp,"%d%d%d",cari.num,cari.time,cari.state);fclose(fp);fp=fopen("car.txt","a"); bring.num =0;bring.state =0;bring.time =0; for(i=1;i<12;i+)fprintf(fp,"%d%d%d",cari.num,cari.time,cari.state);fclose(fp);printf("请输入车牌号:");scanf("%d",&bring.num);for(k=0;k<12;k+)if(bring.num = cark.num ) printf("是否输出停车费用(Y/N)?");scanf("%s",&b); if(b='Y') fee=cark.time/5.0*0.2; printf("车牌号:%dnn",bring.num ); printf("停车费:%f元n",fee); printf(".欢迎下次光临.nn"); else if(b='N') printf("n欢迎下次光临!n"); else printf("输入错误!nn"); printf("n"); cari=bring;else printf("不能取车"); 文件读写:fp=fopen("car.txt","r");/*以读方式的方式打开文件a*/fp=fopen("car.txt","w");/*以写的方式打开文件a*/fp=fopen("car.txt","a");/*以追加写的方式打开文件a*/ fscanf(fp,"%d%d%d",&cari.num,&cari.time,&cari.state );/*将内存中的数据写入fp指向的文件*/4软件测试1、 void load(); /*读入文本*/fscanf(fp,"%d%d%d",&cari.num,&cari.time,&cari.state )2、 void park();/* 停车*/用例1:printf("请输入车牌号:");cari.state=0 flag=1停车成功用例2:flag=0 printf("无车位n"); 3、void qu();取车用例1: printf("是否输出停车费用(Y/N)?")Y printf("停车费:%f元n",fee);用例2: printf("是否输出停车费用(Y/N)?")N printf("n欢迎下次光临!n"); 4、void cha(); 查询用例1:for(j=0;j<12;j+) printf("%dt%dt%dn",carj.num,carj.time,carj.state);5软件使用说明书 结合软件的使用界面,详细介绍整个软件功能。该系统为停车场管理系统,可以进行停车功能,取车功能以及查询功能,以下为操作该系统的详细步骤:运行程序时,首先出现:这是你可以任意输入1,2,3,4四个数;如果你输入1时:任意输入一个车牌号123:如果你输入了3,系统可以为你查询刚才的车是否停好:有刚刚输入的车牌号说明已经停好。如果你输入2:如果输入以有记录的车牌号123:如果输入Y:如果输入N参考文献【1】 裘宗燕 从问题到程序 北京:机械工业出版社,2011.5【2】 谭浩强 C程序设计 北京:清华大学出版社,2010.7 【3】 左飞、李召恒轻松学通C语言 北京:中国铁道出版社,2013.9致谢在这次设计中感谢老师们对我的指导和同学们的帮助。 签名:文莉 日期:2014年1月10日星期五#include<stdio.h>#include<string.h>#define N 3 /*停车场大小*/#define MAX 50 /*过道大小*/#define sign 10/*车牌大小*/#define price 10/*每分钟的价钱*/char partNsign;char RpartMAXsign;char timeN20;int P,R;partadd(char *t)strcpy(&partP0,t);printf("请输入时间:n");scanf("%s",&timeP0);getchar();P+;Rpartadd(char *t)if(R<MAX)strcpy(&RpartR0,t);R+;elseprintf("过道己满。无法停车。n");newcar()char tempsign;printf("请输入车牌号:");scanf("%s",temp);getchar();if(P<N)partadd(temp);else if(R<MAX)Rpartadd(temp);int timed(char *t1,char *t2)int i=0,y=0,x=0,j,n=1;while(1)if(t1i='.')for(j=i-1;j>=0;j-)y=y+(t1j-'0')*(60*n);n=n*10;while(1)if(t1j=NULL)for(n=1;j>i;j-)y=y+(t1j-'0')*n;n=n*10;break;j+;i=0;while(1)if(t2i='.')for(j=i-1;j>=0;j-)x=x+(t2j-'0')*(60*n);n=n*10;while(1)if(t2j=NULL)for(n=1;j>i;j-)x=x+(t2j-'0')*n;n=n*10;break;j+;y=(x-y)*price;return y;i+;i+;partcarout(int i)int j,money;char t20;printf("请输入现在的时间:n");scanf("%s",t);getchar();money=timed(t,&timei0);printf("收费%dn",money);for(j=i;j<P;j+)strcpy(&partj0,&partj+10);P-;if(R!=0)strcpy(&partN-10,&Rpart00);P+;strcpy(&timeP0,t);Rpartcarout(0);Rpartcarout(int i)int j;for(j=i;j<R;j+)strcpy(&Rpartj0,&Rpartj+10);R-;carout()char tsign;int i,get=0;printf("请入要离开的车牌号:");scanf("%s",t);getchar();for(i=0;i<P;i+)if(strcmp(t,&parti0)=0)get=1;partcarout(i);break;for(i=0;i<R&&get=0;i+)if(strcmp(t,&Rparti0)=0)get=1;Rpartcarout(i);break;if(get=0)printf("查无此车。n");jopart()int i;for(i=0;i<P;i+)printf("%d.%sn",i,&parti0);joRpart()int i;for(i=0;i<R;i+)printf("%d.%sn",i,&Rparti0);main()int c;while(1)printf("请选择要做的事:n");printf("1.加入新车。n");printf("2.有车离开。n");printf("3.显示在停车场内的车。n");printf("4.显示在过道上的车。n");printf("5.退出。n");c=getchar();getchar();switch (c)case '1':newcar();break;case '2':carout();break;case '3':jopart();break;case '4':joRpart();break;case '5':exit(1);break;#include <stdio.h>#include <stdlib.h>typedef struct LNode int data; LNode *next;LNode, *LinkList;typedef struct int *Num; int top; int stackment; / 停车场最大的停车辆SqStack;typedef LinkList QueuePtr;typedef struct QueuePtr front; QueuePtr rear;LinkQueue;void InitStack(SqStack &S);void InitQueue(LinkQueue &Q);void PutIn(SqStack &S, LinkQueue &Q);void GetOut(SqStack &S, LinkQueue &Q);void StackTraverse(SqStack S);void QueueTraverse(LinkQueue Q);int main() char ch, c; SqStack S; LinkQueue Q; InitStack(S); InitQueue(Q); while(1) fflush(stdin); printf("* 进入停车场: 'A' *n"); printf("* 退出停车场: 'D' *n"); printf("* 退出操作: '0' *n"); printf("n请输入命令: "); ch = getchar(); c = getchar(); switch(ch) case 'A': PutIn(S, Q); break; case 'D': GetOut(S, Q); break; case '0': exit(-1); default: printf("输入有误!b"); exit(-1); StackTraverse(S); QueueTraverse(Q); return 0;void PutIn(SqStack &S, LinkQueue &Q) int i, n, tag = 0; LNode *p, *q; q = (LNode *)malloc(sizeof(LNode); if(q = NULL) printf("内存分配失败!n"); exit(-1); while(!tag) printf("请输入车号: "); scanf("%d", &n); for(i = 0; i <= S.top; i+) / 若车号在堆栈已存在 if(n = S.Numi) printf("车号已存在! 请重新输入!n"); break; if(i > S.top) tag = 1; q = Q.front->next; / 若车号在队列中存在 while(q != NULL && Q.front != Q.rear) if(q->data = n) printf("车号已存在! 请重新输入!n"); tag = 0; break; else q = q->next; if(S.top != 4) / 若栈不满 S.Num+S.top = n; else / 若栈满,则进入队列 p = (LNode *)malloc(sizeof(LNode); if(p = NULL) printf("内存分配失败!n"); exit(-1); p->data = n; p->next = NULL; Q.rear->next = p; Q.rear = p; void GetOut(SqStack &S, LinkQueue &Q) int i, n, tag = 0; LNode *p; SqStack S1; InitStack(S1); if(S.top < 0) / 停车场空 printf("停车场已空!情况如下!nn"); return; while(!tag) printf("请输入车号: "); scanf("%d", &n); for(i = 0; i <= S.top; i+) if(n = S.Numi) / 若车号存在 tag = 1; if(tag = 0) / 若车号不存在 printf("车号不存在! 请重新输入!n"); for(i = S.top; S.Numi != n; i-) / 挡路的车进临时栈 S1.Num+S1.top = S.NumS.top-; S.top-; for(i = S1.top; i >= 0; i-) / 临时栈的车重新入栈 S.Num+S.top = S1.NumS1.top-; if(Q.front != Q.rear) / 若便道有待进栈的车 p = (LNode *)malloc(sizeof(LNode); if(p = NULL) printf("内存分配失败!n"); exit(-1); p = Q.front->next; S.Num+S.top = p->data; Q.front ->next = p->next ; free(p); void InitStack(SqStack &S) S.stackment = 5; S.Num = (int *)malloc(S.stackment-1) * sizeof(int); if(S.Num = NULL) printf("内存分配失败!n"); exit(-1); S.top = -1;void InitQueue(LinkQueue &Q) LNode *head; head = (LNode *)malloc(sizeof(LNode); if(head = NULL) printf("内存分配失败!n"); exit(-1); Q.front = head; Q.rear = head; Q.front->next = NULL;void StackTraverse(SqStack S) int i; printf("停车场的情况:n"); printf("n"); printf(""); for(i = 0; i <= S.top; i+) printf(" %d", S.Numi); printf("nn");void QueueTraverse(LinkQueue Q) LNode *p; p = (LNode *)malloc(sizeof(LNode); if(p = NULL) printf("内存分配失败!n"); exit(-1); printf("便道的情况:n"); printf(" n"); p = Q.front->next; while(p != NULL && Q.front != Q.rear) printf(" %d", p->data); p = p->next; printf("n n");29