2301_79463584 2024-05-04 00:39 采纳率: 0%
浏览 4

大一新生真的做不来😢我自己打的代码运行一半也运行不了真的好难

img

![大一新生真的做不来😢我自己打的代码运行一半也运行不了真的好难

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-04 00:39
    关注

    引自免费微信小程序:皆我百晓生

    理解您的困扰,作为一位经验丰富的程序员,我会帮你逐步解决这个问题。首先,我们可以将这个项目分解成几个小的部分,并逐一实现这些功能。这里是一个简单的C++类设计和部分功能的实现,你可以根据这个模板继续完善你的程序。

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <map>
    #include <iomanip>
    
    class Worker {
    public:
        int id;
        std::string name;
        std::string department;
        std::string title;
        double basic_salary;
        double overtime_salary;
        double bonus;
        double total_salary;
    
        Worker(int id, const std::string& name, const std::string& department,
               const std::string& title, double basic_salary, double overtime_salary,
               double bonus)
            : id(id), name(name), department(department), title(title),
              basic_salary(basic_salary), overtime_salary(overtime_salary),
              bonus(bonus), total_salary(basic_salary + overtime_salary + bonus) {}
    };
    
    bool compareByTotalSalary(const Worker& a, const Worker& b) {
        return a.total_salary > b.total_salary;
    }
    
    bool compareByBasicSalary(const Worker& a, const Worker& b) {
        return a.basic_salary > b.basic_salary;
    }
    
    class WorkerDatabase {
    private:
        std::vector<Worker> workers;
        std::map<std::string, int> titleCount;
    
    public:
        void addWorker(const Worker& worker) {
            workers.push_back(worker);
            incrementTitleCount(worker.title);
        }
    
        Worker findWorkerById(int id) const {
            for (const auto& worker : workers) {
                if (worker.id == id) {
                    return worker;
                }
            }
            throw std::runtime_error("Worker not found");
        }
    
        Worker findWorkerByName(const std::string& name) const {
            for (const auto& worker : workers) {
                if (worker.name == name) {
                    return worker;
                }
            }
            throw std::runtime_error("Worker not found");
        }
    
        void sortWorkersByTotalSalary() {
            std::sort(workers.begin(), workers.end(), compareByTotalSalary);
        }
    
        void sortWorkersByBasicSalary() {
            std::sort(workers.begin(), workers.end(), compareByBasicSalary);
        }
    
        void deleteWorkerById(int id) {
            workers.erase(std::remove_if(workers.begin(), workers.end(),
                                         [id](const Worker& worker) { return worker.id == id; }),
                          workers.end());
        }
    
        void modifyWorkerById(int id, const Worker& updatedWorker) {
            for (auto& worker : workers) {
                if (worker.id == id) {
                    worker = updatedWorker;
                    break;
                }
            }
        }
    
        double calculateAverageSalary(const std::string& department) const {
            double sum = 0;
            int count = 0;
            for (const auto& worker : workers) {
                if (worker.department == department) {
                    sum += worker.total_salary;
                    count++;
                }
            }
            return count > 0 ? sum / count : 0;
        }
    
        double calculatePercentageOfTitle(const std::string& title) const {
            return static_cast<double>(titleCount[title]) / workers.size();
        }
    
        void displayWorkerTable() const {
            std::cout << std::setw(10) << "ID" << std::setw(15) << "Name"
                      << std::setw(15) << "Department" << std::setw(15) << "Title"
                      << std::setw(15) << "Basic Salary" << std::setw(15) << "Overtime Salary"
                      << std::setw(15) << "Bonus" << std::setw(15) << "Total Salary\n";
            for (const auto& worker : workers) {
                std::cout << std::setw(10) << worker.id << std::setw(15) << worker.name
                          << std::setw(15) << worker.department << std::setw(15) << worker.title
                          << std::setw(15) << worker.basic_salary << std::setw(15)
                          << worker.overtime_salary << std::setw(15) << worker.bonus
                          << std::setw(15) << worker.total_salary << '\n';
            }
        }
    
    private:
        void incrementTitleCount(const std::string& title) {
            titleCount[title]++;
        }
    };
    
    int main() {
        WorkerDatabase db;
        // 添加职工记录
        db.addWorker(Worker(1, "Alice", "IT", "Engineer", 5000, 1000, 500));
        db.addWorker(Worker(2, "Bob", "HR", "Manager", 8000, 1500, 1000));
    
        // 查询职工
        try {
            Worker alice = db.findWorkerById(1);
            std::cout << "Found Alice: " << alice.name << ", Total Salary: "
                      << alice.total_salary << std::endl;
        } catch (const std::exception& e) {
            std::cerr << "Error: " << e.what() << std::endl;
        }
    
        // 排序职工
        db.sortWorkersByTotalSalary();
        db.displayWorkerTable();
    
        return 0;
    }
    

    这段代码定义了一个Worker类用于表示职工信息,以及一个WorkerDatabase类来管理职工数据库。我已实现了一些基础功能,如添加职工、查找职工、排序职工、计算平均工资等。你可以在此基础上继续开发其他功能,例如部门职工分析和输出职工信息表。

    如果你在实现过程中遇到任何具体问题,比如如何读取和写入文件、如何处理用户输入、如何优化排序算法等,都可以随时向我提问。记住,编程是一个渐进的过程,多实践、多查阅资料,你会逐渐熟练起来的。祝你好运!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月4日