欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++利用棧和隊(duì)列實(shí)現(xiàn)停車場管理系統(tǒng)

 更新時(shí)間:2022年06月29日 14:13:36   作者:葉落秋白  
數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)一般都不是很好理解,今天小編為大家總結(jié)了一下c和c++版本的常見棧和隊(duì)列的的停車場管理程序,需要的小伙伴可以參考一下

純c語言版

包含的功能

1、停車功能

如果停車場滿,能夠暫時(shí)存放到便道內(nèi)

2、開走車功能

將指定車開走后打印收據(jù),便道內(nèi)的車自動(dòng)停到停車場

3、退出程序功能

運(yùn)行效果

停車功能測試:

離開停車場并打印收據(jù)測試:

源碼

#define _CRT_SECURE_NO_WARNINGS//visual stduio添加對(duì)scanf的信任
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
#define size 1 //停車場位置數(shù)
//模擬停車場的堆棧的性質(zhì);
typedef struct zanlind {
    int number; //汽車車號(hào)
    float ar_time; //汽車到達(dá)時(shí)間
}zanInode;//車結(jié)點(diǎn)
typedef struct {
    zanInode* base; //停車場的堆棧底
    zanInode* top; //停車場的堆棧頂
    int stacksize_curren;//堆棧長度
}stackhead;
//堆棧的基本操作;
void initstack(stackhead& L) //構(gòu)造一個(gè)空棧L
{
    L.base = (zanInode*)malloc(size * sizeof(zanlind));//給棧L分配空間
    if (!L.base) exit(0);  //存儲(chǔ)分配失敗
    L.top = L.base;//初始化棧頂和棧底指針相同
    L.stacksize_curren = 0;//初始化棧長度為0
}
void push(stackhead& L, zanInode e) //插入元素e為新的棧頂元素
{
    *L.top++ = e;//先讓L棧的棧頂指向e,然后棧頂指針+1
    L.stacksize_curren++;//由于上面的e進(jìn)入了棧內(nèi),所以棧長度加一
}
void pop(stackhead& L, zanInode& e) //若棧不為空,刪除L的棧頂元素,用e返回其值
{
    if (L.base==L.top)//棧長度為0時(shí),停車場為空
    {
        printf("停車場為空!!");
        return;
    }
    e = *--L.top;//如果棧頂和棧底不等,那么e為當(dāng)前top指針減一后的指向,這是因?yàn)闂m斨羔樖冀K指向棧頂元素的上面。
    L.stacksize_curren--;//隨著top指針減一,棧長度減一。注意返回e是通過引用完成的,就是 &e,e的變化會(huì)導(dǎo)致實(shí)參的變化
}
//模擬便道的隊(duì)列的性質(zhì);
typedef struct duilie {//隊(duì)列就是便道(候車區(qū))
    int number; //汽車車號(hào)
    float ar_time; //汽車到達(dá)時(shí)間
    struct duilie* next;//鏈?zhǔn)降年?duì)列結(jié)點(diǎn),通過next指針訪問相鄰的隊(duì)列結(jié)點(diǎn)
}*queueptr;//指向隊(duì)列結(jié)點(diǎn)自身的指針
typedef struct {
    queueptr front; //便道的隊(duì)列的對(duì)頭
    queueptr rear; //便道的隊(duì)列的隊(duì)尾
    int length;//隊(duì)列長度
}linkqueue;
//隊(duì)列的基本操作;
void initqueue(linkqueue& q) //構(gòu)造一個(gè)空隊(duì)列q,也是初始化
{
    q.front = q.rear = (queueptr)malloc(sizeof(duilie));//給隊(duì)列q動(dòng)態(tài)分配空間
    if (!q.front || !q.rear)
        exit(0);          //如果隊(duì)首指針和隊(duì)尾指針為NULL,則存儲(chǔ)分配失敗
    q.front->next = NULL;//隊(duì)首指針的下一個(gè)隊(duì)列結(jié)點(diǎn)置為NULL,隊(duì)列結(jié)點(diǎn)進(jìn)隊(duì)列只能從隊(duì)尾進(jìn)
    q.length = 0;//初始化隊(duì)列長度為零
}
 
void enqueue(linkqueue& q, int number, int ar_time)  //進(jìn)隊(duì)列,把車結(jié)點(diǎn)插入隊(duì)列尾(屬性為number,ar_time)
{
    queueptr p;//創(chuàng)建隊(duì)列指針p
    p = (queueptr)malloc(sizeof(duilie));//為p分配空間
    if (!p) exit(0);                     //為空則存儲(chǔ)分配失敗
    p->number = number;//讓隊(duì)列結(jié)點(diǎn)的車牌號(hào)等于插入進(jìn)來的車牌號(hào)
    p->ar_time = ar_time;//同上,給時(shí)間賦值
    p->next = NULL;//保證只能從隊(duì)尾進(jìn)隊(duì)列
    q.rear->next = p;//將p結(jié)點(diǎn)插入到隊(duì)尾
    q.rear = p;//此時(shí)隊(duì)尾指針rear指向插入進(jìn)來的p結(jié)點(diǎn),方便下一次從隊(duì)尾插入車結(jié)點(diǎn)信息
    q.length++;//插入后隊(duì)列長度加一
}
void popqueue(linkqueue& q, queueptr& w)      //刪除q的隊(duì)頭元素 w(屬性為number,ar_time)
{
    queueptr p;//創(chuàng)建中間隊(duì)列指針p
    if (q.length==0)//隊(duì)首隊(duì)尾指針相同則候車區(qū)無車
    {
        printf("停車場通道為空");
        return;
    }
    p = q.front->next;//p指針指向隊(duì)列q中的隊(duì)首位置
    w = p;//將隊(duì)首元素賦值給w,即w代表刪除的隊(duì)首元素
    q.front->next = p->next;//刪除隊(duì)首元素
    q.length--;//刪除后隊(duì)列長度減一
}
 
 
float shijiancha(float x, float y) //求時(shí)間差的子程序,x是進(jìn)入時(shí)間,y是離開時(shí)間
{
    if (x > y) {
        printf("非法時(shí)間數(shù)據(jù)");
        return -1;
    }
    int shix, shiy, fenx, feny;
    float shijiancha;//返回值,待賦值
    shix = x;//shix為進(jìn)入時(shí)間的整數(shù)部分
    shiy = y;//shiy為離開時(shí)間的整數(shù)部分
    fenx = (int)((x - shix) * 100);//fenx為進(jìn)入時(shí)間的小數(shù)部分的100倍
    feny = (int)((y - shiy) * 100);//feny為離開時(shí)間的小數(shù)部分的100倍
    if (fenx > feny)
    {//如果fenx>feny,時(shí)間差就等于離開的整數(shù)減去進(jìn)入的整數(shù)-1再加上60+feny-fenx,實(shí)際上feny-fenx是負(fù)數(shù)
        shijiancha = (shiy - shix - 1) + (float)(feny + 60 - fenx) / 100;
    }
    else//這個(gè)就是正常的了,整數(shù)部分減加上小數(shù)部分減即可
        shijiancha = (shiy - shix) + (float)(feny - fenx) / 100;
    return shijiancha;//返回值為時(shí)間差
}
 
 
void jinru(stackhead& st, linkqueue& q)        //對(duì)進(jìn)入停車場的汽車的處理;
{
    int number;//待使用的車牌號(hào)
    float time_a;//待使用的時(shí)間
    printf("請(qǐng)輸入車牌號(hào):");
    scanf("%d", &number);//
    printf("請(qǐng)輸入您進(jìn)車場的時(shí)間(比如說:8點(diǎn)半則輸入8.30):"); scanf("%f", &time_a);
    if (st.stacksize_curren < 2)//停車場可以停2輛車,大于兩輛車執(zhí)行else的語句
    {
        zanInode e;//創(chuàng)建車結(jié)點(diǎn)
        e.number = number;//給車牌號(hào)賦值
        e.ar_time = time_a;//給車時(shí)間賦值
        push(st, e);//將賦值好的車結(jié)點(diǎn)入棧
        printf("請(qǐng)把你的車停在%d號(hào)車道\n\n", st.stacksize_curren);//提示車停在了哪個(gè)車道
    }
    else//如果執(zhí)行這段代碼,說明停車場以及停滿2輛車
    {
        enqueue(q, number, time_a);//將車停入候車區(qū),也就是便道
        printf("停車場已滿,請(qǐng)把你的車停在便道的第%d個(gè)位置上\n", q.length);
    }
}
 
 
void likai(stackhead &st, stackhead &sl, linkqueue &q)       //對(duì)離開的汽車的處理;
{                                     //st 堆棧為停車場,sl 堆棧為倒車場
    int number, flag = 1;                    //q 為便道隊(duì)列
    float sh, time_d, arrivaltime, money1;
    printf("請(qǐng)輸入您的車牌號(hào):"); scanf("%d", &number);
    printf("請(qǐng)輸入您出車場的時(shí)間(比如說:8點(diǎn)半則輸入8.30):");  scanf("%f", &time_d);
    zanInode e, q_to_s;//e為要查找的車結(jié)點(diǎn),q_to_s為后面將從便道進(jìn)入停車場的車結(jié)點(diǎn)
    queueptr w;//隊(duì)列指針,待使用
    while (flag)  //此時(shí)flag=1,死循環(huán)
    {
        pop(st, e);//取出棧頂結(jié)點(diǎn)
        push(sl, e);//將取出的棧頂結(jié)點(diǎn)放入倒車場
        if (e.number == number)//如果車牌號(hào)對(duì)應(yīng)
        {
            flag = 0;//flag變?yōu)?,死循環(huán)結(jié)束
            arrivaltime = e.ar_time;//將該結(jié)點(diǎn)的進(jìn)入時(shí)間賦值給arrivaltime
            sh = shijiancha(arrivaltime, time_d);//帶入計(jì)算時(shí)間差的函數(shù)并將時(shí)間差賦值給sh
            money1 = (int)sh * 2 + (sh - (int)sh) * 100 / 30;//收費(fèi)依據(jù)
        }
    }
    pop(sl, e);                    //把倒車場的第一輛車(要離開的)去掉;
    while (sl.stacksize_curren)   //把倒車場的車倒回停車場
    {
        pop(sl, e); //取出棧頂結(jié)點(diǎn)
        push(st, e);//將取出的棧頂結(jié)點(diǎn)放入倒車場
    }
    if (st.stacksize_curren < 2 && q.length != 0)   //停車場有空位,便道上的車開進(jìn)入停車場
    {
        popqueue(q, w);//取出便道的第一個(gè)車并把其信息賦值給w指針
        q_to_s.ar_time = w->ar_time;//將該車信息賦值給q_to_s結(jié)點(diǎn)
        q_to_s.number = w->number;
        push(st, q_to_s);//入棧,即停車
        printf("車牌為%d 的車已從通道進(jìn)入停車場, 所在的停車位為 %d:\n", q_to_s.number, st.stacksize_curren);
    }
    printf("\n 收據(jù)");
    printf("車牌號(hào):%d\n", number);
    printf("++++++++++++++++++++++++++++++\n");
    printf("     進(jìn)車場時(shí)間:%4.2f\n", arrivaltime);
    printf("     出車場時(shí)間:%4.2f\n", time_d);
    printf("     停留時(shí)間:%4.2f\n", sh);
    printf("     應(yīng)付(元) %4.2f\n", money1);
    printf("++++++++++++++++++++++++++++++\n\n");
}
 
 
int main()
{
    int m = 100;
    int choose;                 //進(jìn)入或離開的標(biāo)識(shí);
    stackhead sting, slinshi;  //停車場和臨時(shí)倒車場堆棧的定義;
    linkqueue line;          //隊(duì)列的定義;
    initstack(sting);        //構(gòu)造停車場堆棧sting
    initstack(slinshi);      //構(gòu)造倒車場堆棧slinshi
    initqueue(line);         //構(gòu)造便道隊(duì)列l(wèi)ine
    printf("\n      ******************停車場管理程序***************        ");
    printf("\n*===========================================================*");
    printf("\n*溫馨提示:請(qǐng)車主在24:00之前來取車,給您帶來的不便,敬請(qǐng)?jiān)?*");
    printf("\n* 1 *** 汽車進(jìn)車場    2 *** 汽車出車場     3 *** 退出程序   *");
    printf("\n*===========================================================*\n");
    while (m)//m為100,可以重復(fù)操作100次
    {
        printf("          請(qǐng)輸入您需要的服務(wù)的代號(hào)(1、2、3),謝謝!\n");
        scanf("%d", &choose);//待選擇的操作
        switch (choose)
        {
        case 1: jinru(sting, line); break;            //汽車進(jìn)車場
        case 2: likai(sting, slinshi, line); break;    //汽車出車場
        case 3: exit(0);//退出
        }
        --m;//m遞減
    }
}

