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