📄 停车场的管理.txt
字号:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "time.h"
#define null 0
#define Maxsize 4
void clear(char a[])
{
int i,counta;
counta=strlen(a);
for(i=0;i<counta;i++)
a[i]='\0';
}
struct car //定义车的结构体
{
char message[10];
char num[10];
char intime[10];
char outtime[10];
int expense;
int delay;
int position;
};
typedef struct //*****************************************栈*********************************
{
struct car d[Maxsize];
int top;
}SeqStack;
void init(SeqStack *s) //初始化栈
{
s->top=-1;
}
int isemptystack(SeqStack *s) //判断栈是否为空
{
if(s->top==-1)
return 1;
else
return 0;
}
int isfullstack(SeqStack *s) //判断栈是否为满
{
if(s->top==Maxsize-1)
return 1;
else
return 0;
}
void push(SeqStack *s,struct car x) // 进栈
{
if(!isfullstack(s))
{
s->top++;
s->d[s->top]=x;
}
}
struct car pop(SeqStack *s) //,取栈顶元素,出栈
{
car x;
if(s->top!=-1)
{
x=s->d[s->top];
s->top--;
return x;
}
}
car gettop(SeqStack *s) //取栈顶元素
{
car x;
if(s->top!=-1)
{
x=s->d[s->top];
return x;
}
}
//*************************************************栈*************************************
//*****************************************队列链表**************************************
typedef struct slnode //定义链队列的接点性质
{
struct car data;
struct slnode *next;
}slnodetype;
typedef struct //定义链的性质
{
slnodetype *head;
slnodetype *rear;
}linkq;
void initq(linkq *q) //初始化链队列
{
q->head=(slnodetype*)malloc(sizeof(slnodetype));
q->rear=q->head;
q->head->next=null;
q->rear->next=null;
}
void addq(linkq *q,struct car x) //进队列*************some problem
{
slnodetype *p;
p=(slnodetype*)malloc(sizeof(slnodetype));
p->data=x;
p->next=null;
q->rear->next=p;
q->rear=p;
}
struct car delq(linkq *q) //出链队列
{
slnodetype *p;
struct car x;
if(q->head!=q->rear)
{
p=q->head->next;
if(p->next==null)
{
x=p->data;
q->rear=q->head;
free(p);
}
else
{
q->head->next=p->next;
x=p->data;
free(p);
}
return x;
}
}
int isemptyq(linkq *q) //判断链队列是否为空
{
if(q->rear==q->head)
return 1;
else
return 0;
}
//*******************************队列链表***********************
void print1(struct car x) //进站前的信息
{
printf("车牌\t进站时间\t进/出站\t停留时间\t费用\n");
printf("%s\t\t",x.num);
printf("Movein\t\t\t\n");
}
void print3(struct car *x) //出站时的信息
{
printf("车牌 进站时间 进/出站 出站时间 原来位置 停留时间(秒) 费用(美分)\n");
printf("%s ",x->num);
printf("%s\t",x->intime);
printf("出 ");
printf(" %s\t",x->outtime);
printf(" %d\t ",x->position);
printf(" %d\t",x->delay);
printf("\t%d\n",x->expense);
}
void printstack(SeqStack *s)
{
int i;
if(isemptystack(s))
printf("车站内没有车.");
else
{
printf("\t车站内\n位置\t车牌\t进站时间 站内状况\n");
for(i=0;i<=s->top;i++)
{
printf("%d\t",s->d[i].position);
printf("%s\t",s->d[i].num);
printf("%s\n",s->d[i].intime);
}
printf("\t\t\t共%d辆",s->top+1);
if(s->top==Maxsize-1)
printf("(已满)\n");
else
printf("(还能放%d辆)\n",Maxsize-1-s->top);
printf("\n");
}
}
void printq(linkq *q)
{
if(!isemptyq(q))
{
slnodetype *p;
p=q->head->next;
printf("\t过道:\n车牌\t进道时间\n");
printf("%s\t%s\n",p->data.num,p->data.intime);
while(p->next!=null)
{
p=p->next;
printf("%s\t%s\n",p->data.num,p->data.intime);
}
}
else
printf("\n过道上没有车在等待\n");
}
void review(SeqStack *s,linkq *q) //查看车站和过道上的情况
{
printf("**************************************\n");
printstack(s);
printq(q);
printf("**************************************\n");
}
void gettime(char a[]) //获取时间
{
int i;
static char nowtime[30];
time_t t;
time(&t);
strcpy(nowtime,ctime(&t));
for(i=0;i<9;i++)
nowtime[i]=nowtime[i+11];
nowtime[i]='\0';
strcpy(a,nowtime);
}
void incar(SeqStack *s,linkq *q) //车进站 ****************************
{
struct car k;
static char nowtime1[10];
printf("请你输入车牌(2-5位):\n");
gets(k.num);
gettime(nowtime1);
strcpy(k.intime,nowtime1);
if(!isfullstack(s)&&isemptyq(q)) //如果车站不满,而且过道上没有车则,直接进入车站
{
k.position=(s->top)+2;
push(s,k);
printstack(s);
}
else if(isfullstack(s)||!isemptyq(q)) //如果过道上还有车,则必须放在过道上
{
printf("************************警告*******************************\n车站已满,请先暂时放在过道.\n现在情况如下:\n");
k.position=Maxsize;
addq(q,k);//放在过道上
printstack(s); //输出车站的情况
printq(q); //同时输出当时过道上的情况
printf("***********************************************************\n");
}
}
void outcar(SeqStack *s,linkq *q) //车出站
{
SeqStack p; //申请临时放车的地方
init(&p);
char nowtime[10];
int i,pos;
long cost;
int hour,min,sec;
struct car x,b,y1,y2,z;
if(isemptystack(s))
{
printf("车站是空的,不能再出站了!\n");
printf("\a");
}
else
{
printf("现在车站的情况是:\n");
printstack(s);
printf("你要出站的车的序号:\n");
scanf("%d",&pos);
if(pos>0&&pos<=s->top+1)
{
for(i=s->top+1;i>pos;i--)
{
x=pop(s);
x.position=x.position-1;
push(&p,x);
}
b=pop(s);
gettime(nowtime);
strcpy(b.outtime,nowtime);
hour=(b.outtime[0]-'0')*10+(b.outtime[1]-'0')-((b.intime[0]-'0')*10+(b.intime[1]-'0'));
min=(b.outtime[3]-'0')*10+(b.outtime[4]-'0')-((b.intime[3]-'0')*10+(b.intime[4]-'0'));
sec=(b.outtime[6]-'0')*10+(b.outtime[7]-'0')-((b.intime[6]-'0')*10+(b.intime[7]-'0'));
b.delay=hour*3600+min*60+sec;
cost=b.delay;
b.expense=cost;
print3(&b); //输出车出站时的情况---进入时间,出站时间,原来位置,花的费用等
while(!isemptystack(&p)) //车出来后把刚才退出的车重新放回
{
z=pop(&p);
push(s,z);
}
if(!isfullstack(s)&&!isemptyq(q))
{
y1=delq(q);
strcpy(y1.intime,nowtime);
push(s,y1);
}
while(!isfullstack(s)&&!isemptyq(q)) //只要过道上有车,就往车站里进,除非车站满了
{
y2=delq(q);
push(s,y2);
}
}
else
{
printf("没有你要的车号!\n");
printf("\a");
}
}
}
void main()
{
SeqStack park;
linkq q;
init(&park);
initq(&q);
char mess[10];
printf("\t\t\t车场管理系统\n\t\t\t\t------01软件学院 吴海松(2003.10.23)\n\n\n");
printf("提示:车站内最多只能放Maxsize(由系统中定义)辆车,多余的暂时放在过道上.\n车站内收费标准:1美分/秒,过道上不收费.\n");
printf("你想进行什么操作?\nin ---->车进站\nout ---->车出站\nlist ---->查看车站及过道中的情况\nhelp ---->获取帮助\nend ---->退出系统\n");
printf("\n操作:");
gets(mess);
while(1)
{
if(strcmp(mess,"end")==0)
{
printf("\t\t\t欢迎下次再来,再见!\n");
break;
}
else if(strcmp(mess,"help")==0)
{
printf("你想进行什么操作?\nin ---->车进站\nout ---->车出站\nlist ---->查看车站及过道中的情况\nhelp ---->获取帮助\nend ---->退出系统\n");
printf("操作:");
clear(mess);
gets(mess);
}
else
{
if(strcmp(mess,"list")==0)
{ review(&park,&q);
printf("操作:");
}
else if(strcmp(mess,"in")==0)
{ incar(&park,&q);
printf("操作:");
}
else if(strcmp(mess,"out")==0)
{ outcar(&park,&q);
}
else
printf("操作:");
clear(mess);
gets(mess);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -