课程设计停车场管理系统.docx
- 文档编号:12691930
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:25
- 大小:260.24KB
课程设计停车场管理系统.docx
《课程设计停车场管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计停车场管理系统.docx(25页珍藏版)》请在冰点文库上搜索。
课程设计停车场管理系统
《数据结构》课程设计报告
设计题目:
停车场管理系统
专业:
网络工程
班级:
2013240701
学号:
201324070116
姓名:
刘村
目录
1.设计题目2
2.开发、运行环境2
3.需求分析2
4.概要设计2
5.用户说明书4
6.源代码4
7.测试结果与分析10
8.收获、体会及意见14
1.设计题目
停车场管理系统。
2.开发、运行环境
MicrosoftVisualC++6.0
3.需求分析
4.概要设计
1)抽象数据类型
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
栈以顺序结构实现,队列以链表实现。
程序中分别采用了“栈”和“队列”作为其存储结构。
“栈”的定义可知,每一次入栈的元素都在原栈顶元素之上成为新的元素,每一次出栈的元素总是当前栈顶元素使次栈元素成为新的栈顶元素,即最后进栈者先出栈。
程序中采用的结构是:
typedefstructNODE{//栈结构
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;/*模拟车库*/
“队列”是限定所有插入操作只能在表的一端进行,而所有的删除操作都只能在表的另一端进行。
插入端叫队尾,删除端叫对头。
按先进先出规则进行。
程序中采用的结构是:
typedefstructNode{//队列
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;/*模拟通道*/
2)算法设计的思想
1、当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。
2、当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。
之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。
3、用顺序结构实现栈,用链表实现队列。
3)流程图
停车场是
否已满
车辆是否
在停车场
是
否
否
是
输入离开时间并计算费用
直接离开
车辆进入便道等待
输入车辆信息车辆进入车库
便道是
否有车
否
是
输出等待车辆的车牌号
输出车辆信息
无操作
便道中第一辆车进入停车场
5.用户说明书
这个程序用来实现对停车场内车辆的管理,整个操作界面为中文,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适 应程序的操作。
对于进出停车场的时间,小时与分钟分开输入,同时提示当前系统时间,减少了错误的发生。
而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入4退出该运行程序。
至于使用过程中的更具体的问题,可以参照该报告书中调试分析那一项的屏幕截图,整个程序的运行界面大致就如上述屏幕截图的内容。
6.源代码
#include
#include
#include
#include
#defineMAX3
#defineprice0.05
typedefstructtime{//时间节点
inthour;
intmin;
}Time;
typedefstructnode{//车辆信息
charnum[10];
Timereach;
Timeleave;
}CarNode;
typedefstructNODE{//栈结构
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;
typedefstructcar{//队列节点
CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode{//队列
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;
voidInitStack(SeqStackCar*);//栈初始化
intInitQueue(LinkQueueCar*);//队列初始化
intArrival(SeqStackCar*,LinkQueueCar*);//车辆到达
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//车辆到达
voidList(SeqStackCar,LinkQueueCar);//列表显示
intmain()
{
intch;
SeqStackCarin,temp;
LinkQueueCarwait;
InitStack(&in);
InitStack(&temp);
InitQueue(&wait);
while
(1)
{
printf("*************************\n");
printf("***1.车辆到达登记******\n");
printf("***2.车辆离开登记******\n");
printf("***3.车辆列表显示******\n");
printf("***4.退出系统******\n");
printf("*************************\n");
while
(1)
{
scanf("%d",&ch);
if(ch>=1&&ch<=4)break;
elseprintf("\n请选择:
1~4.");
}
switch(ch)
{
case1:
Arrival(&in,&wait);break;
case2:
Leave(&in,&temp,&wait);break;
case3:
List(in,wait);break;
case4:
exit(0);
default:
break;
}
}
return0;
}
voidList1(SeqStackCar*S)
{
inti;
if(S->top>0)
{
printf("\n车场:
");
printf("\n位置\t到达时间\t车牌号\n");
for(i=1;i<=S->top;i++)
{
printf("%d\t",i);
printf("%d:
%d\t\t",S->stack[i]->reach.hour,S->stack[i]->reach.min);
printf("%s\n",S->stack[i]->num);
}
}
else
printf("\n车场里没有车");
}
voidList2(LinkQueueCar*W)
{
QueueNode*p;
p=W->head->next;
if(W->head!
=W->rear)
{
printf("\n等待车辆的号码为:
\n");
while(p!
=NULL)
{
printf("%s\n",p->data->num);
p=p->next;
}
}
elseprintf("\n便道里没有车.");
}
voidList(SeqStackCarS,LinkQueueCarW)
{
intflag,tag;
flag=1;
while(flag)
{
printf("\n请选择1|2|3:
");
printf("\n1.车场列表\n2.便道列表\n3.返回主菜单\n");
while
(1)
{
scanf("%d",&tag);
if(tag>=1||tag<=3)break;
elseprintf("\n请选择1~3:
");
}
switch(tag)
{
case1:
List1(&S);break;
case2:
List2(&W);break;
case3:
flag=0;break;
default:
break;
}
}
}
intInitQueue(LinkQueueCar*Q)
{
Q->head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->head!
=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return
(1);
}
elsereturn(-1);
}
voidInitStack(SeqStackCar*s)
{
inti;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
intArrival(SeqStackCar*Enter,LinkQueueCar*wait)
{
CarNode*p;
QueueNode*s;
p=(CarNode*)malloc(sizeof(CarNode));
printf("请输入车牌号(例:
豫A1234)");
scanf("%s",&p->num);
if(Enter->top { printf("当前系统时间: "); time_tnow; time(&now); printf("%s",ctime(&now)); Enter->top++; printf("车辆停在%d位置\n",Enter->top); printf("请输入到达时间(小时): "); while (1) { scanf("%d",&p->reach.hour); if(0<=p->reach.hour&&p->reach.hour<24)break; elseprintf("输入时间有误,请重新输入: "); } printf("请输入到达时间(分钟): "); while (1) { scanf("%d",&p->reach.min); if(0<=p->reach.min&&p->reach.min<60)break; elseprintf("输入时间有误,请重新输入: "); } Enter->stack[Enter->top]=p; printf("输入成功。 \n"); } else { s=(QueueNode*)malloc(sizeof(QueueNode)); printf("停车场已满,在便道等候.\n"); s->data=p; s->next=NULL; wait->rear->next=s; wait->rear=s; return (1); } return0; } voidPRINT(CarNode*p,introom) { printf("当前系统时间: "); time_tnow; time(&now); printf("%s",ctime(&now)); printf("\n车辆离开的时间(小时): "); while (1) { scanf("%d",&p->leave.hour); if(0<=p->leave.hour&&p->leave.hour<24)break; elseprintf("输入时间有误,请重新输入: "); } printf("\n车辆离开的时间(分钟): "); while (1) { scanf("%d",&p->leave.min); if(0<=p->leave.min&&p->leave.min<60)break; elseprintf("输入时间有误,请重新输入: "); } printf("\n离开车辆的车牌号为: "); puts(p->num); printf("\n其到达时间为: %d: %d",p->reach.hour,p->reach.min); printf("离开时间为: %d: %d",p->leave.hour,p->leave.min); printf("\n应交费用为: %2.1f元",((p->leave.hour-p->reach.hour)*60+(p->leave.min-p->reach.min))*price); free(p); } voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W) { introom; CarNode*p,*t; QueueNode*q; if(Enter->top>0) { while (1) { printf("\n请输入车在车场的位置/1--%d/: ",Enter->top); scanf("%d",&room); if(room>=1&&room<=Enter->top)break; } while(Enter->top>room) { Temp->top++; Temp->stack[Temp->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(Temp->top>=1) { Enter->top++; Enter->stack[Enter->top]=Temp->stack[Temp->top]; Temp->stack[Temp->top]=NULL; Temp->top--; } PRINT(p,room); if((W->head! =W->rear)&&Enter->top { q=W->head->next; t=q->data; Enter->top++; printf("\n便道的%s号车进入车场第%d位置.\n",t->num,Enter->top); printf("当前系统时间: "); time_tnow; time(&now); printf("%s",ctime(&now)); printf("\n请输入%s号车进入车场的时间(小时): ",t->num); while (1) { scanf("%d",&t->reach.hour); if(0<=t->reach.hour&&t->reach.hour<24)break; elseprintf("输入时间有误,请重新输入: "); } printf("\n请输入%s号车进入车场的时间(分钟): ",t->num); while (1) { scanf("%d",&t->reach.min); if(0<=t->reach.min&&t->reach.min<60)break; elseprintf("输入时间有误,请重新输入: "); } W->head->next=q->next; if(q==W->rear)W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } elseprintf("\n便道里没有车.\n"); } elseprintf("\n车场里没有车."); } 7.测试结果与分析 1)主菜单 2)车辆到达 3)停车场已满,车辆在便道等候 4)停车场车辆信息显示 5)便道车辆信息显示 6)车辆离开 7)退出系统 8.收获、体会及意见 通过本次课程设计,我对数据结构的理解进一步加深,我理解和掌握了每一段程序代码的功能及含义,并且能够实现模拟停车场管理的主要功能: 利用栈实现车的入库问题,利用队列完成车在便道上停放的问题,主要是通过栈和队列的初始化,调用等函数来模拟停车问题。 学习数据结构,我学会如何将所学的知识运用到实际中,解决一些实际的问题,这才是学习的根本。 当然在实验中我也遇到了不少实际性的问题,比如车辆停车的时间hour限制在24小时,min限制在60分钟之内,如果加入日期计算就更好了;在便道上等待的车辆,车主不可能无限制的等待,应该编写一个便道上车辆离开的函数更合理些。 编写的程度要与实际有联系,这就不能只依赖于课本,还要联系实际多多思考,重复调试,不断改进,才能编出一个符合实际的有价值的系统。 通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。 加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。 提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。 培养分析问题、解决实际问题的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 停车场 管理 系统