停车场项目

停车场项目需求

问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退出,待它走后在依次进入。汽车离开时按停放时间收费。

基本功能要求
(1)建立三个数据结构分别是:停放栈、让路栈、等候队列。
(2)输入数据模拟管理过程,数据(入或出,车号)

功能描述:进车登记、出车登记、按车牌号查询停车车辆信息、查询出入车记录、 查询场内车辆信息、查询等候车辆信息、退出系统。
(1)linux系统编写(链表、栈、队列);
(2)进车登记:登记车牌号以及入场时间;
(3)出车登记:计算出停车时间,记录车辆车牌;
(4)按车牌号查询车辆信息:停车时间,是否来过停车场,是否还在停车场;
(5)查询出入记录:所有车辆,包括已经离开的;
(6)查询场内车辆信息:列出所有场内车辆信息;
(7)查询等候车辆信息:显示等候车辆数量以及所有车牌号;
(8)退出系统。

头文件

#ifndef _HEADER_H_
#define _HEADER_H_

#define color_none      "\033[0m"
#define color_red       "\033[1;5;31m"
#define color_purple    "\033[1;5;35m"

#define success         100001
#define failure         100000
#define MAXSIZE         3

typedef int elem_type;

struct node
{
    elem_type data;
    int tm_sec;
    int tm_min;
    int tm_hour;
    int sec;
    int min;
    int hour;
    struct node *next;
};

typedef struct node Node;
typedef Node *link_node;

struct queue
{
    link_node front;
    link_node rear;
};

typedef struct queue queue;

typedef  struct sqStack
{
    int data[MAXSIZE];
    int tm_sec[MAXSIZE];
    int tm_min[MAXSIZE];
    int tm_hour[MAXSIZE];
    int top;
 }stack;

 void show();
 void PrintInfo();
 int init_queue(queue *q);
 int init_stack(stack *s);
 int list_init(link_node *list);
 int push_stack(stack *s);
 int traversal_stack(stack s);
 int search_stack(stack s);
 int search_node(link_node n, elem_type e);
 int enter_queue(queue *q, elem_type e);
 int delete_queue(stack *s, queue *q);
 int traversal_queue(queue q);
 int pop_top(stack *s, link_node *list);
 int pop_stack(stack *s, link_node *list);
 int transfer_stack_1(stack *s1, stack *s2, elem_type e);
 int transfer_stack_2(stack *s1, stack *s2);
 int all_in_out(stack s, link_node n);


#endif

主函数

#include <stdio.h>
#include "header.h"
#include <stdlib.h>

