Learning journal day 4

Actual combat of Suqian project

Learning log name: Yang Yang (15090120) date: September 6, 2018

Today's learning tasks
Programming the parking lot system, which can perform the required operations: parking, driving, displaying the information of vehicles in the parking lot, waiting for the information of vehicles and exiting the system.

Task completion today

Basically completed

main.c

#include "park.h"

int main()
{
    char choice[16] = {0};
    stack park_stack, leaving_stack;
    queue wait_queue;

    welcome();
    init(&park_stack,&leaving_stack,&wait_queue);//chushihua zhan he duilie

    while (1)
    {
        menu();
        printf("xuanzegongneng: \n");
        memset(choice,0 ,8);  //qingkong
        scanf("%s",choice);

        switch(choice[0])
        {
            case '1':
                EnterPark(&park_stack,&wait_queue);
                break;
            case '2':
                OutPark(&park_stack,&leaving_stack,&wait_queue);
                break;
            case '3':
                ShowParkInfo(&park_stack);
                break;
            case '4':
                ShowWaitInfo(&wait_queue);
                break;
            case '5':
                bye();
                break;
        }
    }
    return 0;
}

park.c

#include <stdio.h>
#include "park.h"

void welcome()
{
    system("clear");  //qingchu pingmu
    printf("\n\n\n");
    printf("********************\n");
    printf("******huanying******\n");
    printf("********************\n");
    sleep(2);
}

void menu()
{
    system("clear");
    printf("\n\n\n");
    printf("\t\t 1.tingche\n");
    printf("\t\t 2.chuche\n");
    printf("\t\t 3.changneicheliangxinxi\n");
    printf("\t\t 4.denghoucheliangxinxi\n");
    printf("\t\t 5.tuichuxitong\n");
}

void bye()
{
    system("clear");
    printf("\t\t\t byebye!!\n");
    exit(1);  //tuichuchengxu
}

  //chushihua tingchezhan rangluzhan denghouduilie
void init(stack *s1, stack *s2, queue *q)
{
    int ret;

    ret = InitStack(s1);
    if (FAILURE == ret)
    {
        printf("Init Stack Failure!\n");
    }

    ret = InitStack(s2);
    if (FAILURE == ret)
    {
        printf("Init Stack Failure!\n");
    }

    ret = InitQueue(q);
    if (FAILURE == ret)
    {
        printf("Init Queue Failure!\n");
    }
}

void EnterPark(stack *s, queue *q)
{
    char id[32] = {0};  //baocun chepaihao
    int ret;

    printf("shuruchepaihao: \n");
    scanf("%s",id);

    ret = push(s,id);
    if (ret == FAILURE)
    {
        printf("push failure!\n");
    }
    else if (ret == FULL)  //zhan man
    {
        printf("tingchechangman,jinrudenghouqu.\n");
        sleep(2);
        EnterQueue(q,id);
    }
}

void ShowParkInfo(stack *s)
{
    if (NULL == s)
    {
        return;
    }
    if (s->top == -1)
    {
        printf("meiyoucheliang! \n");
        sleep(2);
        return;
    }

    int i;
    for (i=0;i<=s->top;i++)
    {
        printf("chepaihao: %s\n",s->CarData[i].id);
        printf("tingcheshichang: %d\n",(int)(time(NULL) - s->CarData[i].t));
        printf("*********\n");
    }
    printf("Press Enter Continue..\n");
    getchar();
    getchar();
}

void ShowWaitInfo(queue *q)
{
    if (NULL == q)
    {
        return;
    }
    node *p = q->front->next;
    while (p)  //while (p!= NULL)
    {
        printf("chepaihao: %s\n",p->id);
        p = p->next;
    }
    getchar();
    getchar();
}

void OutPark(stack *s1,stack *s2,queue *q)
{
    char *str;
    char id[32] = {0};
    int i=0;
    if (NULL == s1 || NULL == s2 || NULL == q)
    {
        return;
    }

    printf("shuruchepaihao: \n");
    scanf("%s",id);

    while (1)
    {
        if (!strcmp(s1->CarData[s1->top].id,id)) //chepaihao xiangtong
        {
            str = pop(s1);  //cheliang chuzhan
            free(str);
            while (EmptyStack(s2) !=SUCCESS) //rangluzhan buweikong
            {
                str = pop(s2);
                push(s1,str);
                free(str);
            }

            if(EmptyQueue(q) != SUCCESS)
            {
                str = DelQueue(q);
                push(s1,str);
                free(str);
            }
            break;
        }
        else
        {
            str = pop(s1);
            push(s2, str);
            free(str);
        }

        if (EmptyStack(s1) == SUCCESS)  //suoyou cheliang huidao tingchezhan
        {
            printf("cheliangbucunzai! \n");
            sleep(2);
            while (EmptyStack(s2) != SUCCESS)
            {
                str = pop(s2);
                push(s1, str);
                free(str);
            }
            break;
        }
    }
}

