天天看點

基于C語言的停車場管理系統程式設計(二)簡單版

一.系統功能

(1)通過菜單的形式實作人機互動界面

(2)實作便道上停車資訊顯示

(3)實作錄入進入停車場的車輛車牌号

二.設計思想

1.人機互動界面

基于C語言的停車場管理系統程式設計(二)簡單版

2.錄入進入車牌資訊

基于C語言的停車場管理系統程式設計(二)簡單版

3.顯示已停停車場情況

基于C語言的停車場管理系統程式設計(二)簡單版

下面如繼續錄入

三、全部分代碼

#include<stdio.h>
#include<stdlib.h>
#include <windows.h>			//"cls"
#include<string.h>              //strcmp
#include<time.h>                //time_t

#define MAXSIZE 100
#define M 4
#define N 5                    //停車場有M行N列

//車輛資訊節點 
typedef struct carnode
{
	int row, line;
	int inHour;        //入場時間 1
	int inMin;         //30
	int liveHour;       //待多久1
	int liveMin;        //40
	int outHour;   //出場小時 3
	int outMin;    // 分鐘 10
	char License[10];
}CarNode;
//用來存放時間的連結清單 
typedef struct carlist
{
	CarNode *data;          //data是結構體數組 
	struct carlist *next;
}CarList;
//聲明每個全局變量
CarList *timeQ[25];
int park[M][N]={0};
int flag=0;                                    //判斷停車場是否已滿 

int oddEven(int n);
void printPark();                              //用二維數組存放停車場
void initList();                               //初始化連結清單
int *localTime();                              //求系統時間
CarNode *InCar(int r,int l);                   //車輛進入 
CarNode *initCarNode(int row,int line,char License[10]);
void List_add(CarList *list,CarNode *car);     //構造連結清單比較出場時間
void leaveCar();                               //新使用者進來是否等待
void printCar(CarList *q);                     //列印車輛資訊
void Welcome();					               //顯示菜單
void smallwelcome();                           //子菜單
void HideCursor();                             //完成清屏功能(調用系統函數)
void printCars();                              //停車場已滿,等待
CarNode *InCar(int r,int l);
int main()
{
	srand((unsigned)time(NULL));
	initList();
	Welcome();
	while(1){
	system("cls");						   // 清屏 
	Welcome();							   // 重新顯示界面
		int i, cho;
		scanf("%d", &i);
		if (i == 1) {
			smallwelcome();
			printPark();
			if (flag>M*N) {
				printCars();
				break;
			}
		} 
		if (i == 2) {
			printf("\n歡迎您再次使用本系統呦 ε=ε=ε=(~ ̄▽ ̄)~\n\n");
			break;
		}
		printf("---------------------------------------\n");
		printf("\n若車已停好,請輸入0\n");
		begin:								// goto 标志位 
		scanf("%d", &cho);
		if(cho == 0){
			continue;
		}
		else{
			printf("您的輸入有誤,請重新輸入\n");
			goto begin;						// goto 到指定标志位 begin
		}
	}
	return 0;
}

int oddEven(int n)
{
	if(n%2!=0){                  //奇數 
		return 1;
	}else{
		return 0;
	}
} 
//初始化連結清單
void initList()
{
	int i;
	for(i=1; i<25; i++){
		timeQ[i] = (CarList *)malloc(sizeof(CarList));
		timeQ[i]->next=NULL;
	}
}
//判斷後列印車輛資訊
void printCar(CarList *q)
{
	printf("\t\t車牌号為%s的車主 \n",q->data->License);
	printf("\t\t會在中原標準時間%d時%d分離開停車場\n",q->data->outHour,q->data->outMin);
	printf("\t\t請您将車停在第%d行第%d列的位置上\n",q->data->row+1,q->data->line+1); 
}
//用二維數組存放停車場
void printPark()
{
	int i, j;
	for(i=0; i<M*2+1; i++) {
		for(j=0; j<N*2+1; j++) {
			if(!oddEven(i) && !oddEven(j)) {
				printf(" ");
			} else if(!oddEven(i) && oddEven(j)) {
				printf("---");
			} else if(oddEven(i) &&!oddEven(j)) {
				printf("|");
			} else if(oddEven(i) && oddEven(j)) {
				if(park[(i-1)/2][(j-1)/2]) {
					printf(" P ");
				}else{
					printf("   ");
				}
			}
		}
		printf("\n");
	}
}
//求系統時間 
int *localTime()
{
	time_t tmpcal_ptr;
	struct tm *tmp_ptr = NULL;
	time(&tmpcal_ptr);
	tmp_ptr = localtime(&tmpcal_ptr);
	int *a = (int*)malloc(sizeof(int)*2);
	a[0]= tmp_ptr->tm_hour;
	a[1]= tmp_ptr->tm_min;
	return a;
}
//車輛進入 
CarNode *InCar(int r,int l)
{
	if (park[r][l] == 0) {
		char *License=(char *)malloc(sizeof(char)*10);
		printf("輸入車牌号:");
		getchar();
		gets(License);
		printf("---------------------------------------\n");
		getchar();
		CarNode *car = initCarNode(r,l,License);
		List_add(timeQ[localTime()[0]],car);
		park[r][l] = 1;
		flag++;
		return car;
	} else {
		printf("該車位已經被占了哦!\n");
		printf("請重新輸入:");
		scanf("%d %d",&r,&l);
		return InCar(r,l);
	}
}

//汽車資訊
CarNode *initCarNode(int row,int line,char License[10])
{
	CarNode *car = (CarNode *)malloc(sizeof(CarNode));
	car->row = row;
	car->line = line;
	
	int liveHour = rand()%4;
	int liveMin = rand()%61;
	car->liveHour = liveHour;
	car->liveMin = liveMin;
	
	car->inHour = localTime()[0];
	car->inMin = localTime()[1];
	
	car->outMin = (localTime()[1]+liveMin)%60;
	car->outHour = localTime()[0]+car->liveHour+(localTime()[1]+liveMin)/60;
	strcpy(car->License,License);
	return car;
}
//構造timeQ[25]連結清單
void List_add(CarList *list,CarNode *car)
{
	CarList *p = list;
	CarList *q = (CarList *)malloc(sizeof(CarList));
	q->data = car;
	while(p->next) {
		if(p->next->data->outMin < car->outMin) {
			break;
		}
		p = p->next;
	}
	q->next = p->next;
	p->next = q;
}
//新使用者進來是否等待
void leaveCar()
{
	CarList *p = timeQ[localTime()[0]];
	CarList *q = NULL;
	
	while(p->next){
		if(p->next->data->outMin == localTime()[1]) {
			q = p->next;
			p->next = q->next;
			park[p->data->row][p->data->line] = 0;
			break;
		}
		p = p->next;
	}
	
	if(q)
	printCar(q);
}
//完成清屏時間控制功能(調用系統函數) 
void HideCursor()
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0};
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//顯示菜單 
void Welcome()
{
	time_t rawtime;
    struct tm * timeinfo;
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    printf ("\t\t\t%s", asctime(timeinfo) );
    HideCursor();
	printf ("\t*******************目前停車場狀況***********************\n");
    printf ("\t        停車場共有%d個車位,目前停車場共有%d輛車\n",M*N,flag);
    printf ("\t********************************************************\n");
    printf ("\t--------------Welcome to LZH's Car Parking--------------\n");
    printf ("\t*                                                      *\n");
    printf ("\t*           該停車場是一個%d行%d列的矩形停車場         *\n",M,N);
    printf ("\t*         系統會自動幫您配置設定停車時間,請合理安排時間   *\n");
    printf ("\t*                  1.将您的愛車停在該停車場            *\n");
    printf ("\t*                  2.退出管理系統                      *\n");
	printf ("\t*                                                      *\n");
    printf ("\t*------------------------------------------------------*\n");
    printf ("\t---------------Press key(1/2/) to run program ----------\n");
}    
//歡迎光臨
void smallwelcome() 
{
    printf ("%d %d", localTime()[0],localTime()[1] );
	int r,l;
	printf("親~請選擇停車區域哦!(行數<%d,列數<%d)",M+1,N+1); 
	scanf("%d %d",&r,&l);

	if (r>M||l>N) {
		printf("\t\t本停車場沒有你想象中的大哦!\n");
		smallwelcome(); 
		return ;
	}

	CarNode *car = InCar(r-1,l-1);
	List_add(timeQ[ localTime()[0] ],car);
	
	printf("\t\t請牌照為%s的汽車停入停車位的第%d行第%d列的位置上\n",car->License,r,l);
	printf("\t\t現在為中原標準時間:%d點%d分\n",localTime()[0],localTime()[1]);
	printf("\t\t為您配置設定的停車時間為:%d小時%d分鐘\n",car->liveHour,car->liveMin); 
	printf("\t\t請您在%d點%d分之前離開停車場\n",car->outHour,car->outMin);
}
//停車場已滿,列印最早離開的車輛資訊
void printCars()
{
	int i;
	for(i=1; i<25; i++) {
		CarList *timeq = timeQ[i];
		while(timeq->next != NULL) {
			printCar(timeq->next);
			timeq = timeq->next;
			break;
		}
	}
}

           

繼續閱讀