4-4通过ID查询,输入主学生列表报错
package com.imooc.schoolmanager;
import java.util.ArrayList;
import java.util.List;
public class Banji {
// Student student;
private String classId;// 班级编号
private String className;// 班级名称
private List<Student> stuList;// 学生的集合
//班级无参构造方法
public Banji() {
}
// 构造函数
public Banji(String className) {
super();
this.className = className;
stuList = new ArrayList<Student>();
}
/**
* 添加学生至班级中
*
* @param student
*/
public void addStudentList(Student stu) {
// 要排除重复添加的情况
boolean flag = false;// 判断班级中是否已经存在
for (Student student1 : stuList) {
if (student1.equals(stu)) {
flag = true;
break;
}
}
if (flag) {
System.out.println("该同学已经添加,请勿重复添加!");
} else {
stuList.add(stu);
}
}
/**
* 通过学号查询学生信息
*/
public Student searchStudentByNum(String stuNum) {
Student student = null;
// 学号是唯一的
for (Student stu1 : stuList) {
if (stu1.getStuNum().equals(stuNum)) {
student = stu1;
break;// 找到后跳出循环
}
}
return student;
}
/**
* 插入学生语文成绩
*
* @param stuNum 学号
* @param score 语文成绩
*/
public void insertChineseScore(String stuNum, float score) {
Student student = searchStudentByNum(stuNum);
if (student == null) {
System.out.println("没有找到学号为" + stuNum + "对应的学生");
} else {
student.setChinese(score);
System.out.println("语文成绩修改成功!");
}
}
/**
* 插入学生数学成绩
*
* @param stuNum 学号
* @param score 数学成绩
*/
public void insertMathScore(String stuNum, float score) {
Student student = searchStudentByNum(stuNum);
if (student == null) {
System.out.println("没有找到学号为" + stuNum + "对应的学生");
} else {
student.setMath(score);
System.out.println("数学成绩修改成功!");
}
}
/**
* 根据学号删除学生信息
*
* @param stuNum 学生学号
*/
public void deleteStudent(String stuNum) {
Student student = searchStudentByNum(stuNum);
if (student != null) {
stuList.remove(student);
} else {
System.out.println("没有找到学号为" + stuNum + "对应的学生");
}
}
/**
* 显示所有的学生信息
*/
public void dispalyAllStudent() {
System.out.println(this.getClassName() + "所有的学生为:");
for (Student student : stuList) {
System.out.println(student);
}
}
// 属性的get、set方法
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public List<Student> getStuList() {
return stuList;
}
public void setStuList(List<Student> stuList) {
this.stuList = stuList;
}
}
package com.imooc.schoolmanager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class School{
Map<String,Banji> banjiMap;//存放班级的集合
/**
* 无参构造方法
*/
public School() {
banjiMap=new HashMap<String,Banji>();
}
/**
* 向学校中添加班级
* @param banji 班级
*/
public void addBanji(Banji banji) {
//班级名称作为key值
banjiMap.put(banji.getClassName(), banji);
}
/**
* 把学校中的班级删除
* @param banji
*/
public void deleteBanji(Banji banji) {
banjiMap.remove(banji.getClassName());
System.out.println(banji.getClassName()+"删除成功");
}
/**
* 通过班级名称查询班级信息
* @param className 班级名称
* @return 班级信息
*/
public Banji searchByName(String className) {
Banji banji=null;
Set<String> banjiSet=banjiMap.keySet();
for(String s:banjiSet) {
if(s.equals(className)) {
banji=banjiMap.get(s);break;
}
}
return banji;
}
/**
* 对各班语文成绩按平均分由大到小排序
*/
public void sortChineseByAverage() {
Map<String,Float> scoreMap=new HashMap<>();
Set<String> scoreList=banjiMap.keySet();//获取班级名称列表
Banji banji=null;
/*
*
*/
for(String s:scoreList) {
banji=this.searchByName(s);
if(banji==null) {
System.out.println("未找到班级");break;
}else {
float sum=0.0f;
int i=0;
List<Student> listStudent=banji.getStuList();//获取每个班级的学生列表
//用迭代器遍历学生集合:
Iterator<Student> it=listStudent.iterator();
if(it.hasNext()) {
i++;
sum+=it.next().getChinese();
}
float ave=sum/i;
scoreMap.put(s, ave);//以班级名为key,平均分为value,存入map集合
}
}
//将scoreMap中的每个键值对存入List集合
List<Map.Entry<String, Float>> lm=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());
Collections.sort(lm,new Comparator<Map.Entry<String,Float>>(){
@Override
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String, Float> mes:lm) {
System.out.println("排序后的数据为");
System.out.println(mes.getKey()+"的语文平均分为"+mes.getValue());
}
}
/**
* 对各班的数学成绩由大到小排列
*/
public void sortMathAverge() {
Map<String,Float> scoreMap=new HashMap<>();
Set<String> scoreList=banjiMap.keySet();//获取班级名称列表
Banji banji=null;
/*
*
*/
for(String s:scoreList) {
banji=this.searchByName(s);
if(banji==null) {
System.out.println("未找到班级");break;
}else {
float sum=0.0f;
int i=0;
List<Student> listStudent=banji.getStuList();//获取每个班级的学生列表
//用迭代器遍历学生集合:
Iterator<Student> it=listStudent.iterator();
if(it.hasNext()) {
i++;
sum+=it.next().getMath();
}
float ave=sum/i;
scoreMap.put(s, ave);//以班级名为key,平均分为value,存入map集合
}
}
//将scoreMap中的每个键值对存入List集合
List<Map.Entry<String, Float>> lm=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());
Collections.sort(lm,new Comparator<Map.Entry<String,Float>>(){
@Override
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String, Float> mes:lm) {
System.out.println("排序后的数据为");
System.out.println(mes.getKey()+"的语文平均分为"+mes.getValue());
}
}
/**
* 显示所有班级的名称
*/
public void displayBanjiName() {
Set<String> banjiSet=banjiMap.keySet();
System.out.println("班级的名称为");
for(String s:banjiSet) {
System.out.println(s);
}
}
//get、set、方法
public Map<String, Banji> getSchoolMap() {
return banjiMap;
}
public void setSchoolMap(Map<String, Banji> schoolMap) {
this.banjiMap = schoolMap;
}
}
package com.imooc.schoolmanager;
public class Student {
private String stuNum;// 学号
private String stuName;// 学生姓名
private float math;// 数学成绩
private float chinese;// 语文成绩
// 无参构造方法
public Student() {
}
/**
* 构造带参数方法
*
* @param stuNum 学号
* @param stuName 学生姓名
*/
public Student(String stuNum, String stuName) {
super();
this.stuNum = stuNum;
this.stuName = stuName;
}
/**
* 构造带参数方法
*
* @param stuNum 学号
* @param stuName 学生姓名
* @param math 数学成绩
* @param chinese 语文成绩
*/
public Student(String stuNum, String stuName, float math, float chinese) {
super();
this.stuNum = stuNum;
this.stuName = stuName;
this.math = math;
this.chinese = chinese;
}
// 参数属性的get、set方法
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public float getMath() {
return math;
}
public void setMath(float math) {
this.math = math;
}
public float getChinese() {
return chinese;
}
public void setChinese(float chinese) {
this.chinese = chinese;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Float.floatToIntBits(chinese);
result = prime * result + Float.floatToIntBits(math);
result = prime * result + ((stuName == null) ? 0 : stuName.hashCode());
result = prime * result + ((stuNum == null) ? 0 : stuNum.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// 判断对象是否相等,相等则直接返回true
if (this == obj) {
return true;
}
// 对象不相等,判断属性是否相等,相等则直接返回true,否则返回false
if (obj.getClass() == Student.class) {
Student student = (Student) obj;
return (student.getChinese() == chinese && student.getMath() == math && student.getStuName().equals(stuName)
&& student.getStuNum().equals(stuNum));
}
return false;
}
@Override
public String toString() {
return "学生信息: [学号:" + stuNum + ", 姓名:" + stuName + ",数学成绩" + math + ", 语文成绩" + chinese + "]";
}
}
package com.imooc.schoolmanager;
import java.util.Scanner;
public class TestDemo {
/**
* 学生类测试方法
*/
public void testStudent() {
// 定义学生对象
Student stu1 = new Student("001", "张三", 45, 56);
Student stu2 = new Student("002", "李四", 67, 59);
Student stu3 = new Student("003", "王五", 45, 56);
Student stu4 = new Student("003", "王五", 45, 56);
// 输出学生信息
System.out.println(stu1);
System.out.println(stu2);
System.out.println(stu3);
System.out.println(stu4);
// 判断对象是否相等
System.out.println("stu1==stu2?" + stu1.equals(stu2));
System.out.println("stu3==stu4?" + stu3.equals(stu4));
System.out.println(stu3 == stu4);
}
/**
* 班级类的测试方法
*/
public void testBanji() {
// 定义学生对象
Student stu1 = new Student("001", "张三");
Student stu2 = new Student("002", "李四");
Student stu3 = new Student("003", "王五", 45, 56);
Student stu4 = new Student("003", "王五", 45, 56);
// 创建一个班级
Banji bj = new Banji("一年级");
bj.addStudentList(stu1);
bj.addStudentList(stu2);
bj.addStudentList(stu3);
bj.addStudentList(stu4);
bj.dispalyAllStudent();
System.out.println("*************************");
// 通过学号查询学生
Student student = bj.searchStudentByNum("005");
if (student != null) {
System.out.println("根据学号查询的学生信息");
System.out.println(student);
} else {
System.out.println("没有该学号的学生");
}
System.out.println("*************************");
// 输入班级学生的语文、数学成绩
bj.insertChineseScore("001", 100);
bj.insertMathScore("002", 99);
System.out.println("修改成绩后的学生信息");
bj.dispalyAllStudent();
System.out.println("*************************");
// 删除学生信息
System.out.println("删除学生后的学生信息");
bj.deleteStudent("003");
bj.dispalyAllStudent();
}
// 测试学校类
public void testSchool() {
// 创建学生
Student stu1 = new Student("001", "张三");
Student stu2 = new Student("002", "李四");
Student stu3 = new Student("003", "王五", 45, 56);
// 创建班级并添加学生
Banji bj1 = new Banji("一年级");
bj1.addStudentList(stu1);
bj1.addStudentList(stu2);
Banji bj2 = new Banji("二年级");
bj2.addStudentList(stu3);
Banji bj3 = new Banji("二年级");
bj3.addStudentList(stu3);
// 创建学校并添加班级
School sc = new School();
sc.addBanji(bj1);
sc.addBanji(bj2);
sc.addBanji(bj3);
System.out.println("所有班级为");
sc.displayBanjiName();
// 删除班级3
System.out.println("删除班级3");
sc.deleteBanji(bj3);
sc.displayBanjiName();
// 对成绩进行排序
sc.sortChineseByAverage();
sc.sortMathAverge();
// 通过班级名称查询输出学生信息
System.out.println("通过班级名称查询输出所有学生信息");
Banji bjtest = sc.searchByName("一年级");
bjtest.dispalyAllStudent();
}
// 主菜单
public void mainMenu() {
System.out.println("****************");
System.out.println("*主菜单*");
System.out.println("1--班级管理");
System.out.println("2--学校管理");
System.out.println("0--退出");
System.out.println("****************");
}
// 学校管理菜单
public void schoolMenu() {
System.out.println("****************");
System.out.println("1--创建班级");
System.out.println("2--删除班级");
System.out.println("3--通过班级名称查询班级信息");
System.out.println("4--对各班语文成绩按平均分由大到小排序");
System.out.println("5--对各班数学成绩按平均分由大到小排序");
System.out.println("6--显示所有班级的名称");
System.out.println("9--返回上一级菜单");
System.out.println("****************");
}
// 班级管理菜单
public void banjiMenu() {
System.out.println("****************");
System.out.println("1--添加学生信息到主学生列表");
System.out.println("2--添加学生信息到普通班级");
System.out.println("3--通过学号查询学生信息");
System.out.println("4--输入班级的语文成绩");
System.out.println("5--输入班级的数学成绩");
System.out.println("6--删除学生信息");
System.out.println("7--显示所有学生信息");
System.out.println("9--返回上一级菜单");
System.out.println("****************");
}
// 主流程
public void test() {
TestDemo td = new TestDemo();
Scanner sc = new Scanner(System.in);
int input = 0, input1 = 0, input2 = 0;
// 创建一个学校对象
School sch = new School() {
};
// 创建主学生列表
Banji mainList = new Banji("主学生列表");
sch.addBanji(mainList);
// 创建班级列表
Banji banjiList = null;
while (true) {
td.mainMenu();
System.out.println("请输入数据进行操作:");
input = sc.nextInt();
if (input == 0) {
break;
}
/*
* 主菜单管理
*/
switch (input) {
// 选择班级管理菜单
case 1:
while (true) {
td.banjiMenu();
System.out.println("请输入数字对班级进行管理");
input2 = sc.nextInt();
if (input2 == 9) {
break;
}
switch (input2) {
case 1:
System.out.println("1--添加学生信息到主学生列表");
System.out.println("请输入要添加的学生数量");
int count = sc.nextInt();
for (int i = 1; i <= count; i++) {
System.out.println("请输入第" + i + "个学生的信息");
System.out.println("请输入学生学号");
String stuNum = sc.next();
System.out.println("请输入学生姓名");
String stuName = sc.next();
System.out.println("请输入学生数学成绩");
Float math = sc.nextFloat();
System.out.println("请输入学生语文成绩");
Float chinese = sc.nextFloat();
// 创建学生对象
Student stu = new Student(stuNum, stuName, math, chinese);
mainList.addStudentList(stu);
}
mainList.dispalyAllStudent();
break;
case 2:
System.out.println("2--添加学生信息到普通班级");
System.out.println("请输入要添加的班级名称");
String bjName = sc.next();// 输入的班级名称
/*
* 判断新输入的班级名称是否存在,若存在则直接添加,不存在就输出提示信息
*/
banjiList = sch.searchByName(bjName);
if (banjiList == null) {
System.out.println("该班级不存在,请在学校管理菜单中先将班级添加到学校中");
} else {
System.out.println("请输入要添加的学生的数量");
int count1 = sc.nextInt();
for (int i = 1; i <= count1; i++) {
System.out.println("请输入第" + i + "个学生的信息");
System.out.println("请输入学生的学号");
// 输入学生的名字,并判断学生是否已经存在主学生列表中
String stuNum = sc.next();
Student student = mainList.searchStudentByNum(stuNum);
if (student == null) {
// 如果学生不存在,则创建新的添加
System.out.println("该学生在主学生列表中不存在,继续输入其他学生信息");
System.out.println("请输入学生的姓名");
String stuName = sc.next();
System.out.println("请输入学生数学成绩");
Float math = sc.nextFloat();
System.out.println("请输入学生语文成绩");
Float chinese = sc.nextFloat();
student = new Student(stuNum, stuName, math, chinese);
mainList.addStudentList(student);
banjiList.addStudentList(student);
} else {
// 如果学生存在与主学生列表中,则直接添加
banjiList.addStudentList(student);
System.out.println(stuNum + "号学生已在主学生列表中,已添加至" + bjName);
}
}
// 显示主学生列表信息及班级学生列表信息
mainList.dispalyAllStudent();
banjiList.dispalyAllStudent();
}
break;
case 3:
System.out.println("3--通过学号查询学生信息");
System.out.println("请输入要查询的班级的名字");
String bjName1=sc.next();
Banji bj1=sch.searchByName(bjName1);
if(bj1==null) {
System.out.println("该班级不存在");break;
}else {
System.out.println("请输入要查询的学号");
String stuNum1=sc.next();
Student stu1=bj1.searchStudentByNum(stuNum1);
if(stu1==null) {
System.out.println(bjName1+"没有"+stuNum1+"号学生");
}else {
System.out.println(stuNum1+"号学生的信息为:");
System.out.println(stu1);
}
}
break;
case 4:
System.out.println("4--输入班级的语文成绩");
break;
case 5:
System.out.println("5--输入班级的数学成绩");
break;
case 6:
System.out.println("6--删除学生信息");
break;
case 7:
System.out.println("7--显示所有学生信息");
break;
default:
System.out.println("该数字没有对应的操作");
break;
}
}
break;
// 选择学校管理菜单
case 2:
while (true) {
td.schoolMenu();
System.out.println("请输入数字对学校进行管理");
input1 = sc.nextInt();
if (input1 == 9) {
break;
}
switch (input1) {
case 1:
System.out.println("1--创建班级");
System.out.println("请输入要创建的班级名称");
String banjiName = sc.next();
banjiList = new Banji(banjiName);
// 将班级添加到学校中
sch.addBanji(banjiList);
;
break;
case 2:
System.out.println("2--删除班级");
break;
case 3:
System.out.println("3--通过班级名称查询班级信息");
break;
case 4:
System.out.println("4--对各班语文成绩按平均分由大到小排序");
break;
case 5:
System.out.println("5--对各班数学成绩按平均分由大到小排序");
break;
case 6:
System.out.println("6--显示所有班级的名称");
break;
default:
System.out.println("该数字没有对应的操作");
break;
}
}
break;
}
}
}
public static void main(String[] args) {
TestDemo td = new TestDemo();
// td.testStudent();
// td.testBanji();
// td.testSchool();
td.test();
}
}
运行后报错,
****************
*主菜单*
1--班级管理
2--学校管理
0--退出
****************
请输入数据进行操作:
1
****************
1--添加学生信息到主学生列表
2--添加学生信息到普通班级
3--通过学号查询学生信息
4--输入班级的语文成绩
5--输入班级的数学成绩
6--删除学生信息
7--显示所有学生信息
9--返回上一级菜单
****************
请输入数字对班级进行管理
1
1--添加学生信息到主学生列表
请输入要添加的学生数量
2
请输入第1个学生的信息
请输入学生学号
1
请输入学生姓名
测试1
请输入学生数学成绩
45
请输入学生语文成绩
34
请输入第2个学生的信息
请输入学生学号
2
请输入学生姓名
测试2
请输入学生数学成绩
56
请输入学生语文成绩
67
主学生列表所有的学生为:
学生信息: [学号:1, 姓名:测试1,数学成绩45.0, 语文成绩34.0]
学生信息: [学号:2, 姓名:测试2,数学成绩56.0, 语文成绩67.0]
****************
1--添加学生信息到主学生列表
2--添加学生信息到普通班级
3--通过学号查询学生信息
4--输入班级的语文成绩
5--输入班级的数学成绩
6--删除学生信息
7--显示所有学生信息
9--返回上一级菜单
****************
请输入数字对班级进行管理
3
3--通过学号查询学生信息
请输入要查询的班级的名字
主学生列表
该班级不存在
****************
1--添加学生信息到主学生列表
2--添加学生信息到普通班级
3--通过学号查询学生信息
4--输入班级的语文成绩
5--输入班级的数学成绩
6--删除学生信息
7--显示所有学生信息
9--返回上一级菜单
****************
请输入数字对班级进行管理
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at com.imooc.schoolmanager.TestDemo.test(TestDemo.java:184)
at com.imooc.schoolmanager.TestDemo.main(TestDemo.java:397)
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星