停车场信息管理系统(C语言)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 2//车库容量
#define price 0.05//每车每分钟费用

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;
}SeqStackCar;
typedef struct car
{
    CarNode *data;
    struct car *next;
}QueueNode;
typedef struct Node//模拟通道
{
    QueueNode *head;
    QueueNode *rear;
}LinkQueueCar;

void InitStack(SeqStackCar *);
int InitQueue(LinkQueueCar *);
int arrival(SeqStackCar *,LinkQueueCar *);
void leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);
void list(SeqStackCar,LinkQueueCar);

int main(void)
{
    SeqStackCar Enter,Temp;
    LinkQueueCar Wait;
    int ch;
    InitStack(&Enter);
    InitStack(&Temp);
    InitQueue(&Wait);

    while(1)
    {
        printf("|-----------------------------------------------|\n");
        printf("|        1.The car arrive        |\n");
        printf("|        2.The car leave            |\n");
        printf("|        3.The schedule            |\n");
        printf("|        4.Exit                |\n");
        printf("|-----------------------------------------------|\n");
        while(1)
        {
            scanf("%d",&ch);
            if(ch >= 1 &&ch <= 4)
                break;
            else
                printf("\nPlease choose: 1|2|3|4.");
        }
        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;
        }
    }
}

void InitStack(SeqStackCar *s)
{
    int i;
    s->top = 0;
    for(i = 0; i <= MAX; ++i)
    {
        s->stack[s->top] = NULL;
    }
}
int InitQueue(LinkQueueCar *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("\nPlease input the depart time:/**:**/");
    scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
    printf("\nThe number of the car:");
    puts(p->num);
    printf("\nThe time The car arrive:%d:%d",p->reach.hour,p->reach.min);
    printf("\nThe depart time:%d:%d",p->leave.hour,p->leave.min);
    A1 = p->reach.hour;
    A2 = p->reach.min;
    B1 = p->leave.hour;
    B2 = p->leave.min;
    printf("\nThe fee: %2.1f元",((B1-A1)*60+(B2-A2)*price));
    free(p);
}

int arrival(SeqStackCar *Enter,LinkQueueCar *W)
{
    CarNode *p;
    QueueNode *t;
    p = (CarNode *)malloc(sizeof(CarNode));
    flushall();
    printf("\nInput the number of the car(例:陜A1234):");
    gets(p->num);
    if(Enter->top < MAX)
    {
        Enter->top ++;
        printf("\nThe place of the car.",Enter->top);
        printf("\nThe time the car arrive:/**:**/");
        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(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{
    int i,room;
    CarNode *p,*t;
    QueueNode *q;
    if(Enter->top > 0)
    {
        while(1)
        {
            printf("\n请输入车在车场的位置/1--%d/",Enter->top);
            scanf("%d",&room);
            if(room >= 1 && room <= Enter->top)
                break;
        }
        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->next;
            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便道没有车");
        }
    }
    else
    {
        printf("\n车场里没有车。");
    }
}
void list1(SeqStackCar *S)
{
    int i;
    if(S->top > 0)
    {
        printf("\n车场:");
        printf("\n位置 到达时间 车牌号\n");
        for(i = 1; i <= S->top; ++i)
        {
            printf(" %d ",i);
            printf("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min);
            puts(S->stack[i]->num);
        }
    }
    else
    {
        printf("\n车场里没有车。");
    }
}
void list2(LinkQueueCar *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(SeqStackCar S,LinkQueueCar W)
{
    int flag,tag;
    flag = 1;
    while(flag)
    {
        printf("\n请选择 1|2|3:");
        printf("\n1.车场\n2.便道\n3.返回\n");
        while(1)
        {
            scanf("%d",&tag);
            if(tag >= 1 || tag <= 3)
            {
                break;
            }
            else
            {
                printf("\n请选择 1|2|3:");
            }
        }
        switch(tag)
        {
        case 1:
            list1(&S);
            break;
        case 2:
            list2(&W);
            break;
        case 3:
            flag = 0;
            break;
        default:
            break;
        }
    }
}
原文地址:https://www.cnblogs.com/tslDream/p/4454397.html