ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:78.79KB ,
资源ID:15579857      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15579857.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(软件工程课程设计停车场收费管理系统.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

软件工程课程设计停车场收费管理系统.docx

1、软件工程课程设计停车场收费管理系统学 年 设 计课程名称:软件工程学年设计实验项目:停车场收费管理系统姓 名:XXX专 业:计算机科学与技术班 级:XXX学 号:XXXX指导教师XXX计算机科学与技术学院实验教学中心XXXX年XX月XX日摘要 目前,我国经济逐渐发达,自行车王国逐步向汽车进军。因此,大量的停车场也随之而至。虽然某些大型停车场在工作中已经开始向计算机化靠拢,但仍不够完善。而中小型停车场更为稀少,陈旧的管理手段给顾客带来极大的不便,同时为了提高工作效率及服务质量,一套完整的停车厂管理系统的出现就十分必要了。本次设计,仅为一个简单的小型停车场管理系统。采用C语言编写,为dos界面。主

2、要强调车辆的进站和出站操作,以及车场和通道之间的相互关系。根据车场内车道狭长且为一边开口的特点,将车道用先进后出的栈结构来描述。外面狭长的通道,为先进先出,可采用队列结构,为方便起见,采用链式队列结构来描述。本程序中的数据对象是汽车,为使操作更方便,将给每辆进车道的汽车编号,根据编号出场。其中,还包括入场时间、出厂时间、收取费用等项。关键字:停车场管理系统 栈结构 队列结构 软件工程 目录1需求分析 11.1 引言 11.1.1 设计目的 11.1.2 任务概述 11.2 基本要求 11.3 系统用户分析 21.4 用数据流程图描述 22概要设计 42.1 设计思想 42.2 实现方法 42.

3、3 主要模块 42.4 各模块的主要功能及实现 52.2.1 车辆到达模块 52.2.2 车辆离开模块 52.2.3 停车场内与通道停放车辆的信息模块 52.2.4 获取时间 62.5 函数间调用关系 63详细设计 83.1 界面及各模块详细设计 84系统测试 104.1 功能测试 104.1.1 车进站时车牌号的测试 105总结 125.1 用户手册 125.2 设计体会 12参考文献 13附 141需求分析1.1 引言1.1.1 设计目的a.通过课程设计,加深对软件工程思想的理解,能对系统功能进行分析,并设计合理的模块化结构。b. 通过课程设计,提高程序开发功能,能运用合理的控制流程编写清

4、晰高效的程序。通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。c. 通过课程设计,开发一个中小型系统,掌握运用软件工程思想研来发系统全过程。d. 通话课程设计,培养分析问题、解决实际问题的能力。1.1.2 任务概述设有一个可以停放20辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满20辆车,则后来的车辆只能在停车场大门外的通道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场

5、为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在通道上等待的车辆的次序。编制一程序模拟该停车场的管理 。要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。1.2 基本要求要求程序输出每辆车到达后的停车位置(停车场),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。1.3 系统用户分析“停车场管理系统”主要是针对车辆存取工作而开发的应用软件。通常有系统管理员、停车场车辆管理员和顾客三种用

6、户,他们的使用权限如下:系统管理员:计算机人员,对系统进行维护。图书管理员:对停车信息进行数据操作。顾客:仅限于查阅。1.4 用数据流程图描述图1-1是根据操作流程建立的流程图。表1-1是车能否进停车场的判定表。 图1 -1 停车场流程图车场内车数202020车牌号位数52且552且5进站进通道表1-1 进站停车判定表2概要设计2.1 设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,

7、另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。2.2 实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或

8、者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。2.3 主要模块此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先打印出此停车场管理系统选择页面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内与通道停放车辆的信息以及获取时间这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车

9、场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调用的这四个函数中回到主函数结束整个程序的运行。2.4 各模块的主要功能及实现2.2.1 车辆到达模块此模块主要实现车辆进入停车场功能,通过判断合法性决定车辆能否进入停车场。实现伪码:If 车场内车数2 and 5 and 无重复车牌 then车牌号码合法End if2.2.2 车辆离开模块此模块主要实现车辆离开停车场功能,并能打印出车辆停留时间及费用。实现伪码:If 车场不为空 and 序号存在 then车辆出停车场并打印出进出时间及费用End if2.2.3 停车场内与通道停放车辆

10、的信息模块 此模块主要实现车场车辆的停放及通道的利用,是本设计的核心。就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点。模块中出现的函数:void init (SeqStack *s);int isemptystack (SeqStack *s);int isfullstack (SeqStack *s);int isfullstack (SeqStack *s);void push (SeqStack *s);struct car pop (SeqSta

11、ck *s,struct car x);car gettop (SeqStack *s);void initq(linkq*q);void addq(linkq*q,struct car x);struct car delq(linkq *q);int isemptyq(linkq *q);void printout(struct car *x);void printq(linkq *q);void review(SeqStack*s,linkq*q);2.2.4 获取时间该模块主要获取车辆时间信息,用以计算车辆停车费用。2.5 函数间调用关系如下图2-1所示图2-1 函数调用关系图图中函数解

12、释:review 查看车站内及通道内停车情况函数。incar 车进站函数。outcar 车出站函数。clear 定义数组函数。printstack 车进站时输入信息显示,及提示站内情况函数。printq 进过道信息函数。gettime 获取时间函数。printout 出站时的信息函数。3详细设计3.1 界面及各模块详细设计进入界面后如下图所示。图3- 1 首界面测试要点:各选项与相应的功能能否成功连接。1.车进站(1).功能:添加车牌号排序后进站。(2).输入项:车牌号。(3).输出项:车在车站内的“位置”“车牌”“进站时间”“站内状况”。(4).测试要点:注意不合法的车牌号能否在系统通过。2

13、.车出站(1).功能:实现收费后出车站。(2).输入项:车序号。(3).输出项:车的“车牌”“进站时间”“进/出站”状态“出站时间”“原来位置”“停留时间”“费用”。(4).测试要点:要出站的车序号是否存在。3.查看车站及过道中的情况(1).功能:查看车站及过道中车辆情况。(2).输入项:查看提示。(3).输出项:车场内状态即停车数量,以及通道内停车数量。(4).测试要点:能否正确显示车的数量。4.获取帮助(1).功能:放回到开始界面。(2).测试要点:能否正确返回。5.结束(1).功能:结束程序。4系统测试4.1 功能测试4.1.1 车进站时车牌号的测试1.划分等价类及测试用例如下表所示。假

14、设此时站内有一辆编号为ABC的车。表4-1 车牌号等价类划分表输入条件合理等价类不合理等价类长度(1)小于5个字符,大于2个字符(3)小于2个字符(4)大于5个字符字符(2)与站内车牌不重复(5)与站内车牌相同表4-2 车牌号测试用例测试结果期望结果覆盖范围ddd有效(1)(2)A无效(3)123456无效(4)ABC无效(5)2.车出站时的序号测试1.划分等价类及测试用例如下表所示。假设此时站内有一辆编号为ABC的车,车的序号为1。表4-3 车序号的合理等价类输入条件合理等价类不合理等价类存在性(1)存在(2)不存在表4-4 车序号的测试用例测试结果期望结果覆盖范围1有效(1)3无效(2)5

15、总结5.1 用户手册这个程序用来实现对停车场内车辆的管理,整个操作界面为中英文结合,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作。这个程序操作简单,对于进出停车场的时间,也简化了操作,系统会自动获取提交时的时间,即进站和出站的时间。而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入END退出该运行程序。至于使用过程中的更具体的问题,可以参照该报告书中详细设计,整个程序的运行界面大致就如详细设计中屏幕截图的内容。5.2 设计体会通过这一周的课程设计,加深了我对数据结构这门课程所学内容的进一步的理解与掌

16、握;同时,通过对停车场管理系统的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起。在这次课程设计中,不仅培养了我开发一个中小型程序的能力,而且也培养了我的团队合作能力。在这次对停车场管理系统的开发过程中,我们小组成员互相合作,互相帮助,其中有程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以及迷茫。在这次课程设计中,使得我很好地了解了在开发程序过程中合作的重要性。在这周课程设计中,我们小组所开发的停车场管理系统,基本上可以完成每一项功能。汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。但是,该程序也有不足的地方。主要表现在车辆的车牌号上,现实

17、中的车牌号是一串字符,可是,在这个程序中并无限制,任何字符均可,这个与现实是有些不符的。在改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天。还有一个很重要的问题,对于停车场外的通道在现实中是不可能无限长的,而我们的设计中为了便于考虑就忽略了这一点。总之,在这周的课程设计中,我以及我们这组的收获还是挺大的,不仅对于专业课有了更好的认识,而且在合作的过程中更加了解了团队精神的重要性。参考文献1秦峰.数据结构(C语言版)M.合肥:中国科学技术大学出版社,20082R.C.T.Lee S.S.Tseng R.C.Chang.王卫东译.算法设计与分析导论M.北京:机械工业

18、出版社,20083Ira Pohl.陈朔鹰 马瑞 薛静锋 吕坤译.C+教程M.北京:人民邮电出版社,2007附源代码:#includestdio.h#includestring.h#includestdlib.h#includetime.h#define null 0#define Maxsize 20/定义最大停车辆数FILE * fp;void clear(char a) int i,counta; counta=strlen(a); for(i=0;itop=-1; int isemptystack(SeqStack *s)/判断栈是否为空 if(s-top=-1) return 1;

19、else return 0; int isfullstack(SeqStack *s)/判断栈是否为满 if(s-top=Maxsize-1) return 1; else return 0; void push(SeqStack *s,struct car x)/进栈 if(!isfullstack(s) s-top+; s-ds-top=x; struct car pop(SeqStack *s)/取栈顶元素,出栈 car x; if(s-top!=-1) x=s-ds-top; s-top-; return x; car gettop(SeqStack*s)/取栈顶元素 car x; i

20、f(s-top!=-1) x=s-ds-top; return x; typedef struct slnode/定义链队列的结点性质 struct car data; struct slnode *next; slnodetype; typedef struct /定义链的性质 slnodetype *head; slnodetype *rear; linkq; void initq(linkq*q)/初始化链队列 q-head=(slnodetype*)malloc(sizeof(slnodetype); q-rear=q-head; q-head-next=null; q-rear-ne

21、xt=null; void addq(linkq*q,struct car x)/进队列 slnodetype *p; p=(slnodetype*)malloc(sizeof(slnodetype); p-data=x; p-next=null; q-rear-next=p; q-rear=p; struct car delq(linkq *q)/出链队列 slnodetype *p; struct car x; if(q-head!=q-rear) p=q-head-next; if(p-next=null) x=p-data; q-rear=q-head; free(p); else q

22、-head-next=p-next; x=p-data; free(p); return x; int isemptyq(linkq *q)/判断链队列是否为空 if(q-rear=q-head) return 1; else return 0; void printstack(SeqStack *s)/车进站时输入信息显示,及提示站内情况 int i; if(isemptystack(s) printf(车站内没有车。); else printf(tt车站内n位置t车牌t进站时间t 站内状况n); for(i=0;itop;i+) printf(n); printf(%dt,s-di.pos

23、ition); printf(%st,s-di.num); printf(%st,s-di.intime); printf(共%d辆,s-top+1); if(s-top=Maxsize-1) printf(已满)n); else printf(还能放%d辆)n,Maxsize-1-s-top); printf(n); void printout(struct car *x)/出站时的信息 printf(车牌 进站时间 进/出站 出站时间 原来位置 停留时间(秒) 费用(角)n); printf(%s ,x-num); printf(%s ,x-intime); printf(出 ); pri

24、ntf(%st,x-outtime); printf(%dt,x-position); printf(%dt,x-delay); printf(t%dn,x-expense); void printq(linkq *q) /进过道信息 if(!isemptyq(q) slnodetype*p; p=q-head-next; printf(t过道:n车牌:t进道时间:n); printf(%st%sn,p-data.num,p-data.intime); while(p-next!=null) p=p-next; printf(%st%sn,p-data.num,p-data.intime);

25、else printf(n过道上有没有车在等待n); void review(SeqStack*s,linkq*q)/查看车站和过道上的情况 printf(*n); printstack(s); printq(q); printf(*n); void gettime(char a)/获取时间 int i; static char nowtime30; time_t t; time(&t); strcpy(nowtime,ctime(&t); for(i=0;i9;i+) nowtimei=nowtimei+11; nowtimei=0; strcpy(a,nowtime); void inca

26、r(SeqStack*s,linkq*q) /车进站(即输入IN后) int i; int flg; struct car k; static char nowtime110; printf(请你输入车牌(2-5位):n); gets(k.num); if(strlen(k.num)5) printf(车牌号位数不对!); for(i=0;itop;i+) if(!(strcmp(k.num,s-di.num) flg=1; while(1) if(flg=1) printf(车牌号已存在!n); gets(k.num); else break; gettime(nowtime1); strcpy(k.intime,nowtime1); /

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2