停车场系统课程设计.docx
- 文档编号:7657006
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:14
- 大小:58.65KB
停车场系统课程设计.docx
《停车场系统课程设计.docx》由会员分享,可在线阅读,更多相关《停车场系统课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
停车场系统课程设计
课程设计
课程设计名称:
数据结构课程设计
专业班级:
学生姓名:
学号:
指导教师:
课程设计时间:
2010.6.21-2010.6.25
计算机科学与技术专业课程设计任务书
学生姓名
专业班级
学号
题目
停车场管理系统
课题性质
A.工程设计
课题来源
D.自拟课题
指导教师
同组姓名
无
主要内容
综合应用所学知识,设计完成一个停车场管理系统。
本系统拟实现以下功能:
1.处理车辆到达模块
2.处理车辆离开模块
系统要求采用Vc工具进行开发实现。
任务要求
综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。
完成需求分析报告,报告中对关键部分给出图表说明。
要求格式规范,工作量饱满。
参考文献
《数据结构(C语言版)》严蔚敏清华大学出版社
《C语言程序设计》(第三版)谭浩强清华大学出版社
审查意见
指导教师签字:
教研室主任签字:
2009年6月19日
1需求分析
1.1问题描述
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场的时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已经放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内某车要开走,在它之后进入停车场的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
1.2实现要求
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某车辆离开车场时应缴纳的费用。
1.3实现提示
汽车的模拟输入信息格式可以为:
(到达/离去,汽车牌照号码,到达/离去的时刻)。
例如:
(‘A’,1,5)表示1号牌照车在第5这个时刻到达,而(‘D’,5,20)表示5号牌照车在第20这个时刻离去。
整个程序可以输入(‘E’,0,0)时结束。
本题可用栈和队列来实现。
2程序实现
2.1设计思想
根据题目要求,停车场只有一个大门,因此可以用栈来模拟;当栈满后,继续来
的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,先排队的车辆先离开便道,进入停车场。
由于排在停车场中间的车辆可以提出离开停车场,并且要求在离开车辆到停车场大门之间的车辆都必须先离开停车场,让此车辆离去,然后再让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要一个地方(车辆规避所)保存为了让路离开停车场的车辆,很显然这应该用一个栈来模拟。
因此本题用到两个栈和一个队列。
对于停车场和车辆规避所,有车辆进入和车辆离去两个动作,这就是栈的进栈和出栈操作,只是还允许排在中间的车辆先离开停车场,因此在栈中需要进行查找。
而对于便道,也有入队列和出队列的操作,同样允许排在中间的车辆先离开队列。
这样基本动作只需要利用栈和队列的基本操作即可实现。
整个操作过程是:
当输入数据表示有车辆到达,则判断栈是否满,若未满就将新数据进栈(表示新到达的车辆进入停车场的里面),数据应包括车牌号和到达时间;若已满,就将数据放在队尾,表示车辆在便道上等待进入停车场。
当输入数据表示有车辆要离去,就在栈中寻找是否有此车牌号的车辆,如有就让此车辆离开停车场,并根据停车时间计费;如没有找到,就到队列中(便道上)去寻找此车牌号的车辆,如有就允许此车辆离开队列,但不收费;如没就显示出错信息。
当离开停车场的车辆位于栈的中间时,必须先将此位置到栈顶的所有数据倒到另一个栈中去(车辆规避所),然后安排车辆出栈,然后将另一个栈中的数据倒回到停车场栈中来。
如果此时队列(便道上)不为空,则将第一个元素出队列(离开便道),进入栈(停车场)中。
在模拟停车场管理时,如果停车栈中已没有车辆停放时,输入数据仍要求车辆退出,则显示出错信息。
2.2程序实现
2.2.1定义头文件:
#include
#include
2.2.2元素类型、节点类型
#defineN2//栈的最大容量
#defineM5//单位时间收费
#defineTRUE1
#defineFALSE0
typedefstruct{
intnum;//车牌号
intarrtime;//到达时间
}SElemType;//栈的元素类型
typedefstruct{
SElemTypea[N];
inttop;
}SqStack;//栈的类型
typedefstruct{
intnum;
structQNode*next;
}QNode,*QueuePtr;//队列的结点类型
typedefstruct{
QueuePtrfront;//指向头结点
QueuePtrrear;//指向尾结点
}LinkQueue;//队列的类型
2.2.3函数模块
(1)初始化栈模块
voidinitStack(SqStack*s)//初始化栈
{
s->top=-1;
}
(2)入栈模块
intpush(SqStack*s,SElemTypex)//数据元素x入指针s所指的栈
{
if(s->top==N-1)//栈满
returnFALSE;
else
{
s->a[s->top]=x;
s->top++;
returnTRUE;
}
}
(3)出栈模块
SElemTypepop(SqStack*s)//栈顶元素出栈
{
SElemTypex;
if(s->top==-1)//栈为空
{
x.num=-1;
x.arrtime=-1;
returnx;
}
else
{
s->top--;
returns->a[s->top];
}
}
(4)初始化队列模块
voidinitQueue(LinkQueue*Q)//初始化队列
{
QueuePtrhead;
head=(QueuePtr)malloc(sizeof(QNode));//为头结点分配存储空间
head->next=NULL;//为头结点赋初值
head->num=0;
Q->front=head;
Q->rear=head;
}
(5)入队列模块
voidEnQueue(LinkQueue*Q,intnum)//数据入队列
{
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));//为新结点分配存储空间
p->num=num;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
Q->front->num++;
}
(6)出队列模块
intDeQueue(LinkQueue*Q)//数据出队列
{
intm;
QueuePtrp;
if(Q->front==Q->rear)//队列为空
{
m=-1;
returnm;
}
p=Q->front->next;
Q->front->next=p->next;
m=p->num;
Q->front->num--;
if(p==Q->rear)//如果删除的是队尾结点,则重新给队尾指针赋值
Q->rear=Q->front;
returnm;
}
(7)处理车辆到达模块
voidarrive(SqStack*s1,LinkQueue*Q,SElemTypex)//处理车辆到达
{
intf;
f=push(s1,x);//新到达的车辆进入停车场栈
if(f==FALSE)//如果停车场栈满,则进入便道队列
{
EnQueue(Q,x.num);
printf("第%d号车停在便道第%d车位上\n",x.num,Q->front->num);
}
else//新到车辆停入停车场栈
{
printf("第%d号车停在停车场第%d号车位上\n",x.num,s1->top+1);
}
}
(8)处理车辆离开模块
voiddelive(SqStack*s1,SqStack*s2,LinkQueue*Q,SElemTypex)//处理车辆离去的情况
{
intn,f=FALSE;
SElemTypey;
QueuePtrp,q;
while((s1->top>-1)&&f!
=TRUE)//在停车场中寻找要离开的车辆
{
y=pop(s1);
if(y.num!
=x.num)//如果栈顶元素不是要离开的车辆,就将其放入车辆规避所栈
n=push(s2,y);
else
f=TRUE;
}
if(y.num==x.num)//在停车场中找到要离开的车辆
{
if(x.arrtime { printf("您的输入有错! \n"); f=push(s1,y); } else{ printf("第%d号车应收费%d元\n",y.num,(x.arrtime-y.arrtime)*M); while(s2->top>-1)//车辆规避所栈不为空,将其全部放回停车场栈 { y=pop(s2); f=push(s1,y); } n=DeQueue(Q);//如果便道上有车,将第一辆车放入停车场 if(n! =-1) { y.num=n; y.arrtime=x.arrtime;//计费为刚离去的车的离去时间 f=push(s1,y); printf("第%d号车停在停车场第%d号车位上\n",y.num,s1->top+1); } } } else//在停车场中没有找到要离去的车辆 { while(s2->top>-1)//将规避所中的所有车辆放回停车场 { y=pop(s2); f=push(s1,y); } q=Q->front->next; f=FALSE; while(f==FALSE&&q! =NULL)//在便道上寻找要离去的车 { if(q->num! =x.num) { p=q; q=q->next; } else//在便道上找到该辆车 { Q->front->num--; Q->rear=p; if(p->next==NULL) Q->rear=Q->front; printf("第%d号车离开便道\n",x.num);//让该辆车离开便道,但不收费 f=TRUE; } } if(f==FALSE)//在便道上也没有找到该车,输入数据错误 printf("输入错误,停车场和便道上均无第%d号车\n",x.num); } } (9)主函数模块 voidmain()//停车场模拟管理程序 { charch1,ch2; SqStack*s1,*s2; LinkQueue*Q; SElemTypex; s1=(SqStack*)malloc(sizeof(SqStack)); s2=(SqStack*)malloc(sizeof(SqStack)); Q=(LinkQueue*)malloc(sizeof(LinkQueue)); initStack(s1);//初始化停车场栈 initStack(s2);//初始化规避所栈 initQueue(Q);//初始化便道队列 printf("****************欢迎使用停车场管理系统! **************\n"); printf("\n"); printf("***************功能导航: **************\n"); printf("\n"); printf("***************A: 车辆到达**************\n"); printf("***************D: 车辆离去**************\n"); printf("***************E: 退出程序**************\n"); printf("\n"); do{ printf("请输入数据: 'A'/'D',车牌号,到达/离开时间\n"); scanf("%c%d%d",&ch1,&x.num,&x.arrtime); ch2=getchar();//接收ENTER switch(ch1) { case'A': case'a': arrive(s1,Q,x); break; case'D': case'd': delive(s1,s2,Q,x); break; case'E': case'e': printf("谢谢您的使用! \n"); break; default: printf("您输入的数据有误,请重新输入: \n"); } }while(ch1! ='e'&&ch1! ='E'); } 3调试分析 1.在主函数中,少了getChar()函数,导致程序将ENTER作为字符,从而导致每次输入都会输出一句“输入错误,请重新输入”。 2.在if语句中将等号写成赋值号,导致程序出错。 3.没有给指针分配存储空间,导致不能读错误,在使用指针时一定要注意给某些分配存储空间。 4.在出队列时,没有考虑到当删除的正好是尾结点时,需要对尾结点重新赋值,导致在处理车辆离开时会出现错误信息。 4运行结果 5.实验环境 (1)WindowsXP系统下 (2)编程环境: VC6.0++,TC2.0 6.试验体会 算法与框架写起来比较简单,但是具体操作时有很多细节需要考虑在内,否则会出现一系列逻辑错误,编程时要养成思虑周全的好习惯,这是一个编程者所必须具备的品质。 在输入变量时要注意变量的大小写,否则会出现一系列错误。 对于变量一定要先声明再使用。 作为一个学习编程者,调试程序能力也是必备的。 参考文献 1数据结构(C语言版)严蔚敏吴伟民著清华大学出版社 2《C语言程序设计》(第三版)谭浩强清华大学出版社 信息科学与工程学院课程设计成绩评价表 课程名称: 数据结构课程设计 设计题目: 停车场管理系统 专业: 班级: 姓名: 学号: 序号 评审项目 分数 满分标准说明 1 内容 思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。 任务饱满,做了大量的工作。 2 创新 内容新颖,题目能反映新技术,对前人工作有改进或突破,或有独特见解 3 完整性、实用性 整体构思合理,理论依据充分,设计完整,实用性强 4 数据准确、可靠 数据准确,公式推导正确 5 规范性 设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定 6 纪律性 能很好的遵守各项纪律,设计过程认真; 7 答辩 准备工作充分,回答问题有理论依据,基本概念清楚。 主要问题回答简明准确。 在规定的时间内作完报告。 总分 综 合 意 见 指导教师年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 系统 课程设计