停車場管理系統c語言
A. 停車場管理模擬系統怎麼用c語言寫的
停車場管理模擬系統可以通過C語言編寫,主要涉及到數據結構、文件操作、控制台輸入輸出等技術的綜合應用。
詳細
第一段:基礎框架與數據結構選擇
在C語言中實現停車場管理模擬系統,首先需要構建基礎的數據結構來表示停車場和車輛。通常,停車場可以抽象為一個具有固定容量的棧或者隊列,根據實際需求來選擇。車輛則可以用結構體來表示,包含車牌號、停車時間等屬性。例如,可以定義一個結構體`Car`來存儲車輛信息,以及一個數組`parkingLot`來模擬停車場。
第二段:功能實現與演算法設計
系統需要實現的基本功能包括車輛的進入、離開和查詢等。進入功能需要判斷停車場是否已滿,如果未滿則添加車輛信息到停車場中,並更新相關數據;離開功能需要根據車牌號找到對應車輛,計算停車費用,然後移除車輛信息;查詢功能則提供當前停車場的狀態,如剩餘車位、已停車輛列表等。這些功能都需要通過編寫相應的C語言函數來實現,並涉及到數據結構的遍歷、查找、插入和刪除等操作。
第三段:用戶交互與界面設計
為了讓系統更加友好和易用,還需要設計一個用戶交互界面。在C語言中,這通常通過控制台輸入輸出來實現。可以設計一個循環菜單,讓用戶通過輸入不同的選項來選擇想要執行的操作,然後調用相應的函數來處理。例如,可以顯示一個包含“1. 車輛進入”、“2. 車輛離開”、“3. 查詢狀態”等選項的菜單,並根據用戶的輸入來執行相應的功能。
第四段:擴展性與健壯性考慮
在實際應用中,還可以考慮添加更多的功能來增強系統的擴展性和健壯性。例如,可以引入文件操作來保存和載入停車場的數據,以便在程序重啟後能夠恢復之前的狀態;還可以添加錯誤處理機制來應對用戶輸入錯誤或異常情況,提高系統的穩定性和可用性。這些功能都需要在C語言的編程框架內進行設計和實現。
綜上所述,通過合理地選擇數據結構、設計演算法、構建用戶交互界面以及考慮擴展性和健壯性等因素,可以使用C語言編寫出一個功能完善且易於使用的停車場管理模擬系統。
B. C語言 停車場記錄停車時間與收費
printf("time is %f s\n",difftime(t_end,t_end));difftime中兩個都是t_end,註定為0。
C. c語言程序設計實驗報告80~100行,關於一種小游戲的,語句簡單些,
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_PARKING_SIZE 10//停車場最大停車數量
#define PRIZE 10.00//停留每小時單價
#define true 1
#define false 0
typedef struct stack
{
long pos[MAX_PARKING_SIZE];//存儲車牌號碼
int time[MAX_PARKING_SIZE];//存儲進入車站的時間
int point;//最後一輛車的位置指針
}Stack;//定義棧-模擬停車場
typedef struct queue
{
int num;//存儲車牌號
struct queue *next;//指向下一輛車
}Queue;//定義隊列-模擬停車場外
void InitStack(Stack *s)
{
s->point=-1;
}//初始化棧
Queue *InitQueue()//初始化隊列
{
Queue *q;
q=(Queue *)malloc(sizeof(Queue));
q->next=NULL;
return q;
}
int StackPop(Stack *s,long *i,int *j)//退棧函數
{
if(s->point==-1)return false;
else
{
*i=s->pos[s->point];
*j=s->time[s->point];
s->point--;
return true;
}
}
int StackPush(Stack *s,long i,int j)//壓棧函數
{
if(s->point==MAX_PARKING_SIZE-1)return false;
else
{
s->point++;
s->pos[s->point]=i;
s->time[s->point]=j;
return true;
}
}
int QueuePop(Queue **qH,long *i)//退隊函數
{
Queue *temp;
if((*qH)->next==NULL)return false;
else
{
temp=(*qH)->next;
(*qH)->next=temp->next;
*i=temp->num;
free(temp);
return true;
}
}
int QueuePush(Queue **q,long i)//入隊函數
{
Queue *temp;
if((temp=(Queue *)malloc(sizeof(Queue)))==NULL)return false;
else
{
(*q)->next=temp;
temp->num=i;
temp->next=NULL;
*q=temp;
return true;
}
}
int main()
{
int time,i,j,inStack,inQueue;
long num;
char state;
Stack park;
Queue *H,*p,*temp,*temp2;
H=InitQueue();
p=H;
system("color 9E");
InitStack(&park);//初始化隊列和棧
printf("**********這里是停車場管理程序,歡迎使用**************\n");
printf("\n停車場最大能停車%d輛,停車時間不得超過24小時,現在停車的單價為每小時%.2f元\n",MAX_PARKING_SIZE,PRIZE);
while(1)
{
inStack=inQueue=0;temp=H;
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 停車場管理系統 ┃\n");
printf("┃ (A或a)汽車到達和已到汽車查詢 ┃\n");
printf("┃ (D或d)汽車離開 ┃\n");
printf("┃ (E或e)程序退出 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n您的選擇是:");
state=getche();
if(state=='a'||state=='A'||state=='d'||state=='D')
{
printf("\n輸入車牌號(數字):");
scanf("%ld",&num);
printf("\n輸入到達或查詢或離開的的時間(24小時制,單位:小時):");
scanf("%d",&time);
}
if(state=='a'||state=='A')
{
for(i=0;i<=park.point;i++)
if(park.pos[i]==num)
{
inStack=1;
break;
}//在車站中查找
for(j=1;temp->next!=NULL;j++)
{
temp2=temp;
temp=temp2->next;
if(temp->num==num)
{
inQueue=1;
break;
}
}//在車站外查找
if(inStack)
printf("\n查詢結果:輸入的汽車已經在車站中第%d個位置停留了%d個小時!\n",i+1,time>park.time[i]?time-park.time[i]:time+24-park.time[i]);
else if(inQueue)
printf("\n查詢結果:輸入的汽車已經在車站外第%d個位置等候\n",j);
else
{
if(StackPush(&park,num,time)==false)
{
QueuePush(&p,num);
printf("\n車站已滿,車輛停在場外。\n");
}
else printf("\n車輛成功進站!\n");
}//如果車輛到達,當車站已滿,停在車站外,否則,進入車站
}
else if(state=='d'||state=='D')//如果是離開
{
for(i=0;i<=park.point;i++)
if(park.pos[i]==num)
{
inStack=1;
break;
}//在車站中查找
if(inStack)//如果在車站中
{
printf("正要離開的汽車在車站中第%d個位置停留了%d個小時,應付%.2f元\n",i+1,time>park.time[i]?time-park.time[i]:time+24-park.time[i],time>park.time[i]?(time-park.time[i])*PRIZE:(time+24-park.time[i])*PRIZE);
while(i<park.point)
{
park.pos[i]=park.pos[i+1];
park.time[i]=park.time[i+1];
i++;
}
park.point--;//把離開的車輛從車站中刪除
if(H->next!=NULL)
{
QueuePop(&H,&num);
if(H->next==NULL)p=H;
StackPush(&park,num,time);
printf("\n停車場空出一位置。場外等候的%d號汽車入站了!\n",num);
}//如果車站外有車,入站
}
else//不在車站中
{
for(i=1;temp->next!=NULL;i++)
{
temp2=temp;temp=temp2->next;
if(temp->num==num)
{
inQueue=1;
break;
}
}//查找是否在車站外
if(inQueue)
{
printf("\n汽車在停車場外,不收費\n",i);
temp2->next=temp->next;
if(temp==p)p=temp2;
free(temp);
}//在車站外
else printf("\n對不起,您輸入了不存在的車牌號!\n");
}
}
else if(state=='e'||state=='E')
{
printf("\n");
break;
}
else printf("\n輸入錯誤!\n");
}
return 0;
}
D. 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<<"輸入有誤,請重新輸入:";
}
}
以前的課設 你看看吧 純手工的~~
E. C語言停車場管理程序(順序號 int,車牌號 char(8),停車位號int,進入停車場時間cha
for(int i=0;i<=Enter->top;i++)
{if( Enter->stack[i]->num==p->num)
{ cout<<"你的車號與停車場內車號重復"<<endl;
break;
}
}
if(Enter->top<MAX)
{
Enter->top++;
cout<<endl<<"車輛在車場第"<<Enter->top<<"位置.";
cout<<endl<<"車輛到達時間:";
cin>>p->reach.hour>>p->reach.min;
cout<<endl<<"車輛到達登記完畢!"<<endl;
cout<<"--------------------------------------------"<<endl;
Enter->stack[Enter->top]=p;
return 1;
}