不行了,老师来帮忙捋捋呗
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
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程

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