用c语言实现单车管理 总体需求 单车信息的组成部分为:单车编号(不能重复)、所属城市、标记(是否租借)、单价、骑行次数、骑行总时长、总收入等 租车信息的组成部分为:会员名、单车编号、租借时间、归还时间、租金等 功能需求 1)新单车购入:添加单车信息2)单车查询:根据不同内容如租借标记、单价等查询并显示信息。 3)单车租借:输入会员名、单车编号、租借时间,修改租借标记(每个会员一次只可租借1辆单车) 4)单车归还:输入会员名、编号名称、归还日期,修改租借标记,计算租金。在该操作结束前,应 输出该会员此次归还所需支付的总租金。 (7)单车报废。 6)加入统计功能,可以统计会员租车信息等。
时间: 2023-07-10 21:31:04 浏览: 87
好的,这是一个比较详细的需求描述,你需要实现一个单车管理系统,包括以下功能:
- 添加单车信息
- 根据不同内容查询单车信息
- 单车租借
- 单车归还
- 单车报废
- 统计会员租车信息等
下面是一个初步的实现思路:
1. 定义单车信息结构体和租车信息结构体
```
typedef struct {
int bike_id; // 单车编号
char city[20]; // 所属城市
bool is_rented; // 是否租借
float price; // 单价
int ride_count; // 骑行次数
int ride_time; // 骑行总时长
float total_income; // 总收入
} BikeInfo;
typedef struct {
char member_name[20]; // 会员名
int bike_id; // 单车编号
char rent_time[20]; // 租借时间
char return_time[20]; // 归还时间
float rent_fee; // 租金
} RentInfo;
```
2. 定义单车信息数组和租车信息数组
```
#define MAX_BIKE_NUM 100 // 最大单车数量
#define MAX_RENT_NUM 100 // 最大租车数量
BikeInfo bike_info[MAX_BIKE_NUM]; // 单车信息数组
int bike_count = 0; // 当前单车数量
RentInfo rent_info[MAX_RENT_NUM]; // 租车信息数组
int rent_count = 0; // 当前租车数量
```
3. 实现添加单车信息功能
```
void add_bike_info() {
if (bike_count >= MAX_BIKE_NUM) {
printf("单车数量已达到上限,无法添加。\n");
return;
}
BikeInfo new_bike;
printf("请输入单车编号:");
scanf("%d", &new_bike.bike_id);
// 判断单车编号是否重复
for (int i = 0; i < bike_count; i++) {
if (bike_info[i].bike_id == new_bike.bike_id) {
printf("单车编号已存在,无法添加。\n");
return;
}
}
printf("请输入所属城市:");
scanf("%s", new_bike.city);
printf("请输入单价:");
scanf("%f", &new_bike.price);
// 将新单车信息添加到单车信息数组中
new_bike.is_rented = false;
new_bike.ride_count = 0;
new_bike.ride_time = 0;
new_bike.total_income = 0;
bike_info[bike_count] = new_bike;
bike_count++;
printf("添加成功。\n");
}
```
4. 实现单车查询功能
```
void search_bike_info() {
printf("请输入查询方式(1.租借标记 2.单价):");
int option;
scanf("%d", &option);
switch (option) {
case 1: {
printf("请输入租借标记(0或1):");
bool is_rented;
scanf("%d", &is_rented);
printf("单车编号\t所属城市\t是否租借\t单价\t骑行次数\t骑行总时长\t总收入\n");
for (int i = 0; i < bike_count; i++) {
if (bike_info[i].is_rented == is_rented) {
printf("%d\t%s\t%s\t%.2f\t%d\t%d\t%.2f\n", bike_info[i].bike_id, bike_info[i].city, bike_info[i].is_rented ? "是" : "否", bike_info[i].price, bike_info[i].ride_count, bike_info[i].ride_time, bike_info[i].total_income);
}
}
break;
}
case 2: {
printf("请输入单价区间(用空格隔开):");
float min_price, max_price;
scanf("%f %f", &min_price, &max_price);
printf("单车编号\t所属城市\t是否租借\t单价\t骑行次数\t骑行总时长\t总收入\n");
for (int i = 0; i < bike_count; i++) {
if (bike_info[i].price >= min_price && bike_info[i].price <= max_price) {
printf("%d\t%s\t%s\t%.2f\t%d\t%d\t%.2f\n", bike_info[i].bike_id, bike_info[i].city, bike_info[i].is_rented ? "是" : "否", bike_info[i].price, bike_info[i].ride_count, bike_info[i].ride_time, bike_info[i].total_income);
}
}
break;
}
default:
printf("无效的查询方式。\n");
}
}
```
5. 实现单车租借功能
```
void rent_bike() {
char member_name[20];
printf("请输入会员名:");
scanf("%s", member_name);
int bike_id;
printf("请输入单车编号:");
scanf("%d", &bike_id);
// 查找单车信息
int bike_index = -1;
for (int i = 0; i < bike_count; i++) {
if (bike_info[i].bike_id == bike_id) {
bike_index = i;
break;
}
}
if (bike_index == -1) {
printf("单车编号不存在,请重新输入。\n");
return;
}
if (bike_info[bike_index].is_rented) {
printf("该单车已被租借,请选择其他单车。\n");
return;
}
// 修改单车信息
bike_info[bike_index].is_rented = true;
rent_info[rent_count].bike_id = bike_id;
strcpy(rent_info[rent_count].member_name, member_name);
time_t t = time(NULL);
struct tm tm = *localtime(&t);
sprintf(rent_info[rent_count].rent_time, "%d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
rent_count++;
printf("租借成功。\n");
}
```
6. 实现单车归还功能
```
void return_bike() {
char member_name[20];
printf("请输入会员名:");
scanf("%s", member_name);
int bike_id;
printf("请输入单车编号:");
scanf("%d", &bike_id);
// 查找租车信息
int rent_index = -1;
for (int i = 0; i < rent_count; i++) {
if (strcmp(rent_info[i].member_name, member_name) == 0 && rent_info[i].bike_id == bike_id) {
rent_index = i;
break;
}
}
if (rent_index == -1) {
printf("该会员未租借该单车,无法归还。\n");
return;
}
int bike_index = -1;
for (int i = 0; i < bike_count; i++) {
if (bike_info[i].bike_id == bike_id) {
bike_index = i;
break;
}
}
if (bike_index == -1) {
printf("单车编号不存在,请重新输入。\n");
return;
}
// 修改单车信息
bike_info[bike_index].is_rented = false;
bike_info[bike_index].ride_count++;
time_t t = time(NULL);
struct tm tm = *localtime(&t);
char return_time[20];
sprintf(return_time, "%d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
int ride_time = (int)(difftime(mktime(&tm), mktime(&rent_info[rent_index].rent_time)) / 60); // 骑行总时长(分钟)
bike_info[bike_index].ride_time += ride_time;
float rent_fee = ride_time * bike_info[bike_index].price; // 租金
bike_info[bike_index].total_income += rent_fee;
// 修改租车信息
strcpy(rent_info[rent_index].return_time, return_time);
rent_info[rent_index].rent_fee = rent_fee;
printf("归还成功,本次租金为%.2f元。\n", rent_fee);
}
```
7. 实现单车报废功能
```
void scrap_bike() {
int bike_id;
printf("请输入要报废的单车编号:");
scanf("%d", &bike_id);
int bike_index = -1;
for (int i = 0; i < bike_count; i++) {
if (bike_info[i].bike_id == bike_id) {
bike_index = i;
break;
}
}
if (bike_index == -1) {
printf("单车编号不存在,请重新输入。\n");
return;
}
// 将最后一个单车信息覆盖到要报废的单车信息上,实现删除
bike_info[bike_index] = bike_info[bike_count - 1];
bike_count--;
printf("报废成功。\n");
}
```
8. 实现统计会员租车信息功能
```
void stat_rent_info() {
char member_name[20];
printf("请输入会员名:");
scanf("%s", member_name);
printf("单车编号\t租借时间\t归还时间\t租金\n");
for (int i = 0; i < rent_count; i++) {
if (strcmp(rent_info[i].member_name, member_name) == 0) {
printf("%d\t%s\t%s\t%.2f\n", rent_info[i].bike_id, rent_info[i].rent_time, rent_info[i].return_time, rent_info[i].rent_fee);
}
}
}
```
以上是一个简单的单车管理系统的实现思路,你可以根据自己的需求对其进行修改和完善。
阅读全文