用C语言实现简单的停车场管理
這個(gè)程序是利用棧和循環(huán)隊(duì)列實(shí)現(xiàn)的,自己得先處理好邏輯關(guān)系就好了。由于題目沒有要求,這個(gè)程序就沒加重復(fù)判斷,比如一輛車已經(jīng)停在車位上或者便道上,再來一輛就判斷不了了。關(guān)于棧,就是先進(jìn)后出的思想,隊(duì)列就是先進(jìn)先出的思想。這個(gè)程序自己沒用鏈棧和鏈隊(duì)列做,因?yàn)楦杏X比較耗時(shí)。不過棧和隊(duì)列的運(yùn)用大多數(shù)都是用數(shù)組,先掌握好數(shù)組的表示再用鏈表寫上手也很快。
**項(xiàng)目要求:**停車場(chǎng)是一個(gè)能放 n 輛車的狹長通道,只有一個(gè)大門,汽車按到達(dá)的先后次序停放。若車場(chǎng)滿了,車要在門外的便道上等候,一旦有車走,則便道上第一輛車進(jìn)入。當(dāng)停車場(chǎng)中的車離開時(shí),由于通道窄,在它后面的車要先退出,待它走后依次進(jìn)入。汽車離開時(shí)按停放時(shí)間收費(fèi)。
基本功能要求:
1)建立三個(gè)數(shù)據(jù)結(jié)構(gòu)分別是:停放隊(duì)列,讓路棧,等候隊(duì)列
2)輸入數(shù)據(jù)模擬管理過程,數(shù)據(jù)(入或出,車號(hào))。
頭文件: PLot.h
源文件 PLot.c
// // Created by PC-Saw on 2018/12/17. //#include "PLot.h"void stop_to_pave() // 車停入便道 {// 判斷隊(duì)滿if (p.count > 0 && (p.front == (p.rear + 1) % MAX_PAVE)){printf ("便道已滿,請(qǐng)下次再來\n");}else{strcpy(p.Pave[p.rear].plate, C); // 車進(jìn)入便道p.rear = (p.rear + 1) % MAX_PAVE; // 隊(duì)尾指示器加1p.count++; // 計(jì)數(shù)器加1printf ("牌照為%s的汽車停入便道上的%d的位置\n", C, p.rear);} }void car_come() // 車停入停車位 {printf ("請(qǐng)輸入即將停車的車牌號(hào):"); // 輸入車牌號(hào)scanf ("%s", &C);if (s.top >= MAX_STOP - 1) // 如果停車位已滿,停入便道{stop_to_pave(); // 停入便道}else{s.top++; // 停車位棧頂指針加1time_t t1;long int t = time(&t1); // 記錄進(jìn)入停車場(chǎng)的時(shí)間char* t2;t2 = ctime (&t1); // 將當(dāng)前時(shí)間轉(zhuǎn)換為字符串s.Stop[s.top].timeIn = t;strcpy(s.Stop[s.top].plate, C); // 將車牌號(hào)登記printf ("牌照為%s的汽車停入停車位的%d車位, 當(dāng)前時(shí)間:%s\n", C, s.top + 1, t2);}return ; }void stop_to_buff() // 車進(jìn)入讓路棧 {// 停車位棧壓入臨時(shí)棧,為需要出棧的車輛讓出道while (s.top >= 0){if (0 == strcmp(s.Stop[s.top].plate, C)){break;}// 讓出的車進(jìn)入讓路棧strcpy(b.Help[b.top++].plate, s.Stop[s.top].plate);printf ("牌照為%s的汽車暫時(shí)退出停車場(chǎng)\n", s.Stop[s.top--].plate);}// 如果停車位中的車都讓了道,說明停車位中無車輛需要出行if (s.top < 0){printf ("停車位上無此車消息\n");}else{printf ("牌照為%s的汽車從停車場(chǎng)開走\(yùn)n", s.Stop[s.top].plate);time_t t1;long int t = time (&t1);c.timeOut = t; // 標(biāo)記離開停車場(chǎng)的時(shí)間char* t2;t2 = ctime (&t1); // 獲取當(dāng)前時(shí)間printf ("離開時(shí)間%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) // 判斷隊(duì)列是否為空{(diào)break;} // 不為空,將便道中優(yōu)先級(jí)高的車停入停車位else{strcpy(s.Stop[++s.top].plate, p.Pave[p.front].plate);printf ("牌照為%s的汽車從便道中進(jìn)入停車位的%d車位\n", p.Pave[p.front].plate, s.top);p.front = (p.front + 1) % MAX_PAVE;p.count--;}} }void car_leave() // 車離開 {printf ("請(qǐng)輸入即將離開的車牌號(hào):\n");scanf ("%s", &C);if (s.top < 0) // 判斷停車位是否有車輛信息{printf ("車位已空,無車輛信息!\n");}else{stop_to_buff();} }void Display() {int i = s.top;if (-1 == i){printf ("停車場(chǎng)為空\n");}time_t t1;long int t = time(&t1); // 標(biāo)記顯示時(shí)的時(shí)間printf ("\t車牌號(hào)\t\t\t停放時(shí)間\t\t當(dāng)前所需支付金額\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*******************目前停車場(chǎng)狀況***********************\n");printf ("\t停車場(chǎng)共有%d個(gè)車位,當(dāng)前停車場(chǎng)共有%d輛車,等候區(qū)共有%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"); }主函數(shù) main.c
/********************************************************** 問題描述:停車場(chǎng)是一個(gè)能放 n 輛車的狹長通道,只有一個(gè)大門, 汽車按到達(dá)的先后次序停放。若車場(chǎng)滿了,車要在門外的便道上等候 ,一旦有車走,則便道上第一輛車進(jìn)入。當(dāng)停車場(chǎng)中的車離開時(shí),由 于通道窄,在它后面的車要先退出,待它走后依次進(jìn)入。汽車離開 時(shí)按停放時(shí)間收費(fèi)。 基本功能要求:1)建立三個(gè)數(shù)據(jù)結(jié)構(gòu)分別是:停放隊(duì)列,讓路棧,等候隊(duì)列2)輸入數(shù)據(jù)模擬管理過程,數(shù)據(jù)(入或出,車號(hào))。 ***********************************************************/ #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 ("返回請(qǐng)輸入1\n");scanf ("%d", &cho);if (1 == cho){continue;}else{printf ("您的輸入有誤,請(qǐng)重新輸入\n");scanf ("%d", &cho);continue;}}return 0; }總結(jié)
以上是生活随笔為你收集整理的用C语言实现简单的停车场管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cacti linux cpu data
- 下一篇: 从全栈式解决方案到情感化,揭秘问众智能切