c++版

包含的功能

1、停車功能

如果停車場滿,能夠暫時(shí)存放到便道內(nèi)

2、開走車功能

將指定車開走后自動(dòng)計(jì)費(fèi),便道內(nèi)的車自動(dòng)停到停車場

3、查看停車場停車情況功能

可以查看停車場有無空位和停車信息。

4、退出程序功能

運(yùn)行效果

停車功能測試:

離開停車場并自動(dòng)計(jì)費(fèi)測試:

查看停車場狀況功能測試:

源碼

#define _CRT_SECURE_NO_WARNINGS//visual stduio添加對(duì)scanf的信任
#include <stdio.h>
#include <stdlib.h>
#include <iostream>//C++IO流頭文件
using namespace std;//C++命名空間,配合IO流頭文件可使用cin>>輸入,cout<<輸出
#define MaxSize 5  //停車場最大停車位
#define fee 2 //一小時(shí)的費(fèi)用 
#define L    10000//宏定義
typedef int ElemType;//將整型int名字變?yōu)镋lemType,下面再使用ElemType就是整型的意思
ElemType tmpnum = 0;//車牌號(hào)
ElemType tmptime = 0;//進(jìn)入時(shí)間
typedef struct {
    ElemType car_num[MaxSize];//車牌號(hào)數(shù)組
    ElemType car_time[MaxSize];//進(jìn)入時(shí)間數(shù)組
    int top;//數(shù)組下標(biāo)
}STACK;//棧,存放所有的車牌號(hào)和進(jìn)入時(shí)間數(shù)組
typedef struct qnode {//隊(duì)列結(jié)點(diǎn)
    ElemType car_num;//包含車牌號(hào)
    ElemType car_time;//和進(jìn)入時(shí)間
    struct qnode* next;//指向自身的指針,用來當(dāng)問相鄰隊(duì)列結(jié)點(diǎn)
}QTYPT;//將qnode重命名為QTYPT
typedef struct qptr {//隊(duì)列
    QTYPT* front;//隊(duì)首指針
    QTYPT* rear;//隊(duì)尾指針
}SQUEUE;//將qptr重命名為SQUEUE
void InitStack(STACK* S) {//初始化棧S
    S->top = -1;//數(shù)組下標(biāo)初始化為-1
}
 
