用C语言做一个公共自行车租赁系统:要求能够提供公共自行车的租赁和管理,能够记录用户的租车记录和时间,能够生成租车报告。

这是一个比较复杂的项目,需要多方面的知识和技能,包括C语言编程、数据结构、算法等。下面是一个简单的思路,供您参考:

  1. 定义数据结构

首先需要定义数据结构,包括自行车、用户、租车记录等,例如:

// 自行车
struct Bike {
    int id; // 自行车编号
    int state; // 自行车状态:0表示空闲,1表示已租借,2表示维修中
};

// 用户
struct User {
    int id; // 用户编号
    char name[20]; // 用户姓名
    int bike_id; // 租借的自行车编号
    time_t rent_time; // 开始租借的时间
};

// 租借记录
struct Record {
    int id; // 记录编号
    int user_id; // 用户编号
    int bike_id; // 自行车编号
    time_t rent_time; // 开始租借时间
    time_t return_time; // 归还时间
};
  1. 实现基本功能

接下来需要实现基本功能,包括自行车初始化、用户注册、自行车租借、归还自行车等操作。这里只给出简单的代码示例:

// 初始化自行车
void init_bikes(struct Bike bikes[], int n) {
    for (int i = 0; i < n; i++) {
        bikes[i].id = i + 1;
        bikes[i].state = 0;
    }
    printf("自行车总数:%d\n", n);
}

// 注册用户
int register_user(struct User users[], int n) {
    int id = -1;
    for (int i = 0; i < n; i++) {
        if (users[i].id == 0) {
            id = i + 1;
            users[i].id = id;
            printf("请输入用户姓名:");
            scanf("%s", users[i].name);
            printf("用户注册成功,编号:%d\n", id);
            break;
        }
    }
    return id;
}

// 自行车租借
void rent_bike(struct Bike bikes[], int n, struct User users[], int m, struct Record records[], int p) {
    int bike_id, user_id;
    printf("请输入自行车编号:");
    scanf("%d", &bike_id);
    if (bike_id < 1 || bike_id > n) {
        printf("自行车编号有误,请重新输入\n");
        return;
    }
    if (bikes[bike_id - 1].state != 0) {
        printf("该自行车已被租借或维修中,请选择其他车辆\n");
        return;
    }
    printf("请输入用户编号:");
    scanf("%d", &user_id);
    if (user_id < 1 || user_id > m || users[user_id - 1].id == 0) {
        printf("用户编号有误,请重新输入\n");
        return;
    }
    bikes[bike_id - 1].state = 1;
    users[user_id - 1].bike_id = bike_id;
    users[user_id - 1].rent_time = time(NULL);
    int record_id = -1;
    for (int i = 0; i < p; i++) {
        if (records[i].id == 0) {
            record_id = i + 1;
            records[i].id = record_id;
            records[i].user_id = user_id;
            records[i].bike_id = bike_id;
            records[i].rent_time = users[user_id - 1].rent_time;
            printf("自行车租借成功,租借记录编号:%d\n", record_id);
            break;
        }
    }
}

// 归还自行车
void return_bike(struct Bike bikes[], int n, struct User users[], int m, struct Record records[], int p) {
    int record_id;
    printf("请输入租借记录编号:");
    scanf("%d", &record_id);
    if (record_id < 1 || record_id > p || records[record_id - 1].id == 0) {
        printf("租借记录编号有误,请重新输入\n");
        return;
    }
    int user_id = records[record_id - 1].user_id;
    int bike_id = records[record_id - 1].bike_id;
    bikes[bike_id - 1].state = 0;
    users[user_id - 1].bike_id = 0;
    time_t rent_time = records[record_id - 1].rent_time;
    time_t return_time = time(NULL);
    records[record_id - 1].return_time = return_time;
    printf("租借时间:%s", ctime(&rent_time));
    printf("归还时间:%s", ctime(&return_time));
    double rent_time_seconds = difftime(return_time, rent_time);
    int rent_time_minutes = (int) rent_time_seconds / 60;
    double rent_money = rent_time_minutes * 0.1;
    printf("租借时长:%d分钟,租金:%.2f元\n", rent_time_minutes, rent_money);
}
  1. 实现报告生成功能

最后需要实现报告生成功能,可以统计每个用户的租借记录,并计算出总租借次数、总租借时长和总租金等。这部分代码比较复杂,本文就不一一列举,您可以根据具体需求自行编写。

以上是一个简单的公共自行车租赁系统的实现思路

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目前大家比较熟悉共享单车的使用。请编制一个共享单车的管理程序,实现如下基本功能。假设有5种品牌的共享单车(品牌内容自定)。 针对该5种品牌的共享单车,自行设计一套包含每种单车的品牌名称、投放量、投放点、某一时间点的在用数量、每辆车的每天骑行次数及单次里程和总里程、开锁过程中发现的损坏次数等信息(所有相关数据均自行设计)的数据结构; 随着骑行活动的开展,待使用单车的数量将发生变化。要求能对每种单车的使用数量及待使用的数量进行查询统计并输出; 对于某一投放点的某一品牌的单车,如果无备用车(待使用的车均为备用车),或备用车均为损坏的车,系统应能给出信息提示; 对于损坏报修的车辆,系统能够进行及时的统计,并能在投放数量中削减损坏车辆的数量,形成真实的有效投放量; 能够对客户信息进行处理,包括注册的用户名、电话号码、骑行里程、骑行习惯(比如70%以上的出行时间集中在某个时间段,时间段按时钟整点划分)、每天平均的骑行时间等; 该系统能进行当日使用状况的统计,请用链表排序(排序算法不限)提示交易使用次数排在前三名的单车品牌; 假设每种单车的使用是收费的,如第一个小时是免费的,第二个小时开始每小时收费0.5元,各品牌可各自推出优惠收费条件(优惠条件请自定义),然后根据假设的使用情况,统计出各种品牌的日营业额,并对各品牌的受欢迎程度进行排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要什么私信我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值