停車場管理系統

一、設計內容

  1. 設計有一個可以停放n輛汽車的狹長停車場,它只有一個大門可以供車輛進出,車輛按照到達停車場時間的先后次序依次從停車場最里面向大門口出停放(即最先到達的第一輛車停放在停車場最里面),如果停車場已放滿n輛車,則以后到達的車輛只能在停車場大門外的便道上等待,一旦停車場內有車離開,則排在便道上的第一輛車可以進入停車場,停車場內如有某輛車要開走,則在它之后進入停車場的車都要先退出停車場為它讓路,待其開出停車場后,這些車輛再按照原來的次序進場。

二、設計分析

1.實現停車場的結構

??? 因為停車場它只有一個大門可以供車輛進出,車輛按照到達停車場時間的先后次序依次從停車場最里面向大門口出停放(即最先到達的第一輛車停放在停車場最里面),很容易讓人聯想的棧,所以我們停車場內部用來實現。如果停車場已放滿n輛車,則以后到達的車輛只能在停車場大門外的便道上等待,一旦停車場內有車離開,則排在便道上的第一輛車可以進入停車場,那么很明顯停車場外的便道是一個隊列的結構,先進先出,也就是先到先進。這樣就確定了停車場的基本機構,即停車場內用棧來貯存,停車場外便道用隊列來貯存。

2.停車場的功能

??? 個人認為一個停車場該有的功能:

1.車輛開進停車場

2.車輛開出停車場

3.查詢停車場內車的數量

4.查詢停車場內車的編號

5.查詢停車場外車的數量

6.查詢停車場外車的編號

7.查詢停車場內是否有空余

8.查詢停車場外一輛車需等待幾輛車

    1. 第一個功能是車輛開進停車場,這是一個停車場最基本的功能,實現對車輛的停放。
    2. 第二個功能是車輛開出停車場,這個功能值得注意的是,開出停車場的車輛可以是停在停車場的任意一輛,并且車輛開出去后,所有在這輛車開進之后的車輛均要向前移位,最后還需要判斷停車場外(即便道內)是否有車可以停進停車場內。
    3. 第三個功能是查詢停車場內車的數量,這個功能其實在功能4—查詢停車場車的編號就可以看出來,但假如數字過大,人為計數就會顯得復雜,所以增加這個功能能讓停車場車的數量很清晰呈現在我們面前。
    4. 第四個功能是查詢停車場內車的編號,首先這個編號順序應該是車輛停入的先后時間確定,其次,我們有了這個功能,我們實現車輛開出停車場時,能很明顯感受到車輛的變化。
    5. 第五個功能是查詢停車場外車的編號,因為停車場外并沒有規定能容納多少車輛,所以這個功能是作為一個參考。
    6. 第六個功能是查詢停車場外車的編號(是由進入停車場的優先順序進行輸出),這樣我們就可以清楚的觀察當有停車場外車進入停車場時,停車場外車輛的變化。
    7. 第七個功能是查詢停車場內是否有空余,這樣就可以給開入停車場的車輛提示,是否它們能開進停車場。
    8. 第八個功能是查詢停車場外一輛車需等待幾輛車,停車場外的車輛時任意的,沒有要求的,我們只需要你給出車的編號,我們就可以查詢車輛前方需等帶幾輛車,這樣就可以給暫時不能停入停車場的車輛一個時間預期。

3.停車場代碼的實現

??? 一.構建停車場內棧結構和停車場內隊結構:一開始我想用結構體動態模擬一個棧和隊列,但是兩個結構的動態構建會讓代碼很復雜,而且所需的空間和時間復雜度都很高,所以我換用數組靜態模擬棧和隊列,不僅節省了大量空間,也提高了時間效率,增加了代碼的簡潔性和可讀性。

      1. 構建停車場內棧結構:我用靜態數組模擬棧的實現,首先定義一個stk[]數組,里面貯存的值是車輛的編號,再定義int tt,tt類似于棧的頭指針,當有元素進棧棧,棧頂指針往后移,并將元素值賦予stk[tt],簡化可以寫為stk[++tt]=m,這樣我們就實現了棧的功能,比如棧內元素個數就等于tt,stk[tt]就是最后一輛車的編號。
      2. 構建停車場外的隊列結構:我也是用數組靜態模擬來實現隊列結構。首先定義數組q[],int hh=0,int gg=-1,數組q里面貯存的也是車輛的編號,hh類似于頭指針,gg類似于尾指針,這樣我就構建了一個隊列結構。比如,隊內的元素個數為:gg-hh+1,q[hh]代表隊頭元素,hh--表示出隊。

二.實現停車場功能的結構:我選擇采用主菜單的格式呈現再頁面上,然后你無論如何都要進行一次操作,我就采用了do-while循環,循環內部使用switch-case結構一一對應每種操作,并且加入default來判斷是否正確輸入操作編號。

三.實現停車場的功能:

      1. 車輛開進停車場:首先我們應該判斷停車場內是否有空位,有的話車輛停入停車場內,否側車輛停入停車場外側便道內,所以我們可以將功能1和功能7結合在一起實現,因為tt代表棧中元素個數,如果tt<n的話,即停車場內有空余,可以停進停車場,否側停進外側便道,我們每停入一輛車就相當與進棧即stk[++tt]=m,再讓tt與n進行判斷。
      2. 車輛開出停車場:首先要判斷你想要開出的車輛是否再停車場內,如果在就將車開出停車場,否側提示重新輸入。其次車輛開出停車場需要在它之后開進停車場的車讓路,我的做法是將我需要開出的那輛車進行移位,將它移入棧頭,在tt—將它出棧,它后面的車都前進一位。最后我們還要將隊列中的車進棧,停車場開出一輛車有一個空余,我先判斷隊列中是否有車,即隊列是否為空(hh<=gg),隊列空就就不需要出隊,反之,需要將對頭元素進入棧頭stk[++tt]=q[hh++]。這樣我就完成了整個車輛開出停車場的過程。
      3. 查詢停車場內車的數量:這個很簡單,直接輸出tt即可。
      4. 查詢停車場內車的編號:對我的棧進行一次循環遍歷即可。
      5. 查詢停車場外車的數量:這個也很簡單,直接輸出gg-hh+1即可。
      6. 查詢停車場外車的編號:也是對隊列進行一次循環遍歷即可。
      7. 查詢停車場內是否有空余:結合功能i實現。
      8. 查詢停車場外一輛車需等待幾輛車:首先判斷停車場外是否有車,即隊不為空,再進一步查詢車輛編碼是否存在,我用一個變量flag=1進行判斷,對隊列進行一次循環遍歷,如果能查找到相同的編號,就讓flag=0,最后通過flag判斷是否存在,最后一定要回溯,讓flag再次等于1,不然下次判斷的時候會判斷失誤。查詢車輛編碼時,我再用變量count進行計數,從隊頭開始查找,如果沒找到count++,找到直接就break結束循環。

四、代碼展示

#include <iostream>using namespace std;int stk[100000],q[100000],tt=0,hh=0,gg=-1;int main()
{int n,x,m,k,flag = 1;;cout << "請輸入停車場的容量" << endl;cin >> n;do{cout << "----------------------------------------------" << endl;cout << "---***課程設計-停車場管理系******************---" << endl;cout << "---***請輸入你的操作***********************---" << endl;cout << "---***1.車輛開進停車場*********************---" << endl;cout << "---***2.車輛開出停車場*********************---" << endl;cout << "---***3.查詢停車場內車的數量***************---" << endl;cout << "---***4.查詢停車場內車的編號***************---" << endl;cout << "---***5.查詢停車場外車的數量***************---" << endl;cout << "---***6.查詢停車場外車的編號***************---" << endl;cout << "---***7.查詢停車場外一輛車需等待幾輛車*****---" << endl;cout << "---***0.結束操作***************************---" << endl; cout << "----------------------------------------------" << endl;cin >> x;switch(x){case 1:cout << "請輸入開進車的編號" << endl;cin >> m;if(tt<n){cout << "停車場內有空余,車輛可以開進停車場" << endl;stk[++tt] = m;}else {cout << "停車場內沒有空余,車輛請開進便道等待" << endl;q[++gg] = m;    } break;case 2:cout << "請輸入第幾輛車開出停車場" << endl;cin >> k;if(tt==0) cout << "停車場目前沒有車,無法開出停車場" << endl;else{if(k==tt) {cout << "停車場內有車,可以開出停車場,編號為" << stk[tt] << endl;tt--;}else{int j;cout << "停車場內有車,可以開出停車場,編號為" << stk[k] << endl;for(int i=k;i<tt;i++) {j = stk[i];stk[i] = stk[i+1];stk[i+1] = j;}tt--;}   } if(hh<=gg&&tt<=n) {cout << "便道內有車,可以開進停車場" << endl;cout << "開進停車場的車編號為" << q[hh] << endl; stk[++tt] = q[hh++];}else cout << "便道內無車,車輛可以直接開進停車場" << endl;break;case 3:if(tt<n) {cout << "目前停車場內車編號為:" << tt << endl;cout << "車未停滿,可以在開進車輛" << endl;}else {cout << "目前停車場內車有:" << tt << endl;cout << "車已停滿,請開進便道" << endl;}break;case 4:cout << "停車場內的車編號為:(按開進時間快慢)" << endl; for(int i=1;i<=tt;i++)cout << stk[i] << ' ';cout << endl;   break;case 5:if(hh<=gg)cout << "便道內有車,數量為:" << gg-hh+1 << endl;elsecout << "便道內無車,可以直接開進停車場" << endl; break;case 6:cout << "停車場外車的編號為:(按先進停車場的順序)" << endl;for(int i=hh;i<=gg;i++)cout << q[i] << ' ';cout << endl;break;case 7:cout << "請輸入停車場外任意一個車的編號" << endl;cin >> m; if(hh>gg) cout << "便道內沒有車!無法查詢." << endl;else {for(int i=hh;i<=gg;i++)if(q[i]==m) flag=0; if(flag) cout << "便道內沒有該車,請重新輸入" << endl;else {cout << "便道內有該車" << endl;   int count = 0;for(int i=hh;i<=gg;i++){if(q[i]==m) break;else count++;}if(count==0) cout << "下一輛進停車場的車就是你" << endl;else cout << "你還需要等待" << count << "車" << endl;}flag = 1;} break;case 0: break;default: cout << "輸入錯誤!請重新輸入!" << endl;break;}}while(x);return 0;
} 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/168272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168272.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Frameworks 開發總結之七

1.修改android 系統/system/下面文件時權限不夠問題 下面提到的方式目前在Bobcat的userdebug image上測試可行&#xff0c;還沒有在user上測試過. 修改前: leifleif:~$ adb root restarting adbd as root leifleif:~$ adb disable-verity verity is already disabled using …

Find My鼠標|蘋果Find My技術與鼠標結合,智能防丟,全球定位

隨著折疊屏、多屏幕、OLED 等新興技術在個人計算機上的應用&#xff0c;產品更新換代大大加速&#xff0c;進一步推動了個人計算機需求的增長。根據 IDC 統計&#xff0c;2021 年全球 PC 市場出貨量達到 3.49 億臺&#xff0c;同比增長 14.80%&#xff0c;隨著個人計算機市場發…

亞馬遜云科技re:Invent大會:云計算與生成式AI共筑科技新局面,攜手構建未來

隨著科技的飛速發展&#xff0c;云計算和生成式 AI 已經成為了推動科技進步的重要力量。這兩者相互結合&#xff0c;正在為我們創造一個全新的科技局面。 亞馬遜云科技的re:Invent大會再次證明了云計算和生成式AI的強大結合正在塑造科技的新未來。這次大會聚焦了云計算的前沿技…

C++動態規劃算法:最多可以參加的會議數目

本周推薦閱讀 C二分算法&#xff1a;得到子序列的最少操作次數 本題的其它解法 C二分算法&#xff1a;最多可以參加的會議數目 II 本文涉及的基礎知識點 二分查找算法合集 題目 給你一個 events 數組&#xff0c;其中 events[i] [startDayi, endDayi, valuei] &#xf…

Python庫設置HTTP請求頭字段User-Agent

User-Agent 字段是一個 HTTP 請求頭&#xff0c;用于標識發起請求的客戶端&#xff08;例如瀏覽器、應用程序等&#xff09;。服務器可以根據 User-Agent 字段來識別客戶端的類型和版本&#xff0c;以便提供適當的響應。 User-Agent 字符串通常包含以下內容&#xff1a; 客戶…

為什么要隱藏id地址?使用IP代理技術可以實現嗎?

隨著網絡技術的不斷發展&#xff0c;越來越多的人開始意識到保護個人隱私的重要性。其中&#xff0c;隱藏自己的IP地址已經成為了一種常見的保護措施。那么&#xff0c;為什么要隱藏IP地址&#xff1f;使用IP代理技術可以實現嗎&#xff1f;下面就一起來探討這些問題。 首先&am…

Qt 軟件調試(二)使用dump捕獲崩潰信息

Qt應用程序異常崩潰該怎么辦&#xff0c;生成dump文件再回溯分析&#xff0c;可以快速且準確的幫助我們定位到崩潰的點。那么&#xff0c;本章我們分享下如何在Qt中生成dump文件。 一、使用minudump捕獲崩潰信息 #include <QCoreApplication> #include <QDir> #i…

k8s docker總結特殊點

k8s docker總結特殊點 前言一、docker 的驅動。1、cgroup:&#xff08;Control Groups&#xff09;2、日志驅動&#xff08;log driver&#xff09;3、存儲驅動4、網絡驅動&#xff1a; 二、k8s中網絡插件&#xff08;常用calico&#xff0c;次flannel&#xff09;**Flannel:**…

【洛谷 P1636】Einstein學畫畫 題解(圖論+歐拉通路)

Einstein學畫畫 題目描述 Einstein 學起了畫畫。 此人比較懶~~&#xff0c;他希望用最少的筆畫畫出一張畫…… 給定一個無向圖&#xff0c;包含 n n n 個頂點&#xff08;編號 1 ~ n 1 \sim n 1~n&#xff09;&#xff0c; m m m 條邊&#xff0c;求最少用多少筆可以畫…

nodejs微信小程序+python+PHP-書吧租閱管理系統的設計與實現-安卓-計算機畢業設計

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

深度學習+不良身體姿勢檢測+警報系統+代碼+部署(姿態識別矯正系統)

正確的身體姿勢是一個人整體健康的關鍵。然而&#xff0c;保持正確的身體姿勢可能很困難&#xff0c;因為我們經常忘記這一點。這篇博文將引導您完成為此構建解決方案所需的步驟。最近&#xff0c;我們在使用 POSE 進行身體姿勢檢測方面玩得很開心。它就像一個魅力&#xff01;…

Ubuntu20安裝ssh服務

Ubuntu20上執行如下命令查看是否存在ssh服務 #ps -e | grep ssh 只有ssh-agent&#xff0c;沒有sshd; 因此要安裝openssh-server. 搜索openssh-server,得到下載鏈接&#xff1a; openssh-server 復制這個Binary Package鏈接即可下載&#xff0c;然后使用如下命令安裝 sudo…

Ruoyi項目傳List到后臺并使用Excel模板下載數據的方法以及遇到的各種前后端數據交互問題

import { download } from @/utils/requestconst app = createApp(App)// 全局方法掛載 app.config.globalProperties.download = download 首先因為ruoyi-ui中的main.js有配置如上全局注冊: 因此只需要在vue中定義一個方法直接使用this.download調用下載即可: (download的3…

Hausdorff是什么距離,怎樣計算的

Hausdorff距離是一種用于度量兩個集合之間的相似性或差異性的距離度量指標。它基于數學家Felix Hausdorff的工作而得名。 對于給定的兩個集合A和B&#xff0c;Hausdorff距離定義為集合A中的每個點到集合B的最近點的最大距離&#xff0c;與集合B中的每個點到集合A的最近點的最大…

C++列表初始化

1.列表初始化 注意和初始化列表區分開來&#xff0c;在 C 98 中允許使用花括號對數組或者結構體元素進行統一的初始值設定。 struct Point {int _x;int _y; };int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; }而 C 11 擴大了…

PyQt6庫和工具庫QTDesigner安裝與配置

鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計12條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話版…

c語言第七彈--掃雷小游戲!

今天做一個有趣的掃雷小游戲 現在正式開始設計。 思路&#xff1a;想要根本上實現必須擁有 實現函數的主體.c文件 頭文件.h 及頭文件實現.c。 頭文件.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #d…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger腳手架

swagger-boostrap-ui從1.x版本到如今2.x&#xff0c;同時也更改名字Knife4j 在此記錄下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;無需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已經包含。 官方版本說明…

mysql1124實驗七索引管理

實驗任務七 索引管理實驗任務書 1. 實驗目的 掌握在MySQL中使用MySQL Workbench或者SQL語句創建和使用索引的方法&#xff08;以SQL命令為重點&#xff09;。 掌握在MySQL中使用MySQL Workbench或者SQL語句查看和刪除索引的方法&#xff08;以SQL命令為重點&#xff09;。 …

詳細解答T-SNE程序中from sklearn.manifold import TSNE的數據設置,包括輸入數據,繪制顏色的參數設置,代碼復制可用!!

文章目錄 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的縮寫1、可運行的T-SNE程序2. 實驗結果3、針對上述程序我們詳細分析T-SNE的使用方法3.1 加載數據3.2 TSNE降維3.3 繪制點3.4 關于顏色設置&#xff0c;顏色使用的標簽數據的說明cy 總結 前言——TSNE是t-D…