int main()
{
    char num[10];
    char enter[10];
    int ret ;

    queue wa_queue;
    stack s1, s2;
    link_node n;

    ret = init_queue(&wa_queue);
    if(failure == ret)
    {
        printf("init_queue failure!!!\n");
    }

    ret = init_stack(&s1);
    if(failure == ret)
    {
        printf("init s1 failure!!!\n");
    }

    ret = init_stack(&s2);
    if(ret == failure)
    {
        printf("init s2 failure!!!\n");
    }

    ret = list_init(&n);
    if(ret == failure)
    {
        printf("init n failure!!!\n");
    }

    show();

    while(1)
    {
        PrintInfo();
        fgets(num, 2, stdin);

        switch(num[0])
        {
            case '1':
            {
                ret = push_stack(&s1);
                if(ret == success)
                {

                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t停车成功!!!\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t停车场已满!!!\n"color_none);

                    ret = enter_queue(&wa_queue, ret);
                    if(failure == ret)
                    {
                        printf("\t\t\t\t\t车辆进入等待队列失败!!!\n");
                        fgets(enter, 2, stdin);
                        if (enter[0] == 10)
                        {
                            system("clear");
                        }
                    }
                    else
                    {
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t                                            \n");
                        printf(color_purple"\t\t\t\t\t车辆进入等待队列!!!\n"color_none);
                        fgets(enter, 2, stdin);
                        if (enter[0] == 10)
                        {
                            system("clear");
                        }
                    }
                }
                break;
            }

            case '2':
            {
                getchar();
                ret = traversal_stack(s1);
                if(failure == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有车辆信息!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                break;
            }

            case '3':
            {
                ret = search_stack(s1);
                if(success == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    ret = search_node(n, ret);
                    if(failure == ret)
                    {
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t                                            \n");
                        printf(color_red"\t\t\t\t\t**没有这个车辆!!!\n"color_none);
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                        fgets(enter, 2, stdin);
                        if (enter[0] == 10)
                        {
                        system("clear");
                        }
                    }
                    else
                    {
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                        fgets(enter, 2, stdin);
                        if (enter[0] == 10)
                        {
                            system("clear");
                        }
                    }
                }
                    break;
            }

            case '4':
            {
                ret = pop_top(&s1, &n);
                if(failure == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有这个车辆!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else if(success == ret)
                {
                    delete_queue(&s1, &wa_queue);

                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**出车成功!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    transfer_stack_1(&s1, &s2, ret);
                    ret = pop_stack(&s1, &n);
                    transfer_stack_2(&s1, &s2);
                    if(success == ret)
                    {   
                        delete_queue(&s1, &wa_queue);
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t############################################\n");
                        printf("\t\t\t\t\t                                            \n");
                        printf(color_red"\t\t\t\t\t**出车成功!!!\n"color_none);
                        printf("\t\t\t\t\t                                            \n");
                        printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                        fgets(enter, 2, stdin);
                        if (enter[0] == 10)
                        {
                            system("clear");
                        }
                    }

                }

                break;
            }
            case '5':
            {
                getchar();
                ret = all_in_out(s1, n);
                if(failure == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有车辆信息!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                break;
            }

            case '6':
            {
                getchar();
                ret = traversal_queue(wa_queue);
                if(failure == ret)
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf(color_red"\t\t\t\t\t**没有等待车辆!!!\n"color_none);
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t############################################\n");
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                else
                {
                    printf("\t\t\t\t\t                                            \n");
                    printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                    fgets(enter, 2, stdin);
                    if (enter[0] == 10)
                    {
                        system("clear");
                    }
                }
                break;
            }
            case '7':
            {
                exit(1);
            }

            case 10:  //回车键
            {
                system("clear");
                break;
            }

            default:
            {
                printf(color_red"\t\t\t\t\t**Unkown Input!\n"color_none);
                printf("\t\t\t\t\t                                            \n");
                printf("\t\t\t\t\t*************请按回车键进入界面*************\n");
                fgets(enter, 2, stdin);
                if (enter[0] == 10)
                {
                    system("clear");
                }
                break;
            }   
        }
    }
    return 0;
}

接口

#include <stdio.h>
#include <stdlib.h>
#include "header.h"
#include <time.h>

void show()
{
    char enter[10];
    system("clear");

    printf("\t\t\t\t\t                                              \n");
    printf("\t\t\t\t\t                                              \n");
    printf("\t\t\t\t\t                                              \n");
    printf("\t\t\t\t\t##############################################\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#***************");  
    printf(color_red"欢迎进入停车场"color_none);
    printf("***************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#*************");
    printf(color_purple"请按回车键进入界面"color_none);                   
    printf("*************#\n")  ;
    printf("\t\t\t\t\t#                                            #\n");
    printf("\t\t\t\t\t#********************************************#\n");
    printf("\t\t\t\t\t##############################################\n");
    fgets(enter, 2, stdin);
    if (enter[0] == 10)
    {
        system("clear");
    }
}

void PrintInfo()
{
    printf("\t\t\t\t\t###############################################\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#  1.进车登记             2.显示场内车辆信息  #\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#  3.查询停车车辆信息     4.出车登记          #\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#  5.查询出入车记录       6.查询等候车辆信息  #\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#  7.退出系统                                 #\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#*********************************************#\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#****************");  
    printf(color_red"按回车键清屏"color_none);
    printf("*****************#\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#*********************************************#\n");
    printf("\t\t\t\t\t#                                             #\n");
    printf("\t\t\t\t\t#请输入选项:");
}

int init_queue(queue *q)
{
    q->front = (link_node)malloc(sizeof(Node));
    if(NULL == q->front)
    {
        return failure;
    }

    q->front->next = NULL;
    q->rear = q->front;

    return success;
}

int init_stack(stack *s)
{
    int i;
    for(i = 0; i < MAXSIZE; i++)
    {
        s->data[i] = 0;
    }
    s->top = -1;
    return success;
}

int list_init(link_node *list)
{
    (*list) = (link_node)malloc(sizeof(Node));
    if(NULL == (*list))
    {
        return failure;
    }
    (*list)->next = NULL;
    return success;
}

int push_stack(stack *s)
{
    system("clear");
    int i = 0;
    elem_type e;
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t请输入车牌号:");
    scanf("%d", &e);
    getchar();

    if(s->top == MAXSIZE -1)
    {
        return e;
    }

    while(i <= s->top)
    {
        if(e == s->data[i])
        {
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t############################################\n");
            printf(color_red"\t\t\t\t\t车牌号重复,请重新输入:"color_none);
            scanf("%d", &e);
            getchar();
            i = 0;
            continue;
        }
        i++;
    }

    s->top++;
    s->data[s->top] = e;

    time_t now;
    struct tm *tm_now;
    now = time(NULL);
    tm_now = localtime(&now);

    s->tm_sec[s->top] = tm_now->tm_sec;
    s->tm_min[s->top] = tm_now->tm_min;
    s->tm_hour[s->top] = tm_now->tm_hour;

    return success; 
}

int traversal_stack(stack s)
{
    system("clear");
    if(s.top == -1)
    {
        return failure;
    }
    int i;
    time_t now;
    struct tm *tm_now;
    int sec, min, hour;

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t车牌号");
    printf("\t入场时间");
    printf("  \t停车时间\n" );

    for(i = s.top; i >= 0; i--)
    {
        now = time(NULL);
        tm_now = localtime(&now);

        hour = tm_now->tm_hour - s.tm_hour[i];
        min = tm_now->tm_min - s.tm_min[i];
        sec = tm_now->tm_sec - s.tm_sec[i];

        if(min < 0)
        {
            hour = hour - 1;
            min = min + 60;
        }

        if(sec < 0)
        {
            min = min - 1;
            sec = sec + 60;
        }


        printf("\t\t\t\t\t%d", s.data[i]);
        printf("\t%d:%d:%d", s.tm_hour[i], s.tm_min[i], s.tm_sec[i]);
        printf("  \t%d时%d分%d秒\n", hour, min, sec);
    }
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t场内车辆:%d 辆\n", s.top + 1);
    return success;

}

int search_stack(stack s)
{
    system("clear");
    elem_type e;
    int i;
    time_t now;
    struct tm *tm_now;
    int sec, min, hour;

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t请输入车牌号:");
    scanf("%d", &e);
    getchar();

    for(i = s.top; i >= 0; i--)
    {
        if(s.data[i] == e)
        {
            now = time(NULL);
            tm_now = localtime(&now);

            hour = tm_now->tm_hour - s.tm_hour[i];
            min = tm_now->tm_min - s.tm_min[i];
            sec = tm_now->tm_sec - s.tm_sec[i];

            if(min < 0)
            {
                hour = hour - 1;
                min = min + 60;
            }

            if(sec < 0)
            {
                min = min - 1;
                sec = sec + 60;
            }
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t############################################\n");
            printf(color_red"\t\t\t\t\t还在停车场内!\n"color_none);
            printf("\t\t\t\t\t车牌号");
            printf("\t入场时间");
            printf("  \t停车时间\n" );
            printf("\t\t\t\t\t%d", s.data[i]);
            printf("\t%d:%d:%d", s.tm_hour[i], s.tm_min[i], s.tm_sec[i]);
            printf("  \t%d时%d分%d秒\n", hour, min, sec);


            return success;
        }
    }

    return e;   
}

int search_node(link_node n, elem_type e)
{
    system("clear");
    link_node p = n->next;

    int sec, min, hour;

    while(p != NULL)
    {
        if(p->data == e)
        {
            hour = p->hour - p->tm_hour;
            min = p->min - p->tm_min;
            sec = p->sec - p->tm_sec;

            if(min < 0)
            {
                hour = hour - 1;
                min = min + 60;
            }

            if(sec < 0)
            {
                min = min - 1;
                sec = sec + 60;
            }
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t############################################\n");
            printf(color_red"\t\t\t\t\t来过停车场\n"color_none);
            printf("\t\t\t\t\t                                            \n");
            printf("\t\t\t\t\t############################################\n");
            printf("\t\t\t\t\t车牌号");
            printf("\t进场时间");
            printf("\t离开时间:");
            printf("  \t停车时间\n" );
            printf("\t\t\t\t\t%d", p->data);
            printf("\t%d:%d:%d", p->tm_hour, p->tm_min, p->tm_sec);
            printf("\t%d:%d:%d", p->hour, p->min, p->sec);
            printf("  \t%d时%d分%d秒", hour, min, sec);
            return success;
        }
        p = p->next;
    }

    return failure;
}

int enter_queue(queue *q, elem_type e)
{
    time_t now;
    struct tm *tm_now;
    link_node p = (link_node)malloc(sizeof(Node));
    if(NULL == p)
    {
        return failure;
    }
    now = time(NULL);
    tm_now = localtime(&now);

    p->data = e;
    p->tm_hour = tm_now->tm_hour;
    p->tm_min = tm_now->tm_min;
    p->tm_sec = tm_now->tm_sec;

    p->next = NULL;
    q->rear->next = p;
    q->rear = p;

    return success;
}

int delete_queue(stack *s, queue *q)
{
    time_t now;
    struct tm *tm_now;
    now = time(NULL);
    tm_now = localtime(&now);


    link_node p = q->front->next;
    if(p == NULL)
    {
        return failure;
    }

    if(q->front->next == q->rear)
    {
        s->top++;
        s->data[s->top] = p->data;
        s->tm_sec[s->top] = tm_now->tm_sec;
        s->tm_min[s->top] = tm_now->tm_min;
        s->tm_hour[s->top] = tm_now->tm_hour;
        q->rear = q->front;
        q->front->next = NULL;
        free(p);
        return success;
    }

    else
    {
        s->top++;
        s->data[s->top] = p->data;
        s->tm_sec[s->top] = tm_now->tm_sec;
        s->tm_min[s->top] = tm_now->tm_min;
        s->tm_hour[s->top] = tm_now->tm_hour;

        q->front->next = p->next;
        free(p);
        return success;
    }
}

int traversal_queue(queue q)
{
    system("clear");
    link_node p = q.front->next;
    time_t now;
    struct tm *tm_now;
    int hour, min, sec;
    int count = 0;
    if(p == NULL)
    {
        return failure;
    }

    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t车牌号");
    printf("\t进入等待时间");
    printf("  \t已等待时间\n");

    while(p != NULL)
    {
        now = time(NULL);
        tm_now = localtime(&now);

        hour = tm_now->tm_hour - p->tm_hour;
        min = tm_now->tm_min - p->tm_min;
        sec = tm_now->tm_sec - p->tm_sec;

        if(min < 0)
        {
            hour = hour - 1;
            min = min + 60;
        }

        if(sec < 0)
        {
            min = min - 1;
            sec = sec + 60;
        }
        count++;

        printf("\t\t\t\t\t%d", p->data);
        printf("\t%d:%d:%d", p->tm_hour, p->tm_min, p->tm_sec);
        printf("  \t%d时%d分%d秒\n", hour, min, sec);

        p = p->next;
    }
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t等待车辆:%d 辆\n", count);
    return success;
}

int pop_top(stack *s, link_node *list)
{
    system("clear");
    int i = s->top;
    link_node p = *list;
    link_node n = (link_node)malloc(sizeof(Node));

    time_t now;
    struct tm *tm_now;

    elem_type e;
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t                                            \n");
    printf("\t\t\t\t\t############################################\n");
    printf("\t\t\t\t\t请输入车牌号:");
    scanf("%d", &e);
    getchar();

    while(i >= 0)
    {
        if(s->data[i] == e && i == s->top)
        {

            now = time(NULL);
            tm_now = localtime(&now);

            n->data = s->data[s->top];
            n->tm_hour = s->tm_hour[s->top];
            n->tm_min = s->tm_min[s->top];
            n->tm_sec = s->tm_sec[s->top];

            n->hour = tm_now->tm_hour;

            n->min = tm_now->tm_min;

            n->sec = tm_now->tm_sec;

            s->top--;

            while(p->next != NULL)
            {
                p = p->next;
            }
            n->next = p->next;
            p->next = n;

            return success;
        }
        else if(s->data[i] == e && i != s->top)
        {
            return i;
        }
        i--;
    }

    return failure;
}

int pop_stack(stack *s, link_node *list)
{
    int i = s->top;
    link_node p = *list;
    link_node n = (link_node)malloc(sizeof(Node));

    time_t now;
    struct tm *tm_now;
    now = time(NULL);
    tm_now = localtime(&now);

    n->data = s->data[s->top];
    n->tm_hour = s->tm_hour[s->top];
    n->tm_min = s->tm_min[s->top];
    n->tm_sec = s->tm_sec[s->top];

    n->hour = tm_now->tm_hour;

    n->min = tm_now->tm_min;

    n->sec = tm_now->tm_sec;

    s->top--;

    while(p->next != NULL)
    {
        p = p->next;
    }
    n->next = p->next;
    p->next = n;

    return success;
}

int transfer_stack_1(stack *s1, stack *s2, elem_type e)
{
    while(s1->top != e)
    {
        s2->top++;
        s2->data[s2->top] = s1->data[s1->top];
        s2->tm_sec[s2->top] = s1->tm_sec[s1->top];
        s2->tm_min[s2->top] = s1->tm_min[s1->top];
        s2->tm_hour[s2->top] = s1->tm_hour[s1->top];
        s1->top--;
    }
    return success;

}

int transfer_stack_2(stack *s1, stack *s2)
{
    while(s2->top != -1)
    {
        s1->top++;
        s1->data[s1->top] = s2->data[s2->top];
        s1->tm_sec[s1->top] = s2->tm_sec[s2->top];
        s1->tm_min[s1->top] = s2->tm_min[s2->top];
        s1->tm_hour[s1->top] = s2->tm_hour[s2->top];
        s2->top--;
    }
    return success;
}

int all_in_out(stack s, link_node n)
{
    system("clear");
    link_node p = n->next;
    if(s.top == -1 && p == NULL)
    {
        return failure;
    }
    int i;
    time_t now;
    struct tm *tm_now;
    int sec, min, hour;

    printf("\t\t\t\t\t############################################\n");
    printf(color_red"\t\t\t\t\t场内车辆:\n"color_none);
    printf("\t\t\t\t\t********************************************\n");
    printf("\t\t\t\t\t车牌号");
    printf("\t入场时间");
    printf("  \t停车时间\n" );

    for(i = s.top; i >= 0; i--)
    {
        now = time(NULL);
        tm_now = localtime(&now);

        hour = tm_now->tm_hour - s.tm_hour[i];
        min = tm_now->tm_min - s.tm_min[i];
        sec = tm_now->tm_sec - s.tm_sec[i];

        if(min < 0)
        {
            hour = hour - 1;
            min = min + 60;
        }

        if(sec < 0)
        {
            min = min - 1;
            sec = sec + 60;
        }


        printf("\t\t\t\t\t%d", s.data[i]);
        printf("\t%d:%d:%d", s.tm_hour[i], s.tm_min[i], s.tm_sec[i]);
        printf("  \t%d时%d分%d秒\n", hour, min, sec);
    }

    printf("\t\t\t\t\t############################################\n");
    printf(color_red"\t\t\t\t\t已离开车辆:\n"color_none);
    printf("\t\t\t\t\t********************************************\n");
    printf("\t\t\t\t\t车牌号");
    printf("\t进场时间");
    printf("  \t离开时间");
    printf("  \t停车时间\n" );
    while(p != NULL)
    {
        hour = p->hour - p->tm_hour;
        min = p->min - p->tm_min;
        sec = p->sec - p->tm_sec;

        if(min < 0)
        {
            hour = hour - 1;
            min = min + 60;
        }

        if(sec < 0)
        {
            min = min - 1;
            sec = sec + 60;
        }

        printf("\t\t\t\t\t%d", p->data);
        printf("\t%d:%d:%d", p->tm_hour, p->tm_min, p->tm_sec);
        printf("  \t%d:%d:%d", p->hour, p->min, p->sec);
        printf("  \t%d时%d分%d秒\n", hour, min, sec);

        p = p->next;
    }
    return success;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值