当前位置:文档之家› C语言智能停车场系统

C语言智能停车场系统

智能停车场管理系统一、摘要停车场作为交通设施的组成部分,随着交通运输的繁忙和不断发展,人们对其管理的要求也不断提高,都希望管理能够达到方便、快捷以及安全的效果。

本次方向设计主要是利用C语言平台下的VC++6.0编译器,设计一个方便且效率的智能停车场管理系统。

利用模块化程序设计编写各个功能子函数,方便调用和系统维护;利用堆栈的方法实现停车场的车辆驶入和离开。

该系统能自动录入停放车辆的各种信息(车牌,时间等)并自动分配车位以及智能计算费用,同时也能查询停车场内任意车辆的录入信息,省事,方便。

测试表明该智能停车场系统运行良好,能投入实际使用。

二、设计目的和意义本次设计的目的是设计一个智能的停车场管理系统,用户可以在客户端上自主的申请预约车位和撤销申请;同时,停车场自带自动停放和出站,自动计算停车费用;用户也可以通过系统查询特定车辆的停放信息。

智能停车场的意义在于:随着社会的进步和发展,车辆也在迅速增加,城市交通的瓶颈不仅体现在道路交通的拥挤上,也体现在传统停车场管理效率和安全性大大滞后于社会发展需要,给人们的生活带来了极大的不便。

随着智能大厦和智能小区等智能建筑的不断发展,与之配套的停车场管理系统应运而生。

智能停车场的产生不但规范了城市交通管理和车辆管理水平,还扩大了城市的容量,在安全防范方面也有了巨大的保障,同时还能方便的和其他智能系统接口,组成更完善的物流及设备管理系统。

三、设计原理1、模块化系统设计(1)模块化设计的概念模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。

逐步求精的结果是得到一系列以功能块为单位的算法描述。

以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。

模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。

(2)本次设计的功能模块建立车辆进入函数:记录驶入车辆的车牌号及驶入时间。

车辆离开函数:计算车辆停车费用并删除数据。

车费计算函数:划定停车场的收费制度。

车辆查询函数:查询指定的车辆入场记录。

车辆显示函数:显示所有停放车辆。

(3)系统框图图1.0 智能停车场系统框图2、堆栈的原理(1)栈(Stack)的概念:是限制在表的一端进行插入和删除运算的线性表。

(2)栈顶(top)和栈底(bottom) :允许插入、删除的这一端称为栈顶,另一端称为栈底。

图1.1 栈的示意图(3)栈的插入和删除遵循后入先出,栈成为后进先出表。

(4)栈的基本运算:①栈初始化:Init_Stack(&S)操作结果:构造一个空栈S。

判栈空:StackEmpty (S)初始条件:栈S已存在。

操作结果:若栈S为空栈,则返回1,否则返回0。

②入栈: Push(&S,e)初始条件:栈S已存在。

操作结果:插入元素e为新的栈顶元素,栈发生变化。

③出栈:Pop(&S,&e)初始条件:栈S已存在且非空。

操作结果:删除S的栈顶元素并用e返回其值,栈发生变化。

④读取栈顶元素: GetTop(S , &e)初始条件:栈S已存在且非空。

操作结果:用e返回栈顶元素,栈不变化。

(5)顺序栈的类型定义如下:const STACK_INIT_SIZE=100; //顺序栈的最大空间typedef char SElemtype;typedef struct{SElemtype * elem;int top;int stacksize;} SqStack;(6)顺序栈的操作方式设有定义:SqStack S ;栈顶、栈底的位置:设栈底位置在数组的0端,则入栈时s.top加1,出栈时s.top 减 1。

栈空和栈满的状态:空栈用栈顶指针top为-1表示,即s.top==-1;栈满用s.top==stacksize-1表示。

