1. 程式人生 > >蘇嵌學習日誌day4

蘇嵌學習日誌day4

name:錢成傑 date:2018.9.13 今日學習任務 編寫程式:1.車輛出棧2.出去的車進來3.等候佇列進來。順序結構是有容量的,停車場的初步設計,分為:停車棧,讓路棧,等候車棧,等候車棧是鏈式儲存 今日任務完成情況 上課能跟上老師教學進度,完成程式的編寫。在程式設計的過程中將定義語句#define寫成了#include,在程式設計過程中還出現了簡單的程式遺漏,在老師的幫助下已成功解決。 今日開發中出現的問題彙總 順序結構是有容量的,停車場的初步設計,分為:停車棧,讓路棧,等候車棧,等候車棧是鏈式儲存。 注意:gcc *.c -o Wall 生成的檔案是Wall gcc *.c -Wall 生成檔案a.out 今日未解決問題

停車場中進車沒有問題,停車有問題還需要解決 今日開發收穫 瞭解了停車場停車系統的初步構成及進車出車的流程 自我評價 老師講的很好,受益匪淺。自己還需要多加練習。

課堂訓練:

Park.h
#ifndef PARK_H
#define PARK_H

#include  <time.h>
#include <string.h>

#define MAXSIZE 5
#define SUCCESS 1000
#define FAILURE 1001
#define FULL    1002
struct carinfo
{
   char number[10];  //車牌號
time_t park_time; //進場時間 struct carinfo *next; //指向下一輛車 }; typedef struct carinfo car; struct stackinfo { car data[MAXSIZE]; //結構體陣列 int top; }; typedef struct stackinfo stack; struct queueinfo { car *front; //隊頭指標 car *rear; //隊尾指標 }; typedef struct queueinfo queue; void welcome(); void
menu(); void bye(); void Init(stack *s1 ,stack *s2,queue *q); int InitStack(stack *s); int InitQueue(queue *q); 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); int EmptyQueue(queue *q); void Leavepark(stack*s1,stack *s2,queue *q); car pop(stack *s); int EmptyStack(stack *s); char *DelQueue(queue *q); #endif Main.c #include"park.h" #include"stdio.h" int main() { int choice; stack park_stack,leave_stack; //停車讓路線 queue wait_queue; //等候佇列 welcome(); Init(&park_stack,&leave_stack,&wait_queue); //初始化 while(1) { menu(); scanf("%d",&choice); switch(choice) { case 1: Enterpark(&park_stack,&wait_queue); break; case 2: Leavepark(&park_stack,&leave_stack,&wait_queue); break; case 3: Showparkinfo(&park_stack); break; case 4: ShowWaitInfo(&wait_queue); break; case 5: bye(); break; default: printf("輸入有誤\n"); break; } } return 0; } Park.c #include"park.h" #include"stdio.h" #include "unistd.h" #include <stdlib.h> void welcome() { system ("clear"); printf("\n\n\n"); printf("\t\t******************\n"); printf("\t\t******WELCOME*****\n"); printf("\t\t******************\n"); sleep(2); } void menu() { system("clear"); printf("\n\n\n"); printf("\t\t1、停車\n"); printf("\t\t2、出車\n"); printf("\t\t3、檢視場內車輛資訊\n"); printf("\t\t4、檢視等候車輛資訊\n"); printf("\t\t5、退出系統\n"); printf("請輸入你的選擇"); } void bye() { system("clear"); printf("\n\n\n\n\t\t\t\tbyebye...\n"); sleep(1); system("clear"); 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[10]={0}; if(NULL==s||NULL==q) { return; } printf("請輸入車牌號"); scanf("%s",id); int ret=push(s,id); if(ret==FAILURE) { printf("進場失敗!\n"); } else if(ret==FULL) { printf("停車場已滿,進入等候佇列\n"); sleep(1); EnterQueue(q,id); //把車停放在等候佇列裡面 } else { printf("停車成功\n"); sleep(1); } } void Showparkinfo(stack *s) { int i; if(NULL==s) { return; } for(i=0;i<=s->top;i++) { printf("車牌號: %s\n",s->data[i].number); printf("停車時長: %d\n",(int)(time(NULL)-s->data[i].park_time)); printf("*****\n"); } printf("Press Enter Continue....\n"); getchar(); getchar(); } void ShowWaitInfo(queue *q) { if(NULL==q) { return; } if(EmptyQueue(q)==SUCCESS) { printf("等候佇列沒有車輛\n"); sleep(1); } else { car *p=q->front->next; while(p) { printf("車牌號: %s\n",p->number); p=p->next; //指標p指向下一輛車 } printf("Press Enter Continue...\n"); getchar(); getchar(); } } void Leavepark(stack*s1,stack *s2,queue *q) { int i; char id[10]={0}; if(NULL==s1||NULL==s2||NULL==q) { return; } printf("請輸入車牌號:\n"); scanf("%s",id); int length=s1->top; for(i=0;i<=length;i++) { if(!strcmp(id,s1->data[s1->top].number)) //匹配到車輛 { pop(s1); // 匹配到的車輛出棧 while(EmptyStack(s2)!=SUCCESS) { car c=pop(s2); //從讓路棧出來 push(s1,c.number); //進入停車棧 } //如果等候佇列不為空 則第一輛車進棧 if( EmptyQueue(q)!=SUCCESS) { char *id =DelQueue(q); push(s1,id); free(id); } break; } else { car c=pop(s1); //不匹配則出棧並且進入讓路棧 push(s2,c.number); } } } Queue.c #include"park.h" #include"stdlib.h" #include "string.h" /*初始化佇列*/ int InitQueue(queue *q) { if(NULL==q) { return FAILURE; } car *p=(car *)malloc(sizeof(car)); 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; } car *p =(car *)malloc(sizeof(car)); if(NULL==p) { return FAILURE; } strcpy(p->number,id); p->next=NULL; q->rear->next =p; q->rear=p; return SUCCESS; } //入參判斷 判斷佇列是否為空 int EmptyQueue(queue *q) { if(NULL==q) { return FAILURE; } else { return(q->front==q->rear)?SUCCESS:FAILURE; } } //出隊操作,返回車牌號 char *DelQueue(queue *q) { if(NULL==q) { return NULL; } char *id =(char *)malloc(sizeof(char)* 10); car *c =q->front->next; if(c!=NULL) { strcpy(id,c->number); //儲存車牌號 q->front->next =c->next; free(c); } if(c==q->rear) //如果佇列只剩一輛車 { q->rear=q->front; } return id; } Stack.c #include"park.h" #include"string.h" int InitStack(stack *s) { if(NULL==s) { return FAILURE; } s->top =-1; return SUCCESS; } int push(stack *s,char *id) { if(NULL==s) { return FAILURE; } if(s->top==MAXSIZE-1) { return FULL; } strcpy(s->data[s->top+1].number,id); //拷貝車牌號 s->data[s->top+1].park_time=time(NULL); //記錄進場時間 s->top++; return SUCCESS; } //出棧操作 car pop(stack *s) { car c; if(NULL==s) { return c; } if(s->top==-1) { return c; } strcpy(c.number,s->data[s->top].number); c.park_time =s->data[s->top].park_time; s->top--; return c; } int EmptyStack(stack *s) { if(NULL==s) { return FAILURE; } return (s->top==-1)?SUCCESS:FAILURE; }