不行了,老师来帮忙捋捋呗
public class Student { //属性 private String stuNum,stuName; private float math,chinese; //构造方法 public Student() { super(); // TODO Auto-generated constructor stub } public Student(String stuNum, String stuName) { super(); this.stuNum = stuNum; this.stuName = stuName; this.math = math; this.chinese = chinese; } //getter和setter方法 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; } //hashCode方法 @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; } //equals方法 @Override public boolean equals(Object obj) { //判断对象是否相等 if (this == obj) return true; //this!=obj时 if(obj.getClass()==Student.class) { Student student=(Student)obj; return (student.getStuNum().equals(stuNum)&&student.getStuName().equals(stuName)&&(student.getMath()==math)&&(student.getChinese()==chinese)); } return false; } //toString方法 @Override public String toString() { return "学生信息:[学号:" + stuNum + ",姓名:" + stuName + ",数学成绩:" + math + ",语文成绩:" + chinese + "]"; } } ============================================================ import java.util.ArrayList; import java.util.List; public class Banji{ //属性 private String classId,className;//班级id,班级名称 private List<Student> stuList;//存放学生的集合 int cNum=0; float cSum=0; int mNum=0; float mSum=0; //构造方法 public Banji() { super(); // TODO Auto-generated constructor stub } public Banji(String classId, String className) { super(); this.setClassId(classId); this.setClassName(className); stuList=new ArrayList<Student>(); } //getter和setter方法 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 getStuList() { return stuList; } public void setStuList(List stuList) { this.stuList = stuList; } /** * 将学生添加到班级 * @param stu 要添加的学生信息 */ public void addStudent(Student stu) { boolean flag=false;//判断班级中的学生是否存在 for(Student s:stuList) { if(s.equals(stu)) { flag=true; break; } } if(flag) { System.out.println("该学生信息已添加"); }else { stuList.add(stu); } } /** * 通过学号查询学生在班级中是否存在 * @param stuNum 传入学生的学号 * @return 返回学生信息 */ public Student searchStudentByNum(String stuNum) { Student student = null; //学号是唯一的 for(Student student1:stuList) { if(student1.getStuNum().equals(stuNum)) { student=student1; break; } } return student; } /** * 输入班级学生的语文成绩 * @param stuNum 学生学号 * @param score 语文成绩 */ public void insertChineseScore(String stuNum,float score){ Student student=searchStudentByNum(stuNum); if(student!=null) { student.setChinese(score); System.out.println("添加成功"); cNum++; cSum+=score; }else { System.out.println("没有学号为"+stuNum+"的学生,请重新输入"); } } /** * 获取班级语文平均 * @return */ public float getAvgChinese(){ float avgChinese=cSum/cNum; return avgChinese; } /** * 输入班级学生的数学成绩 * @param stuNum 学生学号 * @param score 数学成绩 */ public void insertMathScore(String stuNum,float score){ Student student=searchStudentByNum(stuNum); if(student!=null) { student.setMath(score); System.out.println("添加成功"); mNum++; mSum+=score; }else { System.out.println("没有学号为"+stuNum+"的学生,请重新输入"); } } /** * 获取班级数学平均 * @return */ public float getAvgMath(){ float avgMath=mSum/mNum; return avgMath; } /** * 删除学生信息 * @param stuNum 传入要删除信息的学号 */ public void deleteStudent(String stuNum){ Student student=searchStudentByNum(stuNum); if(student!=null) { stuList.remove(student); }else { System.out.println("没有学号为"+stuNum+"的学生,请重新输入"); } } /** * 显示所有学生的信息(包括学号和姓名) */ public void displayAllStudent(){ System.out.println("班级里所有学生的信息:"); for(Student student:stuList) { System.out.println(student); } } } ============================================================ import java.util.ArrayList; import java.util.Collection; 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.Scanner; import java.util.Set; import java.util.TreeMap; public class School { // 属性 private Map<String, Banji> schoolMap; // 构造方法 public School() { super(); schoolMap = new HashMap<String, Banji>(); // TODO Auto-generated constructor stub } public School(Map<String, Banji> schoolMap) { super(); this.schoolMap = schoolMap; schoolMap = new HashMap<String, Banji>(); } // getter和setter方法 public Map getSchoolMap() { return schoolMap; } public void setSchoolMap(Map schoolMap) { this.schoolMap = schoolMap; } /** * 添加班级 * * @param banji */ public void addBanji(Banji banji) { //Scanner sc = new Scanner(System.in); //System.out.println("请输入班级编号:"); //banji.setClassId(sc.next()); //this.banji.s //banji.setClassName(className); schoolMap.put(banji.getClassId(), banji); System.out.println("添加成功"); } /** * 删除班级 * * @param banji */ public void deleteBanji(Banji banji) { // Iterator<String> it = schoolMap.keySet().iterator(); // while (it.hasNext()) { // if (it.next().equals(banji.getClassName())) { // System.out.println("删除" + banji.getClassName()+"成功"); // it.remove(); // } // } //Banji banji = null; if(banji==null) { System.out.println("该班级不存在"); }else { Set<Entry<String, Banji>> entrySet = schoolMap.entrySet(); Iterator<Entry<String, Banji>> it = entrySet.iterator(); while (it.hasNext()) { Entry<String, Banji> entry = it.next(); if (entry.getValue().getClassName().equals(banji.getClassName())) { //System.out.println("班级信息: [班级编号:" + entry.getKey() + ",班级名称 " + entry.getValue().getClassName() + "]"); it.remove(); System.out.println("删除成功"); } } } } /** * 通过班级名称查询班级 * * @param className * @return */ public Banji searchByName(String className) { Banji banji = null; Set<Entry<String, Banji>> entrySet = schoolMap.entrySet(); Iterator<Entry<String, Banji>> it = entrySet.iterator(); while (it.hasNext()) { Entry<String, Banji> entry = it.next(); if (entry.getValue().getClassName().equals(className)) { //System.out.println("班级信息: [班级编号:" + entry.getKey() + ",班级名称 " + entry.getValue().getClassName() + "]"); return entry.getValue(); } } return banji; } /** * 对各班语文成绩按平均分进行由大到小排序 */ public void sortChineseByAverage() { Set<String> stuListSet = schoolMap.keySet(); Map<String, Banji> map = new TreeMap<String, Banji>(); for (String s : stuListSet) { schoolMap.get(s).getAvgChinese(); map.put(s, schoolMap.get(s)); map.remove("主学生列表"); } // 这里将map.entrySet()转换成list List<Map.Entry<String, Banji>> list = new ArrayList<Map.Entry<String, Banji>>(map.entrySet()); // 然后通过比较器来实现排序 Collections.sort(list, new Comparator<Map.Entry<String, Banji>>() { @Override public int compare(Entry<String, Banji> o1, Entry<String, Banji> o2) { // TODO Auto-generated method stub float chinese1 = o1.getValue().getAvgChinese(); float chinese2 = o2.getValue().getAvgChinese(); int n = (int) (chinese2 - chinese1); return n; } }); if(stuListSet==null) { System.out.println("还未添加"); }else { System.out.println("语文平均成绩由大到小的排序为:"); for (Entry<String, Banji> mapping : list) { System.out.println(mapping.getValue().getClassName() + "的平均分:" + mapping.getValue().getAvgChinese()); } } } /** * 对各班数学成绩按平均分进行由大到小排序 */ public void sortMathByAverage() { Set<String> stuListSet = schoolMap.keySet(); Map<String, Banji> map = new TreeMap<String, Banji>(); for (String s : stuListSet) { schoolMap.get(s).getAvgMath(); map.put(s, schoolMap.get(s)); map.remove("主学生列表"); } // 这里将map.entrySet()转换成list List<Map.Entry<String, Banji>> list = new ArrayList<Map.Entry<String, Banji>>(map.entrySet()); // 然后通过比较器来实现排序 Collections.sort(list, new Comparator<Map.Entry<String, Banji>>() { @Override public int compare(Entry<String, Banji> o1, Entry<String, Banji> o2) { // TODO Auto-generated method stub float math1 = o1.getValue().getAvgMath(); float math2 = o2.getValue().getAvgMath(); int n = (int) (math2 - math1); return n; } }); System.out.println("数学平均成绩由大到小的排序为:"); for (Entry<String, Banji> mapping : list) { System.out.println(mapping.getValue().getClassName() + "的平均分:" + mapping.getValue().getAvgMath()); } } /** * 显示所有班级名称 */ public void displayBanJiName() { System.out.println("所有的班级名称为:"); // Set<Entry<String,Banji>> entrySet=schoolMap.entrySet(); // Iterator<Banji> it=schoolMap.values().iterator(); Set<Entry<String, Banji>> entrySet = schoolMap.entrySet(); Iterator<Entry<String, Banji>> it = entrySet.iterator(); while (it.hasNext()) { Entry<String, Banji> entry = it.next(); System.out.println(entry.getValue().getClassName()); } } } ============================================================ import java.util.Scanner; public class TestDemo { // 班级的测试方法 public void testBanJi() { } // 学校的测试方法 public void testSchool() { } // 主菜单 public void mainMenu() { System.out.println("****************************"); System.out.println(" **主菜单**"); System.out.println(" 1--班级管理"); System.out.println(" 2--学校管理"); System.out.println(" 0--退出"); System.out.println("****************************"); System.out.println("请输入对应数字进行列表管理"); } // 学校管理菜单 public void schoolMenu() { 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(" 9--返回上一级菜单"); System.out.println("********************************************************"); 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("********************************************************"); System.out.println("请输入对应数字进行班级列表管理"); } // 主流程: public void test() { TestDemo td = new TestDemo(); Scanner sc = new Scanner(System.in); int input = 0, input1 = 0, input2 = 0; School school1=new School(); Banji banji1=new Banji(); Banji banji=null; school1.addBanji(banji1); while (true) { td.mainMenu(); System.out.println("请输入数字"); input = sc.nextInt(); if (input == 0) { break; } switch (input) { case 1: //班级管理 while (true) { banJiMenu(); input1 = sc.nextInt(); if(input1==9) { break; } switch (input1) { case 1: int i = 1; System.out.println("添加学生信息到主学生列表"); System.out.println("请输入要添加的学生信息个数:"); int stuNum = sc.nextInt(); while (i <= stuNum) { System.out.println("请输入第" + i + "个学生信息"); System.out.println("请输入学生id:"); String stuId = sc.next(); System.out.println("请输入学生姓名:"); String stuName = sc.next(); Student student=new Student(stuId, stuName); banji1.addStudent(student); System.out.println("添加成功"); i++; } banji1.displayAllStudent(); break; case 2: System.out.println("添加学生信息到普通班级"); System.out.println("请输入要添加的班级名称"); String className=sc.next(); banji=school1.searchByName(className); if(banji==null) { System.out.println("班级不存在,请先添加班级信息"); }else { System.out.println("请输入要添加学生个数"); int count1=sc.nextInt(); for(int i1=1;i1<=count1;i1++) { System.out.println("请输入第"+i1+"个学生信息"); System.out.println("请输入要添加的学生id:"); String strId=sc.next(); //判断id在主班级存不存在 Student student=banji.searchStudentByNum(strId); if(student==null) { System.out.println("不存在,继续输入"); }else { banji.addStudent(student); } } banji.displayAllStudent(); } break; case 3: System.out.println("通过学号查询学生信息"); break; case 4: System.out.println("输入班级的语文成绩"); break; case 5: System.out.println("输入班级的数学成绩"); break; case 6: System.out.println("删除学生信息"); break; case 7: System.out.println("显示所有学生信息"); break; default: System.out.println("没有对应的操作"); break; } } break; case 2: //学校管理 while (true) { schoolMenu(); input2 = sc.nextInt(); if(input2==9) { break; } switch (input2) { case 1: System.out.println("创建班级"); System.out.println("请输入班级编号:"); String classNum = sc.next(); System.out.println("请输入班级名称:"); String className = sc.next(); banji1 = new Banji(classNum, className); school1.addBanji(banji1); break; case 2: System.out.println("删除班级"); System.out.println("请输入班级名称"); String deleteName = sc.next(); school1.deleteBanji(school1.searchByName(deleteName)); break; case 3: System.out.println("通过班级名称查询班级信息"); System.out.println("请输入班级名称"); String searchName = sc.next(); if (school1.searchByName(searchName) == null) { System.out.println("找不到该班级"); } else { System.out.println("班级信息: [班级编号:" + school1.searchByName(searchName).getClassId() + ",班级名称 " + school1.searchByName(searchName).getClassName() + "]"); } break; case 4: System.out.println("对各班语文成绩按平均分进行由大到小排序"); school1.sortChineseByAverage(); break; case 5: System.out.println("对各班数学成绩按平均分进行由大到小排序"); school1.sortMathByAverage(); break; case 6: System.out.println("显示所有班级名称"); school1.displayBanJiName(); break; default: System.out.println("没有对应操作"); break; } } break; default: System.out.println("该数字没有对应的操作!"); break; } } } public static void main(String[] args) { TestDemo td=new TestDemo(); td.test(); } }
做了一天做晕了,老师帮忙捋捋呗,感觉我咋越做越复杂,然后那个学生列表和普通班级是啥意思也没太搞懂
正在回答 回答被采纳积分+1
主学生列表可以想象成一个学校,所有的学生都在学校里,为了方便管理学生信息,要把学校里的学生分成若干个班级好进行管理,学校就可以把学生分到一班,二班,三班等等。此时的一班,二班,三班就是普通班级学生列表。 学生在主学生列表中可以说我是xx学校的学生,当学生在xx班级里时,学生可以说我在xx学校的xx年级xx班级。
首先给同学解释一下主学生列表,以及普通班级列表的关系
主学生列表就好比是全校学生的一个集合
而普通班级列表就好比是一个一个的班级学生的集合。
普通班级列表添加的时候,先从主播放列表中根据学生的id查询是否有这个学生
如果有,则直接添加到普通班级中,
如果没有,则继续输入学生姓名,创建新的学生,添加到普通班级中,并添加到主播放列表中。
总结一下就是:普通班级列表添加的时候,就是从主播放列表中添加的,如果主播放列表中没有,则继续补充完这个学生的信息,同时放到普通班级及主班级
下面我们来说一下同学的代码:
1、同学的代码启动后就是添加成功
修改建议:
添加主班级的时候,可以不用输出这个添加成功。
2、使用主班级集合之前,先判断一下是否有学生,如果有,再用,如果没有,提示主班级还未添加学生。(其他的同理)
3、
向主班级添加的时候,报空指针异常:
修改建议:这个集合属性可以先初始化一下。
4、添加到普通班级列表中时也是:
修改建议:
添加主班级的时候,应该给这个班级写上班级id和名称
否则根据名称查询班级的时候,它会挨个遍历,这个时候就会遍历到同学一开始添加的这个banji1 ,名称和编号都为null; 再去调用方式比较名称时,就会是null。
5
建议不要把普通班级提取出来,因为普通班级不是一个,例如,一年级,二年级都是普通班级,我们不应该用一个对象来表示。
可以改成这种局部变量(其他的同理,同学也修改一下):
创建班级的时候也是应该new一个新的班级,之前的banji1就让它代表主班级,不要再把其他班级赋值给它
同学可以先再看一下播放器案例的逻辑,这个和播放器列表的逻辑是一样的,先理顺了逻辑,再写代码就会比较顺利了哦。
另外,同学要注意代码命名规范等,例如班级 应该写做BanJi
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星