park.h

#ifndef PARK_H
#define PARK_H

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

#define MAXSIZE  5
#define SUCCESS  1000
#define FAILURE  1001
#define FULL     1002


struct CarInfo  //bao cun che liang xin xi
{
    char id[32];  //che pai hao
    time_t t;  //ting che shi jian
};
typedef struct CarInfo info;

struct Stack  //ting che/rang lu zhan
{
    info CarData[MAXSIZE];
    int top;    
};
typedef struct Stack stack;

struct Node  //biao shi denghou duile jiedian xinxi
{
    char id[32];
    struct Node *next;  //zhi zhen yu
};
typedef struct Node node;

struct Queue      //denghou duilie
{
    node *front;  //dui tou zhi zhen
    node *rear;   //dui wei zhi zhen
};
typedef struct Queue queue;

void welcome();
void menu();
void bye();
int InitQueue(queue *q);
void init(stack *s1, stack *s2, queue *q);
int InitStack(stack *s);
int EnterQueue(queue *q, char *id);
int push(stack *s,char *id);
void EnterPark(stack *s, queue *q);
void ShowParkInfo(stack *s);
void ShowWaitInfo(queue *q);
int EmptyStack(stack *s);
char *pop(stack *s);
int EmptyQueue(queue *q);
char *DelQueue(queue *q);
void OutPark(stack *s1,stack *s2,queue *q);

#endif

queue.c

#include "park.h"

int InitQueue(queue *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }
    node *p = (node *)malloc(sizeof(node)); //fenpei toujiedian
    if (NULL == p)
    {
        return FAILURE;
    }
    p->next = NULL;

    //duitouzhizhen he duiweizhizhen tongshi zhixiang toujiedian
    q->front = q->rear = p;

    return SUCCESS;
}

int EnterQueue(queue *q, char *id)
{
    if (NULL == q || NULL == id)
    {
        return FAILURE;
    }

    node *p = (node *)malloc(sizeof(node));
    if (NULL == p)
    {
        return FAILURE;
    }
    strcpy(p->id,id); //baocun chepaihao
    p->next = NULL;

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

    return SUCCESS;
}

int EmptyQueue(queue *q)
{
    if (NULL == q)
    {
        return FAILURE;
    }

    return (q->front == q->rear) ? SUCCESS : FAILURE;
}

char *DelQueue(queue *q)
{
    if (NULL == q)
    {
        return NULL;
    }

    char *id = (char *)malloc(32);
    if (NULL == id)
    {
        return NULL;
    }

    node *p = q->front->next;
    q->front->next = p->next;
    strcpy(id, p->id);
    free(p);

    if (p == q->rear)
    {
        q->rear = q->front;
    }

    return id;
}

stack.c

#include "park.h"

int InitStack(stack *s)
{
    if (NULL == s)
    {
        return FAILURE;
    }

    s->top = -1;  //chushihua cheng kongzhan

    return SUCCESS;
}

int push(stack *s,char *id)
{
    if (NULL == s || NULL == id)
    {
        return FAILURE;
    }  //rucan panduan

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

    strcpy(s->CarData[s->top + 1].id,id);
    s->CarData[s->top + 1].t = time(NULL);

    s->top++;

    return SUCCESS; 
}

char *pop(stack *s)
{
    char *id = (char *)malloc(32);
    if (NULL == id)
    {
        return NULL;
    }

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

    strcpy(id, s->CarData[s->top].id);
    s->top--;

    return id;
}

int EmptyStack(stack *s)
{
    if (NULL == s)
    {
        return FAILURE;
    }

    return (s->top == -1) ? SUCCESS : FAILURE;
}

Summary of problems in today's development
There are still many mistakes in typing code with the teacher

Open issues today
That's all right.

Today's development gains
Programming the parking lot system, which can perform the required operations: parking, driving, displaying the information of vehicles in the parking lot, waiting for the information of vehicles and exiting the system.

Self evaluation
commonly

Keywords: Programming

Added by techbinge on Sun, 05 Jan 2020 05:38:43 +0200