int Full(STACK* S) {//棧滿的情況
    if (S->top == MaxSize - 1) {
        printf("\n Stack is full! Push");//提示棧滿
        return 0;
    }
    return 1;
}
//入棧函數(shù)Push
int Push(STACK* S, ElemType num, ElemType time) {
    if (S->top == MaxSize - 1) {
        printf("\n Stack is full! Push");//棧滿提示,并退出
        return 0;
    }
    S->top++;                      //棧不滿時(shí)數(shù)組下標(biāo)加一,此時(shí)為0
    S->car_num[S->top] = num;      //棧車牌號(hào)數(shù)組的car_num[top]賦值為num
    S->car_time[S->top] = time;    //同車牌號(hào),這次是進(jìn)入時(shí)間的賦值
    return 1;                      //賦值成功則返回1
}
 
int Empty(STACK* S) {//棧空的情況
    return (S->top == -1 ? 1 : 0);//??辗祷?
}
//出棧函數(shù)Pop
int Pop(STACK* S, ElemType* num, ElemType* time) {
    if (Empty(S)) {//棧空無法出棧
        puts("Stack is free Pop");
        return 0;
    }//棧不空時(shí)
    *num = S->car_num[S->top]; //將棧頂?shù)能嚺铺?hào)賦值給*num
    *time = S->car_time[S->top];//賦值時(shí)間給*time
    S->top--;//出棧后數(shù)組下標(biāo)減一
    return 1;
}
//初始化隊(duì)列
void InitQueue(SQUEUE* LQ) {
    QTYPT* p = NULL;//創(chuàng)建隊(duì)列結(jié)點(diǎn)指針
    p = (QTYPT*)malloc(sizeof(QTYPT));//為p職責(zé)和你分配空間
    p->next = NULL;//使p指針的next為空,相當(dāng)于頭結(jié)點(diǎn)
    LQ->front = LQ->rear = p;//初始化隊(duì)首和隊(duì)尾指針指向頭結(jié)點(diǎn)p,
}
//將隊(duì)列結(jié)點(diǎn)入隊(duì)
int EnQueue(SQUEUE* LQ, ElemType num, ElemType time) {
    QTYPT* s;//創(chuàng)建s指針
    s = (QTYPT*)malloc(sizeof(QTYPT));//分配空間
    s->car_num = num;//將車牌號(hào)賦值給p指向的車牌號(hào)
    s->car_time = time;//賦值時(shí)間
    s->next = LQ->rear->next;//將s結(jié)點(diǎn)插入到隊(duì)尾的下一個(gè)位置
    LQ->rear->next = s;//隊(duì)尾指針的下一個(gè)位置指向s
    LQ->rear = s;//隊(duì)尾指針指向新插入的結(jié)點(diǎn),這樣時(shí)頭插法,符合隊(duì)列后進(jìn)后出的特點(diǎn)
    return 1;
}
//計(jì)算隊(duì)列有多少結(jié)點(diǎn)
int CountQueue(SQUEUE* LQ) {
    int i = 1;
    QTYPT* mfront = NULL;//創(chuàng)建該隊(duì)列的新隊(duì)首指針
    QTYPT* mrear = NULL;//創(chuàng)建新隊(duì)尾指針
    mfront = LQ->front;//將隊(duì)首指針賦值給新隊(duì)首指針,記錄作用
    mrear = LQ->rear;//同上
    while (!(LQ->front == LQ->rear)) {//當(dāng)隊(duì)首不等于隊(duì)尾指針時(shí),i++,統(tǒng)計(jì)的結(jié)點(diǎn)個(gè)數(shù)增加
        i++;
        LQ->front = LQ->front->next;//隊(duì)首指向隊(duì)首的下一個(gè)位置
    }
    LQ->front = mfront;//統(tǒng)計(jì)完成后將隊(duì)首指針指向原來的地址
    return i;//i為結(jié)點(diǎn)個(gè)數(shù)
}
 
