1停车场管理系统需求分析与概要设计说明书实验名称:停车场管理系统2目录一引言1.1、目的1.2、背景1.3、参考资料1.4、数据字典二任务概述2.1、问题描述2.2、目的2.3、系统(或用户)特点2.4、假定和约束2.5、基本要求三需求规定3.1、对功能的规定3.1.1、车辆的驶入过程3.1.2、车辆的驶出过程3.2、对性能的规定3.2.1、精度3.2.2、时间特性要求3.2.3、灵活性3.3、故障处理要求3.4、其他专门要求四需求分析4.1、测试数据4.2、实现提示4.3、需求分析五系统功能模块图和程序流程图六概要设计3一、引言本说明书主要描述如何实现停车场管理系统,以及该系统的实现目的、范围、功能。供概要实际人员和软件开发人员参考。1.1、目的停车场管理系统是为了提高停车场的运行效率、加强安全性以及与智能交通系统的信息互动,把相关科学技术发展领域的最新成果合理有效的应用到停车场管理系统的完善和发展中。1.2、背景我国数字化技术应用现已逐渐应用到社会的各个领域中;为了节约大量的人力、物力、财力。本设计针对目前停车场管理存在的介质落后、集成自动化程度低、安全性差、人性化和运行效率低下的不足,结合目前科学技术领域的最新研究成果,设计了一种技术较先进、性能可靠、自动化程度较高的停车场管理系统。本设计的指导思想立足于提高停车场管理系统的可靠性、安全性和高效性,对目前我国各大中城市所面临的“停车难”问题的解决,具有一定得促进作用。1.3、参考资料(1)李云清,杨庆红.数据结构(C语言版).北京:人民邮电出版社,2004.(2)严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版.1997.(3)严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版.1997.(4)周海英,马巧梅,靳雁霞.数据结构与算法设计.北京:国防工业出版社,2007.(5)张海藩.软件工程导论.北京:清华大学出版社.2003.(6)许志才,方贤文,刘士喜.数据库、数据结构、软件工程课程设计指导及习题解答.北京:安徽大学出版社.20111.4、数据字典表1.1用户名表1.2车位明细表1.3现金明细名字:用户名别名:描述:标识系统的登录人员定义:字符、字母位置:登录管理表名字:车位明细表别名:描述:车位的各明细项目定义:字符定义:{数字}位置:停车系统数据库名字:现金明细表别名:描述:现金的各明细项目定义:字符定义:{数字}位置:现金系统数据库4二、任务概述2.1、问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。2.2、目的具有操作简单、使用方便、功能先进等特点,停车场使用者可以在最短的时间进入或离开停车场,从而提高停车场的管理水平,取得更高的经济效益和良好的社会效益。位于停车通道处等候车位的用户能快速找到车位。用户取车离开时能安全有序的离开。同时辅以智能化设备和完善的管理软件来简化人的劳动,实现停车场车辆进入、场内监控以及计费收费等全过程的完全无人化管理;另一方面通过网络化管理实现能够在一个相对广阔的地域内(例如一个城市)了解多个停车场情况,提前了解停车情况,最终实现“随意”停车。2.3、系统(或用户)特点停车场管理系统利用现代科技技术管理车辆,提高了车辆管理的高效性、实用性、安全性、可靠性和车辆自动化管理的能力。有效的减少了人工的参与,从而最大限度的减少了人员费用以及由人员失误或人员舞弊造成的损失,大大提高整个停车场的经济性、安全性与使用效率。2.4、假定和约束(1)该软件开发运行的最短寿命为5年(2)开发软件投入使用的最长时间是两个礼拜。2.5、基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据列:汽车“到达”或“离去”信息,汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。三、需求规定3.1、对功能的规定《停车场管理系统》的总功能如下:车辆的驶入过程;车辆的驶出过程;3.1.1、车辆的驶入过程根据提示的信息,点击存放车辆界面,输入车辆的信息,输入车辆的户主名和车牌号,界面会显示车辆的基本信息,点击确认,如果停车场停满车辆,则界面会出现信息提示你停车场已满;否则界面信息提示你存车成功。等待下一车辆存放。3.1.2、车辆的驶出过程如果取车,点击取出车辆界面,输入退车的信息,如户主名或车牌号,界面会显示该车辆的基本信息,如车辆停放时间、停放场地、车辆是否需要缴费、需要缴费多少等。5确认退车后,是否需要车辆的移动,退车后剩余车辆车辆如何在停车场停放。3.2、对性能的规定3.2.1、精度1在计费的处理过程中要求保留一位有效数字。2停车取车的过程中所考虑的时间是以“分钟”为时间单位的。3.2.2、时间特性要求1用到的时间中,为了保证时间的可靠、公正,一律采用服务器的时间为标准。2在多用户的操作过程中可能会碰到数据并发的问题。比如在停车前的过程中所查到的那个空位在他所查的时候还没有停车辆。但在查询后的任何时候都有可能停放车辆。可能就在被查之后的那一秒种。所以要确保数据的可靠和实时。3.2.3、灵活性该自动化停车场管理系统基于C语言编写,所以同用适应于其他microsoft公司的windows产品。3.3、故障处理要求鉴于车辆流动涉及的数据对于车主和管理员双方的重要性,数据严格有效的恢复机制;数据必须每天进行一次备份,由于本信息涉及信息量巨大,应以天为周期进增量转储,以月为周期进行海量转储。3.4、其他专门要求(1)所有的查询、记录、修改等操作以按钮的形式给出,且名称一律为取为“查询”、“修改”“删除”等易于理解的形式;(2)根据车辆流动情况统计信息计算,系统在正常情况下应该支持200以上的并行操作能力,高峰期间(例如周末、节假日)客流量高峰期间,应支持300以上并行处理能力;高峰期间服务器端应支持600次以上的信息记录和修改。四、需求分析4.1、测试数据设n=2,输入数据:(‘A’,1,5),(‘A’,2,15),(‘D’,1,5),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出(end)。4.2、实现提示需要别是一个栈,临时停放为给要离去的汽车让路二从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达的时刻有序。栈中每一个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。4.3、需求分析(1)以顺序栈来表示停车场,限定停车场的容量n。已链队列来表示通道。限制以实型变量money来存放停车场费率。(2)按照从终端读入的数据序列进行模拟管理。每辆车需要3个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。车辆牌照为整形数据。进场或离场时间同样为整形数据。(3)对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。(4)该程序可以模拟停车场的管理过程。(5)测试数据:设n=2,输入数据:6(‘A’,1,5),(‘A’,2,15),(‘D’,1,5),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出(end)。五、系统功能模块图和程序流程图图5.1系统功能模块图停车场管理系统停车处理子系统车位综合管理子系统收费系统核对车辆信息查询空闲车位批准车辆进入停车场查询停车信息查询收费记录固定车位收费处理便道车位收费初始化两个栈Stack和Stack2及一个队列Queue开始进入主菜单车到达车离开列表显示退出车场内信息便道信息退出列表显示车场是否为空7图5.2程序流程图六、概要设计(1)设定栈的抽象数据类型定义为:ADTstack{数据对象:D={ai|ai∈charset,i=1,2,…,n,n=0}数据关系:R1={ai-1,ai/ai-1,ai∈D,i=2,…,n}基本操作InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已经存在。操作结果:销毁栈S。ClearStack(&S)初始条件:栈S已经存在。操作结果:将S清空为空栈。StackLength(&S)初始条件:栈S已经存在。操作结果:返回栈S的长度。StackEmpty(&S)初始条件:栈S已经存在。操作结果:若S为空栈,则返回TURE,否则返回FALSE。GetTop(S,&e)8初始条件:栈S已经存在。操作结果:若栈S不空,则以e返回栈顶元素。Push(&S,e)初始条件:栈S已经存在。操作结果:在栈S的栈顶插入新的栈顶元素e。Pop(&S,&e)初始条件:栈S已经存在。操作结果:删除S的栈顶元素,并以e返回其值。StackTraverse(S,visit())初始条件:栈S已经存在。操作结果:从栈底到栈顶一次对S中的每个元素调用函数visit()。}ADTstack(2)设定链式队列的抽象数据类型为:typedefstructQnode{QelemTypedata;StructQnode*next;}Qnode,*QueuePtr;typedefstruct{QueuePtrfront;QueuePtrteat;}ADTQueue{数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n=0}数据关系:R1={ai-1,ai/ai-1,ai∈D,i=2,…,n}约定其中一端为队列头,一端为队列尾。基本操作InitQueue(&Q)操作结果:构造一个空队列Q。DestroyQueue(&Q)初始条件:队列Q已经存在。操作结果:队列Q被销毁,不再存在。ClearQueue(&Q)初始条件:队列Q已经存在。操作结果:将Q清空为空队列。QueueLength(Q)初始条件:队列Q已经存在。操作结果:返回Q的元素个数,即队列的长度。9QueueEmpty(Q)初始条件:队列Q已经存在。操作结果:若Q为空队列,则返回TURE,否则返回FALSE。GetHead(Q,&e)初始条件:Q为非空队列。操作结果:用e返回Q队列头元素。EnQueue(&Q,e)初始条件:队列Q已经存在。操作结果:插入元素e为Q的新队尾元素。DeQueue(&Q,&e)初始条件:Q为非空队列。操作结果:删除Q的队头元素,并以e返回其值。QueueTraverse(Q,visit())初始条件:队列Q已经存在。操作结果:从队头到队尾,依次对Q的每一个数据元素调用函数visit()。一旦visit()失败,则操作失败。}ADTQueue(3)本程序有4个模块①主程序模块main(){初始化while(命令==“1”)接受命令;/*绘表*/do{命令;}while(重复条件)if(条件){If(条件)接受命令;处理命令;for(初始值;循环条件;自加运算){}for(初始值;循环条件;自加运算){}elseif{接