程序编译不报错,运行不报错,就是不执行某个地方
这是测试类
public class TestDemo {
Scanner stdIn=new Scanner(System.in);
School school=new School();
//方法一:主菜单
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 banjiMenu(){
System.out.println("********************************************");
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 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 testBanji(){
TestDemo td=new TestDemo();
Banji banji=new Banji("b001","主学生列表"); //主学生列表作为一个特殊的班级存在
school.addBanji(banji);
Outer:
while(true){
td.banjiMenu();
System.out.println("请输入对应的数字对班级进行管理:");
Inner:
while(true){
int w=stdIn.nextInt();
if(w==9){
td.test();
break Outer;
}
switch(w){
case 1:System.out.println("添加学生信息到主学生列表");
System.out.println("请输入要添加的学生的数量:");
int e=stdIn.nextInt();
for(int i=1;i<=e;i++){
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入学号:");
String id=stdIn.next();
System.out.println("请输入学生姓名:");
String name=stdIn.next();
Student stu=new Student(id,name);
banji.addStudent(stu);
}
System.out.println("主学生列表的学生信息如下:");
banji.displayAllStudent();
break Inner;
case 2:System.out.println("添加学生信息到普通班级");
System.out.println("请输入要将学生添加到的班级名称:");
String banjiName=stdIn.next();
Banji banji2=school.searchByName(banjiName);
if(banji2==null){
System.out.println("亲,该班级不存在哟,赶快去添加吧。");break Inner;
}else{
System.out.println("请输入要添加的学生的数量:");
int y=stdIn.nextInt();
for(int i=1;i<=y;i++){
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入学号:");
String id=stdIn.next();
//通过学生ID查询主学生列表中是否存在该ID的学生
Student stu2=banji.searchStudentByNum(id);
if(stu2==null){
System.out.println("该学生在主学生列表中不存在,请继续添加学生的其他信息:");
System.out.println("请输入学生姓名:");
String name=stdIn.next();
Student stu21=new Student(id,name);
banji.addStudent(stu21);
banji2.addStudent(stu21);
System.out.println("添加完成。");
}else{
banji2.addStudent(stu2);
System.out.println("添加完成。");
}
}
}
break Inner;
case 3:System.out.println("通过学号查询学生信息"); break Inner;
case 4:System.out.println("输入班级的语文成绩"); break Inner;
case 5:System.out.println("输入班级的数学成绩"); break Inner;
case 6:System.out.println("删除学生信息"); break Inner;
case 7:System.out.println("显示所有学生信息"); break Inner;
default:System.out.println("您的输入超出范围,请重新输入:"); continue Inner;
}
}
}
}
//方法五:学校的测试方法
public void testSchool(){
TestDemo td=new TestDemo();
int t=0;
Outer:
while(true){
td.schoolMenu();
System.out.println("请输入对应的数字对学校进行管理:");
Inner:
while(true){
t=stdIn.nextInt();
if(t==9){
td.test();
break Outer;
}
switch(t){
case 1:System.out.println("创建班级");
System.out.println("请输入要创建的班级id:");
String banjiId=stdIn.next();
System.out.println("请输入要创建的班级名称:");
String banjiName=stdIn.next();
Banji banji1=new Banji(banjiId,banjiName);
school.addBanji(banji1);
break Inner;
case 2:System.out.println("删除班级"); break Inner;
case 3:System.out.println("通过班级名称查询班级信息"); break Inner;
case 4:System.out.println("对各班语文成绩按平均分进行由大到小排序"); break Inner;
case 5:System.out.println("对各班数学成绩按平均分进行由大到小排序"); break Inner;
case 6:System.out.println("显示所有班级名称");
school.displayBanjiName();
break Inner;
default:System.out.println("您的输入超出范围,请重新输入:"); continue Inner;
}
}
}
}
//方法六:主流程
public void test(){
TestDemo td=new TestDemo();
int q=0;
Outer:
while(true){
td.mainMenu();
System.out.println("请输入对应数字进行操作:");
Inner:
while(true){
q=stdIn.nextInt();
if(q==0){
break Outer;
}
switch(q){
case 1:td.testBanji();break Outer;
case 2:td.testSchool();break Outer;
default:System.out.println("您的输入超出范围,请重新输入:");continue Inner;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestDemo td=new TestDemo();
td.test();
}
}
这是学校类
public class School {
private Map<String,Banji> schoolMap; //存放班级的集合 班级名称作为key值,班级信息作为value值
//构造方法
public School(){
schoolMap=new HashMap<String,Banji>();
}
//封装
public Map<String, Banji> getSchoolMap() {
return schoolMap;
}
public void setSchoolMap(Map<String, Banji> schoolMap) {
this.schoolMap = schoolMap;
}
/**
* 方法一:添加班级
* @param banji 要添加的班级
*/
public void addBanji(Banji banji){
//班级名称作为key值
schoolMap.put(banji.getClassName(), banji);
}
/**
* 方法二:删除班级
* @param banji 要删除的班级
*/
public void deleteBanji(Banji banji){
schoolMap.remove(banji.getClassName());
System.out.println("删除成功。");
}
/**
* 方法三:通过班级名称查询班级
* @param className 要查询的班级的名称
* @return 被查询的班级信息
*/
public Banji searchByName(String className){
Banji banji=null;
System.out.println("----1313");
Set<String> banjiSet=schoolMap.keySet();
for(String banji3:banjiSet){
System.out.println("----1414");
if(banji3.equals(className)){
System.out.println("----1515");
banji=schoolMap.get(banji3);
break;
}
}
return banji;
}
/**
* 方法四:对各班语文成绩按平均分进行由大到小排序
*/
public void sortChineseByAverage(){
//使用Map集合存放班级语文成绩平均分,班级名称作为key值,平均分作为value值
Map<String,Float> banjiMap=new HashMap<String,Float>();
Banji banji=null;
Set<String> banjiName=schoolMap.keySet(); //获取班级名称的集合
for(String s:banjiName){ //使用增强型for循环遍历班级名称集合
banji=this.searchByName(s); //确认班级是否存在
if(banji==null){
System.out.println("该班级不存在。");break;
}else{
float chinese1=0.0f;
int m=0;
//System.out.println(s+"的平均分:"); //某班
List<Student> ls=banji.getStuList(); //获取班级类中存放学生的集合
Iterator <Student> stu=ls.iterator(); //使用迭代器循环遍历学生
while(stu.hasNext()){ //使用while循环遍历学生的语文成绩
chinese1+=stu.next().getChinese();
m++;
}
chinese1=chinese1/m;
banjiMap.put(s, chinese1);
}
}
List<Map.Entry<String,Float>> lm=new ArrayList<Map.Entry<String,Float>>(banjiMap.entrySet());
Collections.sort(lm, new Comparator<Map.Entry<String,Float>>(){
//降序排序
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(mes.getKey()+"的平均分:"+mes.getValue());
}
}
/**
* 方法六:显示所有班级名称
*/
public void displayBanjiName(){
Set<String> banjiName=schoolMap.keySet();
for(String s:banjiName){
System.out.println(s);
}
}
}
班级类
public class Banji {
//班级编号 班级名称 存放学生的集合
private String classId;
private String className;
private List<Student> stuList;
//带参构造方法
public Banji(String classId,String className){
this.setClassId(classId);
this.setClassName(className);
stuList=new ArrayList<Student>();
}
/*public Banji(String className){
this.setClassName(className);
stuList=new ArrayList<Student>();
}*/
//封装
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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((classId == null) ? 0 : classId.hashCode());
result = prime * result + ((className == null) ? 0 : className.hashCode());
result = prime * result + ((stuList == null) ? 0 : stuList.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj.getClass()==Banji.class){
Banji banji=(Banji)obj;
return banji.getClassName().equals(className);
}
return false;
}
/**
* 方法一:将学生添加到班级
* @param stu 要添加的学生
*/
public void addStudent(Student stu){
boolean flag=false;
for(Student stu1:stuList){
if(stu1.equals(stu)){
flag=true;
break;
}
}
if(flag){
System.out.println("该学生已经存在,请不要重复添加。");
}else{
stuList.add(stu);
}
}
/**
* 方法二:通过学号查询学生在班级中是否存在
* @param stuNum 要查询的学生的学号
* @return 学生的信息
*/
public Student searchStudentByNum(String stuNum){
Student stu=null;
for(Student stu2:stuList){
if(stu2.getId().equals(stuNum)){ //判断该学生是否存在
stu=stu2;
break;
}
}
return stu;
}
/**
* 方法三:输入班级学生的语文成绩
* @param stuNum 要输入语文成绩的学生的学号
* @param score 要输入的语文成绩
*/
public void insertChineseScore(String stuNum,float score){
for(Student stu3:stuList){
if(stu3.getId().equals(stuNum)){
stu3.setChinese(score);
break;
}else{
System.out.println("亲,没有该学生的信息哟。");break;
}
}
}
/**
* 方法四:输入班级学生的数学成绩
* @param stuNum 要输入数学成绩的学生的学号
* @param score 要输入的数学成绩
*/
public void insertMath(String stuNum,float score){
for(Student stu4:stuList){
if(stu4.getId().equals(stuNum)){
stu4.setMath(score);
break;
}else{
System.out.println("亲,没有该学生的信息哟。");break;
}
}
}
/**
* 方法五:删除学生信息
* @param stuNum 要删除的学生的学号
*/
public void deleteStudent(String stuNum){
for(Student stu5:stuList){
if(stu5.getId().equals(stuNum)){
stuList.remove(stu5);
break;
}else{
System.out.println("亲,没有该学生的信息哟。");
break;
}
}
}
/**
* 方法六:显示所有学生的信息
*/
public void displayAllStudent(){
for(Student stu6:stuList){
System.out.println(stu6);
}
}
}
学生类
public class Student {
// 属性:学号,姓名,数学成绩,语文成绩
private String id;
private String name;
private float math;
private float chinese;
// 无参构造方法
public Student() {
}
// 带参构造方法
public Student(String id, String name) {
this.setId(id);
this.setName(name);
}
public Student(float math,float chinese){
this.setMath(math);
this.setChinese(chinese);
}
public Student(float chinese){
this.setMath(chinese);
}
// 封装
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
}
// 重写HashCode方法
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Float.floatToIntBits(chinese);
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + Float.floatToIntBits(math);
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
// 重写equals方法
@Override
public boolean equals(Object obj) {
// 先判断对象是否相等,相等则返回true
if (this == obj) {
return true;
}
// 判断是否是同一个类
if (obj.getClass() == Student.class) {
Student student = (Student) obj; // 强制类型转换
return student.getId().equals(id) & student.getName().equals(name);
}
return false;
}
//重写toString方法
@Override
public String toString() {
return "学生信息[学号:" + id + ", 姓名:" + name + "]";
}
}
2
收起
正在回答
7回答
同学你好,这两个问题是由于普通班级与主学生列表的班级共用了一个对象,修改代码如下图所示:

建议同学作业不要在问答区问,直接上传作业,老师会有一个详细的批复文档,帮助同学更高效的解决问题。老师如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
士林健津_007
2019-04-02 18:14:29
测试类:
public class TestDemo {
Scanner stdIn=new Scanner(System.in);
//方法一:主菜单
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 banjiMenu(){
System.out.println("********************************************");
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 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 testBanji(Banji banji,Student student,School school){
TestDemo td=new TestDemo();
Outer:
while(true){
td.banjiMenu();
System.out.println("请输入对应的数字对班级进行管理:");
Inner:
while(true){
int w=stdIn.nextInt();
if(w==9){
td.test(banji,student,school,td);
break Outer;
}
switch(w){
case 1:System.out.println("添加学生信息到主学生列表");
System.out.println("请输入要添加的学生的数量:");
int e=stdIn.nextInt();
for(int i=1;i<=e;i++){
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入学号:");
String id=stdIn.next();
System.out.println("请输入学生姓名:");
String name=stdIn.next();
Student stu=new Student(id,name);
banji.addStudent(stu);
}
System.out.println("主学生列表的学生信息如下:");
banji.displayAllStudent();
break Inner;
case 2:System.out.println("添加学生信息到普通班级");
System.out.println("从主学生列表获取学生分配班级");
System.out.println("请输入要将学生分配到的班级名称:");
String banjiName=stdIn.next();
Banji banji2=school.searchByName(banjiName);
if(banji2==null){
System.out.println("亲,该班级不存在哟,赶快去添加吧。");break Inner;
}else{
System.out.println("请输入要添加的学生的数量:");
int y=stdIn.nextInt();
for(int i=1;i<=y;i++){
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入学号:");
String id=stdIn.next();
//通过学生ID查询主学生列表中是否存在该ID的学生
Student stu2=banji.searchStudentByNum(id);
if(stu2==null){
System.out.println("该学生在主学生列表中不存在,赶快去添加吧。");break Inner;
}else{
banji2.addStudent(stu2);
System.out.println("添加完成。");
}
}
}
break Inner;
case 3:System.out.println("通过学号查询学生信息");
System.out.println("请输入要查询的学生所在的班级名称:");
String str3=stdIn.next();
Banji banji3=school.searchByName(str3);
if(banji3==null){
System.out.println("亲,该班级不存在哟。");break Inner;
}else{
System.out.println("请输入要查询的学生的学号:");
String str31=stdIn.next();
Student stu3=banji3.searchStudentByNum(str31);
if(stu3==null){
System.out.println("亲,该学生不存在哟。");break Inner;
}else{
banji3.deleteStudent(str31);
}
}
break Inner;
case 4:System.out.println("输入班级的语文成绩"); break Inner;
case 5:System.out.println("输入班级的数学成绩"); break Inner;
case 6:System.out.println("删除学生信息"); break Inner;
case 7:System.out.println("显示所有学生信息"); break Inner;
default:System.out.println("您的输入超出范围,请重新输入:"); continue Inner;
}
}
}
}
//方法五:学校的测试方法
public void testSchool(Banji banji,Student student,School school){
TestDemo td=new TestDemo();
int t=0;
Outer:
while(true){
td.schoolMenu();
System.out.println("请输入对应的数字对学校进行管理:");
Inner:
while(true){
t=stdIn.nextInt();
if(t==9){
td.test(banji,student,school,td);
break Outer;
}
switch(t){
case 1:System.out.println("创建班级");
System.out.println("请输入要创建的班级id:");
String banjiId=stdIn.next();
System.out.println("请输入要创建的班级名称:");
String banjiName=stdIn.next();
banji=new Banji(banjiId,banjiName);
school.addBanji(banji);
break Inner;
case 2:System.out.println("删除班级");
System.out.println("请输入要删除的班级名称:");
String str2=stdIn.next();
if(str2.equals("主学生列表")){
System.out.println("主学生列表不能删除哟。");break;
}else{
Banji banji2=school.searchByName(str2);
if(banji2==null){
System.out.println("亲,该班级不存在哟。");
}else{
school.deleteBanji(banji2);
}
}
break Inner;
case 3:System.out.println("通过班级名称查询班级信息"); break Inner;
case 4:System.out.println("对各班语文成绩按平均分进行由大到小排序"); break Inner;
case 5:System.out.println("对各班数学成绩按平均分进行由大到小排序"); break Inner;
case 6:System.out.println("显示所有班级名称");
school.displayBanjiName();
break Inner;
default:System.out.println("您的输入超出范围,请重新输入:"); continue Inner;
}
}
}
}
//方法六:主流程
public void test(Banji banji,Student student,School school,TestDemo td){
int q=0;
Outer:
while(true){
td.mainMenu();
System.out.println("请输入对应数字进行操作:");
Inner:
while(true){
q=stdIn.nextInt();
if(q==0){
break Outer;
}
switch(q){
case 1:td.testBanji(banji,student,school);break Outer;
case 2:td.testSchool(banji,student,school);break Outer;
default:System.out.println("您的输入超出范围,请重新输入:");continue Inner;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestDemo td=new TestDemo();
/**
* 主学生列表
*/
Banji banji=new Banji("b001","主学生列表");
Student student=new Student();
School school=new School();
school.addBanji(banji);
td.test(banji,student,school,td);
}
}
这是根据老师的方法修改后的代码
士林健津_007
2019-03-31 13:19:15
班级类:
public class Banji {
//班级编号 班级名称 存放学生的集合
private String classId;
private String className;
private List<Student> stuList;
private List<Student> stuList1;
//带参构造方法
public Banji(String classId,String className){
this.setClassId(classId);
this.setClassName(className);
stuList=new ArrayList<Student>();
}
//封装
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;
}
public List<Student> getStuList1() {
return stuList1;
}
public void setStuList1(List<Student> stuList1) {
this.stuList1 = stuList1;
}
/**
* 方法一:将学生添加到班级
* @param stu 要添加的学生
*/
public void addStudent(Student stu){
boolean flag=false;
for(Student stu1:stuList){
if(stu1.equals(stu)){
flag=true;
break;
}
}
if(flag){
System.out.println("该学生已经存在,请不要重复添加。");
}else{
stuList.add(stu);
}
}
/**
* 方法二:通过学号查询学生在班级中是否存在
* @param stuNum 要查询的学生的学号
* @return 学生的信息
*/
public Student searchStudentByNum(String stuNum){
Student stu=null;
for(Student stu2:stuList){
if(stu2.getId().equals(stuNum)){ //判断该学生是否存在
stu=stu2;
break;
}
}
return stu;
}
/**
* 方法三:输入班级学生的语文成绩
* @param stuNum 要输入语文成绩的学生的学号
* @param score 要输入的语文成绩
*/
public void insertChineseScore(String stuNum,float score){
for(Student stu3:stuList){
if(stu3.getId().equals(stuNum)){
stu3.setChinese(score);
break;
}else{
System.out.println("亲,没有该学生的信息哟。");break;
}
}
}
/**
* 方法四:输入班级学生的数学成绩
* @param stuNum 要输入数学成绩的学生的学号
* @param score 要输入的数学成绩
*/
public void insertMath(String stuNum,float score){
for(Student stu4:stuList){
if(stu4.getId().equals(stuNum)){
stu4.setMath(score);
break;
}else{
System.out.println("亲,没有该学生的信息哟。");break;
}
}
}
/**
* 方法五:删除学生信息
* @param stuNum 要删除的学生的学号
*/
public void deleteStudent(String stuNum){
for(Student stu5:stuList){
if(stu5.getId().equals(stuNum)){
stuList.remove(stu5);
break;
}else{
System.out.println("亲,没有该学生的信息哟。");
break;
}
}
}
/**
* 方法六:显示所有学生的信息
*/
public void displayAllStudent(){
for(Student stu6:stuList){
System.out.println(stu6);
}
}
}
学生类:
public class Student {
// 属性:学号,姓名,数学成绩,语文成绩
private String id;
private String name;
private float math;
private float chinese;
// 无参构造方法
public Student() {
}
// 带参构造方法
public Student(String id, String name) {
this.setId(id);
this.setName(name);
}
public Student(float math,float chinese){
this.setMath(math);
this.setChinese(chinese);
}
public Student(float chinese){
this.setMath(chinese);
}
// 封装
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
}
// 重写HashCode方法
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Float.floatToIntBits(chinese);
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + Float.floatToIntBits(math);
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
// 重写equals方法
@Override
public boolean equals(Object obj) {
// 先判断对象是否相等,相等则返回true
if (this == obj) {
return true;
}
// 判断是否是同一个类
if (obj.getClass() == Student.class) {
Student student = (Student) obj; // 强制类型转换
return student.getId().equals(id) & student.getName().equals(name) & student.getChinese()==(chinese) & student.getMath()==(math);
}
return false;
}
//重写toString方法
@Override
public String toString() {
return "学生信息[学号:" + id + ", 姓名:" + name + "]";
}
}
士林健津_007
2019-03-31 13:13:37
学校类
public class School {
private Map<String,Banji> schoolMap; //存放班级的集合 班级名称作为key值,班级信息作为value值
//构造方法
public School(){
schoolMap=new HashMap<String,Banji>();
}
//封装
public Map<String, Banji> getSchoolMap() {
return schoolMap;
}
public void setSchoolMap(Map<String, Banji> schoolMap) {
this.schoolMap = schoolMap;
}
/**
* 方法一:添加班级
* @param banji 要添加的班级
*/
public void addBanji(Banji banji){
//班级名称作为key值
schoolMap.put(banji.getClassName(), banji);
}
/**
* 方法二:删除班级
* @param banji 要删除的班级
*/
public void deleteBanji(Banji banji){
schoolMap.remove(banji.getClassName());
System.out.println("删除成功。");
}
/**
* 方法三:通过班级名称查询班级
* @param className 要查询的班级的名称
* @return 被查询的班级信息
*/
public Banji searchByName(String className){
Banji banji=null;
int n=schoolMap.size();
System.out.println(n);
Set<String> banjiSet=schoolMap.keySet();
for(String banji3:banjiSet){
if(banji3.equals(className)){
banji=schoolMap.get(banji3);
break;
}
}
return banji;
}
/**
* 方法四:对各班语文成绩按平均分进行由大到小排序
*/
public void sortChineseByAverage(){
//使用Map集合存放班级语文成绩平均分,班级名称作为key值,平均分作为value值
Map<String,Float> banjiMap=new HashMap<String,Float>();
Banji banji=null;
Set<String> banjiName=schoolMap.keySet(); //获取班级名称的集合
for(String s:banjiName){ //使用增强型for循环遍历班级名称集合
banji=this.searchByName(s); //确认班级是否存在
if(banji==null){
System.out.println("该班级不存在。");break;
}else{
float chinese1=0.0f;
int m=0;
//System.out.println(s+"的平均分:"); //某班
List<Student> ls=banji.getStuList(); //获取班级类中存放学生的集合
Iterator <Student> stu=ls.iterator(); //使用迭代器循环遍历学生
while(stu.hasNext()){ //使用while循环遍历学生的语文成绩
chinese1+=stu.next().getChinese();
m++;
}
chinese1=chinese1/m;
banjiMap.put(s, chinese1);
}
}
List<Map.Entry<String,Float>> lm=new ArrayList<Map.Entry<String,Float>>(banjiMap.entrySet());
Collections.sort(lm, new Comparator<Map.Entry<String,Float>>(){
//降序排序
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(mes.getKey()+"的平均分:"+mes.getValue());
}
}
/**
* 方法六:显示所有班级名称
*/
public void displayBanjiName(){
Set<String> banjiName=schoolMap.keySet();
for(String s:banjiName){
System.out.println(s);
}
}
}
测试类:
public class TestDemo {
Scanner stdIn=new Scanner(System.in);
School school=new School();
//方法一:主菜单
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 banjiMenu(){
System.out.println("********************************************");
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 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 testBanji(Banji banji,Student student,School school){
TestDemo td=new TestDemo();
Outer:
while(true){
td.banjiMenu();
System.out.println("请输入对应的数字对班级进行管理:");
Inner:
while(true){
int w=stdIn.nextInt();
if(w==9){
td.test();
break Outer;
}
switch(w){
case 1:System.out.println("添加学生信息到主学生列表");
System.out.println("请输入要添加的学生的数量:");
int e=stdIn.nextInt();
for(int i=1;i<=e;i++){
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入学号:");
String id=stdIn.next();
System.out.println("请输入学生姓名:");
String name=stdIn.next();
Student stu=new Student(id,name);
banji.addStudent(stu);
}
System.out.println("主学生列表的学生信息如下:");
banji.displayAllStudent();
break Inner;
case 2:System.out.println("添加学生信息到普通班级");
System.out.println("从主学生列表获取学生分配班级");
System.out.println("请输入要将学生分配到的班级名称:");
String banjiName=stdIn.next();
Banji banji2=school.searchByName(banjiName);
if(banji2==null){
System.out.println("亲,该班级不存在哟,赶快去添加吧。");break Inner;
}else{
System.out.println("请输入要添加的学生的数量:");
int y=stdIn.nextInt();
for(int i=1;i<=y;i++){
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入学号:");
String id=stdIn.next();
//通过学生ID查询主学生列表中是否存在该ID的学生
Student stu2=banji.searchStudentByNum(id);
if(stu2==null){
System.out.println("该学生在主学生列表中不存在,赶快去添加吧。");break Inner;
}else{
banji2.addStudent(stu2);
System.out.println("添加完成。");
}
}
}
break Inner;
case 3:System.out.println("通过学号查询学生信息");
System.out.println("请输入要查询的学生所在的班级名称:");
String str3=stdIn.next();
Banji banji3=school.searchByName(str3);
if(banji3==null){
System.out.println("亲,该班级不存在哟。");break;
}else{
System.out.println("请输入要查询的学生的学号:");
String str31=stdIn.next();
Student stu3=banji3.searchStudentByNum(str31);
if(stu3==null){
System.out.println("亲,该学生不存在哟。");break;
}else{
banji3.deleteStudent(str31);
}
}
break Inner;
case 4:System.out.println("输入班级的语文成绩"); break Inner;
case 5:System.out.println("输入班级的数学成绩"); break Inner;
case 6:System.out.println("删除学生信息"); break Inner;
case 7:System.out.println("显示所有学生信息"); break Inner;
default:System.out.println("您的输入超出范围,请重新输入:"); continue Inner;
}
}
}
}
//方法五:学校的测试方法
public void testSchool(Banji banji,Student student,School school){
TestDemo td=new TestDemo();
int t=0;
Outer:
while(true){
td.schoolMenu();
System.out.println("请输入对应的数字对学校进行管理:");
Inner:
while(true){
t=stdIn.nextInt();
if(t==9){
td.test();
break Outer;
}
switch(t){
case 1:System.out.println("创建班级");
System.out.println("请输入要创建的班级id:");
String banjiId=stdIn.next();
System.out.println("请输入要创建的班级名称:");
String banjiName=stdIn.next();
banji=new Banji(banjiId,banjiName);
school.addBanji(banji);
break Inner;
case 2:System.out.println("删除班级");
System.out.println("请输入要删除的班级名称:");
String str2=stdIn.next();
if(str2.equals("主学生列表")){
System.out.println("主学生列表不能删除哟。");break;
}else{
Banji banji2=school.searchByName(str2);
if(banji2==null){
System.out.println("亲,该班级不存在哟。");
}else{
school.deleteBanji(banji2);
}
}
break Inner;
case 3:System.out.println("通过班级名称查询班级信息"); break Inner;
case 4:System.out.println("对各班语文成绩按平均分进行由大到小排序"); break Inner;
case 5:System.out.println("对各班数学成绩按平均分进行由大到小排序"); break Inner;
case 6:System.out.println("显示所有班级名称");
school.displayBanjiName();
break Inner;
default:System.out.println("您的输入超出范围,请重新输入:"); continue Inner;
}
}
}
}
//方法六:主流程
public void test(){
TestDemo td=new TestDemo();
Banji banji=new Banji("b001","主学生列表");
Student student=new Student();
School school=new School();
school.addBanji(banji);
int q=0;
Outer:
while(true){
td.mainMenu();
System.out.println("请输入对应数字进行操作:");
Inner:
while(true){
q=stdIn.nextInt();
if(q==0){
break Outer;
}
switch(q){
case 1:td.testBanji(banji,student,school);break Outer;
case 2:td.testSchool(banji,student,school);break Outer;
default:System.out.println("您的输入超出范围,请重新输入:");continue Inner;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestDemo td=new TestDemo();
td.test();
}
}目前就是这样,请指点一下。
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星