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;
}
上一篇: 基于C/C++语言的停车场管理系统编程课程设计超详细
下一篇: C语言实现简单的停车场管理系统