课程设计停车管理系统.docx
- 文档编号:11001251
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:21
- 大小:186.39KB
课程设计停车管理系统.docx
《课程设计停车管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计停车管理系统.docx(21页珍藏版)》请在冰点文库上搜索。
课程设计停车管理系统
课程设计报告
课程名称:
数据结构课程设计
设计题目:
停车场管理系统
系别:
计算机系
专业:
组别:
学生姓名:
学号:
起止日期:
年月日~年月日
指导教师:
目录
第一章需求分析1
1.1课程设计任务及要求1
1.1.1题目1
1.1.2问题描述1
1.1.3基本要求1
1.1.4测试数据1
1.2课程设计思想1
1.3运行环境及开发工具…………………………………………………..2
第二章概要设计2
2.1停车场管理流程2
2.2主要模块设计2
2.3程序流程及框图4
2.4设计方法及其原理4
第三章详细设计5
3.1抽象数据类型定义5
3.2数据类型定义7
3.3主要模块的程序描述8
第四章调试与操作说明14
第五章课程设计总结与体会18
第六章致谢18
第七章参考文献19
第八章附录19
第一章需求分析
1.1课程设计任务及要求
1.1.1题目:
停车场管理
1.1.2问题描述
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停了n辆汽车,则后来的汽车只能在门外的通道上等候,一旦有车开走,收排在通道上的第一辆车即可开入;当停车场内每辆车要离开时,在它之后进入的车辆必须先退出停车场为其让路,待该辆车开出大门,其他车辆再按原次序进入停车场,每辆停放在停车场的车在它离开停车场时必须按它停留在停车场内的时间长短交纳停车费。
试为停车场编写按上述要求进行管理的模拟程序。
1.1.3基本要求
①要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理;
②要求处理的数据元素包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻;
③该系统完成以下功能:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费);
④要求栈以顺序结构实现,队列以链表实现。
1.1.4测试数据
设n=2,输入数据为:
(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。
其中‘A’表示到达,‘D’表示离开,‘E’表示输入结束。
1.2课程设计思想
此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。
1.3运行环境及开发工具
该停车场管理系统程序运用C语言编写,其编译环境在MicrosoftVisualC++6.0。
第二章概要设计
2.1停车场管理流程:
﹙1﹚当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。
﹙2﹚当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。
之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。
2.2主要模块设计
2.2.1此停车场管理系统,主要分为以下六个模块:
(1)主程序模块
voidmain()
{
初始化停车场;
初始化让路的临时栈;
初始化便道;
输出停车场管理主菜单:
车辆到达、车辆离开与计费、查看停车场信息;
}
(2)入场模块
intArrival(SeqStackCar*,LinkQueueCar*)
{
车场未满,车进车场;
车场已满,车进便道;
}
(3)出场模块
voidLeave(SeqStackCar*Enter,SeqStackCar*Exit,LinkQueueCar*W)
{
车辆离开停车场;
}
(4)输出模块
voidList(SeqStackCarS,LinkQueueCarW)
{
输出停车场信息;
}
(5)栈模块——实现栈的抽象数据类型
(6)队列模块——实现队列的抽象数据类型
2.2.2在以上各个模块中,出现的调用的函数为:
voidInitStack(SeqStackCar*s);
intInitQueue(LinkQueueCar*Q);
voidwelcome();
intArrival(SeqStackCar*Enter,LinkQueueCar*W);
voidPRINT(CarNode*p);
voidLeave(SeqStackCar*Enter,SeqStackCar*Exit,LinkQueueCar*W);
voidList1(SeqStackCar*S);
voidList2(LinkQueueCar*W);
voidList(SeqStackCarS,LinkQueueCarW);
2.3程序流程及框图
图1系统功能结构图
2.4设计方法及其原理
对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。
对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。
第三章详细设计
3.1抽象数据类型定义
(1)栈的抽象数据类型定义
ASTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
数据关系:
R1={
约定an端为栈顶,a1端为栈底。
基本操作:
InitStack(&S)
操作结果:
构造一个空栈S。
DestroyStack(&S)
初始条件:
栈S已存在。
操作结果:
栈S被销毁。
ClearStack(&S)
初始条件:
栈S已存在。
操作结果:
将栈S清为空栈。
StackEmpty(S)
初始条件:
栈S已存在。
操作结果:
若栈S为空栈,则返回TRUE,否则FALSE。
StackLength(s)
初始条件:
栈S已存在。
操作结果:
返回S的元素个数,既栈的长度。
GetTop(S,&e)
初始条件:
栈S已存在且非空。
操作结果:
用e返回S的栈顶元素。
Push(&S,e)
初始条件:
栈S已存在。
操作结果:
插入元素e为新的栈顶元素。
Pop(&S,&e)
初始条件:
栈S已存在且非空。
操作结果:
删除S的栈顶元素,并用e返回其值。
StackTraverse(S,visit())
初始条件:
栈S已存在且非空。
操作结果:
从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一旦visit()失败,则操作失效。
}ADTStack
(2)队列的抽象数据类型定义
ADTQueue{
数据对象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
数据关系:
R1={
约定其中a1端为队列头,an为队列尾。
基本操作:
InitQueue(&Q)
操作结果:
构造一个空队列Q。
DestroyQueue(&Q)
初始条件:
队列Q已存在。
操作结果:
队列Q被销毁,不再存在。
ClearQueue(&Q)
初始条件:
队列Q已存在。
操作结果:
将Q清为空队列。
QueueEmpty(Q)
初始条件:
队列Q已存在。
操作结果:
若Q为空队列,则返回TRUE,否则FALSE。
QueueLength(Q)
初始条件:
队列Q已存在。
操作结果:
返回Q的元素个数,即队列的长度。
GetHead(Q,&e)
初始条件:
Q为非空队列。
操作结果:
用e返回的队头元素。
EnQueue(&Q,e)
初始条件:
队列Q已存在。
操作结果:
插入元素e为Q的新的队尾元素。
DeQueue(&Q,&e)
初始条件:
Q为非空队列。
操作结果:
删除Q的队头元素,并用e返回其值。
QueueTraverse(Q,visit())
初始条件:
Q已存在且非空。
操作结果:
从队头到队尾,依次对Q的每个数据元素调用函数visit()。
一旦visit() 失败,则操作失败。
}ADTQueue
3.2数据类型定义
#defineMAX2/*存储车库最大容量*/
#defineprice3/*每车每时刻费用*/
typedefstructnode
{
intnum[10];
intreachtime;
intleavetime;
}CarNode;/*车辆信息结点*/
typedefstructNODE
{
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;/*模拟车站*/
typedefstructcar
{
CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode
{
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;/*模拟通道*/
3.3主要模块的程序描述
本程序主要分为四部分:
(1)主函数模块、
(2)车辆到达模块、(3)车辆离开模块、(4)显示车辆信息模块
主要程序:
﹙1﹚主函数
voidmain()
{
SeqStackCarEnter,Exit;
LinkQueueCarWait;
charch;
welcome();
InitStack(&Enter);/*初始化车站*/
InitStack(&Exit);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while
(1)
{
system("CLS");
printf("\n***************************停车管理系统*****************************************");
printf("\n\n\t\t\t1.车辆到达请选择A");
printf("\n\n\t\t\t2.车辆离开请选择D");
printf("\n\n\t\t\t3.车辆信息请选择I");
printf("\n\n\t\t\t4.退出程序请选择E");printf("\n********************************************************************************");
printf("\n\n\t\t\t现在请选择以上信息:
");
while
(1)
{
ch=getchar();
printf("\n");
switch(ch)
{
case'A':
Arrival(&Enter,&Wait);break;/*车辆到达*/
case'D':
Leave(&Enter,&Exit,&Wait);break;/*车辆离开*/
case'I':
List(Enter,Wait);break;/*列表打印信息*/
case'E':
exit(0);/*退出主程序*/
default:
break;
}
system("CLS");
printf("\n***************************停车管理系统*****************************************");
printf("\n\n\t\t\t1.车辆到达请选择A");
printf("\n\n\t\t\t2.车辆离开请选择D");
printf("\n\n\t\t\t3.车辆信息请选择I");
printf("\n\n\t\t\t4.退出程序请选择E");
printf("\n********************************************************************************");
printf("\n\n\t\t\t现在请选择以上信息:
");
}
}
}
(2)车辆到达模块
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
{
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
printf("\n\n\t\t\t停车场还有%d停车位(若停车位为0,车可先进入便道等待)\n",MAX-Enter->top);
printf("\t\t\t请输入到达车辆车牌号码:
");
scanf("%d",&(p->num));
if(Enter->top { Enter->top++; printf("\n\t\t\t该车辆在停车场的位置是: %d\n",Enter->top); printf("\n\t\t\t请输入该车辆到达的时间: "); scanf("%d",&(p->reachtime)); Enter->stack[Enter->top]=p; return (1); } else/*车场已满,车进便道*/ { printf("\n\t\t\t停车场已满该车辆需在便道上等待! \n"); system("pause"); t=(QueueNode*)malloc(sizeof(QueueNode)); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(-1); } } (3)车辆离开模块 voidLeave(SeqStackCar*Enter,SeqStackCar*Exit,LinkQueueCar*W)/*车辆离开*/ { introom; CarNode*p,*t; QueueNode*q; /*判断车场内是否有车*/ if(Enter->top>0)/*有车*/ { while (1)/*输入离开车辆的信息*/ { printf("\t\t\t停车场里停放的车辆总数: %d",Enter->top); printf("\n\n\t\t\t请输入要离开车辆的位置(1-%d): ",Enter->top); scanf("%d",&room); if(room>=1&&room<=Enter->top)break; else printf("\n\n\t\t\t离开车辆位置不存在! \n"); } while(Enter->top>room)/*车辆离开*/ { Exit->top++; Exit->stack[Exit->top]=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; } p=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; while(Exit->top>=1) { Enter->top++; Enter->stack[Enter->top]=Exit->stack[Exit->top]; Exit->stack[Exit->top]=NULL; Exit->top--; } PRINT(p,room); /*判断通道上是否有车及车站是否已满*/ if((W->head! =W->rear)&&Enter->top { q=W->head->next; t=q->data; Enter->top++; printf("\n\n\t\t\t便道的%d号车进入车场第%d位置.",*t->num,Enter->top); printf("\n\n\t\t\t请输入现在的时间: "); scanf("%d",&(t->reachtime)); W->head->next=q->next; if(q==W->rear)W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } else printf("\n\n\t\t\t便道里没有车.\n"); } elseprintf("\n\n\t\t\t车场里没有车.\n");/*没车*/ system("pause"); } (4)显示车辆信息模块 voidList1(SeqStackCar*S)/*列表显示车场信息*/ { inti; if(S->top>0)/*判断车站内是否有车*/ { printf("\n\t\t\t车场: "); printf("\n\n\t\t\t位置到达时间车牌号\n"); for(i=1;i<=S->top;i++) { printf("%26d",i); printf("%6d",S->stack[i]->reachtime); printf("%10d",*S->stack[i]->num); printf("\n"); } } else printf("\n\t\t\t车场里没有车\n"); system("pause"); } voidList2(LinkQueueCar*W)/*列表显示便道信息*/ { QueueNode*p; p=W->head->next; if(W->head! =W->rear)/*判断通道上是否有车*/ { printf("\n\t\t\t等待车辆的号码为: "); while(p! =NULL) { printf("%10d",*p->data->num); p=p->next; } printf("\n"); } else printf("\n\t\t\t便道里没有车.\n"); system("pause"); } 第四章调试与操作说明 测试数据及结果如下: 假设输入停车场容量: 2,收费标准: 3.0元/时刻 图2停车场管理系统登陆界面 进入登陆界面后,显示停车场管理系统主菜单,如图3所示 图3停车场管理主菜单 输入A,表示车辆到达,连续输入两辆车的信息,并输入I显示管理系统子菜单,如图4所示 图4管理系统子菜单 由于便道中没有车辆,故输入1,显示车场信息,如图5所示 图5显示车场信息 输入3返回后,选择D,表示车辆离开;输入1,表示停在车场第一个位置的车辆离开,如图6所示 输入离开车辆位置: 1 图6显示离开车辆信息 连续输入第三、四辆车的信息,并显示,如图7所示 图7车辆3进入车场信息 输入2,显示便道停车信息,如图8所示 图8便道中车辆4的信息 第五章课程设计总结与体会 第六章致谢 在此我要感谢我的指导老师细心认真的辅导,感谢我的队友以及所有帮助我的人,没有他们的帮助,我的课程设计不可能按时,高效的完成。 更让我真正的了解了《数据结构》这门课程的广泛性和实用性。 第七章参考文献 [1]严蔚敏、吴伟民《数据结构(C语言版)》,北京: 清华大学出版社,2009年 [2]谭浩强《C程序设计(第三版)》,北京: 清华大学出版社,2008年 [3]严蔚敏、吴伟民、米宁《数据结构题集(C语言版)》,北京: 清华大学出版社 指导教师评语: 指导教师签名: 年月日 成绩评定 项目 权重 成绩 1、设计过程中出勤、学习态度等方面 0.1 2、设计技术水平 0.4 3、编程风格 0.2 4、设计报告书写及图纸规范程度 0.3 总成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 停车 管理 系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)