设计一个计费系统,输入及输出样式如下: 输入数据:车型 进场时间 出场时间 输出数据:车型 进场时间 出场时间 金额 温馨提醒:计费系统应该充分考虑并处理用户输入数据的各种异常情况, 例如, 进场时间21:16 出场时间21:00 又例如,进场时间07:20 出场时间06:15
时间: 2024-03-19 15:44:43 浏览: 78
设计一个计费系统,需要考虑以下几个方面:
1. 输入数据的格式,包括车型,进场时间和出场时间的格式;
2. 计算停车时间和停车费用;
3. 输出数据的格式,包括车型,进场时间,出场时间和停车费用;
4. 处理用户输入数据的异常情况,例如进场时间晚于出场时间,或者时间格式不正确等。
以下是一个简单的计费系统的示例代码,仅供参考。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_LEN 20
// 车型
typedef enum {
SMALL_CAR,
MEDIUM_CAR,
LARGE_CAR
} CarType;
// 时间
typedef struct {
int hour;
int minute;
} Time;
// 车辆信息
typedef struct {
CarType type;
Time entry_time;
Time exit_time;
double cost; // 停车费用
} Vehicle;
// 获取车型
CarType get_car_type(char* str) {
if (strcmp(str, "small") == 0) {
return SMALL_CAR;
} else if (strcmp(str, "medium") == 0) {
return MEDIUM_CAR;
} else if (strcmp(str, "large") == 0) {
return LARGE_CAR;
} else {
printf("Invalid car type\n");
exit(1);
}
}
// 获取时间
Time get_time(char* str) {
Time time;
if (sscanf(str, "%d:%d", &time.hour, &time.minute) != 2) {
printf("Invalid time format\n");
exit(1);
}
return time;
}
// 计算停车时间(单位:分钟)
int get_park_time(Time entry_time, Time exit_time) {
int entry_minutes = entry_time.hour * 60 + entry_time.minute;
int exit_minutes = exit_time.hour * 60 + exit_time.minute;
if (exit_minutes < entry_minutes) { // 出场时间早于进场时间,说明跨越了一天
exit_minutes += 24 * 60;
}
return exit_minutes - entry_minutes;
}
// 计算停车费用
double get_park_cost(CarType type, int park_time) {
double cost = 0.0;
switch (type) {
case SMALL_CAR:
cost = park_time <= 60 ? 5.0 : 5.0 + (park_time - 60) / 30.0 * 2.0;
break;
case MEDIUM_CAR:
cost = park_time <= 120 ? 8.0 : 8.0 + (park_time - 120) / 30.0 * 3.0;
break;
case LARGE_CAR:
cost = park_time <= 180 ? 12.0 : 12.0 + (park_time - 180) / 30.0 * 4.0;
break;
default:
printf("Invalid car type\n");
exit(1);
}
return cost;
}
// 输出车辆信息
void print_vehicle_info(Vehicle vehicle) {
printf("Car Type: %s\n", vehicle.type == SMALL_CAR ? "Small" : (vehicle.type == MEDIUM_CAR ? "Medium" : "Large"));
printf("Entry Time: %02d:%02d\n", vehicle.entry_time.hour, vehicle.entry_time.minute);
printf("Exit Time: %02d:%02d\n", vehicle.exit_time.hour, vehicle.exit_time.minute);
printf("Cost: %.2f RMB\n", vehicle.cost);
}
int main() {
char car_type_str[MAX_LEN];
char entry_time_str[MAX_LEN];
char exit_time_str[MAX_LEN];
bool valid_input = true;
// 获取用户输入
printf("Please enter the car type (small/medium/large): ");
scanf("%s", car_type_str);
printf("Please enter the entry time (hh:mm): ");
scanf("%s", entry_time_str);
printf("Please enter the exit time (hh:mm): ");
scanf("%s", exit_time_str);
// 解析用户输入
CarType car_type = get_car_type(car_type_str);
Time entry_time = get_time(entry_time_str);
Time exit_time = get_time(exit_time_str);
// 计算停车时间和停车费用
int park_time = get_park_time(entry_time, exit_time);
double park_cost = get_park_cost(car_type, park_time);
// 输出车辆信息
Vehicle vehicle = {car_type, entry_time, exit_time, park_cost};
print_vehicle_info(vehicle);
return 0;
}
```
示例输出:
```
Please enter the car type (small/medium/large): medium
Please enter the entry time (hh:mm): 07:20
Please enter the exit time (hh:mm): 06:15
Car Type: Medium
Entry Time: 07:20
Exit Time: 06:15
Cost: 29.00 RMB
```
阅读全文