您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言實現停車管理系統的代碼怎么寫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言實現停車管理系統的代碼怎么寫”吧!
設停車場是一個可以停放n輛汽車的南北方向的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內已停滿n輛車,那么后來的車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。要求程序輸出每輛車到達后的停車位置(停車場或便道上),以及某輛車離開停車場時應繳納的費用和它在停車場內停留的時間。
由于停車場只有一個大門,當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,先進停車場的后退出,后進車場的先退出,符合棧的“后進先出,先進后出”的操作特點,因此,可以用一個棧來模擬停車場。而當停車場滿后,繼續來到的其它車輛只能停在便道上,根據便道停車的特點,先排隊的車輛先離開便道進入停車場,符合隊列的“先進先出,后進后出”的操作特點,因此,可以用一個隊列來模擬便道。排在停車場中間的車輛可以提出離開停車場,并且停車場內在要離開的車輛之后到達的車輛都必須先離開停車場為它讓路,然后這些車輛依原來到達停車場的次序進入停車場,因此在前面已設的一個棧和一個隊列的基礎上,還需要有一個地方保存為了讓路離開停車場的車輛,由于先退出停車場的后進入停車場,所以很顯然保存讓路車輛的場地也應該用一個棧來模擬。因此,本題求解過程中需用到兩個棧和一個隊列。棧以順序結構實現,隊列以鏈表結構實現。
#include #include<stdlib.h> #include<stdio.h> #include #define MAXSIZE 5 #define price 0.01 #pragma warning(disable: 4996) using namespace std; typedef struct time { int hour; int min; }Time;/時間結點/ typedef struct carnews { char num[10]; Time reach; Time leave; }CarNode;/車輛信息結點/ typedef struct NODE { CarNode* stack[MAXSIZE + 1]; int top; //棧可用的最大容量 }SeqStackCar;/模擬停車場/ typedef struct car { CarNode* data; struct car* next; }QueueNode; //模擬車進入便道,便道的車進入停車場 typedef struct Node { QueueNode* head; //頭指針 QueueNode* rear; //尾指針 }LinkQueueCar;/模擬便道/ void InitStack(SeqStackCar*); //創建空棧 int InitQueue(LinkQueueCar*); //創建空隊列 int Arrival(SeqStackCar*, LinkQueueCar*); //車輛到達 void Leave(SeqStackCar*, SeqStackCar*, LinkQueueCar*); //車輛離開 void PRINT(CarNode*, int); //輸出離開車輛的信息清單 void List(SeqStackCar, LinkQueueCar); //對所用到的函數作提前聲明 int main() { SeqStackCar Enter, Temp; LinkQueueCar Wait; int ch; InitStack(&Enter);//初始化車站 InitStack(&Temp);//初始化讓路的臨時棧 InitQueue(&Wait);//初始化通道 while (1) { cout << "@歡迎使用本停車管理系統@" << endl; cout << “----------------------------------------------------------------” << endl; cout << " # # 1.車輛到達 # # " << endl; cout << " # # 2.車輛離開 # # " << endl; cout << " # # 3.列表顯示 # # " << endl; cout << " # # 4.退出系統 # # " << endl; cout << “----------------------------------------------------------------” << endl; cout << “!說明:請注意正確輸入時間,在輸入‘時'后,按‘ENTER'或者‘空格',再輸入‘分'。不要為非數字” << endl; cout << “請輸入所需要的服務!(1-4).” << endl;//進入系統的目錄顯示 while (1) { cin >> ch; if (ch >= 1 && ch <= 4)break; else cout << “輸入錯誤!請選擇:(1-4).” << endl; } switch (ch) { case 1:Arrival(&Enter, &Wait); break;//車輛到達 case 2:Leave(&Enter, &Temp, &Wait); break;//車輛離開 case 3:List(Enter, Wait); break;//列表顯示信息 case 4:exit(0);//退出主程序 default:break; } } } void InitStack(SeqStackCar s) {//初始化棧 int i; //停車數量 s->top = 0; //棧頂元素置為0 for (i = 0; i <= MAXSIZE; i++) s->stack[s->top] = NULL; } int InitQueue(LinkQueueCar Q) {//初始化便道 Q->head = (QueueNode*)malloc(sizeof(QueueNode)); //malloc函數為動態分配空間 if (Q->head != NULL) { Q->head->next = NULL; Q->rear = Q->head; //頭尾指針置為相等,隊列為空 return(1); } else return(-1); } int Arrival(SeqStackCar* Enter, LinkQueueCar* W) {//車輛到達 CarNode* p; QueueNode* t; p = (CarNode*)malloc(sizeof(CarNode));//malloc函數為動態分配空間 flushall();//清除所有的緩存區 cout << “請輸入車牌號(例如:AB123):” << endl; cin >> p->num; if (Enter->top < MAXSIZE)//車場未滿,車進車場 { Enter->top++; cout << “車輛在車場第” << Enter->top << “位置!” << endl; cout << “請輸入到達時間:(小時:分鐘)” << endl; cin >> p->reach.hour; while (p->reach.hour < 0 || p->reach.hour>23) {//控制時間格式正確 cout << “輸入錯誤!” << endl; cout << “請重新輸入到達時間的時(0-23)!” << endl; cin >> p->reach.hour; } cin >> p->reach.min; while (p->reach.min < 0 || p->reach.min>59) {//控制分鐘格式正確 cout << “輸入錯誤!” << endl; cout << “請重新輸入到達時間的分(0-59)!” << endl; cin >> p->reach.min; } Enter->stack[Enter->top] = p; return(1); } else//車場已滿,車進便道 { cout << “車場已滿,請在便道等待!” << endl; t = (QueueNode*)malloc(sizeof(QueueNode)); t->data = p; t->next = NULL; W->rear->next = t; W->rear = t; return(1); } } void Leave(SeqStackCar* Enter, SeqStackCar* Temp, LinkQueueCar* W) {//車輛離開 int room; CarNode* p; QueueNode* q; //判斷車場內是否有車 if (Enter->top > 0)//有車 { while (1) {//輸入離開車輛的信息 cout << “請輸入車在車場的位置1–” << Enter->top << “:”; cin >> room; if (room >= 1 && room <= Enter->top)break; } while (Enter->top > room) {//車輛離開 Temp->top++;//臨時通道棧頂指針 Temp->stack[Temp->top] = Enter->stack[Enter->top]; Enter->stack[Enter->top] = NULL; Enter->top–; } p = Enter->stack[Enter->top]; Enter->stack[Enter->top] = NULL; Enter->top–; while (Temp->top >= 1) {//判斷臨時通道上是否有車 Enter->top++; Enter->stack[Enter->top] = Temp->stack[Temp->top]; Temp->stack[Temp->top] = NULL; Temp->top–; } PRINT(p, room); if ((W->head != W->rear) && Enter->top < MAXSIZE) {//車站是未滿 //便道的車輛進入車場 q = W->head->next; p = q->data;//p指向鏈隊頭 Enter->top++; cout << “便道的” << p->num << “號車進入車場第” << Enter->top << “位置!” << endl; cout << “請輸入現在的時間(小時:分鐘):” << endl; cin >> p->reach.hour; if (p->reach.hour < 0 || p->reach.hour>23) { cout << “輸入錯誤!” << endl; cout << “請重新輸入到達時間的時(0-23):” << endl; cin >> p->reach.hour; } cin >> p->reach.min; if (p->reach.min < 0 || p->reach.min>59) { cout << “輸入錯誤!” << endl; cout << “請重新輸入到達時間的分(0-59):” << endl; cin >> p->reach.min; } Enter->stack[Enter->top] = p; W->head->next = q->next; if (q == W->rear)W->rear = W->head; free(q);//釋放q地址 } else cout << “便道里沒有車!” << endl;//便道沒車 } else cout << “車場里沒有車!” << endl;//車場沒車 } void PRINT(CarNode* p, int room) {//輸出離開車輛的信息清單 int A1, A2, B1, B2; cout << “請輸入離開的時間:(小時:分鐘)” << endl; cin >> p->leave.hour; while (p->leave.hour < 0 || p->leave.hour>23) { cout << “輸入錯誤!” << endl; cout << “請重新輸入離開的時間的時(0-23):” << endl; cin >> p->leave.hour; B1 = p->leave.hour; } cin >> p->leave.min; if (p->leave.min < 0 || p->leave.min>59) { cout << “輸入錯誤!” << endl; cout << “請重新輸入離開的時間的分(0-59):” << endl; cin >> p->leave.min; } cout << endl << “離開車輛的車牌號為:” << endl; puts(p->num); cout << “其到達的時間為:” << p->reach.hour << “:” << p->reach.min << endl; cout << “其離開的時間為:” << p->leave.hour << “:” << p->leave.min << endl; A1 = p->reach.hour; A2 = p->reach.min; B1 = p->leave.hour; B2 = p->leave.min; cout << “應交費用為:” << (((B1 - A1) * 60 + (B2 - A2)) + 1440) % 1440 * price << “元!” << endl; } void List1(SeqStackCar* S) {//列表顯示車場信息 cout << “您選擇的是車場停車情況!” << endl; int i; if (S->top > 0) {//判斷車站內是否有車 cout << “位置 到達時間 車牌號” << endl; for (i = 1; i <= S->top; i++) { cout << " " << i << " " << S->stack[i]->reach.hour << “:” << S->stack[i]->reach.min << " " << S->stack[i]->num << endl; } } else cout << “車場里沒有車!” << endl; } void List2(LinkQueueCar* W) {//列表顯示便道信息 cout << “您選擇的是便道停車情況!” << endl; int j = 1; QueueNode* p; p = W->head->next; if (W->head != W->rear) {//判斷通道上是否有車 cout << “等待車輛的車牌號碼為:” << endl; while (p != NULL) { cout << j; puts(p->data->num); cout << j << " " << p->data->num << endl; p = p->next; j++; } } else cout << “便道里沒有車!”; } void List(SeqStackCar S, LinkQueueCar W) {//列表界面 int flag, tag; //列表和標簽 flag = 1; while (flag) {//列表顯示循環控制 cout << “請選擇您要顯示的信息!(1-3):” << endl; cout << “#——1.車場——#” << endl; cout << “#——2.便道——#” << endl; cout << “#——3.返回——#” << endl; while (1) { cin >> tag; if (tag >= 1 || tag <= 3)break; else cout << “輸入錯誤!請選擇(1-3):” << endl; } switch (tag) { case 1:List1(&S); break;//列表顯示車場信息 case 2:List2(&W); break;//列表顯示便道信息 case 3:flag = 0; break; default:break; } } }
到此,相信大家對“C語言實現停車管理系統的代碼怎么寫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。