欢迎来到重庆监控安装公司官方网站!
您的位置: 重庆监控安装公司 - 安防百科 - C语言数据结构+IO实现简单停车场管理系统(附完整源码)

C语言数据结构+IO实现简单停车场管理系统(附完整源码)

来源:安防百科 / 时间: 2024-05-28

        简单实现了停车时记录车牌号,记录停车时间,利用IO将车辆信息以二进制流的形式追加保存到.bat文件里(自动创建.bat文件),取车时计算费用并将车辆信息从文件里删除,管理员可以查看所有车辆信息。

 头文件:stop.h

#ifndef _STOP_H
#define _STOP_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
#define price 6  //1小时收费
#define wait 20  //数据加载
typedef struct 
{
	int day;
	int hour;
	int min;
}TIME;
struct car
{
	char car_num[10];
	int floor;
	int position_num;
	TIME time;
};
void Write(struct car CAR[]);
 void Read(struct car CAR[]);
void park(struct car CAR[]);
float expense(struct car CAR[],int x1,int x2,int x3,int i);
void leave(struct car CAR[]);
void information(struct car CAR[]);
#endif

子函数:stop.c

#include"../include/stop.h"
/* 数据写入文件 */
void Write(struct car CAR[])
{
  // 定义一个文件指针
  FILE *fp ;
// 打开文件,没有文件自动创建
  fp = fopen("../1.dat","wb"); // b:表示以二进制写入
  // 写入数据
  fwrite( (char*)CAR,sizeof(CAR),(sizeof(CAR)*24),fp); //2:表示将数组中两个元素写入文件
  // 关闭文件
  fclose(fp);
}
// 文件数据读取
void Read(struct car CAR[]){
  // 定义一个文件指针:
  FILE *fp ;
  // 定义一个buf结构体,用于得到文件内容
  // 定义一个文件行数记录变量
// 打开文件
  fp = fopen("../1.dat","rb");
  // 读取数据到数组中
  fread((char *)CAR,sizeof(CAR),(sizeof(CAR)*24),fp);
  // 关闭文件
  fclose(fp);
int i=0;
 printf("车牌号    \t层号\t位号\t时间\n");
  // 遍历数组,打印数据信息
  for( i=0;i<12;i++)
    printf("%-10s\t%d\t%d\t%d日%d:%d\n", CAR[i].car_num, CAR[i].floor, CAR[i].position_num, CAR[i].time.day,CAR[i].time.hour,CAR[i].time.min);
}
/*//加载
void watting()
{
	int i=0;
	for(i=0;i<20;i++)
	{
		printf(". ");
		sleep(1);
	}
}*/
void watting()
{
 int i = 0;
    char* chs[4] = {"|","/","—","\\"};
// 模拟加载效果
    while(i<5){
int index = i%4;
        printf("  loading, please wait...   %s\r",chs[index]);
        fflush(stdout);
        usleep(200000);//200毫秒
i++;
    }
    printf("loading, please wait...    %s\n","ok");
    fflush(stdout);
//clrscr();
    system("clear");
    sleep(1);
}
//停车
void park(struct car CAR[])
{
	int i, j,k;
	int flag = 0;
	char carn[10];
	time_t t;
 	struct tm *timeinfo;
    time(&t);
	 timeinfo = localtime(&t);
	printf("\n请输入车牌号\n");
	scanf("%s", carn);
	for (k = 0; k < 12; k++)
	{
		if (strcmp(CAR[k].car_num, carn) == 0)
		{
			printf("该车已在停车场内\n");
			flag = 2;
			break;
		}
	}
	for (i = 0; i < 12; i++)
	{
		if (strcmp(CAR[i].car_num,"0") == 0&&flag==0)
		{
			strcpy(CAR[i].car_num, carn);
			printf("该车可停在%d层%d号\n", CAR[i].floor, CAR[i].position_num);
			     CAR[i].time.day = timeinfo->tm_mday;
			    CAR[i].time.hour = timeinfo->tm_hour;
				        CAR[i].time.min = timeinfo->tm_min;
			printf("车辆%s停入时间为%d日%d:%d\n",carn,CAR[i].time.day,CAR[i].time.hour,CAR[i].time.min);
			flag = 1;
			break;
		}
	}
	if (flag == 0)
	{
		printf("\n停车场已满\n");
	}
}
float expense(struct car CAR[],int x1,int x2,int x3,int i)
{
float w;
 if((x1*1440+x2*60+x3-(CAR[i].time.day*1440+CAR[i].time.hour*60+CAR[i].time.min))!=0)
	   w = (x1*1440+x2*60+x3-(CAR[i].time.day*1440+CAR[i].time.hour*60+CAR[i].time.min))*price*(1.0/60);
 else if((x1*1440+x2*60+x3-(CAR[i].time.day*1440+CAR[i].time.hour*60+CAR[i].time.min))==0)
	   w=price*(1.0/60);
 return w;
}
void leave(struct car CAR[])
{
	int i, j;
	int day=0,hour=0,min=0;
	int flag = 0;
	char carn[10];
	time_t t;
	float money;
	struct tm *timeinfo;
	time(&t);
	timeinfo = localtime(&t);
	printf("请输入车牌号:\n");
	scanf("%s",carn);
	for (i = 0; i < 12; i++)
	{
		if (strcmp(CAR[i].car_num,carn)==0)
		{
			strcpy(CAR[i].car_num,"0");
				
			day = timeinfo->tm_mday;
			hour = timeinfo->tm_hour;
			min = timeinfo->tm_min;
			
			money = expense(CAR,day,hour,min,i);
			printf("车辆%s停入时间为%d日%d:%d\n",carn,CAR[i].time.day,CAR[i].time.hour,CAR[i].time.min);
			printf("车辆%s驶出时间为%d日%d:%d\n",carn,day,hour,min);
			printf("\n停车费:%f\n", money);
			CAR[i].time.day = 0;
			CAR[i].time.hour = 0;
			CAR[i].time.min = 0;
			flag = 1;
		}
	}
	if (flag == 0)
	{
		printf("\n停车场内无此车\n");
	}
	
}
void information(struct car CAR[])
{
	int i=0;
	printf("车牌号    \t层号\t位号\t时间\n");
	for (i = 0; i < 12; i++)
	{
		printf("%-10s\t%d\t%d\t%d日%d:%d\n", CAR[i].car_num, CAR[i].floor, CAR[i].position_num, CAR[i].time.day,CAR[i].time.hour,CAR[i].time.min);
	}
}

主函数:main.c

#include"../include/stop.h"
int main(int argc, const char *argv[])
{
 struct car CAR[12] = { {"0",1,1,0},{"0",1,2,0},{"0",1,3,0},{"0",1,4,0},{"0",1,5,0},{"0",1,6,0},{"0",2,1,0},{"0",2,2,0},{"0",2,3,0},{"0",2,4,0},{ "0",2,5,0 }, {"0",2,6,0} };
	watting();
	Read(CAR);
	printf("读取成功!\n");
	while(1)
	{
		printf("\t\t\t#####################################\n");
		printf("\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#####################################\n");
		int op=0;
		printf("\t请输入选项1-4:");
		scanf("%d",&op);
		if(4==op)
		{
			break;
		}
		switch (op)
		{
		case 1:
			park(CAR);
			Write(CAR);
			break;
		case 2:
			leave(CAR);
			Write(CAR);
			break;
		case 3:
			information(CAR);
			break;
		default:
			printf("\t输入的选项错误,请重新输入!\n");
			break;
		}
	}
	return 0;
}

相关产品

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部