《软件工程课程设计-停车管理系统(包含源代码).pdf》由会员分享,可在线阅读,更多相关《软件工程课程设计-停车管理系统(包含源代码).pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学 年 设 计 .课程名称:软件工程学年设计 实验项目:停车场收费管理系统 姓 名:XXX 专 业:计算机科学与技术、班 级:XXX 学 号:XXXX 指导教师 XXX 计算机科学与技术学院 实验教学中心 XXXX 年 XX 月 XX 日 /摘要 目前,我国经济逐渐发达,自行车王国逐步向汽车进军。因此,大量的停车场也随之而至。虽然某些大型停车场在工作中已经开始向计算机化靠拢,但仍不够完善。而中小型停车场更为稀少,陈旧的管理手段给顾客带来极大的不便,同时为了提高工作效率及服务质量,一套完整的停车厂管理系统的出现就十分必要了。本次设计,仅为一个简单的小型停车场管理系统。采用 C 语言编写,为 do
2、s界面。主要强调车辆的进站和出站操作,以及车场和通道之间的相互关系。根据车场内车道狭长且为一边开口的特点,将车道用先进后出的栈结构来描述。外面狭长的通道,为先进先出,可采用队列结构,为方便起见,采用链式队列结构来描述。本程序中的数据对象是汽车,为使操作更方便,将给每辆进车道的汽车编号,根据编号出场。其中,还包括入场时间、出厂时间、收取费用等项。关键字:停车场管理系统 栈结构 队列结构 软件工程 目录 1 需求分析.错误!未定义书签。,引言.错误!未定义书签。设计目的.错误!未定义书签。任务概述.错误!未定义书签。基本要求.错误!未定义书签。系统用户分析.错误!未定义书签。用数据流程图描述.错误
3、!未定义书签。2 概要设计.错误!未定义书签。设计思想.错误!未定义书签。实现方法.错误!未定义书签。主要模块.错误!未定义书签。各模块的主要功能及实现.错误!未定义书签。车辆到达模块.错误!未定义书签。车辆离开模块.错误!未定义书签。停车场内与通道停放车辆的信息模块.错误!未定义书签。获取时间.错误!未定义书签。函数间调用关系.错误!未定义书签。(3 详细设计.错误!未定义书签。界面及各模块详细设计.错误!未定义书签。4 系统测试.错误!未定义书签。功能测试.错误!未定义书签。车进站时车牌号的测试.错误!未定义书签。5 总结.错误!未定义书签。用户手册.错误!未定义书签。设计体会.错误!未定
4、义书签。#参考文献.错误!未定义书签。附.错误!未定义书签。1 需求分析 1.1 引言 1.1.1 设计目的 a.通过课程设计,加深对软件工程思想的理解,能对系统功能进行分析,并设计合理的模块化结构。b.通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。通过课程设计,训练 C 程序调试能力,能将一个中小型各级组织系统联调通过。c.通过课程设计,开发一个中小型系统,掌握运用软件工程思想研来发系统全过程。d.通话课程设计,培养分析问题、解决实际问题的能力。1.1.2 任务概述 设有一个可以停放 20 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚
5、依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满 20 辆车,则后来的车辆只能在停车场大门外的通道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在通道上等待的车辆的次序。编制一程序模拟该停车场的管理 。要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费
6、用和它在停车场内停留的时间。1.2 基本要求 要求程序输出每辆车到达后的停车位置(停车场),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。系统用户分析“停车场管理系统”主要是针对车辆存取工作而开发的应用软件。通常有系统管理员、停车场车辆管理员和顾客三种用户,他们的使用权限如下:系统管理员:计算机人员,对系统进行维护。图书管理员:对停车信息进行数据操作。顾客:仅限于查阅。用数据流程图描述 图 1-1 是根据操作流程建立的流程图。表 1-1 是车能否进停车场的判定表。图 1-1 停车场流程图 车场内车数 20 20 20 表 1-1 进站停车判定表 车牌号位数 5 2 且5 5 2 且
7、5 进站 进通道 2 概要设计 2.1 设计思想 此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且
8、使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。实现方法 对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。主要模块 此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全
9、局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先打印出此停车场管理系统选择页面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内与通道停放车辆的信息以及获取时间这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调用的这四个函数中回到主函数结束整个程序的运行。2.4 各模块的主要功能及实现 2.2.1 车辆到达模块 此模块主要实现车辆进入停车场功能,通过判断合法性决定车辆能否进入停车场。实现伪码:If 车场
10、内车数2 and 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)um)flg=1;while(1)if(flg=1)printf(车牌号已存在!n);gets;else break;gettime(nowtime1);strcpy,nowtime1);/fprintf(fp,车牌号%s 时间:%sn,;if(!isful
11、lstack(s)&isemptyq(q)/若车站不满,而且过道上没有车,则直接进入车站 =(s-top)+2;push(s,k);printstack(s);else if(isfullstack(s)|!isemptyq(q)/若过道上还有车,则必须放在过道上 printf(*警告*n 车站已满,请暂时放在过道。n 现在情况如下:n);=Maxsize;addq(q,k);/放在过道上 printstack(s);/输入车站情况 printq(q);/同时输入当时过道上的情况 printf(*n);void outcar(SeqStack*s,linkq*q)/车出站 SeqStack p
12、;/申请临时放车的地方 init(&p);char nowtime10;int i,pos;long cost;int hour,min,sec;struct car x,b,y1,y2,z;if(isemptystack(s)printf(车站是空的,不能再出站了!n);printf(a);else printf(现在车站的情况是:n);printstack(s);printf(你要出站的车的序号是:n);scanf(%d,&pos);if(pos0&postop+1)for(i=s-top+1;ipos;i-)x=pop(s);=;push(&p,x);b=pop(s);gettime(n
13、owtime);strcpy,nowtime);hour=0-0)*10+1-0)-(0-0)*10+1-0);min=3-0)*10+4-0)-(3-0)*10+4-0);sec=6-0)*10+7-0)-(6-0)*10+7-0);=hour*3600+min*60+sec;cost=;=cost;printout(&b);/输出车出站时的情况-进入时间,出站时间,原来位置,花的费用等 while(!isemptystack(&p)/车出来后把刚才退出的车重新放回 z=pop(&p);push(s,z);if(!isfullstack(s)&!isemptyq(q)y1=delq(q);s
14、trcpy,nowtime);push(s,y1);while(!isfullstack(s)&!isemptyq(q)y2=delq(q);push(s,y2);else printf(有没有你要的车号n);printf(a);int main()SeqStack park;linkq q;init(&park);initq(&q);char mess10;/fp=fopen(,w);printf(ttt 车场管理系统 ntttn*nn);printf(提示:车站内最多只能放 Maxsize(由系统中定义)辆车,多余的暂时放在过道上。n 车站内收费标准:1 角/秒,过道上不收费。n);pri
15、ntf(n 你想进行什么操作nIN-车进站nOUT-车出站nLIST-查看车站及过道中的情况nHELP-获取帮助nEND-退出系统n);printf(n 操作:);gets(mess);while(1)if(strcmp(mess,END)=0)printf(ttt 欢迎下次再来,再见!n);break;else if(strcmp(mess,HELP)=0)printf(n 你想进行什么操作nIN-车进站nOUT-车出站nLIST-查看车站及过道中的情况nHELP-获取帮助nEND-退出系统nn);printf(操作:);clear(mess);gets(mess);else if(strcmp(mess,LIST)=0)review(&park,&q);printf(操作:);else if(strcmp(mess,IN)=0)incar(&park,&q);printf(操作:);else if(strcmp(mess,OUT)=0)outcar(&park,&q);else printf(操作:);clear(mess);gets(mess);/问题:车牌号位数且车牌号可以重复,
限制150内