9. 职工工作量统计系统 实现以下功能: ①输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计; ②按完成数量对职工排序,并确定名次; ③按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。 ④自行设计相关功能; ⑤对不同的功能设计不同的函数,完成函数的设计和调用。
时间: 2023-06-25 16:08:08 浏览: 54
您好,欢迎使用 ChitGPT 进行对话。针对您的问题,我可以为您提供以下回答:
这是一个职工工作量统计系统,需要实现以下5个功能:
1. 输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计;
2. 按完成数量对职工排序,并确定名次;
3. 按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出);
4. 自行设计相关功能;
5. 对不同的功能设计不同的函数,完成函数的设计和调用。
对于第一个需求,可以设计一个函数来实现输入与计算工作量的功能。该函数可以接收工号和产品数量作为参数,使用字典保存工号对应的累计产品数量。
对于第二个需求,可以设计一个函数对保存在字典中的工号和累计产品数量进行排序,并输出每个职工的排名。
对于第三个需求,可以设计一个函数对排序后的职工列表进行遍历,同时记录每个名次的职工人数和工号。
至于第四个需求,需要根据具体需求进行自行设计。
最后,需要对功能进行分类并设计不同的函数来完成这些功能,以方便进行调用和维护。
相关问题
java实现编写有一个程序,该程序输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计。程序按完成数量对他们排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。
思路:
1. 定义一个职工类,包含工号和完成的产品数量两个属性,并重写compareTo方法,实现按完成数量排序。
2. 使用HashMap存储职工信息,key为工号,value为职工对象。
3. 循环输入职工工号和完成的产品数量,根据工号查找职工对象,如果找到则累加完成数量,否则新建职工对象并存储到HashMap中。
4. 将HashMap中的职工对象转为List,并排序。
5. 遍历排序后的职工列表,统计同一名次的职工人数,并输出名次、人数及工号。
代码实现:
职工类:
```
class Employee implements Comparable<Employee> {
private String empId;
private int prodCount;
public Employee(String empId, int prodCount) {
this.empId = empId;
this.prodCount = prodCount;
}
public String getEmpId() {
return empId;
}
public int getProdCount() {
return prodCount;
}
public void addProdCount(int count) {
prodCount += count;
}
@Override
public int compareTo(Employee o) {
return Integer.compare(o.prodCount, prodCount);
}
}
```
主程序:
```
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, Employee> employees = new HashMap<>();
while (true) {
System.out.print("请输入职工工号和完成的产品数量(以空格分隔):");
String line = scanner.nextLine();
if (line.equals("exit")) {
break;
}
String[] tokens = line.split(" ");
String empId = tokens[0];
int prodCount = Integer.parseInt(tokens[1]);
Employee employee = employees.get(empId);
if (employee == null) {
employee = new Employee(empId, prodCount);
employees.put(empId, employee);
} else {
employee.addProdCount(prodCount);
}
}
List<Employee> employeeList = new ArrayList<>(employees.values());
Collections.sort(employeeList);
int rank = 1;
int count = 1;
int lastProdCount = employeeList.get(0).getProdCount();
System.out.printf("%d %d %s\n", rank, count, employeeList.get(0).getEmpId());
for (int i = 1; i < employeeList.size(); i++) {
Employee employee = employeeList.get(i);
if (employee.getProdCount() == lastProdCount) {
count++;
} else {
rank += count;
count = 1;
lastProdCount = employee.getProdCount();
}
System.out.printf("%d %d %s\n", rank, count, employee.getEmpId());
}
}
}
```
帮我写一个Java程序,编写有一个程序,该程序输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计。程序按完成数量对他们排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。
好的,这是一个很好的Java编程问题。以下是一个示例代码,可以实现您所描述的功能:
```java
import java.util.*;
public class WorkerRanking {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Map<String, Integer> workerMap = new HashMap<>();
System.out.print("请输入职工工号和完成的产品数量:");
while(input.hasNext()) {
String workerID = input.next();
if(workerID.equals("quit")) {
break;
}
int productCount = input.nextInt();
workerMap.put(workerID, workerMap.getOrDefault(workerID, 0) + productCount);
System.out.print("请输入职工工号和完成的产品数量:");
}
List<Map.Entry<String, Integer>> workerList = new ArrayList<>(workerMap.entrySet());
Collections.sort(workerList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2) {
return entry2.getValue().compareTo(entry1.getValue());
}
});
int rank = 0;
int lastScore = -1;
for(Map.Entry<String, Integer> workerEntry : workerList) {
if(workerEntry.getValue() != lastScore) {
rank++;
}
lastScore = workerEntry.getValue();
System.out.println("第" + rank + "名:" + workerEntry.getKey() + " 完成数量:" + workerEntry.getValue());
}
}
}
```
上述代码使用了Map来存储每个职工的工号和完成的产品数量,并对其进行累计。接着使用List和Comparator对其进行排序,最后按完成数量输出名次和职工信息。
希望这可以帮到您,如果有任何问题,欢迎随时问我。