编写一个职工工作量统计系统
时间: 2023-07-29 10:07:33 浏览: 42
以下是一个简单的职工工作量统计系统的设计思路:
1. 定义一个`Employee`类,包含职工工号和完成的产品数量两个成员变量,以及相应的构造函数和成员函数。
2. 定义一个`EmployeeList`类,用于存储所有职工的信息。该类应该包含一个有序链表,以及向链表中插入和删除职工信息的成员函数。
3. 在主函数中,循环输入职工工号和完成的产品数量,以及对应的操作(添加或删除)。根据操作调用`EmployeeList`类的成员函数进行相应的操作。
4. 循环结束后,调用`EmployeeList`类的成员函数,按照完成的产品数量对职工进行排序,并输出对应的名次、人数和工号。
下面是一个简单的C++代码实现示例,仅供参考:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Employee {
public:
Employee(int id, int count) : id(id), count(count) {}
int get_id() const { return id; }
int get_count() const { return count; }
private:
int id;
int count;
};
class EmployeeList {
public:
void add_employee(const Employee& e) {
auto it = lower_bound(employees.begin(), employees.end(), e,
[](const Employee& a, const Employee& b) { return a.get_count() > b.get_count(); });
if (it != employees.end() && it->get_id() == e.get_id()) {
it->count += e.get_count();
} else {
employees.insert(it, e);
}
}
void remove_employee(int id) {
auto it = lower_bound(employees.begin(), employees.end(), id,
[](const Employee& a, int id) { return a.get_id() < id; });
if (it != employees.end() && it->get_id() == id) {
employees.erase(it);
}
}
void print_ranking() const {
int rank = 1, count = 0, prev_count = 0;
for (const auto& e : employees) {
count++;
if (e.get_count() != prev_count) {
cout << "第" << rank << "名," << count << "人,产品数量:" << e.get_count() << ",工号:";
rank += count;
count = 0;
prev_count = e.get_count();
}
cout << e.get_id() << " ";
}
}
private:
vector<Employee> employees;
};
int main() {
EmployeeList emp_list;
int id, count;
string op;
while (cin >> id >> count >> op) {
if (op == "add") {
emp_list.add_employee(Employee(id, count));
} else if (op == "remove") {
emp_list.remove_employee(id);
} else {
cout << "Invalid operation: " << op << endl;
}
}
emp_list.print_ranking();
return 0;
}
```
在上述示例中,使用了STL提供的`lower_bound`算法,对有序链表进行插入和删除操作。同时,使用了lambda表达式作为比较函数,方便了排序和查找操作。