7-6 学生列表2 (25 分)
编写学生类,包含学号no、姓名name、成绩score,提供必要的构造函数、toString函数和equals/hashcode函数,其中,toString函数的格式为“no:xxx name:xxx score:xxx”,no参与equals和hashcode的计算 在main函数中构造一个容器存放学生对象 从命令行输入多个学生对象,存入容器中 从命令行中读入在容器上的操作,具体操作包含:
add 添加一个学生(包含学号和学生姓名)
delete 删除一个学生(包含学号)
set 修改一个学生信息(只修改某学号学生的成绩)
完成操作后按学生的学号从小到大的顺序输出容器中的学生
输入格式:
学生个数 学生对象数据 操作数 操作内容
输出格式:
列表顺序输出集合中的学生
输入样例:
在这里给出一组输入。例如:
4
1 wong 90
2 liu 80
3 chen 70
4 fang 60
3
add 5 duan 80
delete 3
set 4 70
输出样例:
在这里给出相应的输出。例如:
no:1 name:wong score:90
no:2 name:liu score:80
no:4 name:fang score:70
no:5 name:duan score:80
代码
import java.util.*;
class Student implements Comparable {
public int no;
public String name;
public int score;
public Student(int no, String name, int score) {
this.no = no;
this.name = name;
this.score = score;
}
public Student(int no) {
this.no=no;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "no:" + this.no + " name:" + this.name + " score:" + this.score;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return no == student.no && score == student.score && Objects.equals(name, student.name);
}
public int compareTo(Object o) {
Student s = (Student) o;
return this.no - s.no;
}
@Override
public int hashCode() {
return Objects.hash(no, name, score);
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
TreeSet ts = new TreeSet();
for(int i=0;i<num;i++){
ts.add(new Student(scanner.nextInt(),scanner.next(),scanner.nextInt()));
}
int n = scanner.nextInt();
for (int i=0;i<n;i++){
String str =scanner.next();
switch (str){
case "add":
ts.add(new Student(scanner.nextInt(),scanner.next(),scanner.nextInt()));
break;
case "delete":
ts.remove(new Student(scanner.nextInt()));
break;
case "set":
int no = scanner.nextInt();
Iterator iterator = ts.iterator();
while ((iterator.hasNext())){
Student s= (Student) iterator.next();
if(s.no==no){
s.setScore(scanner.nextInt());
}
}
}
}
for(Object o :ts){
System.out.println(o);
}
}
}