欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    软件工程课程设计-停车管理系统(包含源代码)(共26页).doc

    • 资源ID:14123559       资源大小:127.50KB        全文页数:26页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件工程课程设计-停车管理系统(包含源代码)(共26页).doc

    精选优质文档-倾情为你奉上学 年 设 计课程名称:软件工程学年设计实验项目:停车场收费管理系统姓 名:XXX专 业:计算机科学与技术班 级:XXX学 号:XXXX指导教师XXX计算机科学与技术学院实验教学中心XXXX年XX月XX日摘要 目前,我国经济逐渐发达,自行车王国逐步向汽车进军。因此,大量的停车场也随之而至。虽然某些大型停车场在工作中已经开始向计算机化靠拢,但仍不够完善。而中小型停车场更为稀少,陈旧的管理手段给顾客带来极大的不便,同时为了提高工作效率及服务质量,一套完整的停车厂管理系统的出现就十分必要了。本次设计,仅为一个简单的小型停车场管理系统。采用C语言编写,为dos界面。主要强调车辆的进站和出站操作,以及车场和通道之间的相互关系。根据车场内车道狭长且为一边开口的特点,将车道用先进后出的栈结构来描述。外面狭长的通道,为先进先出,可采用队列结构,为方便起见,采用链式队列结构来描述。本程序中的数据对象是汽车,为使操作更方便,将给每辆进车道的汽车编号,根据编号出场。其中,还包括入场时间、出厂时间、收取费用等项。关键字:停车场管理系统 栈结构 队列结构 软件工程 目录专心-专注-专业1需求分析1.1 引言1.1.1 设计目的a.通过课程设计,加深对软件工程思想的理解,能对系统功能进行分析,并设计合理的模块化结构。b. 通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。c. 通过课程设计,开发一个中小型系统,掌握运用软件工程思想研来发系统全过程。d. 通话课程设计,培养分析问题、解决实际问题的能力。1.1.2 任务概述设有一个可以停放20辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满20辆车,则后来的车辆只能在停车场大门外的通道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在通道上等待的车辆的次序。编制一程序模拟该停车场的管理 。要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。1.2 基本要求要求程序输出每辆车到达后的停车位置(停车场),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。1.3 系统用户分析“停车场管理系统”主要是针对车辆存取工作而开发的应用软件。通常有系统管理员、停车场车辆管理员和顾客三种用户,他们的使用权限如下:系统管理员:计算机人员,对系统进行维护。图书管理员:对停车信息进行数据操作。顾客:仅限于查阅。1.4 用数据流程图描述图1-1是根据操作流程建立的流程图。表1-1是车能否进停车场的判定表。 图1 -1 停车场流程图车场内车数<20<20>20>20车牌号位数<2或>5>2且<5<2或>5>2且<5进站进通道表1-1 进站停车判定表2概要设计2.1 设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。2.2 实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。2.3 主要模块此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先打印出此停车场管理系统选择页面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内与通道停放车辆的信息以及获取时间这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调用的这四个函数中回到主函数结束整个程序的运行。2.4 各模块的主要功能及实现2.2.1 车辆到达模块此模块主要实现车辆进入停车场功能,通过判断合法性决定车辆能否进入停车场。实现伪码:If 车场内车数<20辆 and 车牌号码合法 then车辆进入停车场并编号及记录时间End ifIf 车场已满 then进入通道End if车牌号码合法性判断伪码:If 车牌号位数>2 and <5 and 无重复车牌 then车牌号码合法End if2.2.2 车辆离开模块此模块主要实现车辆离开停车场功能,并能打印出车辆停留时间及费用。实现伪码:If 车场不为空 and 序号存在 then车辆出停车场并打印出进出时间及费用End if2.2.3 停车场内与通道停放车辆的信息模块 此模块主要实现车场车辆的停放及通道的利用,是本设计的核心。就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点。模块中出现的函数:void init (SeqStack *s);int isemptystack (SeqStack *s);int isfullstack (SeqStack *s);int isfullstack (SeqStack *s);void push (SeqStack *s);struct car pop (SeqStack *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所示主函数 reviewincar用户界面outcarclearprintstackprintqgettimeprintoutincaroutcar主函数结束图2-1 函数调用关系图图中函数解释:review 查看车站内及通道内停车情况函数。incar 车进站函数。outcar 车出站函数。clear 定义数组函数。printstack 车进站时输入信息显示,及提示站内情况函数。printq 进过道信息函数。gettime 获取时间函数。printout 出站时的信息函数。3详细设计3.1 界面及各模块详细设计进入界面后如下图所示。图3- 1 首界面测试要点:各选项与相应的功能能否成功连接。1.车进站(1).功能:添加车牌号排序后进站。(2).输入项:车牌号。(3).输出项:车在车站内的“位置”“车牌”“进站时间”“站内状况”。(4).测试要点:注意不合法的车牌号能否在系统通过。2.车出站(1).功能:实现收费后出车站。(2).输入项:车序号。(3).输出项:车的“车牌”“进站时间”“进/出站”状态“出站时间”“原来位置”“停留时间”“费用”。(4).测试要点:要出站的车序号是否存在。3.查看车站及过道中的情况(1).功能:查看车站及过道中车辆情况。(2).输入项:查看提示。(3).输出项:车场内状态即停车数量,以及通道内停车数量。(4).测试要点:能否正确显示车的数量。4.获取帮助(1).功能:放回到开始界面。(2).测试要点:能否正确返回。5.结束(1).功能:结束程序。4系统测试4.1 功能测试4.1.1 车进站时车牌号的测试1.划分等价类及测试用例如下表所示。假设此时站内有一辆编号为ABC的车。表4-1 车牌号等价类划分表输入条件合理等价类不合理等价类长度(1)小于5个字符,大于2个字符(3)小于2个字符(4)大于5个字符字符(2)与站内车牌不重复(5)与站内车牌相同表4-2 车牌号测试用例测试结果期望结果覆盖范围ddd有效(1)(2)A无效(3)无效(4)ABC无效(5)2.车出站时的序号测试1.划分等价类及测试用例如下表所示。假设此时站内有一辆编号为ABC的车,车的序号为1。表4-3 车序号的合理等价类输入条件合理等价类不合理等价类存在性(1)存在(2)不存在表4-4 车序号的测试用例测试结果期望结果覆盖范围1有效(1)3无效(2)5总结5.1 用户手册这个程序用来实现对停车场内车辆的管理,整个操作界面为中英文结合,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作。这个程序操作简单,对于进出停车场的时间,也简化了操作,系统会自动获取提交时的时间,即进站和出站的时间。而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入END退出该运行程序。至于使用过程中的更具体的问题,可以参照该报告书中详细设计,整个程序的运行界面大致就如详细设计中屏幕截图的内容。5.2 设计体会通过这一周的课程设计,加深了我对数据结构这门课程所学内容的进一步的理解与掌握;同时,通过对停车场管理系统的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起。在这次课程设计中,不仅培养了我开发一个中小型程序的能力,而且也培养了我的团队合作能力。在这次对停车场管理系统的开发过程中,我们小组成员互相合作,互相帮助,其中有程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以及迷茫。在这次课程设计中,使得我很好地了解了在开发程序过程中合作的重要性。在这周课程设计中,我们小组所开发的停车场管理系统,基本上可以完成每一项功能。汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。但是,该程序也有不足的地方。主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中并无限制,任何字符均可,这个与现实是有些不符的。在改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天。还有一个很重要的问题,对于停车场外的通道在现实中是不可能无限长的,而我们的设计中为了便于考虑就忽略了这一点。总之,在这周的课程设计中,我以及我们这组的收获还是挺大的,不仅对于专业课有了更好的认识,而且在合作的过程中更加了解了团队精神的重要性。参考文献1秦峰.数据结构(C语言版)M.合肥:中国科学技术大学出版社,20082R.C.T.Lee S.S.Tseng R.C.Chang.王卫东译.算法设计与分析导论M.北京:机械工业出版社,20083Ira Pohl.陈朔鹰 马瑞 薛静锋 吕坤译.C+教程M.北京:人民邮电出版社,2007附源代码:#include"stdio.h"#include"string.h"#include"stdlib.h"#include"time.h"#define null 0#define Maxsize 20/定义最大停车辆数FILE * fp;void clear(char a)int i,counta;counta=strlen(a);for(i=0;i<counta;i+)ai='0'struct car/定义车的结构体 char num5; /车牌号char intime10; /进站时间char outtime10; /出站时间int expense; /费用int delay; /停留时间int position; /停车位置;typedef structstruct car dMaxsize;int top;SeqStack;void init(SeqStack *s)/初始化栈s->top=-1;int isemptystack(SeqStack *s)/判断栈是否为空if(s->top=-1)return 1;else return 0;int isfullstack(SeqStack *s)/判断栈是否为满if(s->top=Maxsize-1)return 1;elsereturn 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;if(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->next=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);elseq->head->next=p->next;x=p->data;free(p);return x;int isemptyq(linkq *q)/判断链队列是否为空if(q->rear=q->head)return 1;elsereturn 0;void printstack(SeqStack *s)/车进站时输入信息显示,及提示站内情况int i;if(isemptystack(s) printf("车站内没有车。");elseprintf("tt车站内n位置t车牌t进站时间t 站内状况n");for(i=0;i<=s->top;i+)printf("n");printf("%dt",s->di.position);printf("%st",s->di.num);printf("%st",s->di.intime);printf("共%d辆",s->top+1);if(s->top=Maxsize-1)printf("(已满)n");elseprintf("(还能放%d辆)n",Maxsize-1-s->top);printf("n");void printout(struct car *x)/出站时的信息printf("车牌 进站时间 进/出站 出站时间 原来位置 停留时间(秒) 费用(角)n");printf("%s ",x->num);printf("%s ",x->intime);printf("出 ");printf("%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);elseprintf("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;i<9;i+)nowtimei=nowtimei+11;nowtimei='0'strcpy(a,nowtime);void incar(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)<2|strlen(k.num)>5)printf("车牌号位数不对!");for(i=0;i<s->top;i+)if(!(strcmp(k.num,s->di.num)flg=1;while(1)if(flg=1)printf("车牌号已存在!n");gets(k.num);elsebreak;gettime(nowtime1);strcpy(k.intime,nowtime1);/ fprintf(fp,"车牌号 %s 时间: %sn",k.num,k.intime); if (!isfullstack(s)&&isemptyq(q) /若车站不满,而且过道上没有车,则直接进入车站k.position=(s->top)+2;push(s,k);printstack(s);else if(isfullstack(s)|!isemptyq(q)/若过道上还有车,则必须放在过道上printf("*警告*n车站已满,请暂时放在过道。n现在情况如下:n");k.position=Maxsize;addq(q,k);/放在过道上printstack(s);/输入车站情况printq(q);/同时输入当时过道上的情况printf("*n");void outcar(SeqStack *s,linkq *q) /车出站SeqStack p; /申请临时放车的地方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");elseprintf("现在车站的情况是:n");printstack(s);printf("你要出站的车的序号是:n");scanf("%d",&pos);if(pos>0&&pos<=s->top+1)for(i=s->top+1;i>pos;i-)x=pop(s);x.position=x.position-1;push(&p,x);b=pop(s);gettime(nowtime);strcpy(b.outtime,nowtime);hour=(b.outtime0-'0')*10+(b.outtime1-'0')-(b.intime0-'0')*10+(b.intime1-'0');min=(b.outtime3-'0')*10+(b.outtime4-'0')-(b.intime3-'0')*10+(b.intime4-'0');sec=(b.outtime6-'0')*10+(b.outtime7-'0')-(b.intime6-'0')*10+(b.intime7-'0');b.delay=hour*3600+min*60+sec;cost=b.delay;b.expense=cost;printout(&b);/输出车出站时的情况-进入时间,出站时间,原来位置,花的费用等while(!isemptystack(&p) /车出来后把刚才退出的车重新放回z=pop(&p);push(s,z);if(!isfullstack(s)&&!isemptyq(q)y1=delq(q);strcpy(y1.intime,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("car_list.text","w"); printf("ttt 车场管理系统 ntttn*nn");printf("提示:车站内最多只能放Maxsize(由系统中定义)辆车,多余的暂时放在过道上。n车站内收费标准:1角/秒,过道上不收费。n");printf("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);elseif(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);elseprintf("操作:");clear(mess);gets(mess);/问题:车牌号位数且车牌号可以重复

    注意事项

    本文(软件工程课程设计-停车管理系统(包含源代码)(共26页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开