int Empty_Q(SQUEUE* LQ) {//隊(duì)列為空
    return (LQ->front == LQ->rear ? 1 : 0);
}
 
int OutQueue(SQUEUE* LQ, ElemType* num, ElemType* time) {//取隊(duì)首
    QTYPT* p;//創(chuàng)建對(duì)列結(jié)點(diǎn)指針
    if (Empty_Q(LQ)) {//隊(duì)列空不能取隊(duì)首
        puts("Quenue is free OutQuenue");
        return 0;
    }
    p = LQ->front->next;//p指向隊(duì)首結(jié)點(diǎn)
    *num = p->car_num;//將隊(duì)首結(jié)點(diǎn)信息賦值
    *time = p->car_time;
    LQ->front->next = p->next;//刪除隊(duì)首結(jié)點(diǎn)
    if (LQ->front->next == NULL)//如果隊(duì)首結(jié)點(diǎn)不存在
        LQ->rear = LQ->front;//隊(duì)首隊(duì)尾指針相同,隊(duì)空
    free(p);//釋放p結(jié)點(diǎn)
    return 1;
}
//檢查有無重復(fù)車牌號(hào)
int chackinput(STACK* S, int pnum) {
    int i = 0;
    int num;
    num = pnum;//將車牌號(hào)賦值
    i = S->top;//i為棧頂位置的數(shù)組下標(biāo)
    for (; !(i == -1); i--)//從高到底遍歷car_num數(shù)組,找到車牌號(hào)返回1,否則返回0
        if (S->car_num[i] == num)
            return 1;
    return 0;
}
//檢查時(shí)間輸入是否合理
int chacktime(STACK* S, int ptime) {
    return S->car_time[S->top] <= ptime ? 1 : 0;//只有離開時(shí)間大于進(jìn)入時(shí)間才能賦值成功
}
//顯示停車場內(nèi)狀況
int displaystats(STACK* S, int pinput) {
    void displayhead();//顯示菜單
    int i = 0;
    i = S->top;//i為棧頂位置的數(shù)組下標(biāo)
    switch (pinput)//調(diào)用的時(shí)候自動(dòng)填入10000
    {
    case 10000:
        {
        if (!Empty(S))//棧不空
            for (; !(i == -1); i--)//遍歷輸出棧內(nèi)停車信息
                printf("<===%d時(shí)%d號(hào)車停于%d車位===>\n", S->car_time[i], S->car_time[i], i + 1);
        else
            cout << "停車場為空";
        printf("還有車%d個(gè)位\n", MaxSize - S->top - 1);//剩余車位等于最大停車位-當(dāng)前數(shù)組下標(biāo)再-1,因?yàn)閿?shù)組是從0開始
        break;
        }
    default:
        {
        return 1;
        }
    }
    return 0;
}
//功能菜單
void displayhead() {
    cout << '\n' << "<===============CT停車場管理系統(tǒng)===================>" << endl;
    cout << "<==操作說明:  *******  ==>" << endl;
    cout << "<==1: 停車命令 *******  ==>" << endl;
    cout << "<==2: 出車命令  ***  ==>" << endl;
    cout << "<==0: 退出程序  ***  ==>" << endl;
    cout << "<==3:  顯示停車場內(nèi)狀況     " << endl;
    cout << "<==============================================>" << endl;
}
//打印收費(fèi)條
void displayChange(STACK* S, ElemType pnum, int ptime) {
    printf("   (單價(jià) %d元/小時(shí) )\n", fee);//fee在宏定義有,值為2
    printf("<======================電子收據(jù)===================>\n");
    printf("<==停車時(shí)間:--------------------------%d小時(shí)     ==>\n", ptime - tmptime);//停車時(shí)長
    printf("<==車牌號(hào)碼:--------------------------%d         ==>\n", tmpnum);//打印車牌號(hào)
    printf("<==應(yīng)收費(fèi)用:--------------------------%d  元     ==>\n", (ptime - tmptime) * fee);//計(jì)算費(fèi)用
    printf("<====================謝謝=歡迎下次再來=============>\n");
 
}
//開走車
int outparkstation(STACK* S1, STACK* TS, ElemType pnum) {
    int t_num = 0;
    int t_time = 0;
    while (1) {
        Pop(S1, &t_num, &t_time);//取出棧頂車
        if (t_num == pnum) {//如果這一次取出的棧頂車的車牌號(hào)是我們想開走的
            tmpnum = t_num;//進(jìn)行車牌號(hào)和進(jìn)入時(shí)間的賦值
            tmptime = t_time;
            while (!Empty(TS)) {//當(dāng)備用停車場不空時(shí)
                Pop(TS, &t_num, &t_time);//循環(huán)取出備用停車場的暫存棧頂車
                Push(S1, t_num, t_time);//將每次的棧頂車再放進(jìn)停車場
            }
            return 1;//結(jié)束循環(huán)
        }
        Push(TS, t_num, t_time);//棧頂不是我們想要的車就暫存再備用停車場
    }
    return 0;
}
//進(jìn)行停車
int inparkstation(STACK* S) {
    int parknum;
    int parktime;
    printf("還有%d個(gè)車位\n", MaxSize - S->top - 1);
    printf("請(qǐng)輸入車牌號(hào)碼:");
    cin >> parknum;//輸入車牌號(hào)
    while (chackinput(S, parknum)) {//調(diào)用檢驗(yàn)函數(shù),重復(fù)則重新輸入車牌號(hào)
        printf("車牌號(hào)碼重復(fù),請(qǐng)輸入%d1或者其他", parknum);
        cin >> parknum;//輸入車牌號(hào)
    }
    printf("請(qǐng)輸入停車時(shí)間:");
    cin >> parktime;//輸入停車時(shí)間
    printf("%d號(hào)車于%d時(shí)??吭?d位\n", parknum, parktime, S->top + 2);//下標(biāo)加2是因?yàn)槌跏紴?1,第一個(gè)車位于一號(hào)位,需要加2
    Push(S, parknum, parktime);//將輸入的車牌號(hào)與進(jìn)入時(shí)間入棧,完成停車
    return 1;
}
//在便道,棧滿時(shí)將車暫存到便道內(nèi)
int inbiandao(SQUEUE* SQ, STACK* S) {
    int parknum;
    printf("對(duì)不起,停車場已滿,請(qǐng)您到便道等待.停車場有空位時(shí)您將第");
    printf("%d進(jìn)入停車場\n", CountQueue(SQ));//調(diào)用CountQueue()函數(shù),得到便道內(nèi)的結(jié)點(diǎn)個(gè)數(shù)
    printf("請(qǐng)輸入車牌號(hào)碼:");
    cin >> parknum;
    while (chackinput(S, parknum)) {//如果有重復(fù)車牌號(hào)則重新輸入
        printf("車牌號(hào)碼重復(fù),請(qǐng)輸入其他車牌號(hào)");
        cin >> parknum;
    }
    EnQueue(SQ, parknum, 0);//將車牌號(hào)為parknum的車放進(jìn)便道,進(jìn)便道時(shí)間默認(rèn)為0
    return 1;
}
//離開停車場
int OutParkingStation(SQUEUE* biandao, STACK* car, STACK* tmp) {
    int parknum = 0;
    int parktime = 0;
    int buf = 0;
    if (!Empty(car)) {//棧不空的情況下
        displaystats(car, 10000);//遍歷查看停車場停車情況
        printf("請(qǐng)輸入您要調(diào)出的車牌號(hào)碼:");
        cin >> parknum;
        while (!chackinput(car, parknum)) {
            printf("沒有您要的%d的車牌號(hào)碼,請(qǐng)輸入正確的車牌號(hào)碼:", parknum);//沒有檢查到重新輸入
            cin >> parknum;
        }
        outparkstation(car, tmp, parknum);//將車牌號(hào)為parknum的車開走
        printf("%d時(shí)%d號(hào)車進(jìn)入停車場\n", tmptime, tmpnum);//上一行代碼已經(jīng)給開走的車進(jìn)入時(shí)間和車牌號(hào)賦值,
        printf("請(qǐng)輸入現(xiàn)在的時(shí)間:");//開走時(shí)的時(shí)間
        cin >> parktime;
        while (!chacktime(car, parktime)) {//開走時(shí)間需要大于進(jìn)入時(shí)間,否則重新輸入
            cout << "輸入時(shí)間小于停車時(shí)間,請(qǐng)重新輸入:";
            cin >> parktime;
        }
        displayChange(car, parknum, parktime);//打印賬單
        if (biandao->front != biandao->rear)  
        {
            printf("%d號(hào)車位空開\n", car->top + 2);//提示開走的車占用的停車場位置空了
            printf("%d時(shí)便道上的%d號(hào)汽車駛?cè)?d號(hào)車位", parktime, biandao->front->next->car_num, car->top + 2);//提示便道隊(duì)首元素進(jìn)入停車場
            OutQueue(biandao, &parknum, &buf);//將便道隊(duì)首元素的車牌號(hào)賦值給parknum
            Push(car, parknum, parktime);//將該車進(jìn)入停車場棧頂,進(jìn)入成功
        }
        return 2;
    }
    printf("停車場為空\n");//棧空則停車場為空
    return 1;
};
 
