C语言中文社区源码git仓库:https://gitee.com/cyyzwsq/C-Coding.git
本停车管理系统是一个基于C语言的命令行应用程序,用于管理停车场的车辆进出、计费和状态监控。系统支持车辆进入、车辆离开、查看停车场状态和查看车辆信息等功能。
系统采用模块化设计,主要包含以下模块:
typedef struct {
char license_plate[20]; // 车牌号
time_t entry_time; // 入场时间
int spot_number; // 停车位号
int is_parked; // 是否已停车(1:是,0:否)
} Car;
license_plate
: 存储车辆车牌号entry_time
: 记录车辆入场时间,用于计算停车时长spot_number
: 记录车辆停放的停车位号is_parked
: 标记车辆是否在停车场内typedef struct {
int total_spots; // 总停车位数量
int available_spots; // 可用停车位数量
Car cars[MAX_CARS]; // 车辆数组
int parking_spots[MAX_SPOTS]; // 停车位状态(0:空,1:占用)
} ParkingSystem;
total_spots
: 停车场总停车位数量available_spots
: 当前可用停车位数量cars
: 存储所有车辆信息的数组parking_spots
: 停车位状态数组,0表示空,1表示占用系统采用简单的文本菜单界面,主要功能包括:
D:\CODING\cyyzwsq\ParkingMS\cmake-build-debug\ParkingMS.exe
=== 停车场管理系统 ===
1. 车辆进入
2. 车辆离开
3. 查看停车场状态
4. 查看车辆信息
5. 退出系统
请选择操作(1-5):1
请输入车牌号:陕A12345
车辆 陕A12345 已停入 1 号停车位
=== 停车场管理系统 ===
1. 车辆进入
2. 车辆离开
3. 查看停车场状态
4. 查看车辆信息
5. 退出系统
请选择操作(1-5):3
=== 停车场状态 ===
总停车位: 100
可用停车位: 99
已占用停车位: 1
停车位占用情况:
停车位 1: 已占用
停车位 2: 空
停车位 3: 空
...省略
停车位 98: 空
停车位 99: 空
停车位 100: 空
=== 停车场管理系统 ===
1. 车辆进入
2. 车辆离开
3. 查看停车场状态
4. 查看车辆信息
5. 退出系统
请选择操作(1-5):4
=== 停车场内车辆信息 ===
车牌号: 陕A12345
停车位: 1
入场时间: Thu Jul 03 21:51:31 2025
已停车: 0.01 小时
当前费用: 5.00 元
-----------------
=== 停车场管理系统 ===
1. 车辆进入
2. 车辆离开
3. 查看停车场状态
4. 查看车辆信息
5. 退出系统
请选择操作(1-5):2
请输入车牌号:陕A12345
车辆 陕A12345 从 1 号停车位离开
停车时间: 0.02 小时
应付费用: 5.00 元
=== 停车场管理系统 ===
1. 车辆进入
2. 车辆离开
3. 查看停车场状态
4. 查看车辆信息
5. 退出系统
请选择操作(1-5):
源码已经上传至git仓库:https://gitee.com/cyyzwsq/C-Coding.git
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tgmath.h>
#include <time.h>
#define MAX_SPOTS 100 // 最大停车位数量
#define MAX_CARS 100 // 最大车辆数量
#define PARKING_FEE 5 // 每小时停车费(元)
#define DISCOUNT_RATE 0.8 // 连续停车折扣率
// 车辆结构体
typedef struct {
char license_plate[20]; // 车牌号
time_t entry_time; // 入场时间
int spot_number; // 停车位号
int is_parked; // 是否已停车(1:是,0:否)
} Car;
// 停车场结构体
typedef struct {
int total_spots; // 总停车位数量
int available_spots; // 可用停车位数量
Car cars[MAX_CARS]; // 车辆数组
int parking_spots[MAX_SPOTS]; // 停车位状态(0:空,1:占用)
} ParkingSystem;
// 初始化停车场系统
void initialize_system(ParkingSystem *system, int total_spots) {
system->total_spots = total_spots;
system->available_spots = total_spots;
// 初始化所有停车位为空
for (int i = 0; i < total_spots; i++) {
system->parking_spots[i] = 0;
}
// 初始化所有车辆为未停车状态
for (int i = 0; i < MAX_CARS; i++) {
system->cars[i].is_parked = 0;
}
}
// 显示菜单
void display_menu() {
printf("\n=== 停车场管理系统 ===\n");
printf("1. 车辆进入\n");
printf("2. 车辆离开\n");
printf("3. 查看停车场状态\n");
printf("4. 查看车辆信息\n");
printf("5. 退出系统\n");
printf("请选择操作(1-5): ");
}
// 查找可用停车位
int find_available_spot(ParkingSystem *system) {
for (int i = 0; i < system->total_spots; i++) {
if (system->parking_spots[i] == 0) {
return i + 1; // 返回停车位号(从1开始)
}
}
return -1; // 没有可用停车位
}
// 车辆进入停车场
void car_enter(ParkingSystem *system) {
char license_plate[20];
printf("\n请输入车牌号: ");
scanf("%s", license_plate);
// 检查车牌号是否已存在
for (int i = 0; i < MAX_CARS; i++) {
if (system->cars[i].is_parked &&
strcmp(system->cars[i].license_plate, license_plate) == 0) {
printf("该车辆已在停车场内!\n");
return;
}
}
// 查找可用停车位
int spot = find_available_spot(system);
if (spot == -1) {
printf("停车场已满!\n");
return;
}
// 查找第一个未使用的车辆记录
int car_index = -1;
for (int i = 0; i < MAX_CARS; i++) {
if (!system->cars[i].is_parked) {
car_index = i;
break;
}
}
if (car_index == -1) {
printf("系统错误: 无法记录车辆信息!\n");
return;
}
// 记录车辆信息
strcpy(system->cars[car_index].license_plate, license_plate);
system->cars[car_index].entry_time = time(NULL);
system->cars[car_index].spot_number = spot;
system->cars[car_index].is_parked = 1;
// 更新停车位状态
system->parking_spots[spot - 1] = 1;
system->available_spots--;
printf("车辆 %s 已停入 %d 号停车位\n", license_plate, spot);
}
// 计算停车费用
double calculate_fee(ParkingSystem *system, int car_index) {
time_t now = time(NULL);
double hours = difftime(now, system->cars[car_index].entry_time) / 3600.0;
hours = ceil(hours); // 向上取整
// 连续停车超过24小时享受折扣
if (hours > 24) {
int full_days = (int)(hours / 24);
double remaining_hours = hours - (full_days * 24);
return (full_days * 24 * PARKING_FEE * DISCOUNT_RATE) +
(remaining_hours * PARKING_FEE);
}
return hours * PARKING_FEE;
}
// 车辆离开停车场
void car_leave(ParkingSystem *system) {
char license_plate[20];
printf("\n请输入车牌号: ");
scanf("%s", license_plate);
// 查找车辆
int car_index = -1;
for (int i = 0; i < MAX_CARS; i++) {
if (system->cars[i].is_parked &&
strcmp(system->cars[i].license_plate, license_plate) == 0) {
car_index = i;
break;
}
}
if (car_index == -1) {
printf("未找到该车辆!\n");
return;
}
// 计算费用
double fee = calculate_fee(system, car_index);
// 更新停车位状态
int spot = system->cars[car_index].spot_number;
system->parking_spots[spot - 1] = 0;
system->available_spots++;
system->cars[car_index].is_parked = 0;
printf("车辆 %s 从 %d 号停车位离开\n",
license_plate, spot);
printf("停车时间: %.2f 小时\n",
difftime(time(NULL), system->cars[car_index].entry_time) / 3600.0);
printf("应付费用: %.2f 元\n", fee);
}
// 显示停车场状态
void display_parking_status(ParkingSystem *system) {
printf("\n=== 停车场状态 ===\n");
printf("总停车位: %d\n", system->total_spots);
printf("可用停车位: %d\n", system->available_spots);
printf("已占用停车位: %d\n", system->total_spots - system->available_spots);
printf("\n停车位占用情况:\n");
for (int i = 0; i < system->total_spots; i++) {
printf("停车位 %d: %s\n", i + 1,
system->parking_spots[i] ? "已占用" : "空");
}
}
// 显示车辆信息
void display_car_info(ParkingSystem *system) {
printf("\n=== 停车场内车辆信息 ===\n");
int count = 0;
for (int i = 0; i < MAX_CARS; i++) {
if (system->cars[i].is_parked) {
printf("车牌号: %s\n", system->cars[i].license_plate);
printf("停车位: %d\n", system->cars[i].spot_number);
time_t entry_time = system->cars[i].entry_time;
printf("入场时间: %s", ctime(&entry_time));
double hours = difftime(time(NULL), entry_time) / 3600.0;
printf("已停车: %.2f 小时\n", hours);
printf("当前费用: %.2f 元\n",
calculate_fee(system, i));
printf("-----------------\n");
count++;
}
}
if (count == 0) {
printf("停车场内没有车辆\n");
}
}
// 主函数
int main() {
ParkingSystem system;
int choice;
// 初始化系统,设置100个停车位
initialize_system(&system, MAX_SPOTS);
do {
display_menu();
scanf("%d", &choice);
switch (choice) {
case 1:
car_enter(&system);
break;
case 2:
car_leave(&system);
break;
case 3:
display_parking_status(&system);
break;
case 4:
display_car_info(&system);
break;
case 5:
printf("感谢使用停车场管理系统!\n");
break;
default:
printf("无效选择,请重新输入!\n");
}
} while (choice != 5);
return 0;
}
本停车管理系统提供了基本的停车场管理功能,可以根据实际需求进一步扩展和完善。
创作不易,麻烦点赞