📄 parking.~cpp
字号:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
int PARKMENT_SIZE;
float ave1,ave;
#define STACKINCREMENT 1
typedef struct{
int num;
float time;
}SQ;
typedef struct{
SQ *base;
SQ *top;
int stacksize;
}SqStack;
typedef struct QNode{
SQ data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int InitStack(SqStack &S){
S.base=(SQ *)malloc(PARKMENT_SIZE*sizeof(SQ));
if(!S.base) exit(0);
S.top=S.base;
S.stacksize=PARKMENT_SIZE;
return 1;
}
void GetTop(SqStack S,SQ &e){
if(S.top==S.base) return ;
e=*(S.top-1);
}
void Push(SqStack &S,SQ e){
*S.top++=e;
}
void Pop(SqStack &S,SQ &e){
if(S.top==S.base)return ;
e=*--S.top;
}
int EmptyStack(SqStack S){
if(S.top==S.base) return 1;
else return 0;
}
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit(0);
Q.front->next=NULL;
}
void GetHead(LinkQueue Q,SQ &e){
if(Q.front==Q.rear) return;
e=Q.front->next->data;
}
void EnQueue(LinkQueue &Q,SQ e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->data=e; p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
int EmptyQueue(LinkQueue Q){
if(Q.front==Q.rear)return 1;
return 0;
}
void DeQueue(LinkQueue &Q,SQ &e){
QueuePtr p;
if(Q.front==Q.rear) return ;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
}
SqStack s1,s2;
LinkQueue q,q2;
SQ ss,qq;
int in=1,out=1;
void a(SQ &s){
printf("\n请输入到达车辆的车牌号码: ");
scanf("%d",&s.num);
printf("\n请输入车辆到达的时间: ");
scanf("%f",&s.time);
}
void arr()
{
if(in<=s1.stacksize)
{
a(ss);
Push(s1,ss);
printf("\n车牌为 %d 的车辆在停车场内所在的位置: %d 号位\n",ss.num,in);
in++;
}
else
{
printf("\n\n停车场中的位置已满,车辆只能停在便道上!!!!!!!!。\n");
a(ss);
EnQueue(q,ss);
printf("\n车牌为 %d 的车辆在便道上的位置: %d 号位\n",ss.num,out);
++out;
}
}
void left()
{
SQ t,tt;
int e,i=1,j=1;
float tm1,f,money,tm,money1;
printf("\n请输入离开车辆的车牌号码: ");
scanf("%d",&e);
printf("\n请输入车辆的离开时间: ");
scanf("%f",&f);
t.num=e; t.time=f;
GetTop(s1,tt);
while(t.num!=tt.num && !EmptyStack(s1) )
{
Pop(s1,tt);
Push(s2,tt);
GetTop(s1,tt);
}
if( t.num==tt.num )
{
tm=t.time-tt.time;
money=ave*tm;
printf("\n该车辆在车场内停留了: %f 小时 .",tm);
printf("\n\n该车辆应付的款为(%f元/小时): %f .再见!",ave,money);
Pop(s1,ss);
--in;
}
else {j=0;}
while(!EmptyStack(s2))
{
Pop(s2,ss);
Push(s1,ss);
}
if(j==1 && !EmptyStack(s1))
{
if(!EmptyQueue(q))
{
DeQueue(q,ss);
out--;
tm1=t.time-ss.time;
money1=ave1*tm1;
ss.time=t.time;
Push(s1,ss);
++in;
printf("\n\n 由于停车场内走了一辆车,所以车牌为 %d 的车辆由便道进入停车场的时间为:%f。\n",ss.num,ss.time);
printf("\n %d号车已在便道等候了%f小时,所以应交钱%f元。谢谢。\n",ss.num,tm1,money1);
}
}
if(j==0)
{
GetHead(q,ss);
while(!EmptyQueue(q) && ss.num!=t.num)
{
DeQueue(q,ss);
EnQueue(q2,ss);
GetHead(q,ss);
}
if(ss.num==t.num)
{
float tmb;
tmb=t.time-ss.time;
money=ave1*tmb;
DeQueue(q,ss);
printf("\n该车辆由便道上开走,该汽车应交停车费(%f)为:%f \n元。再见! ",ave1,money);
}
else { printf("\n出错,请核对车牌号码。\n"); }
while(!EmptyQueue(q2))
{
DeQueue(q2,ss);
EnQueue(q,ss);
}
}
}
list(SqStack s1)
{
printf("\n 车牌 进入时间");
while(!EmptyStack(s1))
{
*s1.top--;
printf("\n %d %f",s1.top->num,s1.top->time);
}
return 0;
}
void main()
{
int eof=1;
char ch;
printf(" &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
printf("\n 欢迎来到2001(6)宗宗设计的停车场管理系统");
printf("\n &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
printf("\n请输入停车场所能停放车辆数:");
scanf("%d",&PARKMENT_SIZE);
printf("\n请输入停车场每小时停车费用(元):ave=");
scanf("%f",&ave);
printf("\请输入便道每小时停车费用(元): ave1=");
scanf("%f",&ave1);
InitStack(s1);InitStack(s2);InitQueue(q);InitQueue(q2);
while(eof==1)
{
printf("\n\n ********** 停车场管理系统 *********");
printf("\n 输入字母 A or a表示车辆到达;");
printf("\n 输入字母 D or d表示车辆离开;");
printf("\n 输入字母 E or e表示退出系统;");
printf("\n 输入字母 L or l表示列出当前停车场内的车辆。");
printf("\n\n 请输入你所需要的上述字母(然后按回车键):");
ch=getchar();
switch(ch)
{
case 'A':
case 'a': arr(); break;
case 'D':
case 'd': left(); break;
case 'E':
case 'e': eof=0; break;
case 'L':
case 'l': list(s1);break;
default: printf("\n\n ******Pay attention!Don't input the wrong word!*******");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -