C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易停車場(chǎng)管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
問(wèn)題描述:
設(shè)停車場(chǎng)內(nèi)只有一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門(mén)在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,則排在便道上的第一輛車即可開(kāi)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后開(kāi)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開(kāi)出大門(mén)外,其它車輛再按原次序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開(kāi)停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。
由題得,此系統(tǒng)要實(shí)現(xiàn)的功能為:
(1)設(shè)計(jì)停車場(chǎng)內(nèi)的結(jié)構(gòu)。(由題分析為一個(gè)棧,因?yàn)橹挥幸粋€(gè)門(mén)所以其就像數(shù)據(jù)結(jié)構(gòu)中學(xué)到的棧,但是因?yàn)榧纫鰲S忠霔#颂幬揖蛯⑦@個(gè)棧簡(jiǎn)化為了一個(gè)鏈表)
(2)當(dāng)車庫(kù)滿時(shí),在車庫(kù)外等待的結(jié)構(gòu)。(就像排隊(duì)一樣,先來(lái)先進(jìn)后來(lái)后進(jìn),只能從一端進(jìn),另一端出)。
(3)車輛的結(jié)構(gòu),一輛車要有什么信息?首先要有這輛車的車牌號(hào),可以用一個(gè)字符數(shù)組來(lái)存儲(chǔ)(因?yàn)檐嚺撇灰欢ㄈ菙?shù)字,還可能有漢字,英文字母等),題中要求要用要計(jì)算收費(fèi),就要知道駛?cè)霑r(shí)間和駛出時(shí)間(怎樣獲取在下面會(huì)說(shuō)到)。
算法描述:
1、剛開(kāi)始定義結(jié)構(gòu)類型,如車的類型,車庫(kù)里的類型,車庫(kù)外等待的類型。
2、聲明所要用到的函數(shù):
?void menu(Stack *cheku,SequenQueue* paidui);//開(kāi)始菜單 ? //就是展示出菜單的函數(shù) //隊(duì)列的相關(guān)操作 ? SequenQueue* InitQueue();//申請(qǐng)一個(gè)空隊(duì) int EmptyQueue(SequenQueue* Q);//判斷隊(duì)空 int FullQueue(SequenQueue* Q);//判斷隊(duì)滿 int EnQueue(SequenQueue* Q, ElemType *e);//入隊(duì) int DeQueue(SequenQueue* Q, ElemType *e); //出隊(duì) Stack* build();//建鏈表 int fullstack(Stack *cheku);//判斷鏈表滿 void tingche(Stack *cheku,SequenQueue* paidui);//停車的函數(shù) void likai(Stack *cheku,SequenQueue* paidui);//離開(kāi)的函數(shù) void chakan(Stack *cheku,SequenQueue* paidui);//查看車庫(kù)停車情況的函數(shù)?
3、一些可能不理解的說(shuō)明的說(shuō)明。
(1). 獲取時(shí)間的函數(shù),寫(xiě)頭文件 #include <time.h>,定義一個(gè) time_t類型的變量starttime,starttime=time(NULL);就是獲取1970年1月1日到當(dāng)前的秒數(shù),定義一個(gè)字符數(shù)組 tmp2[100],strftime(tmp2,sizeof(tmp2),"%Y-%m-%d %H:%M:%S",localtime(&q->a.starttime));用這一句就能把當(dāng)前時(shí)間的年月日時(shí)分秒存進(jìn)字符數(shù)組中,puts(tmp2),就得到了當(dāng)前的時(shí)間。
(2). 代碼中用到了Sleep函數(shù),這個(gè)函數(shù)的功能為延時(shí),要用到一個(gè)頭文件,#include <time.h>,此函數(shù)是與(3)中的配合使用。
(3).(2)中提到的就是system("cls"),他的作用就是清屏,(2)的作用就是把結(jié)果讓用戶看到。故兩者配合,就能得到奇效。
程序代碼:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #include <string.h> #define TRUE 1 #define FALSE 0 #define MAXSIZE 1024 static int maxsize; typedef char ElemType; typedef struct { ?? ?char ?num[10];//車牌 ?? ?time_t starttime,endtime;//進(jìn)入推出時(shí)間? }car; ? //車? typedef struct Stack { ?? ?int top; ? ? car a; ? ? struct Stack *next; ? ?? }Stack; typedef struct { ?? ?char a[10]; }dat; typedef struct? {//隊(duì)列結(jié)構(gòu)定義 ? ?dat ? ? ?data[MAXSIZE]; ? ?int ? ? ?front; ? ?int ? ? ?rear; ?}SequenQueue; void menu(Stack *cheku,SequenQueue* paidui);//開(kāi)始菜單 ? SequenQueue* InitQueue();//申請(qǐng)一個(gè)空隊(duì)? int EmptyQueue(SequenQueue* Q);//判斷隊(duì)空? int FullQueue(SequenQueue* Q);//判斷隊(duì)滿? int EnQueue(SequenQueue* Q, ElemType *e);//入隊(duì)? int DeQueue(SequenQueue* Q, ElemType *e); //出隊(duì) Stack* build();//建鏈表? void tingche(Stack *cheku,SequenQueue* paidui); int fullstack(Stack *cheku); void likai(Stack *cheku,SequenQueue* paidui); void chakan(Stack *cheku,SequenQueue* paidui); ?int main() { ?? ?Stack *cheku=build(); ?? ?SequenQueue* paidui=InitQueue(); ?? ?printf("請(qǐng)輸入車庫(kù)最大容量:"); ?? ?scanf("%d",&maxsize);? ?? ?system("cls"); ?? ?menu(cheku,paidui); ?? ?return 0; } void menu(Stack *cheku,SequenQueue* paidui) { ? ? printf("********** ? ? ? ?歡迎來(lái)停車 ! ? ? ? ?**********\n"); ? ? printf("********** ? ? ? ?請(qǐng)選擇一項(xiàng) ? ? ? ? ?**********\n"); ? ? printf("********** ? ? ? ? 1 : park. ? ? ? ? ?**********\n"); ? ? printf("********** ? ? ? ? 2 : leave. ? ? ? ? **********\n"); ? ? printf("********** ? ? ? ? 3 : view. ? ? ? ? ?**********\n"); ? ? printf("********** ? ? ? ? 4 : exit. ? ? ? ? ?**********\n"); ? ? int option; ? ? scanf("%d",&option); ? ? system("cls"); ? ? switch(option) ? ? { ? ? ? ? case 1: ?? ??? ?{ ? ? ? ? ?? ??? ?tingche(cheku,paidui); ? ? ? ? ?? ??? ?menu(cheku,paidui); ? ? ? ? ? ? ?? ?break; ? ? ? ? } ? ? ? ? case 2: ?? ??? ?{ ? ? ? ? ?? ??? ?likai(cheku,paidui); ? ? ? ? ?? ??? ?menu(cheku,paidui); ? ? ? ? ?? ??? ?break; ? ? ? ? } ? ? ? ? case 3: ?? ??? ?{ ? ? ? ? ?? ?chakan(cheku, paidui); ? ? ? ? ? ?menu(cheku,paidui); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? case 4: ?? ??? ?{ ? ? ? ? ? ? printf("********** ? ? 歡迎再次使用,謝謝! ? **********\n"); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? default:{ ? ? ? ? ? ? printf("********** ? ? ?請(qǐng)輸入正確的指令! ? ?**********\n"); ? ? ? ? ? ? Sleep(1000); ? ? ? ? ? ? menu(cheku,paidui); ? ? ? ? ? ? system("cls"); ? ? ? ? ? ? break; ? ? ? ? } ? ? } } int fullstack(Stack *cheku) { ?? ?if(cheku->top<maxsize-1) ?? ??? ?return 1; ?? ?else ?? ??? ?return 0; } SequenQueue* InitQueue() { ?? ?SequenQueue* Q = NULL; ?? ?Q = (SequenQueue*)malloc(sizeof(SequenQueue)); ?? ?Q->front = Q->rear = 0; ?? ?return Q; } int DeQueue(SequenQueue* Q, ElemType *e) { ?? ?if(EmptyQueue(Q)) ?? ??? ?return FALSE; ?? ?else ?? ?{ ?? ??? ?strcpy(e,Q->data[Q->front].a); ?? ??? ?Q->front=(Q->front+1)%MAXSIZE; ?? ??? ?return TRUE; ?? ?}? } int EnQueue(SequenQueue* Q, ElemType *e) { ?? ?if(FullQueue(Q)) ?? ??? ?{ ?? ??? ??? ?printf("等待的車輛太多,請(qǐng)下次再來(lái)"); ?? ??? ??? ?return FALSE; ?? ??? ?} ?? ?strcpy(Q->data[Q->front].a,e); ?? ?Q->rear = (Q->rear+1)%MAXSIZE; ?? ?return TRUE; } int FullQueue(SequenQueue* Q) { ?? ?if((Q->rear+1)%MAXSIZE==Q->front) ?? ?{ ?? ??? ?return TRUE; ?? ?} ?? ?else ?? ?{ ?? ??? ?return FALSE; ?? ?} } int EmptyQueue(SequenQueue* Q) { ?? ?if(Q->front == Q->rear) ?? ??? ?return TRUE; ?? ?else ?? ??? ?return FALSE; } Stack* build(Stack *cheku,SequenQueue* paidui) { ?? ?Stack* a; ?? ?a=(Stack*)malloc(sizeof(Stack)); ?? ?a->top=-1; ?? ?return a; } void tingche(Stack *cheku,SequenQueue* paidui) { ?? ?Stack *p; ?? ?p=(Stack *)malloc(sizeof(Stack)); ?? ?printf("請(qǐng)輸入車牌號(hào)\n"); ?? ?fflush(stdin); ?? ?gets(p->a.num); ?? ?if(fullstack(cheku)) ?? ?{ ?? ??? ?p->next=cheku->next; ?? ??? ?cheku->next=p; ?? ??? ?p->a.starttime=time(NULL); ?? ??? ?cheku->top++; ?? ??? ?printf("停車成功\n"); ?? ??? ?Sleep(1000); ?? ??? ?system("cls"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("車庫(kù)已滿請(qǐng)?jiān)陂T(mén)口等待\n"); ?? ??? ?EnQueue(paidui,p->a.num); ?? ??? ?Sleep(1000); ?? ??? ?system("cls"); ?? ?}? } void likai(Stack *cheku,SequenQueue* paidui) { ?? ?char m[10]; ?? ?Stack *p,*q; ?? ?char e[10]; ?? ?int n=0; ?? ?p=cheku; ?? ?if(cheku->top==-1) ?? ?{ ?? ??? ?printf("車庫(kù)為空\(chéng)n"); ?? ??? ?Sleep(1000); ?? ??? ?system("cls");? ?? ?} ?? ?else ?? ?{ ?? ?printf("請(qǐng)輸入離開(kāi)的車牌:\n"); ?? ?fflush(stdin); ?? ?gets(m); ?? ?while(p->next!='\0') ?? ?{?? ?double money;? ?? ??? ?if(strcmp(p->next->a.num,m)==0) ?? ??? ?{ ?? ??? ??? ?q=p->next; ?? ??? ??? ?p->next=q->next; ?? ??? ??? ?q->a.endtime=time(NULL); ?? ??? ??? ?money=(q->a.endtime-q->a.starttime)*0.00139; ?? ??? ??? ?char tmp1[100],tmp2[100]; ?? ??? ??? ?strftime(tmp1,sizeof(tmp1),"%Y-%m-%d ?%H:%M:%S",localtime(&q->a.endtime)); ?? ??? ??? ?strftime(tmp2,sizeof(tmp2),"%Y-%m-%d ?%H:%M:%S",localtime(&q->a.starttime)); ?? ??? ??? ?printf("停車時(shí)間:%s\n",tmp2); ?? ??? ??? ?printf("離開(kāi)時(shí)間:%s\n",tmp1); ?? ??? ??? ?printf("共停%ds\n",q->a.endtime-q->a.starttime);? ?? ??? ??? ?printf("收費(fèi)%.5lf元(一小時(shí)五元)\n",money);? ?? ??? ??? ?Sleep(3000); ?? ??? ??? ?free(q); ?? ??? ??? ?system("cls"); ?? ??? ??? ?cheku->top--; ?? ??? ??? ?n++; ?? ??? ??? ?if(EmptyQueue(paidui)==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?DeQueue(paidui,e); ?? ??? ??? ??? ?Stack *d=(Stack *)malloc(sizeof(Stack)); ?? ??? ??? ??? ?strcpy(d->a.num,e); ?? ??? ??? ??? ?d->a.starttime=time(NULL); ?? ??? ??? ??? ?d->next=cheku->next; ?? ??? ??? ??? ?cheku->next=d; ?? ??? ??? ??? ?cheku->top++; ?? ??? ??? ??? ?printf("已將等待的第一輛車進(jìn)入停車場(chǎng)"); ?? ??? ??? ??? ?Sleep(1000); ?? ??? ??? ??? ?system("cls");? ?? ??? ??? ?}? ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?p=p->next; ?? ?} ?? ?if(n==0) ?? ?{ ?? ??? ?printf("未找到該車輛信息請(qǐng)重試"); ?? ??? ?Sleep(1000); ?? ??? ?system("cls"); ?? ?} }?? ?? } void chakan(Stack *cheku,SequenQueue* paidui) { ?? ?if(cheku->top==maxsize-1) ?? ?{ ?? ??? ?printf("車庫(kù)已滿,共有%d的車輛在等候",(paidui->rear-paidui->front+MAXSIZE)%MAXSIZE); ?? ??? ?Sleep(1000); ?? ??? ?system("cls"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("車庫(kù)還有%d個(gè)空位",maxsize-cheku->top-1); ?? ??? ?Sleep(1000); ?? ??? ?system("cls"); ?? ?} }
代碼可能不是最佳,如有錯(cuò)誤,敬請(qǐng)指正。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)停車場(chǎng)項(xiàng)目
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)游戲VIP停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言源碼實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)停車場(chǎng)管理
- C語(yǔ)言實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)
- C語(yǔ)言設(shè)計(jì)圖書(shū)登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享
- C語(yǔ)言課程設(shè)計(jì)之停車場(chǎng)管理問(wèn)題
相關(guān)文章
C++中的局部變量、全局變量、局部靜態(tài)變量、全局靜態(tài)變量的區(qū)別
本文主要介紹了C++中的局部變量、全局變量、局部靜態(tài)變量、全局靜態(tài)變量的區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02基于Protobuf C++ serialize到char*的實(shí)現(xiàn)方法分析
本篇文章是對(duì)Protobuf C++ serialize到char*的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05vscode 配置 C/C++編譯環(huán)境(完整教程)
這篇文章主要介紹了vscode 配置 C/C++編譯環(huán)境(完整教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09C 語(yǔ)言基礎(chǔ)之C 語(yǔ)言三大語(yǔ)句注意事項(xiàng)
今天講解的內(nèi)容,則是自己對(duì)于這三種語(yǔ)句一些細(xì)節(jié)的簡(jiǎn)單介紹,分支語(yǔ)句:if,switch、循環(huán)語(yǔ)句:while,for,do while、goto語(yǔ)句,感興趣的小伙伴可以參考下面具體的文章內(nèi)容2021-09-09C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要介紹了C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C語(yǔ)言線性表的鏈?zhǔn)奖硎炯皩?shí)現(xiàn)詳解
線性表的鏈?zhǔn)酱鎯?chǔ)特點(diǎn)則是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素。這組存儲(chǔ)單元既可以是連續(xù)的,也可以是不連續(xù)的。本文將詳解一下C語(yǔ)言線性表的鏈?zhǔn)奖硎炯皩?shí)現(xiàn),感興趣的可以了解一下2022-07-07

C語(yǔ)言實(shí)現(xiàn)圖的遍歷之深度優(yōu)先搜索實(shí)例