c語言停車場問題
1. c語言停車場管理問題
細節上的優化就看Lz怎麼想了,我覺得提示做得還不夠好,免強能用了。
#include
#include
#define N 3 /*停車場大小*/
#define MAX 50 /*過道大小*/
#define sign 10/*車牌大小*/
#define price 10/*每分鍾的價錢*/
char part[N][sign];
char Rpart[MAX][sign];
char time[N][20];
int P,R;
partadd(char *t)
{
strcpy(&part[P][0],t);
printf("請輸入時間:例如十點十分格式為「10.10」\n");
scanf("%s",&time[P][0]);
getchar();
P++;
}
Rpartadd(char *t)
{
if(R<MAX)
{
strcpy(&Rpart[R][0],t);
R++;
}
else
{
printf("過道己滿。無法停車。\n");
}
}
newcar()
{
char temp[sign];
printf("請輸入車牌號:");
scanf("%s",temp);
getchar();
if(P<N)
{
partadd(temp);
}
else if(R<MAX)
{
Rpartadd(temp);
}
}
int timed(char *t1,char *t2)
{
int i=0,y=0,x=0,j,n=1;
while(1)
{
if(t1[i]=='.')
{
for(j=i-1;j>=0;j--)
{
y=y+(t1[j]-'0')*(60*n);
n=n*10;
}
while(1)
{
if(t1[j]==NULL)
{
for(n=1;j>i;j--)
{
y=y+(t1[j]-'0')*n;
n=n*10;
}
break;
}
j++;
}
i=0;
while(1)
{
if(t2[i]=='.')
{
for(j=i-1;j>=0;j--)
{
x=x+(t2[j]-'0')*(60*n);
n=n*10;
}
while(1)
{
if(t2[j]==NULL)
{
for(n=1;j>i;j--)
{
x=x+(t2[j]-'0')*n;
n=n*10;
}
break;
}
j++;
}
y=(x-y)*price;
return y;
}
i++;
}
}
i++;
}
}
partcarout(int i)
{
int j,money;
char t[20];
printf("請輸入現在的時間:例如十點十分格式為「10.10」\n");
scanf("%s",t);
getchar();
money=timed(t,&time[i][0]);
printf("收費%d\n",money);
for(j=i;j<P;j++)
{
strcpy(&part[j][0],&part[j+1][0]);
P--;
}
if(R!=0)
{
strcpy(&part[N-1][0],&Rpart[0][0]);
P++;
strcpy(&time[P][0],t);
Rpartcarout(0);
}
}
Rpartcarout(int i)
{
int j;
for(j=i;j<R;j++)
{
strcpy(&Rpart[j][0],&Rpart[j+1][0]);
R--;
}
}
carout()
{
char t[sign];
int i,get=0;
printf("請入要離開的車牌號:");
scanf("%s",t);
getchar();
for(i=0;i<P;i++)
{
if(strcmp(t,&part[i][0])==0)
{
get=1;
partcarout(i);
break;
}
}
for(i=0;i<R&&get==0;i++)
{
if(strcmp(t,&Rpart[i][0])==0)
{
get=1;
Rpartcarout(i);
break;
}
}
if(get==0)
{
printf("查無此車。\n");
}
}
jopart()
{
int i;
for(i=0;i<P;i++)
{
printf("%d.%s\n",i,&part[i][0]);
}
}
joRpart()
{
int i;
for(i=0;i<R;i++)
{
printf("%d.%s\n",i,&Rpart[i][0]);
}
}
main()
{
int c;
while(1)
{
printf("請選擇要做的事:\n");
printf("1.加入新車。\n");
printf("2.有車離開。\n");
printf("3.顯示在停車場內的車。\n");
printf("4.顯示在過道上的車。\n");
printf("5.退出。\n");
c=getchar();
getchar();
switch (c)
{
case '1':newcar();
break;
case '2':carout();
break;
case '3':jopart();
break;
case '4':joRpart();
break;
case '5':exit(1);
break;
}
}
}
2. 演算法和數據結構 停車場的管理 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);
}
3. 求教:小的停車場問題。 火急,在線等。 C語言的
這題很簡單,就說一下思路
每個成員有如下幾個元素:
1. uniqueID,可以就簡單的從1到n的賦值
2. startTime,由於要按時間計費,所以需要記錄起始時間
3. endTime,記錄離開時間
定義兩個棧,
一個是記錄停車場的停車情況,假設為stack1
一個用於記錄為了讓某一個車離開,而依次退出的排在它前面的車,假設為stack2
車輛入庫:直接向stack1壓棧
車輛出庫:從stack1的棧頂找起,如果uniqueID不是要出庫的車,就退棧並壓棧到stack2中,再判斷stack1的新的棧頂的uniqueID是否為出庫的車...直到找到該車或stack1被清空。相關車輛退棧後,將stack2從棧頂開始依次棧並壓棧到stack1中
4. 用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;
}
5. C語言棧和隊列問題:停車場停車問題
#ifndef__PLOT_H__#define__PLOT_H__#defineFALSE0#defineTRUE1#defineMONEY1//單價可以自己定義#defineMAX_STOP10#defineMAX_PAVE100//存放汽車牌號typedefstruct{
inttime1;//進入停車場時間
inttime2;//離開停車場時間
charplate[10];
//汽車牌照號碼,定義一個字元指針類型}Car;//停放棧typedefstruct{
CarStop[MAX_STOP-1];//各汽車信息的存儲空間
inttop;//用來指示棧頂位置的靜態指針}Stopping;//等候隊列typedefstruct{intcount;//用來指示隊中的數據個數
CarPave[MAX_PAVE-1];//各汽車信息的存儲空間
intfront,rear;//用來指示隊頭和隊尾位置的靜態指針}Pavement;//讓路棧typedefstruct{
CarHelp[MAX_STOP-1];//各汽車信息的存儲空間
inttop;//用來指示棧頂位置的靜態指針}Buffer;
Stoppings;
Pavementp;
Bufferb;
Carc;charC[10];voidstop_pave();//車停入便道voidcar_come();//車停入停車位voidstop_to_buff();//車進入讓路棧voidcar_leave();//車離開voidwelcome();//主界面函數voidDisplay();//顯示車輛信息#
源文件PLot.c
#include"PLot.h"#include<stdio.h>#include<time.h>//包含時間函數的頭文件#include<string.h>#include<stdlib.h>voidstop_to_pave()//車停入便道{//判斷隊滿
if(p.count>0&&(p.front==(p.rear+1)%MAX_PAVE))
{printf("便道已滿,請下次再來 ");
}else
{strcpy(p.Pave[p.rear].plate,C);
p.rear=(p.rear+1)%MAX_PAVE;//隊尾指示器加1
p.count++;//計數器加1
printf("牌照為%s的汽車停入便道上的%d的位置 ",C,p.rear);
}
}voidcar_come()//車停入停車位{printf("請輸入即將停車的車牌號:");//輸入車牌號
scanf("%s",&C);if(s.top>=MAX_STOP-1)//如果停車位已滿,停入便道
{
stop_to_pave();//停車位->便道函數
}else
{
s.top++;//停車位棧頂指針加1
time_tt1;longintt=time(&t1);//標記進入停車場的時間
char*t2;
t2=ctime(&t1);//獲取當前時間
c.time1=t;strcpy(s.Stop[s.top].plate,C);//將車牌號登記
printf("牌照為%s的汽車停入停車位的%d車位,當前時間:%s ",C,s.top+1,t2);
}return;
}voidstop_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+1].plate);printf("牌照為%s的汽車暫時退出停車位 ",s.Stop[s.top+1].plate);
}
b.top--;//如果停車位中的車都讓了道,說明停車位中無車輛需要出行
if(s.top<-1)
{printf("停車位上無此車消息 ");
}else
{printf("牌照為%s的汽車從停車場開走 ",s.Stop[s.top+1].plate);
}//將讓路棧中的車輛信息壓入停車位棧
while(b.top>=0)
{strcpy(s.Stop[++s.top].plate,b.Help[b.top--].plate);printf("牌照為%s的汽車停回停車位%d車位 ",b.Help[b.top+1].plate,s.top+1);
}//從便道中->停車位
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車位 ",p.Pave[p.front].plate,s.top+1);
p.front=(p.front+1)%MAX_PAVE;
p.count--;
}
}
}voidcar_leave()//車離開{printf("請輸入即將離開的車牌號: ");scanf("%s",&C);if(s.top<0)//判斷停車位是否有車輛信息
{printf("車位已空,無車輛信息! ");
}else
{
stop_to_buff();
}
time_tt1;
longintt=time(&t1);
c.time2=t;//標記離開停車場的時間
char*t2;
t2=ctime(&t1);//獲取當前時間
printf("離開時間%s 需付%ld元 ",t2,MONEY*(c.time2-c.time1)/10);
}voidDisplay()
{inti=s.top;if(-1==i)
{printf("停車場為空 ");
}
time_tt1;longintt=time(&t1);//標記顯示時的時間
printf(" 車牌號 停放時間 當前所需支付金額 ");while(i!=-1)
{
printf(" %s %d秒 %d元 ",s.Stop[i].plate,t-c.time1,MONEY*(t-c.time1)/10);
i--;
}
}voidwelcome()
{printf(" *******************目前停車場狀況*********************** ");printf(" 停車場共有%d個車位,當前停車場共有%d輛車,等候區共有%d輛車 ",MAX_STOP,s.top+1,(p.rear+MAX_PAVE-p.front)
%MAX_PAVE);printf(" ******************************************************** ");printf(" ---------------WelcometoourCarParking--------------- ");
printf(" *1.Parking* ");
printf(" *2.leaving* ");
printf(" *3.situation* ");
printf(" *4.exit* ");
printf(" -------------------------------------------------------- ");
}
主函數main.c
/**********************************************************
問題描述:停車場是一個能放n輛車的狹長通道,只有一個大門,
汽車按到達的先後次序停放。若車場滿了,車要在門外的便道上等候
,一旦有車走,則便道上第一輛車進入。當停車場中的車離開時,由
於通道窄,在它後面的車要先退出,待它走後依次進入。汽車離開
時按停放時間收費。
基本功能要求:
1)建立三個數據結構分別是:停放隊列,讓路棧,等候隊列
2)輸入數據模擬管理過程,數據(入或出,車號)。
***********************************************************/#include"PLot.h"intmain()
{//初始化
s.top=-1;
b.top=0;
p.rear=0;
p.count=0;
p.front=0;while(1)
{
system("clear");
welcome();inti,cho;
scanf("%d",&i);if(1==i)car_come();
if(2==i)car_leave();if(3==i)Display();if(4==i)break;
printf("返回請輸入1 ");
scanf("%d",&cho);if(1==cho)
{continue;
}else
{
printf("您的輸入有誤,請重新輸入 ");
scanf("%d",&cho);continue;
}
}return0;
}
6. C語言 停車場管理
很想幫你,但我比較忙,沒時間打出來了,給你本書看。
這個題這本書上第62頁有。
<<數據結構+演算法>>
夏克儉編著 國防工業出版
ISBN 7-118-02419-8
高教就有這書
希望對你有幫助
7. 39、停車場管理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;
}
8. 一個c語言題````請大家幫忙
哎.....分太少了,
題目主要是想讓你區分和熟悉"隊列"和"棧"的概念和操作方法,對於這兩種數據結構,要從物理結構(就是內存中的存儲)和邏輯結構(該數據結構的特點和定義於該數據結構的操作方法)來理解.題目中停車場里的車是"棧"的數據結構,停車場以外的車是"隊列"的數據結構,只需要把操作這兩種數據結構的方法應用上來,該題目就解決了.
====================================
其實我也並不是嫌分少,我只是沒時間做,我本來不是那麼看重分的,很多時候有些問題沒分我也在答,你這個問題要做至少四個小時,只有看國慶有沒有時間閑著再做了...
9. 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<<"輸入有誤,請重新輸入:";
}
}
以前的課設 你看看吧 純手工的~~