学习日志

苏嵌项目实战学习日志


姓名:高奇
日期:2018/09/06


今日学习任务
编写停车场系统的相关程序,并且成功编译运行


今日学习情况
基本能够跟上


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);   //初始化栈和队列

    while(1)
    {
        menu();
        printf("选择功能:\n");
        memset(choice,0,8);   //清空
        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;  
        }


    }

park.c

#include 
#include "park.h"


////////////////
void welcome()
{
    system("clear");     //清屏
    printf("\n\n\n");
    printf("************\n");
    printf("*******欢迎*********\n");
    printf("************\n");
    sleep(2);
}

//////////////////
void menu()
{   
    system("clear");
    printf("\n\n\n");
    printf("\t\t 1、停车\n");
    printf("\t\t 2、出车\n");
    printf("\t\t 3、场内车辆信息\n");
    printf("\t\t 4、等候车辆信息\n");
    printf("\t\t 5、退出系统\n");
}

/////////////////
void  bye()
{
    system("clear");
    printf("\t\t byebye!\n");
    exit(1);   //退出整个程序
}

/////////初始化停车栈,让路栈,等候队列
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};    //保存车牌号
    int ret;

    printf("请输入车牌号:  \n");
    scanf("%s",id);

    ret = push(s,id);
    if(FAILURE== ret)
    {
        printf("push failure !\n");
    }
    else if(ret==FULL)   //栈满
    {
        printf("停车场满,进入等候区。\n");
        sleep(2);
        EnterQueue(q,id);

    }
}

////////////
void ShowParkInfo(stack s)
{
    if(s.top==-1)    //入参判断
    {
        printf("没有车辆\n");
        sleep(2);
        return;
    }
    int i;
    for(i=0;i<=s.top;i++)
    {
        printf("车牌号:%s\n",s.CarData[i].id);
        printf("停车时间 %d\n",time(NULL)-s.CarData[i].t);
        printf("************\n");
    }
        printf("enter contiue\n");
        getchar();
        getchar();
}

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

//////////////////////
void OutPark(stack *s1,stack *s2,queue *q)
{
    char id[32]={0};
    char *str;
    if(NULL==s1||NULL==s2||NULL==q)
    {
        return;
    }
    printf("输入车牌号: \n");     
    scanf("%s",id);  

    while(1)
    {
        if(!strcmp(s1->CarData[s1->top].id,id))  //车牌号相等
        {
            str = pop(s1);   //1,车辆出栈
            free(str);
            while(EmptyStack(s2)!=SUCCESS)     //2.让路栈不为空
            {
                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);

queue.c

#include "park.h"

int InitQueue(queue *q)
{
    if(NULL==q)    //入参判断
    {
        return FAILURE;
    }
    node *p=(node *)malloc(sizeof(node));    //分配头节点
    if(NULL==p)    
    {
        return FAILURE;
    }
    p->next=NULL;

    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);   //保存车牌号
    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(p->id,id);
    free(p);

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

stack.c

#include "park.h"

////////////////////
int InitStack(stack *s)
{
    if(NULL==s)             //入参判断
    {
        return FAILURE;
    }
    s->top=-1;   //初始化为空栈

    return SUCCESS; 
}

//////////////
int push(stack *s, char *id)
{
    if(NULL==s||NULL==id)    //入参判断
    {
        return FAILURE;
    }
    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;
    }

park.h

#ifndef PARK_H
#define PARK_H

#include 
#include 
#include 
#include 
#include 

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

//////////////////////
struct CarInfo  //保存车辆信息
{
    char id[32];   //车牌号
    time_t t;  //停车时间
};
typedef struct  CarInfo info;

////////////////////////
struct Stack    //停车/让路栈
{
    info CarData[MAXSIZE];
    int top;
};
typedef struct  Stack stack;

///////////////////////
struct Node   //表示等候队列的节点信息
{
    char id[32];
    struct Node *next;  //指针域
};
typedef struct Node node;

///////////////////////
struct Queue     //等候队列
{
    node *front;   //队头指针
    node *rear;    //队尾指针
};
typedef struct Queue queue;

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

自我评价
突然感觉学代码成功运行还是有成就感的,感谢老师

你可能感兴趣的:(学习日志)