资源描述
#include<stdio、h>
#include<stdlib、h>
#include<string、h>
#define MAX 3 /*车库容量*/
#define price 0、5 /*每车每分钟费用*/
typedef struct time
{
ﻩint hour;
int min;
}Time; /*时间结点*/
typedef struct node
{
char num[10];
ﻩTime reach;
Time leave;
}CarNode;/*车辆信息结点*/
typedef struct NODE
{
CarNode *stack[MAX + 1];
ﻩint top;
}Moni_Cheku;
typedef struct car
{
CarNode *data;
struct car *next;
}QueueNode;
typedef struct Node
{
ﻩQueueNode *head;
QueueNode *rear;
}Moni_Biandao;
void InitStack(Moni_Cheku *); /*初始化车库*/
int InitQueue(Moni_Biandao *);
/*初始化便道*/
int Arrival(Moni_Cheku *, Moni_Biandao *); /*车辆到达*/
void Leave(Moni_Cheku *, Moni_Cheku *, Moni_Biandao *); /*车辆离开*/
void List(Moni_Cheku, Moni_Biandao); /*显示车库与便道得存车信息*/
int main()
{
ﻩMoni_Cheku Enter, Temp;
Moni_Biandao Wait;
int ch;
InitStack(&Enter); /*初始化车站*/
ﻩInitStack(&Temp); /*初始化让路得临时链表*/
ﻩInitQueue(&Wait); /*初始化便道*/
printf("\n");
printf(" ^_^欢迎进入停车场管理系统1!^_^\n");
printf("\n");
ﻩprintf("提示! (1)、该车库得最大容量为:%d;\n", MAX); printf(" (2)、该车库得收费标准为:%4、2f元/(辆*分钟)、\n", price);
while (1)
ﻩ{
ﻩ system("CLS");
printf("********************主菜单********************\n");
ﻩﻩprintf("1、车辆到达");
ﻩprintf(" 2、车辆离开");
ﻩprintf(" 3、列表显示");
printf(" 4、退出系统\n");
ﻩ printf("**********************************************\n");
ﻩ printf("请选择(1-4):[ ]\b\b");
ﻩﻩwhile (1)
ﻩ{
ﻩﻩ scanf("%d",&ch);
ﻩ ﻩif (ch >= 1 && ch <= 4)break;
ﻩﻩﻩelse printf("错误!请重选(1-4):[ ]\b\b");
}
switch (ch)
ﻩ{
case 1:Arrival(&Enter, &Wait); break; /*车辆到达*/
ﻩcase 2:Leave(&Enter, &Temp, &Wait); break; /*车辆离开*/
case 3:List(Enter, Wait); break; /*打印列表信息*/
ﻩﻩcase 4:exit(0); /*退出主程序*/
default: break;
ﻩ }
}
ﻩreturn 0;
}
void InitStack(Moni_Cheku *s) /*初始化车库*/
{
ﻩint i;
ﻩs->top = 0;
ﻩfor (i = 0; i <= MAX; i++)
s->stack[s->top] = NULL;
}
int InitQueue(Moni_Biandao *Q) /*初始化便道*/
{
ﻩQ->head = (QueueNode *)malloc(sizeof(QueueNode));
ﻩif (Q->head != NULL)
ﻩ{
ﻩ Q->head->next = NULL;
Q->rear = Q->head;
ﻩreturn(1);
ﻩ}
ﻩelse return(-1);
}
void PRINT(CarNode *p, int room) /*输出出库车得信息*/
{
ﻩint A1, A2, B1, B2;
ﻩ{
printf("请输入离开得时间:/**:**/");
ﻩﻩscanf("%d:%d", &(p->leave、hour), &(p->leave、min));
ﻩ printf("离开车辆得车牌号为:");
puts(p->num);
printf("其到达时间为: %d:%d\n", p->reach、hour, p->reach、min);
ﻩprintf("离开时间为: %d:%d\n", p->leave、hour, p->leave、min);
ﻩ A1 = p->reach、hour;
ﻩA2 = p->reach、min;
B1 = p->leave、hour;
ﻩﻩB2 = p->leave、min;
printf("应交费用为:%4、2f元", ((B1 - A1) * 60 + (B2 - A2))*price);
ﻩﻩfree(p);
ﻩ}
}
int Arrival(Moni_Cheku *Enter, Moni_Biandao *W) /*车辆到达*/
{
ﻩCarNode *p;
ﻩQueueNode *t;
p = (CarNode *)malloc(sizeof(CarNode));
ﻩfflush(stdin);
ﻩprintf("请输入车牌号(例如:中CUG888):");
scanf("%s",&(p->num));
if (Enter->top < MAX) /*车库未满,车进车库*/
{
ﻩ Enter->top++;
printf("该车在车库位置%d、\n", Enter->top);
printf("请输入到达时间(**:**):");
scanf("%d:%d", &(p->reach、hour), &(p->reach、min));
ﻩﻩEnter->stack[Enter->top] = p;
ﻩ return(1);
ﻩ}
ﻩelse /*车库已满,车进便道*/
{
printf("该车须在便道等待!\n");
t = (QueueNode *)malloc(sizeof(QueueNode));
t->data = p;
ﻩﻩt->next = NULL;
ﻩW->rear->next = t;
ﻩ W->rear = t;
return(1);
}
}
void Leave(Moni_Cheku *Enter, Moni_Cheku *Temp, Moni_Biandao *W) /*车辆离开*/
{
int i, room;
CarNode *p, *t;
ﻩQueueNode *q;
ﻩ/*判断车库内就是否有车*/
if (Enter->top > 0) /*有车*/
ﻩ{
ﻩ printf("请输入车在车库得位置(1--%d):", Enter->top);/*输入车辆离开得信息*/
while (1)
{
ﻩ scanf("%d", &room);
ﻩﻩif (room >= 1 && room <= Enter->top) break;
ﻩelse printf("错误!请重选:");
ﻩﻩ}
ﻩwhile (Enter->top > room) /*车辆离开*/
{
ﻩﻩ Temp->top++;
ﻩ Temp->stack[Temp->top] = Enter->stack[Enter->top];
ﻩﻩﻩEnter->stack[Enter->top] = NULL;
ﻩEnter->top--;
ﻩﻩ}
p = Enter->stack[Enter->top];
ﻩEnter->stack[Enter->top] = NULL;
Enter->top--;
while (Temp->top >= 1)
ﻩ {
ﻩﻩEnter->top++;
ﻩﻩEnter->stack[Enter->top] = Temp->stack[Temp->top];
ﻩ Temp->stack[Temp->top] = NULL;
ﻩ Temp->top--;
ﻩ }
PRINT(p, room); /*判断通道上就是否有车及车库就是否已满*/
ﻩif ((W->head != W->rear) && Enter->top < MAX) /*便道得车辆进入车库*/
ﻩ {
ﻩ q = W->head->next;
ﻩﻩﻩt = q->data;
ﻩ ﻩEnter->top++;
ﻩﻩ printf("\n便道得%s号车进入车场第%d位置、", t->num, Enter->top);
ﻩﻩﻩprintf("\n请输入现在得时间(**:**):");
ﻩﻩscanf("%d:%d", &(t->reach、hour), &(t->reach、min));
ﻩﻩﻩW->head->next = q->next;
ﻩﻩ if (q == W->rear) W->rear = W->head;
ﻩEnter->stack[Enter->top] = t;
ﻩ ﻩfree(q);
ﻩ }
ﻩelse printf("\n便道里没有车、\n");
ﻩ}
ﻩelse printf("车库里没有车!\n"); /*没车*/
}
void List1(Moni_Cheku *S) /*列表显示车库信息*/
{
ﻩint i;
ﻩif (S->top > 0) /*判断车库内就是否有车*/
{
ﻩﻩprintf("车库号 到达时间 \t车牌号\n");
ﻩfor (i = 1; i <= S->top; i++)
ﻩ {
ﻩﻩﻩprintf(" %d ", i);
ﻩﻩﻩprintf(" \t%d:%d", S->stack[i]->reach、hour, S->stack[i]->reach、min);
ﻩ ﻩprintf("\t\t%s\n",S->stack[i]->num);
ﻩﻩ}
ﻩ}
ﻩelse printf("车库里没有车\n");
}
void List2(Moni_Biandao *W) /*列表显示便道信息*/
{
QueueNode *p;
ﻩp = W->head->next;
if (W->head != W->rear) /*判断便道上就是否有车*/
ﻩ{
ﻩﻩprintf("在便道里等待得车辆得号码为:\n");
ﻩ while (p != NULL)
ﻩ {
puts(p->data->num);
ﻩ p = p->next;
ﻩ }
ﻩ}
else printf("便道里没有车、\n");
}
void List(Moni_Cheku S, Moni_Biandao W)
{
int flag, tag;
ﻩflag = 1;
ﻩwhile (flag)
ﻩ{
printf("**********查瞧**********\n");
printf("1、车库2、便道3、返回\n");
ﻩ printf("************************\n");
ﻩ printf("请选择(1-3):[ ]\b\b");
ﻩ while (1)
ﻩﻩ{
ﻩﻩ scanf("%d", &tag);
ﻩﻩﻩif (tag >= 1 && tag <= 3) break;
ﻩ else printf("错误!请重选(1-3):[ ]\b\b");
ﻩ }
ﻩ switch (tag)
ﻩ {
case 1:
List1(&S);
ﻩ break;/*列表显示车库信息*/
case 2:
ﻩ List2(&W);
break; /*列表显示便到信息*/
ﻩﻩcase 3:
flag = 0;
ﻩ break;
ﻩ default:
ﻩ break;
ﻩ }
ﻩ}
}
展开阅读全文