int main() {
   int chance = 0;//用來選擇操作
    STACK car;//創(chuàng)建未分配空間的car棧
    InitStack(&car);//初始化,包括分配內(nèi)存空間
    STACK tmp;//備用棧
    InitStack(&tmp);//初始化
    SQUEUE biandao;//創(chuàng)建隊(duì)列
    InitQueue(&biandao);//初始化
loop://跳轉(zhuǎn)語句,配和goto語句使用
    while (1) {
        displayhead();//展示菜單
        cout << "=>:";
        cin >> chance;//輸入操作的選擇
        switch (chance) {
        case 1:
        {
            printf("查詢結(jié)果為:\n");
            if (Full(&car))//棧未滿時(shí)執(zhí)行if,棧滿時(shí)執(zhí)行else
                inparkstation(&car);//停進(jìn)停車場
            else
                inbiandao(&biandao, &car);//停進(jìn)便道
            break;
        }
        case 2:
        {
            OutParkingStation(&biandao, &car, &tmp);//開走車
            break;
        }
        case 3:
        {
            displaystats(&car, 10000);//查看停車場信息
            break;
        }
        case 0:
        {
            printf("成功退出,歡迎下次使用!");
            return 0;//退出循環(huán)
        }
        default:
        {
            cout << "輸入錯(cuò)誤" << endl;
            goto loop;//goto語句是跳轉(zhuǎn)的意思,跳轉(zhuǎn)到前面的loop位置,即繼續(xù)選擇操作
        }
        }
    }
    system("PAUSE");//終端出現(xiàn)按任意鍵繼續(xù),終端就是顯示運(yùn)行結(jié)果的地方
    return 0;
}

