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

        简单实现了停车时记录车牌号,记录停车时间,利用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;
}

1需求分析……………………………………………………………………(页码) 2概要设计……………………………………………………………………(页码) 3详细设计……………………………………………………………………(页码) 4 测试与分析………………………………………………………………………(页码) 5 用户使用说明……………………………………………………………………(页码) 6.发现问题及错误分析 7总结…………………………………………………………………………………(页码)  参考文献 ……………………………………………………………………………(页码)  录:程序源代码 …………………………………………………………………(页码) 1、需求分析:   根据题目要求,充分地分析和理解问题,描述系统的功能要求,明确问题要求做什么?以及限制条件是什么? 问题描述 随着我国人民生活水平提高和汽车工业的高速发展.越来越多的家庭拥有了汽车,但受到土地的限制,所以采用立体停车场是解决停车难的必然出路。立体停车场占地少,容量大.利用效率高;泊车与取车全自动化,省时省力,安全防盗。本文主要以两层停车场为例,设计一能完成存车与取车的停车场系统。 有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层. ( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 每辆车的信息包括车牌号、 层号、 车位号、停车时间共4项, 其中停车时间按分钟计算 。 假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car.dat”中( 数组的对应元素也要进行赋值 ) 。  停车操作:当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号, 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5。 收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元. (停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零). 按用户的选择来判断是否要输出停车收费的总计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值