实习报告4停车场管理程序_停车场管理系统程序
实习报告4停车场管理程序由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“停车场管理系统程序”。
暨南大学数据结构实习报告
题目:停车场模拟程序
专业:03计机
姓名:黄泳晞
学号:2003402054529 一. 问题描述:
设停车场是一个可停放n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆达到时间的先后顺序,依次由北向南排列(大门在最南端,最先达到的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退车车场为它让路,待赶辆车开出大门外,其它车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短叫纳费用。试为停车场编制按上述要求进行管理的模拟程序
二.算法思路
(1)两个栈和一个队列。
根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:当栈满后,继续来到的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,先排队的车辆先离开便道,进入停车场。由于排在停车场中间的车辆可以提出离开停车场,并且要求在离开车辆到停车场大门之间的车辆都必须先离开停车场,让此车离开,然后让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要用一个栈来保存为了让路离开停车场的车辆。所以本题要用两个栈和一个队列。
(2)操作: 栈: 进栈:车辆进入 出栈:车辆离开
查找:允许排中间的车辆先离开停车场,因此需要在栈中进行查找。(3)队列:进队:车辆进入 出队:车辆离开
查找:允许排中间的车辆先离开停车场,因此需要在队中进行查找。
三.概要设计:
1.函数:
void Incar()
车辆x进入停车场 void Outcar()
车辆x离开停车场 void Display()
显示停车场的状况
2.一系列算法:
int DelQueue_L(LQueue *q)void EnQueue_L(LQueue *q,int num1)void InitQueue_L(LQueue *q)ELEMTP Pop_Sq(SqStack *s)int Push_Sq(SqStack *s,ELEMTP x)void InitStack_Sq(SqStack *s)3.主程序: main(){
初始化;
do{
选择工作项目;
switch(字符)
{
case '1':
内容;
case '2':
内容;
while(条件)
{
判断输入时间合法性
};
调用车辆进入的函数;
case '3':
内容;
while(条件)
{
判断输入时间合法性
};
调用车辆离开的函数;
case '4':
程序结束
default:
输入数据错误
} } while(条件);
三.程序源代码:
#include #include #include #define N 2
//--------停车场容量----------------#define M 0.05
//--------停车场内每分钟单价--------#define O 0.02
//--------便道每分钟停车单价--------#define True 1 #define False 0;typedef struct time { int hour;int min;}Time;/*时间结点*/ typedef struct {
time hh,mm;int num;
//--------车牌号--------------------int arrtime;
//--------到达/离开时间-------------}ELEMTP;
//--------顺序栈的数据元素类型------typedef struct { ELEMTP elem[N];int top;}SqStack;
//--------顺序栈类型----------------typedef struct node { int num;
//--------车牌号/便道上的车辆数量---struct node *next;}QNode;
//--------链队列的数据元素类型------typedef struct { QNode *front, *rear;}LQueue;
//--------链队列类型----------------void InitStack_Sq(SqStack *s);
//--------初始化栈------------------int Push_Sq(SqStack *s,ELEMTP x);
//--------入栈----------------------ELEMTP Pop_Sq(SqStack *s);
//--------出栈----------------------void InitQueue_L(LQueue *q);
//--------初始化队列----------------void EnQueue_L(LQueue *q,int num1);
//--------入队列--------------------int DelQueue_L(LQueue *q);
//--------出队列--------------------
void Incar(SqStack *s1,LQueue *q,ELEMTP x){
//--------车辆x进入停车场-----------
void Outcar(SqStack *s1,SqStack *s2, LQueue *q,ELEMTP x,ELEMTP y){
double Money;
//--------车辆x离开停车场 int n,f,A1,A2,B1,B2;QNode *p;f=0;int f;f=Push_Sq(s1,x);if(f == 0){
//--------停车场栈s1已满入便道q-----
} else couttopfront->num
while((s1->top>0)&&(f!=1)){
//--------在栈s1中寻找车辆x
} if(y.num==x.num){
//--------寻找到车辆x------
} else{
//--------栈s1中未找到车辆x--------------
while(s2->top>0){
//--------将栈s2中的车辆倒回到栈s1中-----
} p=q->front;
//--------在便道q上找到车辆x--------------f=0;while(f==0 && p->next!=NULL)
if(p->next->num!=x.num)else{
A1=x.hh.hour;A2=y.hh.hour;B1=x.mm.min;B2=y.mm.min;p->next=p->next->next;q->front->num--;if(p->next==NULL)q->rear=q->front;p=p->next;y=Pop_Sq(s2);f=Push_Sq(s1,y);//-----------收费计算------------------A1=x.hh.hour;A2=y.hh.hour;B1=x.mm.min;B2=y.mm.min;Money=((A1-A2)*60+B1-B2)*M;couttop>0){
//--------将栈s2中的车辆倒回到栈s1中--
} n=DelQueue_L(q);if(n!=NULL){
//--------便道q上的第一辆车入栈s1------
} y.num=n;y.arrtime=x.arrtime;f=Push_Sq(s1,y);y=Pop_Sq(s2);f=Push_Sq(s1,y);
y=Pop_Sq(s1);if(y.num!=x.num)n=Push_Sq(s2,y);else f=1;couttop
}
}
cout
cout
//--------显示停车场的状况--------
void main(){
char ch1,ch2;SqStack *s1,*s2;LQueue *q;ELEMTP x,y;s1=(SqStack *)malloc(sizeof(SqStack));s2=(SqStack *)malloc(sizeof(SqStack));q=(LQueue *)malloc(sizeof(LQueue));InitStack_Sq(s1);InitStack_Sq(s2);int k;QNode *p;couttop!=0){
} else coutfront->num){
} else cout
车牌“front->next;p;p=p->next)cout
”num
车牌“top;k++)cout
”elem[k].num
InitQueue_L(q);cout
cout
2--车辆到达
3--车辆离开
4--程序结束n“;cout>ch1;switch(ch1){ case '1':
Display(s1,q);break;cout>x.num;cout>x.hh.hour;cin>>ch2;{
};while(ch2!= ':');cin>>x.mm.min;Incar(s1,q,x);cout>x.num;cout>x.hh.hour;cin>>ch2;{
};while(ch2!= ':');cout>x.hh.hour;cin>>ch2;cout>x.hh.hour;cin>>ch2;
cout
while(ch2!= ':')case '3':
while(ch2!= ':')
}
} cin>>x.mm.min;Outcar(s1,s2,q,x,y);cout>ch1;case '4': default: while(ch1!='4');}//--------main--------void InitStack_Sq(SqStack *s){ } int Push_Sq(SqStack *s,ELEMTP x){
} ELEMTP Pop_Sq(SqStack *s){
ELEMTP x;if(s->top==0){
} else { s->top--;x.num=NULL;x.arrtime=NULL;return(x);if(s->top==N)else {
} s->elem[s->top]=x;s->top++;return(1);return(0);s->top=0;
} } return(s->elem[s->top]);void InitQueue_L(LQueue *q){
} void EnQueue_L(LQueue *q,int num1){
} int DelQueue_L(LQueue *q){
} QNode *p;int n;if(q->front==q->rear)else {
} p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;n=p->num;free(p);q->front->num--;return(n);return(NULL);QNode *p;p=(QNode *)malloc(sizeof(QNode));p->num=num1;p->next=NULL;q->rear->next=p;q->rear=p;q->front->num++;q->front=(QNode *)malloc(sizeof(QNode));q->rear=q->front;q->front->next=NULL;q->front->num=0;四.调试与测试: 1.数据输入:
车辆1: 11111
进入时间:1:22
离开时间:4:44;
停留时间为:((4-1)*60+44-22)=202分钟
单价0.05元 收费应为 10.1元。
车辆2: 22222; 车辆3: 33333; 车辆4: 44444
车辆5: 55555;
详细数据如下:
车牌为“11111”与“22222”的车在停车场; 其余的在便道上等待。
2.数据输入后,测试车辆的离开
详细数据如下:
测试后,达到预期的效果,程序通过调试。
五.实习总结:
本次实习程序比较大,要理清思路才能快速的完成。通过这次实习,让我更加了解栈与队列等算法。