(7)置空栈void InitStack_Sq(SqStack &S, int maxsize=STACK_INIT_SIZE){ //构造一个空栈S,初始分配的最大空间为maxsizeS.elem=new SElemType[maxsize];S.top=-1; //栈中当前元素个数为0,即空栈S.stacksize=maxsize; //栈最多可以容纳maxsize个元素}(8)入栈void Push_Sq(SqStack &S,SElemType e){ if (S.top==S.stacksize-1)error(“栈满”);else{ S.top++; /*栈顶上移*/S.elem[S.top]=e; /*元素入栈*/}}(9)出栈int Pop_Sq(SqStack &s, SElemType &e){if (s.top==-1){ printf(“stack underflow”);return 0;}else { e=s.elem[s.top]; /*获得栈顶元素的值*/s.top--; /*栈顶下移*/return 1;}}四、详细设计步骤(1)车辆驶入函数:图1.2 停车函数流程图主要程序代码:stacknode *into(stacknode *top1,LQueue *Q){stacknode *p,*q;time_t rawtime; //调用系统时间函数struct tm *timeinfo; //时间结点time(&rawtime);timeinfo=localtime(&rawtime);p=(stacknode *)malloc(sizeof(stacknode));printf("请输入进入停车场车辆的车牌号:");scanf("%s",p->data.num);q=top1;p->data.time.day=timeinfo->tm_mday;p->data.time.hour=timeinfo->tm_hour;p->data.time.min=timeinfo->tm_min;p->data.n=b;}(2)车辆离开函数:图1.3 车辆离开函数流程stacknode *leave(stacknode *top1,char str[],LQueue *Q){int i,day,hour,min;time_t rawtime;struct tm *timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);day=timeinfo->tm_mday;hour=timeinfo->tm_hour;min=timeinfo->tm_min;}(3)车辆显示函数:主要程序代码:while(top1!=NULL){printf("%s%号%d点%d分第%d位\n",top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.tim e.min,top1->data.n);top1=top1->next;}(4)车辆查询函数图1.4 车辆查询函数流程图void seq_search(stacknode *top1,char str[]){int i=0;int flag=max;stacknode *p;p=top1;while(flag--){if(strcmp(p->data.num,str)!=0){i++;p=p->next;}else break;}if(i<max){printf("车牌号进入时间位置\n");printf(" %s %d号%d点%d分第%d位\n",p->data.num,p->data.time.day,p->data.time.hour,p->data.time.min,p- >dat a.n);}else{printf("该车辆未在停车场中");}}(5)调用机器时间函数:需先声明#include<time.h>主要程序代码:int timef(){int x,y;time_t rawtime;struct tm *timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);x=timeinfo->tm_mday,y=timeinfo->tm_hour;}把timeinfo指向的tm结构体中储存的时间转换为字符串字符串格式返回,格式为:Www Mmm dd hh:mm:ss yyyy。

其中Www为星期;Mmm为月份;dd为日;hh为时;mm为分;ss为秒;yyyy为年份五、设计结果及分析1.车辆驶入功能:输入车牌号之后,系统先判断停车场是否有空余车位,如果没有,发出提示“停车场已满,请在外等候”;如果有,系统再判断该车是否已经进入停车场,并给出相应的提示,同时调用机器时间作为车辆停入时间,并且为车辆分配内存作为存放时间和停车位置的空间。

图1.5 停车功能截图2.车辆离开功能:用户输入车牌号,之后,系统先判断停车场内是否有该车辆,如果没有,给出相应提示;有的话,系统调用当前机器时间,并且和该车存放的过去的机器时间做减法运算,四舍五入,然后乘上相应单价,最后打印输出用户的离开时间和所需要支付的停车费用。

图1.6 车辆离开截图3.显示功能:系统采用遍历的算法,将栈里面的所有元素按照“车牌号”“进入时间”“位置”的方式,依次打印显示出来;如果没有数据则显示“停车场内无车”。

图1.7 车辆显示截图4.查询功能:用户输入车牌号之后,系统采用遍历的方式,将该车牌号和栈内的所有车牌号一一比较,如果查询失败,显示“无此车辆”;若查询成功,则打印输出该车牌号车辆的进入时间和停靠位置。

图1.8 查询功能截图六、总结设计过程中,由于自己的只是水平有限要实现某些功能,还需借助强大的互联网。

在完成本设计的过程中,我既感受到了面对自己无法解决的问题时的苦恼,也体会到问题最终得以解决时的快乐。

同时,我深刻体会到要做好一件事情,需要有系统的思维方式和方法,对待一个新的问题,要耐心、要善于运用已有的资源来充实自己。

在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样对于系统而言才能更加有效。

通过此次毕业设计,我不但对Eclipse和数据库有了更深刻的认识,积累了使用软件工程的思想来开发软件的经验,同时最重要的是摸索出了一套分析问题和解决问题的方法,这对于我将来走上工作岗位受益匪浅七、体会通过这次课程设计,让我对程序设计过程有了更加深入的理解,程序设计就有如解决一实际问题,从解决实际问题的角度,我们要明白我们想要程序做什么,怎么做,需要什么,完成什么效果,最低要求,最高要求,然后再一一实现他的目标。

相关主题