C语言课设之停车场管理系统.docx
- 文档编号:23355698
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:15
- 大小:220.08KB
C语言课设之停车场管理系统.docx
《C语言课设之停车场管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之停车场管理系统.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课设之停车场管理系统
C语言课程设计
实习报告
目录
一.题目要求
二.需求分析
三.总体设计
四.具体程序
五.上机操作及使用说明
六.存在问题与不足
七.学习心得
停车场管理
一.题目要求
1.设计一个停车场用长度为N的堆栈来模拟。
由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。
2.程序输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
二.需求分析
根据题目要求首先设计一个堆栈,以堆栈来模拟停车场,又每辆汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素设计成汽车的车牌号。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。
这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。
当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。
另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。
由于时间不像汽车一样需要让道,可设计了一个顺序表来存放时间。
又用顺序表用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。
三.总体设计
车进入车场
不做任何计算
无点x
有
输入离开车辆的离开时间,进行停车费用的计算
此车后面的车辆退出并进入临时栈
车子离开
四.具体程序
#include
#include
#defineSIZE3
#defineNULL0
typedefstruct
{inthour;
intmin;
}time;
typedefstruct
{intnum;
intposition;
timet;
floatmoney;
}Car;
typedefstruct
{Carelem[SIZE+1];
inttop;
}Stack;
typedefstructNode
{Cardata;
structNode*next;
}CQueueNode;
typedefstruct
{CQueueNode*front;
CQueueNode*rear;
}LinkQueue;
voidInitStack(Stack*S)
{S->top=0;}
voidPush(Stack*S,Car*r)
{S->top++;
S->elem[S->top].num=r->num;
r->position=S->elem[S->top].position=S->top;
S->elem[S->top].t.hour=r->t.hour;
S->elem[S->top].t.min=r->t.min;
}
intIsEmpty(Stack*S)
{return(S->top==0?
1:
0);}
intIsFull(Stack*S)
{return(S->top==SIZE?
1:
0);}
intGetTop(Stack*S,Car*n)
{n->num=S->elem[S->top].num;
n->position=S->elem[S->top].position;
n->t.hour=S->elem[S->top].t.hour;
n->t.min=S->elem[S->top].t.min;
return1;
}
voidInitQueue(LinkQueue*Q)
{Q->front=(CQueueNode*)malloc(sizeof(CQueueNode));
if(Q->front!
=NULL)
{Q->rear=Q->front;
Q->front->next=NULL;}
}
intEnterQueue(LinkQueue*Q,Car*t)
{CQueueNode*NewNode;
NewNode=(CQueueNode*)malloc(sizeof(CQueueNode));
if(NewNode!
=NULL)
{NewNode->data.num=t->num;
NewNode->data.t.hour=t->t.hour;
NewNode->data.t.min=t->t.min;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return1;
}
elsereturn0;
}
intDeleteQueue(LinkQueue*Q,Car*x)
{CQueueNode*p;
if(Q->front==Q->rear)
return0;
p=Q->front->next;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
x->num=p->data.num;
x->t.hour=p->data.t.hour;
x->t.min=p->data.t.min;
free(p);
return1;
}
voidprint1(Stack*S)
{inttag;
Carx;
printf("停车场停车情况:
\n");
if(IsEmpty(S))
printf("无车!
");
for(tag=S->top;S->top>0;S->top--)
if(GetTop(S,&x))
printf("车牌号%d,所在位置%d,到达/离开时间%d:
%d\n",x.num,x.position,x.t.hour,x.t.min);
S->top=tag;
}
voidprint2(LinkQueue*Q)
{CQueueNode*p;
p=Q->front->next;
for(;p!
=NULL;p=p->next)
printf("等待车牌号%d,到达/离开时间%d:
%d",p->data.num,p->data.t.hour,p->data.t.min);
}
voidTaM(Car*r,inth,intm)
{if(m>r->t.min)
{r->t.min+=60;r->t.hour-=1;}
h=r->t.hour-h;
m=r->t.min-m;
printf("\n停车%d小时%d分钟\n",h,m);
printf("每小时收费30元\n");
h=h*60;m=h+m;
r->money=0.5*m;
printf("请支付金额%.2f元\n",r->money);
}
voidIn(Stack*S,LinkQueue*Q,Car*r)
{if(IsFull(S))
{printf("车库已满,请等待!
");
EnterQueue(Q,r);
}
else
{Push(S,r);
printf("\n您现在所在位置%d",r->position);
}
}
voidOut(Stack*S,Stack*S0,Car*r,LinkQueue*Q)
{inttag=S->top;
Carx;
if(IsEmpty(S))printf("没有此车!
");
else
{for(;r->num!
=S->elem[tag].num&&tag>0;tag--)
{Push(S0,&S->elem[tag]);
S->top--;
}
if(r->num==S->elem[tag].num)
{TaM(r,S->elem[tag].t.hour,S->elem[tag].t.min);
S->top--;
for(;S0->top>0;S0->top--)
Push(S,&S0->elem[S0->top]);
if(S->top
=Q->rear)
{DeleteQueue(Q,&x);
Push(S,&x);
}
}
elseif(tag==0)
{printf("未进入停车场应支付金额0元!
");
for(;S0->top>0;S0->top--)
Push(S,&S0->elem[S0->top]);
}
}
}
voidprint()
{printf("\n***********************************欢迎光临*************************************\n");
printf("\n请选择:
\n");
printf("\n1:
到达");
printf("\n2:
离开");
printf("\n3:
搜索");
printf("\n4:
退出\n");
printf("\n");
}
intmain()
{intn,m,i=1,j,flag=0;
Carc[10];
Carx;
StackS,S0;
LinkQueueQ;
InitStack(&S);
InitStack(&S0);
InitQueue(&Q);
while
(1)
{print();
scanf("%d",&m);
switch(m)
{case1:
printf("\n请输入车牌号:
");
scanf("%d",&c[i].num);
printf("\n请输入到达/离开时间:
");
scanf("%d:
%d",&c[i].t.hour,&c[i].t.min);
In(&S,&Q,&c[i]);i++;
break;
case2:
printf("\n请输入车牌号:
");
scanf("%d",&n);
for(j=0;j<10;j++)
if(n==c[j].num)break;
printf("\n请输入到达/离开时间:
");
scanf("%d:
%d",&c[j].t.hour,&c[j].t.min);
Out(&S,&S0,&c[j],&Q);break;
case3:
print1(&S);print2(&Q);break;
case4:
flag=1;break;
default:
printf("\n输入错误,请输入1,2,3或4");
}
if(flag)break;
}return0;
}
五.上机操作及使用说明
运行MicrosoftVisualC++,进入运行状态:
1.主菜单:
根据页面提示,输入相应数字。
2.车辆到达:
车辆到达停车场,输入数字1,根据页面提示输入车牌号和到达时间。
页面将显示车辆目前所处位置
4.停车场情况查询:
该程序可提供随时查询,输入数字3,可获知停车场现在停车情况。
停车场无车:
停车场有车:
5.车辆离开
车辆离开,输入数字2,页面显示该车停放具体情况,包括总计停放时间以及相应金额。
六.存在问题与不足
本程序只考虑到数字操作,字母、字符无法执行,因时间问题未作进一步完善。
以及对于堆栈知识的不熟悉导致程序有本质上的繁杂,应彻底完善。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 停车场 管理 系统