使用C语言实现高速公路计费系统 。对三种类型的车辆计费,大型车每公里0.5元,中型车辆每公里0.4元,小行车每公里0.3元,来车验条,乘公里数即得该收的款项。在交班时要统计出总数
时间: 2024-03-23 17:42:33 浏览: 151
以下是使用C语言实现高速公路计费系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VEHICLES 1000 // 最大车辆数
#define MAX_ENTRY 3 // 最大收费口数
// 车辆类型
typedef enum {
Small,
Medium,
Large
} VehicleType;
// 车辆信息
typedef struct {
char license[10]; // 车牌号
VehicleType type; // 车型
} Vehicle;
// 收费记录
typedef struct {
char license[10]; // 车牌号
int distance; // 行驶里程
float fee; // 收费金额
int entry; // 收费口
} Record;
// 收费口信息
typedef struct {
int id; // 收费口编号
char location[20]; // 收费口位置
float total; // 总收费金额
} Entry;
// 车辆信息数组和收费记录数组
Vehicle vehicles[MAX_VEHICLES];
Record records[MAX_VEHICLES];
int vehicle_count = 0;
int record_count = 0;
// 收费口信息数组
Entry entries[MAX_ENTRY] = {
{1, "入口1", 0},
{2, "入口2", 0},
{3, "入口3", 0}
};
// 添加车辆信息
void add_vehicle() {
if (vehicle_count >= MAX_VEHICLES) {
printf("车辆信息已满,无法添加!\n");
return;
}
Vehicle vehicle;
printf("请输入车牌号:");
scanf("%s", vehicle.license);
printf("请输入车型(1:小型车,2:中型车,3:大型车):");
int type;
scanf("%d", &type);
vehicle.type = type - 1;
vehicles[vehicle_count++] = vehicle;
printf("车辆信息添加成功!\n");
}
// 删除车辆信息
void remove_vehicle() {
if (vehicle_count == 0) {
printf("车辆信息为空,无法删除!\n");
return;
}
char license[10];
printf("请输入要删除的车牌号:");
scanf("%s", license);
int i, j;
for (i = 0; i < vehicle_count; i++) {
if (strcmp(vehicles[i].license, license) == 0) {
for (j = i; j < vehicle_count - 1; j++) {
vehicles[j] = vehicles[j + 1];
}
vehicle_count--;
printf("车辆信息删除成功!\n");
return;
}
}
printf("没有找到对应的车辆信息!\n");
}
// 修改车辆信息
void modify_vehicle() {
if (vehicle_count == 0) {
printf("车辆信息为空,无法修改!\n");
return;
}
char license[10];
printf("请输入要修改的车牌号:");
scanf("%s", license);
int i;
for (i = 0; i < vehicle_count; i++) {
if (strcmp(vehicles[i].license, license) == 0) {
printf("请输入新的车型(1:小型车,2:中型车,3:大型车):");
int type;
scanf("%d", &type);
vehicles[i].type = type - 1;
printf("车辆信息修改成功!\n");
return;
}
}
printf("没有找到对应的车辆信息!\n");
}
// 计算收费金额
float calculate_fee(VehicleType type, int distance) {
float rate;
switch (type) {
case Small:
rate = 0.3;
break;
case Medium:
rate = 0.4;
break;
case Large:
rate = 0.5;
break;
}
return rate * distance;
}
// 收费
void charge() {
if (vehicle_count == 0) {
printf("车辆信息为空,无法收费!\n");
return;
}
char license[10];
printf("请输入车牌号:");
scanf("%s", license);
int distance;
printf("请输入行驶里程(公里):");
scanf("%d", &distance);
int i;
for (i = 0; i < vehicle_count; i++) {
if (strcmp(vehicles[i].license, license) == 0) {
float fee = calculate_fee(vehicles[i].type, distance);
printf("该车应缴纳收费:%g元\n", fee);
Record record;
strcpy(record.license, license);
record.distance = distance;
record.fee = fee;
printf("请选择收费口(1:入口1,2:入口2,3:入口3):");
scanf("%d", &record.entry);
records[record_count++] = record;
entries[record.entry - 1].total += fee;
printf("收费成功!\n");
return;
}
}
printf("没有找到对应的车辆信息!\n");
}
// 统计报表
void report() {
int i;
for (i = 0; i < MAX_ENTRY; i++) {
printf("收费口%d收费总额:%g元\n", entries[i].id, entries[i].total);
}
}
int main() {
int choice;
while (1) {
printf("========= 欢迎使用高速公路计费系统 =========\n");
printf("请选择操作:\n");
printf("1. 添加车辆信息\n");
printf("2. 删除车辆信息\n");
printf("3. 修改车辆信息\n");
printf("4. 收费\n");
printf("5. 报表统计\n");
printf("6. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_vehicle();
break;
case 2:
remove_vehicle();
break;
case 3:
modify_vehicle();
break;
case 4:
charge();
break;
case 5:
report();
break;
case 6:
return 0;
default:
printf("无效的操作!\n");
}
}
return 0;
}
```
这个示例代码实现了车辆信息的添加、删除、修改,收费计算,收费记录的添加和统计报表的功能。所有的数据都保存在内存中,没有涉及到文件读写。在实际应用时,可以根据需要进行调整和优化。
阅读全文