📄 sjjgokcsj.txt
字号:
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 1
typedef int status ;
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
typedef struct
{int car_num;
time_t time;
}car_info;
typedef struct
{
car_info *base;
car_info *top;
status stacksize;
}sqstack;
void Initstack(sqstack *s)
{
s->base=(car_info *)malloc(STACK_INIT_SIZE*sizeof(car_info));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=0;
}
void push(sqstack *s,car_info e)
{
*s->top++=e;
s->stacksize++;
}
car_info pop(sqstack *s)
{car_info e;
if(s->top==s->base)
{printf("停车场内没有该车辆!\n");
exit(0) ;}
e=*--s->top;
s->stacksize--;
return e;
}
typedef struct Qnode
{
int car_num;
double time;
struct Qnode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
int lenth;
}LinkQueue;
status InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front)exit(OVERFLOW);
Q->front->next=NULL;
Q->lenth=0;
return OK;
}
void EnQueue(LinkQueue *Q,car_info *a )
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)exit(OVERFLOW);
p->car_num=a->car_num;
p->time=a->time;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
Q->lenth++;
}
QueuePtr DeQueue(LinkQueue *Q)
{ QueuePtr p,e,s={0};
if(Q->front==Q->rear)
{printf("便道上没有车辆!\n"); return s;}
p=Q->front->next;
e=p;
Q->front->next=p->next;
Q->lenth--;
if(Q->rear==p)Q->front=Q->rear;
//free(p);
return e;
}
void arrive(sqstack *s,LinkQueue *p,car_info a,int n)
{ char c;
if(s->stacksize<n)
{
push(s,a);
printf("\n车牌号为%d的车辆进入停车场%d号车道\n",a.car_num,s->stacksize);
}
else
{ if(p->lenth)
{
printf("等候的车辆为%d辆是否仍然等候 y or n\n",p->lenth);
c= getchar();
getchar();
if(c=='n')
exit(OVERFLOW);
}
EnQueue(p,&a);
printf("\n停车场已满,车牌号为%d的车辆停在便道的%d号位置\n",a.car_num,p->lenth);
}
}
void leave(sqstack *tcc,sqstack *dcc,LinkQueue *p,car_info u,float pay)
{
car_info x,ss;
QueuePtr b;
int find=1;
time_t arrivetime;
double cost=0.0;
while(find)
{
ss=pop(tcc);
push(dcc,ss);
if(ss.car_num==u.car_num)
{
find=0;
cost=(double)(u.time-ss.time)*pay;
arrivetime=ss.time;
}
}
pop(dcc); //把临时堆栈的第一辆车(要离开的)去掉;
while(dcc->stacksize)
{
x=pop(dcc);
push(tcc,x);
}
if(tcc->stacksize<2&&p->lenth!=0)
{
b=DeQueue(p);
x.car_num=b->car_num;
x.time=b->time;
push(tcc,x);
printf("车牌号为%d的车辆由便道进入停车场%d号车道\n",x.car_num,tcc->stacksize);
}
printf("\n**********************************************\n");
printf("|车牌号码|进站时刻|出站时刻|停留时间|停车费用|\n");
printf("|%-6d |%-6s |",u.car_num,ctime(&arrivetime));
printf("%s",ctime(&u.time ));
printf("%-6d |%-6.2f |\n",u.time-arrivetime,cost);
printf("**********************************************\n");
}
int menu()
{ int x;
scanf("%d",&x);
getchar();
return x;
}
void main()
{sqstack tcc,dcc;
LinkQueue p;
car_info a,u;
car_info *m;
int sum=1000,n,j;
float pay;
char sign;
time_t t1,t2,t3;
double cost1,cost2;
printf(" \n|************************停车场管理**************************|\n");
printf(" |******A/a:车辆到达*******D/d:车辆离开******E/e:推出系统*****|\n\n");
Initstack(&tcc);
Initstack(&dcc);
InitQueue(&p);
printf("请先输入停车场的车位总数,收费标准(元/小时):");
scanf("%d,%f",&n,&pay);
getchar();
printf(" |*************请输入服务项目*************|\n");
printf(" *********************************\n");
printf(" 1.查询\n");
printf(" 2.请求停车\n");
printf(" 3.请求离开\n");
printf(" 4.退出\n");
printf(" *********************************\n");
while(1)
{switch(menu())
{
case 1:
printf("\n************************************\n");
printf("|停车数|等待数|剩余车位|\n");
printf("|%-6d |%-6d|%-6d|",tcc.stacksize,p.lenth,n-tcc.stacksize);
printf("\n************************************\n");
if(tcc.stacksize<n)
printf("***************你可以停车************");
m=tcc.top;
j=tcc.stacksize;
time(&t3);
while(j)
{ cost1=double(t3-(*--tcc.top).time);
cost2=cost1*pay;
printf("\n**********************************************\n");
printf("|车牌号码| 进站时刻 | 已停留时间|停车费用|\n");
printf("|%-6d|%-6s|%-6f|%6f\n",(*tcc.top).car_num,ctime(&(*tcc.top).time),cost1,cost2);
printf("**********************************************\n");
j=j-1;
}
tcc.top=m;
break;
case 2:
printf("\n请输入A/D/E,车牌号,时刻:");
time(&t1);
a.time =t1;
scanf("%c,%d",&sign,&a.car_num);
getchar();
//while(sum)
//{
switch(sign)
{
case 'a':
case 'A':arrive(&tcc,&p,a,n);break;
case 'e':
case 'E':exit(OVERFLOW);break;
default : printf("输入有误请重试");break;
}
break;
case 3:
printf("\n请输入A/D/E,车牌号,时刻:");
time(&t2);
u.time =t2;
scanf("%c,%d",&sign,&u.car_num);
getchar();
switch(sign)
{
case 'D':
case 'd':leave(&tcc,&dcc,&p,u,pay);break;
case 'e':
case 'E':exit(OVERFLOW);break;
default :printf("输入有误请重试"); break;
}
break;
case 4: exit(OVERFLOW);break;
//printf("\n请输入A/D/E,车牌号,时刻:");
//scanf("%c,%d,%d",&sign,&a.car_num,&a.time);
//getchar();
//sum--;
}
}//getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -