用C語言實現簡單的停車場管理

這個程序是利用棧和循環隊列實現的,自己得先處理好邏輯關系就好了。由于題目沒有要求,這個程序就沒加重復判斷,比如一輛車已經停在車位上或者便道上,再來一輛就判斷不了了。關于棧,就是先進后出的思想,隊列就是先進先出的思想。這個程序自己沒用鏈棧和鏈隊列做,因為感覺比較耗時。不過棧和隊列的運用大多數都是用數組,先掌握好數組的表示再用鏈表寫上手也很快。
**項目要求:**停車場是一個能放 n 輛車的狹長通道,只有一個大門,汽車按到達的先后次序停放。若車場滿了,車要在門外的便道上等候,一旦有車走,則便道上第一輛車進入。當停車場中的車離開時,由于通道窄,在它后面的車要先退出,待它走后依次進入。汽車離開時按停放時間收費。
基本功能要求:
1)建立三個數據結構分別是:停放隊列,讓路棧,等候隊列
2)輸入數據模擬管理過程,數據(入或出,車號)。
這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述
頭文件: PLot.h

//
// Created by PC-Saw on 2018/12/17.
//#ifndef  __PLOT_H__
#define __PLOT_H__#define Price    1          // 單價可以自己定義n
#define MAX_STOP 10
#define MAX_PAVE 10#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <time.h>                           // 包含時間函數的頭文件
#include <string.h>// 汽車信息
typedef struct
{int timeIn;              // 進入停車場時間int timeOut;             // 離開停車場時間char plate[10];// 汽車牌照號碼,定義一個字符指針類型
}Car;// 停放棧(用于停放車輛)
typedef struct
{Car Stop[MAX_STOP];   // 用于停放車輛的棧int top;                  // 標記棧頂位置
}Stopping;// 等候隊列
typedef struct
{int count;                // 用來指示隊中的數據個數Car Pave[MAX_PAVE];   // 等候停車的隊列int front, rear;          // 標記隊頭和隊尾位置
}Pavement;// 讓路棧
typedef struct
{Car Help[MAX_STOP];   // 用于讓路的隊列int top;                  // 標記站定位置
}Buffer;Stopping s;
Pavement p;
Buffer   b;
Car      c;
char     C[10];void stop_to_pave();       // 車停入便道
void car_come    ();       // 車停入停車位
void stop_to_buff();       // 車進入讓路棧
void car_leave   ();       // 車離開
void welcome     ();       // 主界面函數
void Display     ();       // 顯示車輛信息#endif //__PLOT_H__

源文件 PLot.c

//
// Created by PC-Saw on 2018/12/17.
//#include "PLot.h"void stop_to_pave()                         // 車停入便道
{// 判斷隊滿if (p.count > 0 && (p.front == (p.rear + 1) % MAX_PAVE)){printf ("便道已滿,請下次再來\n");}else{strcpy(p.Pave[p.rear].plate, C);    // 車進入便道p.rear = (p.rear + 1) % MAX_PAVE;   // 隊尾指示器加1p.count++;                          // 計數器加1printf ("牌照為%s的汽車停入便道上的%d的位置\n", C, p.rear);}
}void car_come()                             // 車停入停車位
{printf ("請輸入即將停車的車牌號:");     // 輸入車牌號scanf ("%s", &C);if (s.top >= MAX_STOP - 1)              // 如果停車位已滿,停入便道{stop_to_pave();                     // 停入便道}else{s.top++;                            // 停車位棧頂指針加1time_t t1;long int t = time(&t1);             // 記錄進入停車場的時間char* t2;t2 = ctime (&t1);                   // 將當前時間轉換為字符串s.Stop[s.top].timeIn = t;strcpy(s.Stop[s.top].plate, C);     // 將車牌號登記printf ("牌照為%s的汽車停入停車位的%d車位, 當前時間:%s\n", C, s.top + 1, t2);}return ;
}void stop_to_buff()                         // 車進入讓路棧
{// 停車位棧壓入臨時棧,為需要出棧的車輛讓出道while (s.top >= 0){if (0 == strcmp(s.Stop[s.top].plate, C)){break;}// 讓出的車進入讓路棧strcpy(b.Help[b.top++].plate, s.Stop[s.top].plate);printf ("牌照為%s的汽車暫時退出停車場\n", s.Stop[s.top--].plate);}// 如果停車位中的車都讓了道,說明停車位中無車輛需要出行if (s.top < 0){printf ("停車位上無此車消息\n");}else{printf ("牌照為%s的汽車從停車場開走\n", s.Stop[s.top].plate);time_t t1;long int t = time (&t1);c.timeOut = t;                        // 標記離開停車場的時間char* t2;t2 = ctime (&t1);                   // 獲取當前時間printf ("離開時間%s\n需付%ld元\n", t2, Price * (c.timeOut - s.Stop[s.top].timeIn));s.top--;}// 將讓路棧中的車輛信息壓入停車位棧while (b.top > 0){strcpy(s.Stop[++s.top].plate, b.Help[--b.top].plate);printf ("牌照為%s的汽車停回停車位%d車位\n", b.Help[b.top].plate, s.top);}// 從便道中 -> 停車位while (s.top < MAX_STOP-1){if (0 == p.count)               // 判斷隊列是否為空{break;}   // 不為空,將便道中優先級高的車停入停車位else{strcpy(s.Stop[++s.top].plate, p.Pave[p.front].plate);printf ("牌照為%s的汽車從便道中進入停車位的%d車位\n", p.Pave[p.front].plate, s.top);p.front = (p.front + 1) % MAX_PAVE;p.count--;}}
}void car_leave()                        // 車離開
{printf ("請輸入即將離開的車牌號:\n");scanf ("%s", &C);if (s.top < 0)                      // 判斷停車位是否有車輛信息{printf ("車位已空,無車輛信息!\n");}else{stop_to_buff();}
}void Display()
{int i = s.top;if (-1 == i){printf ("停車場為空\n");}time_t t1;long int t = time(&t1);             // 標記顯示時的時間printf ("\t車牌號\t\t\t停放時間\t\t當前所需支付金額\n");while (i != -1){printf ("\t%s\t\t%d秒\t\t\t%d元\n", s.Stop[i].plate, t - s.Stop[i].timeIn, Price * (t - s.Stop[i].timeIn) / 10);i--;}
}void welcome()
{printf ("\t*******************目前停車場狀況***********************\n");printf ("\t停車場共有%d個車位,當前停車場共有%d輛車,等候區共有%d輛車\n", MAX_STOP, s.top+1, (p.rear + MAX_PAVE - p.front)% MAX_PAVE);printf ("\t********************************************************\n");printf ("\t---------------Welcome to our Car Parking---------------\n");printf ("\t*                     1.Parking                        *\n");printf ("\t*                     2.leaving                        *\n");printf ("\t*                     3.situation                      *\n");printf ("\t*                     4.exit                           *\n");printf ("\t--------------------------------------------------------\n");
}

主函數 main.c

/**********************************************************
問題描述:停車場是一個能放 n 輛車的狹長通道,只有一個大門,
汽車按到達的先后次序停放。若車場滿了,車要在門外的便道上等候
,一旦有車走,則便道上第一輛車進入。當停車場中的車離開時,由
于通道窄,在它后面的車要先退出,待它走后依次進入。汽車離開
時按停放時間收費。
基本功能要求:1)建立三個數據結構分別是:停放隊列,讓路棧,等候隊列2)輸入數據模擬管理過程,數據(入或出,車號)。
***********************************************************/
#include "PLot.h"int main()
{// 初始化s.top   = -1;b.top   =  0;p.rear  =  0;p.count =  0;p.front =  0;while(1){//system("clear");welcome();int i, cho;scanf ("%d", &i);if (1 == i) car_come();if (2 == i) car_leave();if (3 == i) Display();if (4 == i) break;printf ("返回請輸入1\n");scanf ("%d", &cho);if (1 == cho){continue;}else{printf ("您的輸入有誤,請重新輸入\n");scanf ("%d", &cho);continue;}}return 0;
}

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

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

相關文章

推薦一個配置linux服務的網站

該網站的各種linux服務的配置都是基于CentOS系統的 基本上各種linux服務都有了 http://www.server-world.info/en/轉載于:https://www.cnblogs.com/Skyar/p/3582389.html

mariadb數據庫增刪改查

1.常用數據類型 1&#xff09;整數:int, bit 2&#xff09;小數:decimal    #decimal(5,2)表示共有五位數&#xff0c;保留兩位小數 3&#xff09;字符串:varchar, char   4&#xff09;日期時間:date, time, datetime 5&#xff09;枚舉類型(enu…

為什么你工作努力卻沒有起色?

成為職場達人&#xff0c;未必要經常挑燈夜戰。相反&#xff0c;注意到下面幾條&#xff0c;會讓你少走彎路。 1&#xff09;成長的機會永遠比眼前的待遇重要——做重要的事比多拿錢重要。 我知道在水木bbs上的worklife版本&#xff0c;每天都在上演的就是比較自己的第一個o…

《 Spring 實戰 》(第4版) 讀書筆記 (未完結,更新中...)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Pxx 表示在書的第 xx 頁。 Spring 框架的核心是 Spring 容器。 1. (P7.) 構造器注入是依賴注入的方式之一。 緊耦合&#xff1a;在 …

數據結構排序法之希爾排序法(Shell Sort)

希爾排序&#xff0c;也叫遞減增量排序&#xff0c;是插入排序的一種更高效的改進版本。希爾排序是不穩定的排序算法。 希爾排序是基于插入排序的以下兩點性質而提出改進方法的&#xff1a; 1、插入排序在對幾乎已經排好序的數據操作時&#xff0c;效率高&#xff0c;即可以達…

Windows To Ghost系統封裝之必備軟件集 - 好壓

好壓壓縮軟件&#xff08;HaoZip&#xff09;是強大的壓縮文件管理器&#xff0c;是完全免費的新一代壓縮軟件&#xff0c;相比其它壓縮軟件系統資源占用更少&#xff0c;有更好的兼容性&#xff0c;壓縮率比較高。 它提供了對ZIP、7Z和TAR文件的完整支持&#xff0c;能解壓RAR…

js 彈窗并定時關閉

1. $(input).click(function() {prompt(點擊成功, 2000) })function prompt(newName, time, fn) {var $div $(<div></div>);$div.css({position: fixed,top: 0,left: 0,width: 100%,height: 100%,z-index: 200,background-color: rgba(0,0,0,0.4),// background-c…

數據結構排序法之插入法

插入排序是一種簡單直觀的排序算法。它的工作原理非常類似于我們抓撲克牌。 對于未排序數據(右手抓到的牌)&#xff0c;在已排序序列(左手已經排好序的手牌)中從后向前掃描&#xff0c;找到相應位置并插入。 插入排序在實現上&#xff0c;通常采用in-place排序&#xff08;即…

XSLT學習筆記

1. 樣式聲明&#xff1a;<xsl:stylesheet>或<xsl:transform> 2. XSLT常用元素&#xff1a; 2.1 <xsl:template>&#xff1a;創建模板 Match屬性的作用是使模板和XML元素相關聯 e.g.:<xsl:template match"\">......</xsl:template&g…

職場:人生從沒有最佳時機!一個離職客服人員的領悟

每個人都有感到失落迷惘的時候。 人生用專制又霸道的方式運行著&#xff0c;每當我們心想一切塵埃落定、生活穩固的時候&#xff0c;生活總愛給我們驚喜&#xff0c;粉碎我們短暫的安逸&#xff0c;讓我們不得不重新思考。 「我走對路了嗎?」 「我能夠賺更多錢、爬到更高的地位…

VS Code 的常用快捷鍵

VS Code 的常用快捷鍵和插件 一、vs code 的常用快捷鍵 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、注釋&#xff1a; a) 單行注釋&#xff1a;[ctrlk,ctrlc] 或 ctrl/ b) 取消…

vue-axios interceptors

import axios from axios import cookie from js-cookie const options {baseURL: window.location.protocol process.env.BASE_API,headers: {},timeout: 20000 } const fetch axios.create(options)// request攔截器 fetch.interceptors.request.use(config > {if (coo…

數據結構排序法之雞尾酒排序法he快速排序法

雞尾酒排序&#xff0c;也叫定向冒泡排序&#xff0c;是冒泡排序的一種改進。此算法與冒泡排序的不同處在于從低到高然后從高到低&#xff0c;而冒泡排序則僅從低到高去比較序列里的每個元素。他可以得到比冒泡排序稍微好一點的效能。 // 兩兩互換 void swap (int* a, int i, …

VSCode 多開、環境對比

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 多開&#xff1a; 第一種&#xff1a;win10的開始菜單&#xff0c;在vscode圖標右鍵選擇“新開窗口”&#xff0c;這樣就多了一個vscode…

前言_工作兩年自我感觸

17年大學畢業&#xff0c;到今天整整工作兩年&#xff0c;從前端到數據分析&#xff0c;從上家公司&#xff08;簡稱A&#xff09;到現公司&#xff0c;想趁著今天是參加工作兩年的紀念日&#xff0c;回憶過往&#xff0c;結合現狀有感而發。 剛畢業的時候&#xff0c;啥都學&a…

數據結構排序法之堆排序he歸并排序

堆排序&#xff08;Heapsort&#xff09;是指利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構&#xff0c;并同時滿足堆性質&#xff1a;即子結點的鍵值或索引總是小于&#xff08;或者大于&#xff09;它的父節點。 堆排序的時間&#xff0c;主要由建…

超詳細設置 Idea 類注釋模板和方法注釋模板

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 網上找了一下&#xff0c;沒有很詳細且正確介紹Idea配置注釋模板的&#xff0c;于是結合多篇文章自己琢磨整理出如下。 設置類注釋模板…

手動創建兩個文本文件text1.txt和text2.txt,按要求創建text3.txt

實現在text1.txt和text2.txt文件中除去首行和末尾對應的數據&#xff0c;要求三個文本內容如下&#xff1a; text1 text2 text3begin begin begin10 11 12 15 16 17 …

感情

團結 共患難的感情轉載于:https://www.cnblogs.com/yyjh/p/11139749.html

誰搶走了中國男人的老婆?

“老夫少妻”、“包二奶”、“洋媳婦”、“單身貴族”、“丁克家庭”都是當今最時髦的詞匯。這看似“你情我愿”的現象背后竟隱藏著巨大隱患! 目前中國男女比例是119&#xff1a;100&#xff0c;某些地區已達130&#xff1a;100;中國將有5百萬以上光棍&#xff0c;這對中國社會…