【C++面向对象】用电管理数据管理系统(面向对象)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


用电管理数据管理系统(面向对象)



一、设计要求

统计用电管理数据,要求能用菜单实现如下功能:
(1)输入每个电表的用户名,楼 栋号,抄表日期,电表读数。
(2) 按作者的用电量,从高到低排出每个用户的总用电量。
(3)根据用户要求输出某用户某月 (从键盘输入用户名和月份)的总用电量。(4)统计某楼 栋从某月到某月(从键盘输入)的总用电量.

要求:数据采用文件输入,保存。


二、运行结果

2.1 输入数据

展示如下 :

在这里插入图片描述


2.2 显示用电量

展示如下:

在这里插入图片描述


2.3 显示某用户某月用电量

展示如下 :

在这里插入图片描述


2.4 显示某楼栋某时间段用电量

展示如下 :

在这里插入图片描述


三、代码设计

3.1 输入数据

将用户输入的数据写入到指定文件中。用户会被提示输入用户名、楼栋号、抄表日期和电表读数。

展示如下:

void input_data(const std::string& filename) {
    std::ofstream file(filename, std::ios::app);

    std::string username;
    std::string building_number;
    std::string date;
    int reading;

    std::cout << "请输入用户名: ";
    std::cin >> username;
    std::cout << "请输入楼栋号: ";
    std::cin >> building_number;
    std::cout << "请输入抄表日期 (格式 YYYY-MM): ";
    std::cin >> date;
    std::cout << "请输入电表读数: ";
    std::cin >> reading;

    MeterReading entry{ username, building_number, date, reading };
    data.push_back(entry);

    file << username << "," << building_number << "," << date << "," << reading << "\n";
    file.close();
}

3.2 根据用户显示用电量

对存储的数据进行排序,并按照每个用户的电表读数总和进行降序排列。然后将排序后的结果输出显示。

展示如下:

void sort_and_display() {
    std::map<std::string, int> user_total;

    for (const auto& entry : data) {
        user_total[entry.username] += entry.reading;
    }

    std::vector<std::pair<std::string, int>> sorted(user_total.begin(), user_total.end());
    std::sort(sorted.begin(), sorted.end(), [](const auto& a, const auto& b) {
        return a.second > b.second;
        });

    for (const auto& pair : sorted) {
        std::cout << pair.first << " " << pair.second << "\n";
    }
}

3.3 根据用户名和月份显示用电量

获取用户输入的用户名和月份,然后遍历存储的数据,找到符合用户名和月份条件的数据条目,并计算它们的电表读数总和。最后,输出显示该用户在指定月份的总用电量。

展示如下 :

void display_user_month() {
    std::string username, month;
    std::cout << "请输入用户名: ";
    std::cin >> username;
    std::cout << "请输入月份 (格式 YYYY-MM): ";
    std::cin >> month;

    int total = 0;
    for (const auto& entry : data) {
        if (entry.username == username && entry.date.substr(0, 7) == month) {
            total += entry.reading;
        }
    }
    std::cout << "用户" << username << " 在 " << month << " 的总用电量是 " << total << "\n";
}

四、总结

展示如下 :

  1. 输入数据:允许用户输入用户名、楼栋号、抄表日期和电表读数,并将数据保存到文件和内存中。

  2. 显示用户用电量:计算每个用户的电表读数总和,并按照总用电量降序排列,然后将结果显示出来。

  3. 显示某用户某月用电量:根据用户输入的用户名和月份,计算指定用户在指定月份的总用电量,并将结果显示出来。

  4. 显示某楼栋某时间段用电量:根据用户输入的楼栋号、开始月份和结束月份,计算指定楼栋在指定时间段内的总用电量,并将结果显示出来。

  5. 退出程序:当用户选择退出时,程序终止执行。

电表读数管理系统可以帮助用户记录和统计电表读数数据,方便了解用户和楼栋的用电情况。用户可以根据需要进行数据录入、查询和分析,从而更好地管理和控制用电量。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

米码收割机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值