c++高速公路计费系统
时间: 2024-03-31 08:25:47 浏览: 157
一个基本的C++高速公路计费系统可以包括以下几个部分:
1. 车辆信息管理:记录车辆信息,例如车牌号、车型、车主姓名、联系方式等。
2. 计费规则管理:根据车型、行驶里程等条件制定计费规则,并保存在系统中。
3. 行驶记录管理:记录车辆在高速公路上的行驶记录,包括起始时间、结束时间、起点、终点等。
4. 计费管理:根据行驶记录和计费规则,计算出车辆应该缴纳的费用,并将费用存入系统。
下面是一个基本的C++高速公路计费系统的代码示例:
```c++
#include <iostream>
#include <vector>
#include <string>
#include <ctime>
#include <cmath>
using namespace std;
// 车辆信息结构体
struct Car {
string plate_num; // 车牌号
string owner_name; // 车主姓名
string owner_phone; // 车主联系方式
string car_type; // 车型
};
// 计费规则结构体
struct FeeRule {
string car_type; // 车型
double base_fee; // 基础费用
double per_km_fee; // 每公里费用
double discount_rate; // 折扣率
};
// 行驶记录结构体
struct DriveRecord {
string plate_num; // 车牌号
time_t start_time; // 起始时间
time_t end_time; // 结束时间
double start_km; // 起始公里数
double end_km; // 结束公里数
};
// 计费管理类
class FeeManager {
public:
// 添加计费规则
void addFeeRule(FeeRule rule) {
fee_rules.push_back(rule);
}
// 根据车型获取计费规则
FeeRule findFeeRuleByCarType(string car_type) {
for (int i = 0; i < fee_rules.size(); i++) {
if (fee_rules[i].car_type == car_type) {
return fee_rules[i];
}
}
// 如果未找到对应的计费规则,返回一个默认的规则
return FeeRule{"default", 10, 0.5, 1};
}
// 计算费用
double calculateFee(DriveRecord record) {
// 获取对应车型的计费规则
FeeRule rule = findFeeRuleByCarType(record.plate_num);
// 计算行驶里程
double distance = record.end_km - record.start_km;
// 计算基础费用
double base_fee = rule.base_fee;
// 计算里程费用
double km_fee = distance * rule.per_km_fee;
// 计算折扣后的费用
double discount_fee = (base_fee + km_fee) * rule.discount_rate;
return discount_fee;
}
private:
vector<FeeRule> fee_rules; // 计费规则列表
};
// 车辆信息管理类
class CarManager {
public:
// 添加车辆
void addCar(Car car) {
cars.push_back(car);
}
// 根据车牌号查找车辆
Car findCarByPlateNum(string plate_num) {
for (int i = 0; i < cars.size(); i++) {
if (cars[i].plate_num == plate_num) {
return cars[i];
}
}
// 如果未找到对应的车辆,返回一个默认的车辆信息
return Car{"default", "default", "default", "default"};
}
private:
vector<Car> cars; // 车辆列表
};
// 行驶记录管理类
class RecordManager {
public:
// 添加行驶记录
void addDriveRecord(DriveRecord record) {
records.push_back(record);
}
// 根据车牌号查找行驶记录
vector<DriveRecord> findDriveRecordsByPlateNum(string plate_num) {
vector<DriveRecord> result;
for (int i = 0; i < records.size(); i++) {
if (records[i].plate_num == plate_num) {
result.push_back(records[i]);
}
}
return result;
}
private:
vector<DriveRecord> records; // 行驶记录列表
};
int main() {
// 初始化计费管理类
FeeManager fee_manager;
fee_manager.addFeeRule(FeeRule{"car", 10, 0.5, 1});
fee_manager.addFeeRule(FeeRule{"suv", 20, 1.0, 0.9});
// 初始化车辆信息管理类
CarManager car_manager;
car_manager.addCar(Car{"A12345", "张三", "13812345678", "car"});
car_manager.addCar(Car{"B67890", "李四", "13923456789", "suv"});
// 初始化行驶记录管理类
RecordManager record_manager;
record_manager.addDriveRecord(DriveRecord{"A12345", time(NULL), time(NULL) + 3600, 100, 200});
record_manager.addDriveRecord(DriveRecord{"B67890", time(NULL), time(NULL) + 7200, 200, 300});
// 计算车辆费用
string plate_num;
cout << "请输入车牌号:";
cin >> plate_num;
Car car = car_manager.findCarByPlateNum(plate_num);
if (car.plate_num == "default") {
cout << "未找到对应车辆" << endl;
return 0;
}
vector<DriveRecord> records = record_manager.findDriveRecordsByPlateNum(plate_num);
double total_fee = 0;
for (int i = 0; i < records.size(); i++) {
total_fee += fee_manager.calculateFee(records[i]);
}
cout << "车主:" << car.owner_name << endl;
cout << "联系方式:" << car.owner_phone << endl;
cout << "车型:" << car.car_type << endl;
cout << "累计费用:" << total_fee << "元" << endl;
return 0;
}
```
以上代码仅为示例,实际情况中可能需要根据具体需求进行修改和完善。
阅读全文