📄 carstop.txt
字号:
#include <stdio.h> /* 输入输出函数*/
#include <stdlib.h> /*输入输出函数*/
#include <malloc.h> /*动态分配函数*/
#include <conio.h> /*基本输入输出函数*/
#define MAX 2 /*车站容量*/
#define price 0.2 /*计费标准*/
#define OVERFLOW -2
#define ERROR 0
#define OK 1
/***************时间结点******************/
typedef struct time {
int hour;
int min;
}time;
/***************车辆结点******************/
typedef struct cardata{
int hao;
time arrive;
}cardata;
/*****************模拟车站********************/
typedef struct sqstackcar{
cardata *base;
cardata *top;
int place;
int stacksize;
}sqstackcar;
/*****************便道结点********************/
typedef struct Qnode{
cardata data;
struct Qnode *next;
}Qnode,*Queueptr;
/********************模拟便道*****************/
typedef struct LinkQueueCar{
Qnode *front;
Qnode *rear;
}LinkQueueCar;
/*****************初始化栈******************/
int Initsqstackcar(sqstackcar &s)
{
s.base=(cardata *)malloc(MAX*sizeof(cardata));
if(!s.base) return(OVERFLOW);
s.top=s.base;
s.place=0;
s.stacksize=MAX;
return OK;
}
/****************入栈函数*******************/
int push(sqstackcar &s,cardata *e)
{
if(s.top-s.base>=s.stacksize)
return ERROR;
s.top->hao=e->hao;
s.top->arrive.hour=e->arrive.hour;
s.top->arrive.min=e->arrive.min;
++s.top;
s.place=s.place+1;
return OK;
}
/*****************删除栈顶函数**************/
pop (sqstackcar &s,cardata *e)
{
if(s.top==s.base)
return ERROR;
--s.top;
e->hao=s.top->hao;
e->arrive.hour=s.top->arrive.hour;
e->arrive.min=s.top->arrive.min;
s.place--;
return OK;
}
/*****************建队函数********************/
int InitQueue(LinkQueueCar &Q)
{
Q.front=Q.rear=(Qnode *)malloc(sizeof(Qnode));
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
/*****************入队函数*********************/
int enQuene(LinkQueueCar &q,cardata *e)
{ Qnode *p;
p=(Qnode *)malloc(sizeof(Qnode));
if(!p) exit(OVERFLOW);
p->data.hao=e->hao;
p->data.arrive.hour=e->arrive.hour;
p->data.arrive.min=e->arrive.min;
p->next=NULL;
q.rear->next=p;
q.rear=p;
return OK;
}
/******************出队函数**********************/
DeQueue(LinkQueueCar &Q,cardata *e)
{
Queueptr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
e->hao=p->data.hao;
e->arrive.hour=p->data.arrive.hour;
e->arrive.min=p->data.arrive.min;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}
/*************车辆到达***********************/
int arrive(sqstackcar &s,LinkQueueCar &Q)
{
cardata *car;
car=(cardata *)malloc(sizeof(cardata));
printf(" \n\t\t 请输入车牌号:");
scanf("%d",&(car->hao));
printf(" \n\t\t 请输入你的到达时间/**:**/:");
canf("%d:%d",&(car->arrive.hour),&(car->arrive.min));
if(push(s,car))
printf("\n\t\t 该车的停放位置是:%d",s.place);
else
{
if(enQuene(Q,car))
{
printf("\n\t\t车站已满,请在便道中等待!\n");}
else
{
printf("\n\t\t对不起暂时不能进入便道,请稍后再试! \n ");
getch();}
}
return OK;
}
/********************车辆离开**********************/
void left(sqstackcar &s,LinkQueueCar &Q)
{ int a,b,c;
double money;
sqstackcar s1;
Initsqstackcar(s1);
cardata *e;
e=s.top-1;
printf("\n\t\t请输入离开的车牌号:");
scanf("%d",&a);
while(e->hao!=a&&e!=s.base-1)
{ pop(s,e);
push(s1,e);
}
printf("\n\t\t请输入离站时间/**:**/:");
scanf("%d:%d",&b,&c);
printf("\n\t\t 请确认你的时间记录\n\t\t");
printf("\n\t\t该车进站时间:
%d:%d\n",e->arrive.hour,e->arrive.min);
printf("\n\t\t该车出站时间:%d:%d\n",b,c);
money=price*((b-e->arrive.hour)*60+(c-e->arrive.min));
printf("\n\t\t所以您需支付:%.2f",money);
pop(s1,e);
while(s1.top!=s1.base)
{
pop(s1,e);
push(s,e);
}
if((s.top-s.base<=MAX)&&(Q.front!=Q.rear))
{
DeQueue(Q,e);
printf("\n\t\t%d号车即将进入车站,请输入到站时间/**:**/:",e->hao);
scanf("%d:%d",&(e->arrive.hour),&(e->arrive.min));
push(s,e);
}
}
/*****************查找函数**********************/
void print(sqstackcar &s,int num)
{
cardata e;
int n,i;
n=s.place;
i=1;
for(;i<=n;i++)
{
e=*(s.top-i);
if(e.hao==num)
{
printf("\n\t\t你所查询的车是%d\n",num);
printf("\n\t\t你所查询的车的位置%d:\n",n-i+1);
printf("\n\t\t其到达时间为/**:**/:
%d:%d",e.arrive.hour,e.arrive.min);
break;
}
else
{
printf("\n\t\t 对不起,暂时没有该车的记录,请你稍后再试! \n");
}
}
}
/*************整体查找*********************/
void quanbu(sqstackcar &s,LinkQueueCar &Q)
{
Queueptr p;
cardata *pcar=s.top;
int n; n=s.place;
if(s.top==s.base)
printf("\n\t\t站内没有车!\n");
else{ printf("\n\t\t 站基本情况如下:\n");
printf("\n\t\t牌号 位置 到达时间/**:**/\n");
for(;n>0;)
{
pcar--;
printf("\n\t\t%d%d%d:%d\n",
pcar->hao,n,pcar->arrive.hour,pcar->arrive.min);
n=n-1;
}
printf("\n");
}
if(Q.front==Q.rear)
printf("\n\t\t便道没有车!\n");
else
{
for(p=Q.front->next;p!=NULL;p=p->next)
{
printf("\n\t\t 便道基本情况如下牌号: \n");
printf("%d\n",p->data.hao);
}
}
}
/****************主菜单********************/
void minemu()
{
int ch; int num;
sqstackcar s;
LinkQueueCar Q;
Initsqstackcar(s);
InitQueue(Q);
while(1)
{
printf("\n\t\t\t欢迎使用车站管理系统\n ");
printf("\n\t1--车辆到达 2--车辆离开 3--车场概况 4--全部 5--退出系统\n");
printf(" \n\t\t 请输入你的选择:");
scanf("%d",&ch);
{
switch(ch)
{
case 1: arrive(s,Q);
printf("\n\t\请按任意键返回.......\n");
getch();
break;
case 2: left(s,Q);
printf("\n\n\t\t请按任意键返回.......\n");
getch();
break;
case 3: printf("\n\t\t 请输入你查询的车的牌号:");
scanf("%d",&num);
print(s,num);
printf("\n\t\t请按任意键返回.......\n");
getch();
break;
case 4: quanbu(s,Q);
printf("\n\t\t 请按任意键返回.......\n");
getch();
break;
case 5: exit(0); break;
}
}
}
}
/***************主函数********************/
void main()
{
minemu();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -