智能车辆管理系统主要用于管理停车场的车辆出入、停放计费、信息查询等场景,C#凭借成熟的生态和便捷的桌面开发能力,成为这类系统的常用开发语言。下面结合实际项目经验,分享完整的开发过程。

一、系统整体架构设计
本项目采用经典的C/S架构,客户端使用WinForms开发,服务端负责业务逻辑处理和数据存储,数据库选用SQL Server。整体分为三层结构:
- 表示层:负责界面展示和用户交互,包含车辆入场、出场、查询、统计等界面
- 业务逻辑层:处理核心业务规则,比如计费规则、权限校验、数据校验等
- 数据访问层:负责和数据库交互,完成数据的增删改查操作
二、数据库核心表设计
系统需要存储车辆基础信息、出入场记录、收费规则等数据,核心表结构如下:
| 表名 | 核心字段 | 说明 |
|---|---|---|
| VehicleInfo | VehicleId, PlateNumber, VehicleType, OwnerName, Phone | 存储车辆基础信息 |
| ParkingRecord | RecordId, PlateNumber, EnterTime, ExitTime, TotalFee, PayStatus | 存储车辆出入场记录 |
| FeeRule | RuleId, VehicleType, FirstHourFee, ExtraHourFee, MaxDailyFee | 存储不同车型的计费规则 |
三、核心功能实现示例
3.1 车辆入场登记功能
车辆入场时,需要录入车牌号、车辆类型,生成入场记录并存入数据库,代码如下:
using System;
using System.Data.SqlClient;
namespace ParkingManagementSystem.BLL
{
public class EnterManage
{
// 数据库连接字符串
private string connStr = "Server=127.0.0.1;Database=ParkingDB;User Id=sa;Password=123456;";
/// <summary>
/// 处理车辆入场逻辑
/// </summary>
/// <param name="plateNumber">车牌号</param>
/// <param name="vehicleType">车辆类型</param>
/// <returns>是否入场成功</returns>
public bool VehicleEnter(string plateNumber, string vehicleType)
{
// 校验车牌号是否为空
if (string.IsNullOrEmpty(plateNumber))
{
return false;
}
string sql = @"INSERT INTO ParkingRecord (PlateNumber, EnterTime, VehicleType, PayStatus)
VALUES (@PlateNumber, @EnterTime, @VehicleType, 0)";
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@PlateNumber", plateNumber);
cmd.Parameters.AddWithValue("@EnterTime", DateTime.Now);
cmd.Parameters.AddWithValue("@VehicleType", vehicleType);
conn.Open();
int rows = cmd.ExecuteNonQuery();
return rows > 0;
}
}
}
}
3.2 车辆出场计费功能
车辆出场时,需要根据入场时间、车辆类型匹配计费规则,计算总费用,代码如下:
using System;
using System.Data.SqlClient;
namespace ParkingManagementSystem.BLL
{
public class ExitManage
{
private string connStr = "Server=127.0.0.1;Database=ParkingDB;User Id=sa;Password=123456;";
/// <summary>
/// 计算车辆停车费用
/// </summary>
/// <param name="recordId">停车记录ID</param>
/// <returns>总费用</returns>
public decimal CalculateFee(int recordId)
{
// 查询停车记录和车辆类型
string querySql = @"SELECT pr.EnterTime, pr.ExitTime, fr.FirstHourFee, fr.ExtraHourFee, fr.MaxDailyFee
FROM ParkingRecord pr
JOIN FeeRule fr ON pr.VehicleType = fr.VehicleType
WHERE pr.RecordId = @RecordId";
DateTime enterTime;
DateTime exitTime = DateTime.Now;
decimal firstHourFee;
decimal extraHourFee;
decimal maxDailyFee;
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand(querySql, conn);
cmd.Parameters.AddWithValue("@RecordId", recordId);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
enterTime = reader.GetDateTime(0);
firstHourFee = reader.GetDecimal(2);
extraHourFee = reader.GetDecimal(3);
maxDailyFee = reader.GetDecimal(4);
}
else
{
return 0;
}
}
// 计算停车时长
TimeSpan parkingTime = exitTime - enterTime;
double totalHours = parkingTime.TotalHours;
// 计费逻辑:首小时按首小时费用,超出部分按每小时额外费用计算,每日不超过最高费用
decimal totalFee = 0;
if (totalHours <= 1)
{
totalFee = firstHourFee;
}
else
{
totalFee = firstHourFee + (decimal)(Math.Ceiling(totalHours - 1)) * extraHourFee;
// 如果超过每日最高费用,按最高费用计算
if (totalFee > maxDailyFee)
{
totalFee = maxDailyFee;
}
}
// 更新出场时间和费用
string updateSql = @"UPDATE ParkingRecord
SET ExitTime = @ExitTime, TotalFee = @TotalFee
WHERE RecordId = @RecordId";
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand(updateSql, conn);
cmd.Parameters.AddWithValue("@ExitTime", exitTime);
cmd.Parameters.AddWithValue("@TotalFee", totalFee);
cmd.Parameters.AddWithValue("@RecordId", recordId);
conn.Open();
cmd.ExecuteNonQuery();
}
return totalFee;
}
}
}
四、开发中的常见问题与解决方案
4.1 多线程并发问题
当多个入场设备同时上传车辆入场数据时,可能会出现同一车牌重复入场的问题。解决方案是在数据库层面给PlateNumber和PayStatus字段添加联合唯一索引,同时在代码层使用互斥锁处理高并发场景下的入场逻辑。
4.2 界面卡顿问题
数据查询、费用计算等耗时操作如果放在UI线程执行,会导致界面卡顿。实际开发中采用BackgroundWorker组件或者Task异步编程方式,将耗时操作放到后台线程执行,操作完成后通过跨线程委托更新UI。
4.3 数据实时同步问题
如果系统有多个客户端同时运行,需要保证车辆状态实时同步。可以基于SQL Server的依赖缓存功能,当停车记录表数据发生变化时,主动通知所有客户端更新数据,避免数据不一致。
五、项目总结
整个智能车辆管理系统开发周期约2个月,上线后运行稳定,能够满足日均500辆车的停放管理需求。开发过程中要注意业务逻辑和数据库设计的匹配性,提前规划好扩展接口,方便后续增加新能源车辆优惠、月卡管理等新功能。核心代码模块做好封装,后续类似项目可以直接复用,能有效提升开发效率。
C#智能车辆管理系统WinFormsSQL_Server多线程修改时间:2026-07-13 14:51:19