以上就是C/C++利用棧和隊(duì)列實(shí)現(xiàn)停車場管理系統(tǒng)的詳細(xì)內(nèi)容,更多關(guān)于C/C++停車場管理系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++異常處理入門(try和catch)

    C++異常處理入門(try和catch)

    C++ 提供了異常機(jī)制,讓我們能夠捕獲運(yùn)行時(shí)錯(cuò)誤,本文就詳細(xì)的介紹了C++異常處理入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言數(shù)學(xué)公式來實(shí)現(xiàn)土味表白

    C語言數(shù)學(xué)公式來實(shí)現(xiàn)土味表白

    大家好,本篇文章主要講的是C語言數(shù)學(xué)公式來實(shí)現(xiàn)土味表白,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Qt?CEF融合技QCefView使用教程(推薦)

    Qt?CEF融合技QCefView使用教程(推薦)

    QCefView是一個(gè)與Chromium?Embedded?Framework集成的Qt第三方開源庫,LGPL許可,可以在項(xiàng)目中免費(fèi)使用,功能類似CEF、QWebEngineView,提供C++和web交互的能力,本文給大家介紹Qt?CEF融合技QCefView使用教程,感興趣的朋友參考下吧
    2021-12-12
  • C++中cin的返回值問題

    C++中cin的返回值問題

    這篇文章主要介紹了C++中cin的返回值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++實(shí)現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室

    C++實(shí)現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++通過CryptoPP計(jì)算Hash值的過程詳解

    C++通過CryptoPP計(jì)算Hash值的過程詳解

    Crypto++ (CryptoPP) 是一個(gè)用于密碼學(xué)和加密的C++庫,它是一個(gè)開源項(xiàng)目,提供了大量的密碼學(xué)算法和功能,本文小編給大家介紹了C++通過CryptoPP計(jì)算Hash值的過程,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Matlab繪制酷炫坐標(biāo)區(qū)域的方法詳解

    Matlab繪制酷炫坐標(biāo)區(qū)域的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Matlab編寫一個(gè)能讓坐標(biāo)區(qū)域變得很炫酷的修飾函數(shù),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • 用QT實(shí)現(xiàn)計(jì)時(shí)器功能

    用QT實(shí)現(xiàn)計(jì)時(shí)器功能

    這篇文章主要為大家詳細(xì)介紹了用QT實(shí)現(xiàn)計(jì)時(shí)器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 詳解C語言中條件判斷語句if和switch的用法

    詳解C語言中條件判斷語句if和switch的用法

    這篇文章主要介紹了詳解C語言中條件判斷語句if和switch的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-04-04
  • C語言實(shí)現(xiàn)飛機(jī)游戲(豪華版)的示例代碼

    C語言實(shí)現(xiàn)飛機(jī)游戲(豪華版)的示例代碼

    在前文中已經(jīng)實(shí)現(xiàn)了基礎(chǔ)版和進(jìn)階版的飛機(jī)游戲,但是存在的問題很明顯:已經(jīng)發(fā)射出去的子彈會(huì)隨著飛機(jī)位置的實(shí)時(shí)改變而改變,并且不能實(shí)現(xiàn)連發(fā)。本篇文章將利用數(shù)組進(jìn)一步改進(jìn)空戰(zhàn)游戲,感興趣的可以了解一下
    2022-10-10

最新評(píng)論