c語言停車場管理系統
A. c# 編程停車場系統
建一個 車 的類 做為 父類。。 其他車輛的種類繼承 車這個父類,重寫父類的計算價格的方法。。然後停車場做為一個類。 他有一個方法,就是停車, 和 一個存儲所有停車位信息的集合。停車的方法有一個參數。一個參數為 車的信息(類型為父類類型)。。這樣的話就可以計算出你需要的所有所有信息
C語言數據結構 車隊管理
我的結題思路:
車的狀態分三種,用switch語句分開{
1:停車 A
庫未滿,往車庫里停車
庫滿,往便道里停車
2:出車 D
從車庫里出車使用臨時車庫
從變道里出車,使用臨時便道
3:停止輸入 E
}
注意:
1:請勿略下面代碼中 「還沒有計算位置」 寫的時候提醒自己,上傳時我忘刪了
2:使用靜態數組來記錄進去的時間 ,用 a[車牌號]
3:用靜態 i 來記錄進車庫里的進出車
進車 i++
出車 i--
4:在寫最關鍵部分時,我是用到了才定義,所以看著有亂,包含哈-_- -_-
二、關鍵代碼//我用的是VS2013
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
usingnamespacestd;
staticinti=1;
staticinta[100];
#defineSTACK_INITSIZE100
#defineStackIncrement10
#defineOK1
#defineERROR0//結構體..............................................................................
typedefstructGARAGE{//創建車庫的結構體
int*base;
int*top;
intstacksize;
intOutTime;
}Garage;
typedefstructTPGarage{//創建臨時車庫的結構體
int*base;
int*top;
intstacksize;
}TpGarage;
typedefstructQNode{
intdate;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{//創建便道的結構體
QueuePtrfront;
QueuePtrrear;
}OtGarage;
typedefstructTNode{//創建臨時便道的結構體
intTdate;
structTNode*Tnext;
}TNode,*TQueuePtr;
typedefstruct{
TQueuePtrTfront;
TQueuePtrTrear;
}TOtGarage;
//.....................................................機構體..................
//...........................................聲明........................
voidInitGarage(Garage&S,intt);//車庫
voidPushGarage(Garage&S,intchp,intt);
voidZPushGarage(Garage&S,intchp);
voidGetTopGarage(TOtGarage&TG,OtGarage&OG,TpGarage&T,Garage&S,intchp,intt);
intPop(Garage&S,int&GH);
voidInitTpStack(TpGarage&T);//臨時車庫
voidPushTpStack(TpGarage&T,intchp);
voidPopTpStack(TpGarage&T,int&chp);
voidInitOtGarage(OtGarage&OG);//變道
voidPushTpStack(TpGarage&T,intchp);
intOutOtGarage(OtGarage&OG,int&e);
voidInitTOtGarage(TOtGarage&TG);//臨時便道
voidTEnOtGarage(TOtGarage&TG,int&Te);
intTOutOtGarage(TOtGarage&TG,int&Te);
inttranverse(GarageS,intt);//遍歷車庫
intPush(charX,intchp,intt,Garage&S,TpGarage&T,OtGarage&OG,TOtGarage&TG);//樞紐
//............................................聲明.......................................
//.................................車庫........................................................
voidInitGarage(Garage&S,intt){//初始化出庫
S.stacksize=t;
S.base=(int*)malloc(S.stacksize*sizeof(int));
S.top=S.base;
}
voidPushGarage(Garage&S,intchp,intt){//車庫進車
a[chp]=t;//記錄當前的時間
*(S.top)++=chp;
}
voidZPushGarage(Garage&S,intchp){//車庫進車
*(S.top)=chp;
S.top++;
}
voidGetTopGarage(TOtGarage&TG,OtGarage&OG,TpGarage&T,Garage&S,intchp,intt){//車庫中出
intkeepch=chp;//將當前的車牌保存下來
intgh=0;
intnum;
intfh=0;
inti=0;//記住車庫出去車的量
inte=0;//做一個遍歷,找出該車的位置
intjs=0;
intTe=0;
S.OutTime=t;//是的話,直接出車,刪掉元素
if(tranverse(S,chp)){//做一個遍歷,該車在車庫的話,就從車庫中出車
while(Pop(S,gh)!=keepch){//讓車庫的車出去
PushTpStack(T,gh);
i++;
}
if(num=(S.OutTime-a[chp])%10==0){
num=S.OutTime-a[chp];
}
elsenum=((S.OutTime-a[chp])/10+1)*10;
cout<<"該車在停車場的時間為"<<num<<//此時輸出該車的信息
"分鍾,應該收費為"<<0.5*num<<"元"<<endl;
for(size_tj=0;j<i;j++){
PopTpStack(T,fh);//依次將其他開回來,往前挪一位,空出門前的車位
ZPushGarage(S,fh);
}
if(OutOtGarage(OG,e)){//當變道里有車時,從外面再進來一輛車
PushGarage(S,e,S.OutTime);
}
}
else{//注意第一個if,這里是對應的else,表示車要從臨時便道里出車
//將便道里的車送到臨時便道,
inty=OutOtGarage(OG,gh);
while(gh!=keepch){//讓車庫的車出去OutOtGarage(OtGarage&OG,int&e)
TEnOtGarage(TG,gh);//推到臨時車道
js++;
y=OutOtGarage(OG,gh);
}
if(js==0){//後面的車往前開
//直接從停車場出去
cout<<"該車未在車庫停車,無需繳費"<<endl;
}
elseif(!OutOtGarage(OG,e)){//如果此時為底的話,再重新進入變道
for(size_tj=0;j<i;j++){
intv;
v=TOutOtGarage(TG,Te);//
PushTpStack(T,Te);//還沒有計算位置
}i--;
cout<<"該車未在車庫停車,無需繳費"<<endl;
}
else{
cout<<"該車未在車庫停車,無需繳費"<<endl;
intjd;
QueuePtrp;//變道有車的話,返回一個
p=OG.front->next;
e=p->date;
OG.front->next=p->next;
if(OG.rear==p)
OG.rear=OG.front;
free(p);
//先釋放一個節點,繼續傳
while(OutOtGarage(OG,gh)){//讓車庫的車出去OutOtGarage(OtGarage&OG,int&e)
TEnOtGarage(TG,gh);//推到臨時車道
}
while(TOutOtGarage(TG,Te)){
PushTpStack(T,Te);
}i--;
}//如果此時不為底的話,繼續進入臨時便道,再進入變道
}
}
intPop(Garage&S,int&GH){//車庫中出車
GH=*--S.top;
returnGH;
}
//....................................車庫.........................
//...............................臨時車庫..........................
voidInitTpStack(TpGarage&T){//初始化臨時車庫
T.stacksize=STACK_INITSIZE;
T.base=(int*)malloc(T.stacksize*sizeof(int));
T.top=T.base;
}
voidPushTpStack(TpGarage&T,intchp){
if(T.top-T.base>=T.stacksize){
T.base=(int*)realloc(T.base,
(T.stacksize+STACK_INITSIZE)*sizeof(int));
T.top=T.base+T.stacksize;
T.stacksize+=STACK_INITSIZE;
}
*T.top++=chp;
}
voidPopTpStack(TpGarage&T,int&chp){//當其為返回值為1的時候,刪除棧頂且返回
chp=*--T.top;
}
//...........................臨時車庫.................................
//...........................變道....................................
voidInitOtGarage(OtGarage&OG){//初始化便道
OG.front=OG.rear=(QueuePtr)malloc(sizeof(QNode));
OG.front->next=NULL;
}
voidEnOtGarage(OtGarage&OG,int&e){//進入變道
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));//用來放置車牌號
p->date=e;
p->next=NULL;
OG.rear->next=p;
OG.rear=p;
cout<<"車庫已滿,該車在變道上的第"<<i<<"位"<<endl;
i++;
cout<<endl;
}
intOutOtGarage(OtGarage&OG,int&e){//變道出車
cout<<endl;//沒有車的話,返回0
if(OG.front==OG.rear){
returnERROR;
}
QueuePtrp;//變道有車的話,返回一個
p=OG.front->next;
e=p->date;
OG.front->next=p->next;
if(OG.rear==p)
OG.rear=OG.front;
free(p);
i--;
returnOK;
}
voidInitTOtGarage(TOtGarage&TG){//初始化便道
TG.Tfront=TG.Trear=(TQueuePtr)malloc(sizeof(TNode));
TG.Tfront->Tnext=NULL;
}
voidTEnOtGarage(TOtGarage&TG,int&Te){//進入臨時變道
TQueuePtrp;
p=(TQueuePtr)malloc(sizeof(TNode));//用來放置車牌號
p->Tdate=Te;
p->Tnext=NULL;
TG.Trear->Tnext=p;
TG.Trear=p;
//cout<<"車庫已滿,該車在變道上的第"<<i<<"位"<<endl;
i++;
cout<<endl;
}
intTOutOtGarage(TOtGarage&TG,int&Te){//臨時變道出車
cout<<endl;//沒有車的話,返回0
if(TG.Tfront==TG.Trear)
returnERROR;
TQueuePtrp;//臨時變道有車的話,返回一個
p=TG.Tfront->Tnext;
Te=p->Tdate;
TG.Tfront->Tnext=p->Tnext;
if(TG.Trear==p)
TG.Trear=TG.Tfront;
free(p);
i--;
returnOK;
}
//........................................臨時便道...........................
//............................總樞紐...........................................
intPush(charX,intchp,intt,Garage&S,TpGarage&T,OtGarage&OG,TOtGarage&TG){
switch(X){//判斷該車是進入還是要離開
case'A':{//情況A,進入車庫
if(S.top-S.base>=S.stacksize){
cout<<"時間在第"<<t<<"分鍾,"<<"車牌號為"<<chp<<"的小車進入便道等待車位"<<endl;
//車庫滿,接下來該車進入便道
EnOtGarage(OG,chp);//調用進入變道的函數
}
else{
//cout<<"OOOOO"<<endl;
PushGarage(S,chp,t);//進入車庫
}
returnOK;
}break;
case'D':{//情況D,離開車庫
GetTopGarage(TG,OG,T,S,chp,t);//1:在車庫中的出去
returnOK;
}break;
case'E':{//情況E,所有的車輛弄乾凈
returnERROR;
}break;
}
}
inttranverse(GarageS,intt){
while(S.top!=S.base){
S.top--;
if(t==*S.top)
returnOK;
}
returnERROR;
}
intmain(){
intnum;
charX;
inttime;
intchp;
intx;
GarageS;
TpGarageT;
OtGarageOG;
TOtGarageTG;
cout<<"溫馨提示:本停車場每10分鍾收費0.5元,不足10分鍾的部分按10分鍾收費。"<<endl;
cout<<"請輸入停車車位的總數:";
cin>>num;
cout<<endl;
InitGarage(S,num);
InitTpStack(T);
InitOtGarage(OG);
InitTOtGarage(TG);
cout<<"輸入停止的標志為(E00)"<<endl;
cout<<"停車信息(格式:(動作,車牌號,時間)):"<<endl;do{
cout<<"請輸入停車信息"<<endl;
cin>>X>>chp>>time;
x=Push(X,chp,time,S,T,OG,TG);
}while(x);
}
C. C語言停車場管理系統
/*----------------------------------------------------------------
// Copyright (C) 2009 沈陽工程學院信息安全工作室
// 版權所有。
//
// 文件名:模擬停車場問題.cpp
// 文件功能描述:模擬停車場問題
//
//
// 創建標識:20091214
//
// 修改標識:20091218
// 修改描述:完成編碼
//----------------------------------------------------------------*/
//頭文件
#include <iostream>
#include <malloc.h>
#include <string>
#include <windows.h>
//常量定義
#define MAX_STOP 4 //定義停車場最大停車數
#define MAX_PLATE 10 //定義車牌號最大長度
#define TIME_COUNT "秒" //定義時間單位
#define TIME_MS_TO_CONUT 1000 //定義時間進制,意為由TIME_COUNT到毫秒的進制
#define UNIT_PRICE 10 //定義單位時間收費標准
using namespace std; //使用std命名空間
//數據結構定義
//定義存儲汽車信息的結構體
typedef struct
{
char license_plate[MAX_PLATE]; //汽車牌照號碼,定義為一個字元指針類型
char state; //汽車當前狀態,字元p表示停放在停車位上,字元s表示停放在便道上,每輛車的初始狀態用字元i來進行表示
int time; //汽車停入停車場時的時間,用來計時收費
}CAR;
//定義模擬停車場的棧結構
typedef struct
{
CAR STOP[MAX_STOP]; //汽車信息的存儲空間
int top; //用來指示棧頂位置的靜態指針
}SeqStack;
//定義模擬便道的隊列結構
typedef struct node
{
CAR WAIT; //汽車信息的存儲空間
struct node *next; //用來指示隊列位置的動態指針
}QNode; //鏈隊列節點的類型
//定義鏈隊列的收尾指針
typedef struct
{
QNode *front,*rear;
}LQueue; //將頭尾指針封裝在一起的鏈隊
//函數聲明
int Empty_LQueue(LQueue *q); //判隊空
int LeaveCheck(SeqStack parking , char *license_plate); //檢查離開的車是否在停車場中
int QueueLength(LQueue *q); //判隊長度
int Out_LQueue(LQueue *&sidewalk , char *license_plate); //出隊操作
int StackEmpty(SeqStack parking); //判斷棧是否為空
int StackFull(SeqStack parking); //判斷棧是否為滿
int StackPop(SeqStack &parking); //出棧操作
int StackTop(SeqStack parking , char *license_plate , int &time);//取棧頂元素
void Car_come(SeqStack &parking , LQueue *&sidewalk); //有車到來時的操作
void Car_leave(SeqStack &parking , LQueue *&sidewalk); //有車離開的操作
void Display(SeqStack parking); //顯示停車場內的所有信息 調試時用
void InitStack(SeqStack &parking); //初始化棧
void InitList(LQueue *&sidewalk); //初始化隊列
void In_LQueue(LQueue *&sidewalk , char *license_plate); //進隊操作
void Input_Check(char *license_plate); ////檢驗輸入的車牌是否合法
void StackPush(SeqStack &parking , char *license_plate , int stop_time);//進棧操作
void main()
{
//定義變數
SeqStack parking;
LQueue *sidewalk = NULL;
char *choice = new char;
int flag = 1; //定義一個變數 判斷是否退出
//初始化一個為空的停車場
InitStack(parking);
//初始化一個為空的便道
InitList(sidewalk);
//運行界面及功能選擇
while(flag)
{
cout<<"\n\t 停車場模擬管理系統 \n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"\t|本程序為停車場的模擬管理系統,有車到來時請按C鍵。|\n\n";
cout<<"\t|然後根據屏幕提示進行相關操作,有車要走時請按l鍵。|\n\n";
cout<<"\t|然後根據屏幕提示進行相關操作,查看停車場請按D鍵。|\n\n";
cout<<"\t|然後根據屏幕提示進行相關操作,要退出系統請按Q鍵。|\n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"請選擇操作:";
gets(choice);
if(1 != strlen(choice))
{
cout<<"請正確輸入選項!";
continue;
}
else
{
switch(*choice)
{
case 'c':
case 'C':
{
Car_come(parking,sidewalk);break;
}
case 'l':
case 'L':
{
Car_leave(parking,sidewalk);break;
}
case 'q':
case 'Q':
{
flag=0;break;
}
case 'd':
case 'D':
{
Display(parking);break;
}
default:
cout<<"選擇不正確!請重新選擇!\n";
}
}
}
}
//有車到來時的操作
void Car_come(SeqStack &parking , LQueue *&sidewalk)
{
//定義變數
char license_plate[MAX_PLATE];
cout<<"請輸入車輛的車牌號碼:";
Input_Check(license_plate);
//判斷停車場是否已滿,滿則進入便道,不滿進入停車場
if(StackFull(parking))
{
In_LQueue(sidewalk , license_plate); //進入便道
cout<<"停車場已滿請在便道等候,您的位置為"<<QueueLength(sidewalk)
<<endl;
}
else
{
StackPush(parking , license_plate , GetTickCount()); //進入停車場
cout<<"請進入停車場中的"<<parking.top+1<<"號停車位\n";
}
// Display(parking);
}
//有車離開時的操作
void Car_leave(SeqStack &parking , LQueue *&sidewalk)
{
//定義變數
SeqStack tmpparking; //定義臨時停車場
char leave_license_plate[MAX_PLATE]; //要離開的車牌號
char license_plate[MAX_PLATE]; //存放從停車場中讀出來的車牌信息
int time;
InitStack(tmpparking); //初始化臨時停車場
//判斷停車場中是否有車
if(StackEmpty(parking))
{
cout<<"當前停車場中沒有車\n";
return; //退出子函數
}
cout<<"請輸入要離開的車牌照:";
Input_Check(leave_license_plate);
cout<<"當前停車場中有"<<parking.top+1<<"輛車\n";
if(LeaveCheck(parking , leave_license_plate)) //判斷車是否在停車場中
{
//車在停車場中
cout<<"您的車在"<<LeaveCheck(parking , leave_license_plate)<<"號車位上\n";
while(StackTop(parking , license_plate , time)
&& (strcmp(parking.STOP[parking.top].license_plate , leave_license_plate) != 0))
{
strcpy(parking.STOP[parking.top].license_plate , license_plate);
cout<<"牌照為"<<license_plate<<"的車暫時退出停車場"<<parking.top+1<<"號位\n";
StackPush(tmpparking , license_plate , time); //停車場中的車暫時退出 進入臨時停車場
StackPop(parking); //出棧
}
cout<<"牌照為"<<license_plate<<"的車離開停車場"<<parking.top+1<<"號位\n";
cout<<"您在停車場中停了"<<(GetTickCount()-time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl; //輸出所停時間信息
cout<<"應繳費用為"<<(GetTickCount()-time)/TIME_MS_TO_CONUT*UNIT_PRICE<<"元\n";; //輸出費用信息
StackPop(parking); //出棧
//將臨時停車場中的車停回停車場
while(StackEmpty(tmpparking) != 1)
{
StackTop(tmpparking , license_plate , time);
StackPush(parking , license_plate , time);
cout<<"牌照為"<<license_plate<<"的車進入停車場"<<parking.top+1<<"號位\n";
license_plate[0] = '\0';
StackPop(tmpparking);
}
if(parking.top+1 == MAX_STOP-1) //判斷車離開前停車場是否停滿
if(QueueLength(sidewalk)) //如果停滿則判斷便道上是否有車
{
//便道中有車 則從便道中停入停車場
Out_LQueue(sidewalk , license_plate); //出隊
StackPush(parking , license_plate , GetTickCount()); //入棧
cout<<"在便道中牌照為"<<license_plate<<"的車進入停車場"<<parking.top+1<<"號位\n";
}
}
else
//車不在停車場中
cout<<"您的車不在停車場中!\n";
}
//初始化順序棧
void InitStack(SeqStack &parking)
{
parking.top = -1;
}
//判棧空
int StackEmpty(SeqStack parking)
{
if(parking.top == -1)
return 1;
else
return 0;
}
//判棧滿
int StackFull(SeqStack parking)
{
if(parking.top == MAX_STOP-1)
return 1;
else
return 0;
}
//入棧
void StackPush(SeqStack &parking , char *license_plate , int stop_time)
{
parking.top++;
strcpy(parking.STOP[parking.top].license_plate , license_plate);
parking.STOP[parking.top].state = 'p';
parking.STOP[parking.top].time = stop_time;
}
//出棧 返回棧頂指針
int StackPop(SeqStack &parking)
{
if(StackEmpty(parking))
return 0;
else
return parking.top--;
}
//取棧頂元素
int StackTop(SeqStack parking , char *license_plate , int &time)
{
if(StackEmpty(parking))
return 0;
else
{
strcpy(license_plate , parking.STOP[parking.top].license_plate);
time = parking.STOP[parking.top].time;
return 1;
}
}
//顯示所有
void Display(SeqStack parking)
{
if(parking.top == -1)
printf("停車場為空\n");
else
{
while(parking.top != -1)
{
cout<<"車牌號為:"<<parking.STOP[parking.top].license_plate;
cout<<",停在"<<parking.top + 1 <<"號車位上";
cout<<",已停"<<(GetTickCount()-parking.STOP[parking.top].time)/TIME_MS_TO_CONUT<<TIME_COUNT<<endl;
parking.top--;
}
}
}
//初始化隊列
void InitList(LQueue *&sidewalk)
{
sidewalk = (LQueue *)malloc(sizeof(LQueue));
sidewalk->front=sidewalk->rear = NULL;
}
//入隊
void In_LQueue(LQueue *&sidewalk,char *license_plate)
{
QNode *car_on_sidewalk;
car_on_sidewalk = (QNode *)malloc(sizeof(QNode)); //為新節點開辟新空間
strcpy(car_on_sidewalk->WAIT.license_plate , license_plate); //將數據寫入節點
car_on_sidewalk->WAIT.state = 's'; //寫入停車信息
car_on_sidewalk->WAIT.time = GetTickCount(); //寫入停車時間
car_on_sidewalk->next = NULL;
if(Empty_LQueue(sidewalk)) //隊空則創建第一個節點
sidewalk->front = sidewalk->rear = car_on_sidewalk;
else
{
//隊非空插入隊尾
sidewalk->rear->next = car_on_sidewalk;
sidewalk->rear = car_on_sidewalk;
}
}
//判隊空
int Empty_LQueue(LQueue *q)
{
if(q->front == NULL)
return 1;
else
return 0;
}
//判隊長度 返回隊長
int QueueLength(LQueue *q)
{
QNode *p=q->front;
int i=0;
while(p != NULL)
{
i++;
p=p->next;
}
return i;
}
//出隊 成功返回1 隊空返回0
int Out_LQueue(LQueue *&sidewalk,char *license_plate)
{
QNode *car_on_sidewalk;
if(Empty_LQueue(sidewalk)) //如果隊空返回0
return 0;
car_on_sidewalk = sidewalk->front;
strcpy(license_plate , car_on_sidewalk->WAIT.license_plate);//取出隊頭元素
if(sidewalk->front == sidewalk->rear) //隊中只有一個元素
sidewalk->front = sidewalk->rear=NULL; //刪除元素
else
sidewalk->front = sidewalk->front->next; //隊頭指針後移
free(car_on_sidewalk); //釋放指針
return 1;
}
//檢查離開的車是否在停車場中 返回車在停車場中位置 不在則返回0
int LeaveCheck(SeqStack parking,char *license_plate)
{
int flag = parking.top+1; //定義變數記錄當前車在停車場中位置
if(StackEmpty(parking))
return 0;
else
{
//查找離開車所在位置
while(parking.top != -1 && strcmp(parking.STOP[parking.top].license_plate , license_plate) != 0)
{
flag--;
parking.top--;
}
return flag;
}
}
//檢驗輸入的車牌是否合法
void Input_Check(char *license_plate)
{
int flag = 1;
int i;
string tmpstr;
while(flag)
{
cin>>tmpstr;
getchar();
if(tmpstr.length()<MAX_PLATE)
{
for(i=0;i<10;i++)
license_plate[i] = tmpstr.c_str()[i];
flag = 0;
}
else
cout<<"輸入有誤,請重新輸入:";
}
}
以前的課設 你看看吧 純手工的~~
D. 用C語言編寫「停車場管理系統」
程序太大 不讓發 我是分幾次發過去的 打三個出現亂碼了 我在重新發一次
/*初始化停車場信息,初始狀態為第一層已經停有4輛車,
* 其車位號依次為1—4 , 停車時間依次為20, 15, 10 , 5
*/
void Init(struct Garage gar[][6])
{
int i, j;
/*給所有的車位的層號,車位號初始化,停車時間初始化為0,停車位全都初始化為空*/
for (i=0; i<2; i++)
{
for (j=0; j<6; j++)
{
gar[i][j].lay = i+1;
gar[i][j].garagenum = j+1;
gar[i][j].time = 0;
gar[i][j].isempty = 1;
}
}
/*第一層的1-4號車位停車*/
for (i=0; i<4; i++)
{
gar[0][i].isempty = 0;
}
strcpy(gar[0][0].carnum, "GF8888"); /*我自己初始化的車牌號,你可以自己改一下*/
gar[0][0].time = 20;
strcpy(gar[0][1].carnum, "GF6666");
gar[0][1].time = 15;
strcpy(gar[0][2].carnum, "GF9999");
gar[0][2].time = 10;
strcpy(gar[0][3].carnum, "GF5858");
gar[0][3].time = 5;
}
/*新停入的汽車後,將在此之前的所有車的停車時間加5*/
void AddTime(struct Garage gar[][6])
{
int i, j;
for (i=0; i<2; i++)
{
for (j=0; j<6; j++)
{
if (gar[i][j].isempty == 0)
{
gar[i][j].time += 5;
}
}
}
}
/*停車*/
void Park(struct Garage gar[][6])
{
int i;
char num[8];
printf("請輸入車牌號:");
scanf("%s", num);
/*查找空車位*/
for (i=0; i<6; i++)
{
if (gar[0][i].isempty == 1)
{
printf("第一層第%d號車位空著,請在此處停車\n", i+1);
strcpy(gar[0][i].carnum, num);
printf("車牌號:%s 層號:1 車位號: %d \n", num, i+1);
AddTime(gar); /*在此之前停車的所有汽車時間加5*/
gar[0][i].isempty = 0; /*表示該車為已經停車*/
gar[0][i].time = 5; /*將時間設為5*/
return;
}
}
printf("第一層已經沒有空車位\n");
for (i=0; i<6; i++)
{
if (gar[1][i].isempty = 1)
{
printf("第二層第%d號車位空著,請在此處停車\n", i+1);
strcpy(gar[1][i].carnum, num);
printf("車牌號:%s 層號:2 車位號: %d \n", num, i+1);
AddTime(gar); /*在此之前停車的所有汽車時間加5*/
gar[1][i].isempty = 0; /*表示該車為已經停車*/
gar[1][i].time = 5; /*將時間設為5*/
return;
}
}
printf("對不起,1 2層都沒有空車位,您現在不能在此停車\n");
}
/*查看所有車輛信息*/
void Information(struct Garage gar[][6])
{
int i, j;
printf(" 車牌號 層號 車位號 停車時間\n");
for (i=0; i<2; i++)
{
for(j=0; j<6; j++)
{
if (gar[i][j].isempty == 0)
printf(" %s%8d%8d%8d\n", gar[i][j].carnum, gar[i][j].lay, gar[i][j].garagenum, gar[i][j].time);
}
}
printf("\n");
}
/*取車*/
double Leave(struct Garage gar[2][6])
{
int i, j;
char num[8];
double charge = 0;
printf("請輸入要取的車牌號:");
scanf("%s", num);
for (i=0; i<2; i++)
{
for (j=0; j<6; j++)
{
if (!strcmp(gar[i][j].carnum, num))
{
printf("您在%d層%d車位停車%d分鍾\n", gar[i][j].lay, gar[i][j].garagenum, gar[i][j].time);
charge = gar[i][j].time/5*0.2;
printf("停車費用為每5分鍾0.2元,您需交%.2lf元\n", charge);
gar[i][j].isempty = 1;
return charge;
}
}
}
printf("沒有您輸入的車號。\n\n");
return charge;
}
/*是否查看總收入*/
void IsPrintTotal(double total)
{
char ch;
printf("是否查看停車收費總計?Y/N");
scanf("%c", &ch);
while (ch!='y' && ch!='Y' && ch!='n' && ch!='N')
{
printf("請輸入Y或N ");
scanf("%c", &ch);
printf("\n");
}
switch (ch)
{
case 'Y':
case 'y':
printf("停車收費總計為%.2lf元\n", total);
break;
case 'N':
case 'n':
break;
}
}
main()
{
int choice;
double total = 0;
struct Garage gar[2][6];
Init(gar); //初始化第一層已經停有的4輛車
while (1)
{
Instruction();
printf("請輸入要進行的操作:");
scanf("%d", &choice);
while (choice<0 || choice>3)
{
printf("輸入的不合法,請輸入0-3選擇:");
scanf("%d", &choice);
}
switch (choice)
{
case 1:
Park(gar);
break;
case 2:
total += Leave(gar);
IsPrintTotal(total);
break;
case 3:
Information(gar);
break;
case 0:
exit(0);
}
}
return 0;
}
E. c語言停車場管理系統
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define max 3
#define price 1
int b=1;
typedef struct
{
int day;
int hour;
int min;
}TIME; //時間結點
typedef struct
{
char num[10]; //車牌號
TIME time; //進入停車場的時間
int n; //進入停車場的位置
}information;
//棧結構體定義
typedef struct node
{
information data;
struct node *next;
}stacknode; stacknode *top1,*top2;
//隊列結構體定義
typedef struct
{
information data;
stacknode *front,*rear;
}LQueue;LQueue *Q;
//函數聲明部分/////////////////////////////////////////////////////////
stacknode *Init(); //棧的初始化
stacknode *into(stacknode *top1,LQueue *Q); //初始化車輛進入
int expenses(stacknode *p,int x,int y); //停車費用計算函數
stacknode *leave(stacknode *top1,char str[],LQueue *Q); //車輛駛出出場函數
LQueue *InitLQue(); //初始化隊列函數
LQueue *wait(LQueue *q,stacknode *s); //車輛進入候車便道函數
int EmptyLQue(LQueue *q); //判斷候車便道有無等待車輛函數
stacknode *out(LQueue *q); //候車區車輛出隊
stacknode *LQinto(stacknode *p,stacknode *top1); //從候車便道進入停車場函數
void show(stacknode *top1); //顯示停車場所有信息函數
void T_shou(LQueue *Q); //顯示候車區信息
/*函數部分*/
//主函數
void main()
{
char str[10];
Q=InitLQue();
top1=Init();
top2=Init();
Q=InitLQue();
int i;
printf("\t\t\t*************************************\n");
printf("\t\t\t\t 停車場管理系統\n");
printf("\t\t\t|| 1. 車輛進入停車場 ||\n");
printf("\t\t\t|| 2. 車輛離開停車場 ||\n");
printf("\t\t\t|| 3. 顯示停車場內所有車輛信息 ||\n");
printf("\t\t\t|| 4. 顯示候車區內所有車輛信息 ||\n");
printf("\t\t\t|| 5. 退出 ||\n");
printf("\t\t\t*************************************\n");
while(i!=5)
{
printf("\t請輸入選項1-5:");
scanf("%d",&i);
switch(i)
{
case 1:
top1=into(top1,Q);
break;
case 2:
printf("請輸入離開車輛的車牌號:");
scanf("%s",str);
top1=leave(top1,str,Q);
break;
case 3:show(top1);break;
case 4:T_shou(Q);break;
case 5:exit(1);
default:printf("輸入錯誤,請重新輸入1—5:");
break;
}
}
}
/*子函數*/
//初始化
stacknode *Init()
{
stacknode *top;
top=(stacknode *)malloc(sizeof(stacknode));
top=NULL;
return top;
}
//初始化車輛進入
stacknode *into(stacknode *top1,LQueue *Q)
{
stacknode *p,*q;
time_t rawtime; //調用系統時間函數
struct tm *timeinfo; //時間結點
time(&rawtime);
timeinfo=localtime(&rawtime);
p=(stacknode *)malloc(sizeof(stacknode));
if(p==NULL)
{
printf("內存分配失敗");
return top1;
}
printf("請輸入進入停車場車輛的車牌號:");
scanf("%s",p->data.num);
q=top1;
while(q!=NULL)
{
if(strcmp(p->data.num,q->data.num)==0)
{
printf("車牌號輸入有誤,該車已進入!");
return top1;
}
q=q->next;
}
p->data.time.day=timeinfo->tm_mday;
p->data.time.hour=timeinfo->tm_hour;
p->data.time.min=timeinfo->tm_min;
p->data.n=b;
if(b>max)
{
printf("停車場已滿,請在便道等候!\n");
wait(Q,p);
return top1;
}
if(top1==NULL)
{
p->next=NULL;
top1=p;
}
else
{
p->next=top1;
top1=p;
}
b++;
printf("車輛進入停車場成功,時間已經自動載入!\n");
printf("車牌為%s的汽車駛入時間為:%d號%d點%d分\n",top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.time.min);
return top1;
}
//停車費用計算函數
int expenses(stacknode *p,int x1,int x2,int x3)
{
int w;
if(x3!=0)
w=(x1*24+x2+1-(p->data.time.day*24+p->data.time.hour))*price;
else
w=(x1*24+x2-(p->data.time.day*24+p->data.time.hour))*price;
return w;
}
//車輛駛出出場函數
stacknode *leave(stacknode *top1,char str[],LQueue *Q)
{
int i,day,hour,min;
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
day=timeinfo->tm_mday;
hour=timeinfo->tm_hour;
min=timeinfo->tm_min;
stacknode *p,*q;
if(top1==NULL)
{
printf("停車場沒有車輛!\n");
return top1;
}
q=(stacknode *)malloc(sizeof(stacknode));
if(p==NULL)
{
printf("內存分配失敗");
return top1;
}
q=top1;
while(q!=NULL)
{
if(strcmp(q->data.num,str)==0)
break;
q=q->next;
}
if(q==NULL)
{
printf("輸入有誤,該車輛不在停車場!\n");
return top1;
}
for(i=top1->data.n;i>q->data.n;i--)
{
p=(stacknode *)malloc(sizeof(stacknode));
if(p==NULL)
{
printf("內存分配失敗");
return top1;
}
strcpy(p->data.num,top1->data.num);
p->data.time=top1->data.time;
p->data.n=top1->data.n-1;
top1=top1->next;
if(top2==NULL)
{
p->next=NULL;
top2=p;
}
else
{
p->next=top2;
top2=p;
}
}
top1=top1->next;
while(top2!=NULL)
{
p=(stacknode *)malloc(sizeof(stacknode));if(p==NULL){printf("內存分配失敗");return top1;}
p->data.n=top2->data.n;
strcpy(p->data.num,top2->data.num);
p->data.time=top2->data.time;
p->next=top1;
top1=p;
top2=top2->next;
}
if(EmptyLQue(Q))
{
p=out(Q);
p->data.n--;
top1=LQinto(p,top1);
}
else
b--;
printf("車牌為%s的汽車駛出時間為:%d號%d點%d分\n",q->data.num,day,hour,min);
printf("車輛駛出停車場需要繳納的費用為:%d元\n",expenses(q,day,hour,min));
return top1;
}
//隊列函數初始化
LQueue *InitLQue()
{
LQueue *Q;
stacknode *p;
Q=(LQueue *)malloc(sizeof(LQueue));
p=(stacknode *)malloc(sizeof(stacknode));
p->next=NULL;
Q->front=Q->rear=p;
return Q;
}
//候車區隊列入隊
LQueue *wait(LQueue *q,stacknode *s)
{
s->next=NULL;
q->rear->next=s;
q->rear=s;
return q;
}
//判斷候車便道有無車輛等待
int EmptyLQue(LQueue *q)
{
if(q->front==q->rear)
return 0;
else
return 1;
}
//候車區車輛出隊
stacknode *out(LQueue *q)
{
stacknode *p;
p=q->front->next;
if(q->front->next==q->rear)
{
q->rear=q->front;
return p;
}
else
q->front->next=p->next;
p->next=NULL;
return p;
}
//候車隊列進入停車場
stacknode *LQinto(stacknode *p,stacknode *top1)
{
p->next=top1;
top1=p;
return top1;
}
//顯示停車場內所有車輛信息
void show(stacknode *top1)
{
printf(" 停車場內全部車輛信息表\n");
if(top1==NULL)
printf(" 停車場內無車!\n");
else
{
printf("車牌號 進入時間 位置\n");
while(top1!=NULL)
{
printf(" %s %d號%d點%d分 第%d位\n",top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.time.min,top1->data.n);
top1=top1->next;
}
}
}
//顯示候車區的汽車信息
void T_shou(LQueue *Q)
{
LQueue *q;
q=(LQueue *)malloc(sizeof(LQueue));
q->rear=Q->rear->next;
printf(" 候車區信息\n");
if(q->front==q->rear)
printf("候車區沒有車輛!\n");
else
{
printf("車牌號 進入時間\n");
while(q!=NULL)
{
printf("%s %d號%d點%d分",q->data.num,q->data.time.day,q->data.time.hour,q->data.time.min);
q->rear=q->rear->next;
}
}
}
/*時間函數
int timef()
{
int x,y;
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
x=timeinfo->tm_mday,y=timeinfo->tm_hour;
}
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo=locoltime(&rawtime);
timeinfo->tm_ymday,*/