使用java实现对年级、班级、学生及其成绩进行管理

  • 假设一个学校有若干年级,一个年级有若干班级,一个班级有若干学生。每个学生有若干成绩。请编写程序对年级、班级、学生及其成绩进行管理。
    完成以下功能:

随机初始化一个年级及其包含的班级,班级内的学生,每个学生的成绩。

  1. 年级名命名规则:X 年级,X 从{一、二、三、四、五、六、七}中
    选择一个,如三年级、四年级等。
  2. 班级数从[5,7]中随机产生。
  3. 每个班级包含的学生数从[30,60]随机产生,年级总人数根据班级人数累加。
  4. 班级名的命名规则:年级名+班级序号,如三年级一班、三年级二班。
  5. 学生名从英文字母中随机选择 5 个构成,如 bluey、babal 等。
  6. 学号有 12 位数字构成,随机产生,学号需要保证具有唯一性。
  7. 每个学生的成绩包含四门(操作系统 os、Java、c 语言、外语),百分
    制。分数随机产生,都为整形。
  8. 数据初始化结束后,打印所有已经初始化的信息,包括:年级信息、
    年级内的所有班级、班级内的所有学生。

2.数据读取与排序
计算各个学生的平均分,并保存起来。
进而根据平均分对各个学生进行降序排序,输出排序后的结果,并保存
各个学生的名次。按两种情况排序,即按班级排序、按年级排序。

  1. 按班级排序:一个班级一个排序结果,保存按班级排序的排序名次。

  2. 按照年级排序,保存学生的年级排名。
    再次打印所有信息,包括:年级信息、年级内的所有班级、班级内的所有学生信息
    (部分属性描述如下:
    年级 grade:年级名 gradeName、班级数 bjCnt、总人数 totalStuCnt 
    班级 banji:班级名 bjName、学生人数 stuCnt
    学生 Student:学号 stuNo、学生名 stuName、成绩列表 scoreList )

望采纳,下边的代码直接拷贝执行即可,有什么问题再联系我。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 1、年级名命名规则:X 年级,X 从{一、二、三、四、五、六、七}中选择一个,如三年级、四年级等。
 * 2、班级数从[5,7]中随机产生。
 * 3、每个班级包含的学生数从[30,60]随机产生,年级总人数根据班级人数累加。
 * 4、班级名的命名规则:年级名+班级序号,如三年级一班、三年级二班。
 * 5、学生名从英文字母中随机选择 5 个构成,如 bluey、babal 等。
 * 6、学号有 12 位数字构成,随机产生,学号需要保证具有唯一性。
 * 7、每个学生的成绩包含四门(操作系统 os、Java、c 语言、外语),百分制。分数随机产生,都为整形。
 * 8、数据初始化结束后,打印所有已经初始化的信息,包括:年级信息、年级内的所有班级、班级内的所有学生。
 * <p>
 * (部分属性描述如下:
 * 年级 grade:年级名 gradeName、班级数 bjCnt、总人数 totalStuCnt
 * 班级 banji:班级名 bjName、学生人数 stuCnt
 * 学生 Student:学号 stuNo、学生名 stuName、成绩列表 scoreList )
 */

public class School {
    public static void main(String[] args) {
        List<Grade> grades = new ArrayList<>();

        // 随机初始化一个年级及其包含的班级,班级内的学生,每个学生的成绩
        Random random = new Random();
        int gradeNumber = random.nextInt(7) + 1;
        String gradeName = getChineseNumber(gradeNumber) + "年级";
        List<Banji> banjiList = new ArrayList<>();
        int bjCnt = getRandomBanjiNo();
        int totalStuCnt = 0;
        for (int i = 1; i <= bjCnt; i++) {
            String bjName = gradeName + getChineseNumber(i) + "班";
            int stuCnt = random.nextInt(31) + 30;
            totalStuCnt += stuCnt;
            List<Student> students = new ArrayList<>();
            for (int j = 1; j <= stuCnt; j++) {
                String stuName = getRandomName();
                String stuNo = getRandomStuNo(12);
                List<Integer> scoreList = new ArrayList<>();
                scoreList.add(random.nextInt(51) + 50); // 操作系统
                scoreList.add(random.nextInt(51) + 50); // Java
                scoreList.add(random.nextInt(51) + 50); // c语言
                scoreList.add(random.nextInt(51) + 50); // 外语
                students.add(new Student(stuNo, stuName, scoreList));
            }
            banjiList.add(new Banji(bjName, stuCnt, students));
        }
        grades.add(new Grade(gradeName, bjCnt, totalStuCnt, banjiList));

        // 打印所有已经初始化的信息
        System.out.println("年级信息:");
        for (Grade grade : grades) {
            System.out.println(grade);
        }
    }

    // 将数字转换为汉字
    public static String getChineseNumber(int number) {
        String[] chineseNumbers = {"一", "二", "三", "四", "五", "六", "七"};
        return chineseNumbers[number - 1];
    }

    // 随机生成班级数
    public static int getRandomBanjiNo() {
        int min = 5;
        int max = 7;
        return min + (int) (Math.random() * (max - min + 1));
    }

    // 随机生成学生名字
    public static String getRandomName() {
        String letters = "abcdefghijklmnopqrstuvwxyz";
        StringBuilder nameBuilder = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            int index = (int) (Math.random() * letters.length());
            nameBuilder.append(letters.charAt(index));
        }
        return nameBuilder.toString();
    }

    // 随机生成学号
    public static String getRandomStuNo(int length) {
        StringBuilder stuNoBuilder = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            int digit = random.nextInt(10);
            stuNoBuilder.append(digit);
        }
        return stuNoBuilder.toString();
    }
}

/**
 * 年级 grade:年级名 gradeName、班级数 bjCnt、总人数 totalStuCnt
 */
class Grade {
    private String gradeName;
    private int bjCnt;
    private int totalStuCnt;
    private List<Banji> banjiList;

    public Grade(String gradeName, int bjCnt, int totalStuCnt, List<Banji> banjiList) {
        this.gradeName = gradeName;
        this.bjCnt = bjCnt;
        this.totalStuCnt = totalStuCnt;
        this.banjiList = banjiList;
    }

    public String getGradeName() {
        return gradeName;
    }

    public int getBjCnt() {
        return bjCnt;
    }

    public int getTotalStuCnt() {
        return totalStuCnt;
    }

    public List<Banji> getBanjiList() {
        return banjiList;
    }

    public void addBanji(Banji banji) {
        this.banjiList.add(banji);
        this.totalStuCnt += banji.getStuCnt();
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("年级名称:").append(gradeName).append("\n");
        sb.append("班级数目:").append(bjCnt).append("\n");
        sb.append("总人数:").append(totalStuCnt).append("\n");
        sb.append("*************************\n");
        sb.append("班级信息:\n");
        for (Banji banji : banjiList) {
            sb.append(banji);
        }
        return sb.toString();
    }
}

/**
 * 班级 banji:班级名 bjName、学生人数 stuCnt
 */
class Banji {
    private String bjName;
    private int stuCnt;
    private List<Student> studentList;

    public Banji(String bjName, int stuCnt, List<Student> studentList) {
        this.bjName = bjName;
        this.stuCnt = stuCnt;
        this.studentList = studentList;
    }

    public String getBjName() {
        return bjName;
    }

    public int getStuCnt() {
        return stuCnt;
    }

    public List<Student> getStudentList() {
        return studentList;
    }

    public void addStudent(Student student) {
        this.studentList.add(student);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("*************************");
        sb.append("班级名称:").append(bjName).append("\n");
        sb.append("学生人数:").append(stuCnt).append("\n");
        sb.append("学生信息:\n");
        for (Student student : studentList) {
            sb.append(student);
        }
        return sb.toString();
    }
}

/**
 * 学生 Student:学号 stuNo、学生名 stuName、成绩列表 scoreList )
 */
class Student {
    private String stuNo;
    private String stuName;
    private List<Integer> scoreList;

    public Student(String stuNo, String stuName, List<Integer> scoreList) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.scoreList = scoreList;
    }

    public String getStuNo() {
        return stuNo;
    }

    public String getStuName() {
        return stuName;
    }

    public List<Integer> getScoreList() {
        return scoreList;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("\t学号:").append(stuNo).append("\n");
        sb.append("\t姓名:").append(stuName).append("\n");
        sb.append("\t成绩:").append(scoreList).append("\n");
        return sb.toString();
    }
}

您好,根据您提出的需要使用java实现随机初始化一个年级及其包含的班级,班级内的学生,每个学生的成绩。为您实现以下代码:

//年级类
public class Grade {
    private String gradeName;//年级名 、
    private int bjCnt;//班级数 bjCnt
    private int totalStuCnt;//、总人数
    
    public String getGradeName() {
        return gradeName;
    }
    public void setGradeName(String gradeName) {
        this.gradeName = gradeName;
    }
    public int getBjCnt() {
        return bjCnt;
    }
    public void setBjCnt(int bjCnt) {
        this.bjCnt = bjCnt;
    }
    public int getTotalStuCnt() {
        return totalStuCnt;
    }
    public void setTotalStuCnt(int totalStuCnt) {
        this.totalStuCnt = totalStuCnt;
    }
    @Override
    public String toString() {
        return "Grade [gradeName=" + gradeName + ", bjCnt=" + bjCnt + ", totalStuCnt=" + totalStuCnt + "]";
    }
    

package test;
//班级类
public class Banji {
   private String bjName;//班级名 
   private int stuCnt;//学生人数 stuCnt
   
   
    public String getBjName() {
        return bjName;
    }
    public void setBjName(String bjName) {
        this.bjName = bjName;
    }
    public int getStuCnt() {
        return stuCnt;
    }
    public void setStuCnt(int stuCnt) {
        this.stuCnt = stuCnt;
    }
    @Override
    public String toString() {
        return "Banji [bjName=" + bjName + ", stuCnt=" + stuCnt + "]";
    }
   
   
}


package test;


import java.util.ArrayList;
//学生类
public class Student {
    private long stuNo;//学号
    private String stuName;//学生名
    private ArrayList<Integer> scoreList;//成绩列表
    public long getStuNo() {
        return stuNo;
    }
    public void setStuNo(long stuNo) {
        this.stuNo = stuNo;
    }
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public ArrayList<Integer> getScoreList() {
        return scoreList;
    }
    public void setScoreList(ArrayList<Integer> scoreList) {
        this.scoreList = scoreList;
    }
    @Override
    public String toString() {
        return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", scoreList=" + scoreList + "]";
    }
    
    
    
    
     
}


package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;
//随机生成年级班级学生信息类
public class SchoolManager {
   
    public static void main(String[] args) {
        
        Grade grade = new Grade();
        
        String orderNames[] = {"一","二","三","四","五","六","七"};
        
        Random random = new Random();//随机函数
        //随机生成年级
        int gradeIndex = random.nextInt(orderNames.length-1);
        String gradeName = orderNames[gradeIndex]+"年级";
        grade.setGradeName(gradeName);
        
        //随机生成班级数[5,7]之间
        int bjCnt = random.nextInt(3) + 5;
        grade.setBjCnt(bjCnt);
        
        
        //存储班级和学生信息
        Map<Banji,ArrayList<Student>> datasList = new HashMap<>();
        
        //为了保证随机生成的学号不重复,需要存放起来判断
        Set stuNumsset = new HashSet();
    
        int totalStuCnt = 0;
        for(int i = 0;i<bjCnt;i++) {//每个班级都要生成学生数
            Banji banji = new Banji();
            
            //随机生成班级包含的学生[30,60]
            int studentCount = random.nextInt(31) + 30;
            totalStuCnt+=studentCount;
            String banjiName = gradeName+orderNames[i]+"班";//班级名的命名规则:年级名+班级序号,如三年级一班、三年级二班。
            banji.setBjName(banjiName);
            banji.setStuCnt(studentCount);
            
            
            
            
            //生成学生信息
            ArrayList<Student> studentsList = new ArrayList<>();
            for(int j = 0;j<studentCount;j++) {
                Student student = new Student();
                
                String stuName = "" ;
                for(int k = 0;k<5;k++)//学生名从英文字母中随机选择 5 个构成,如 bluey、babal 等。
                   stuName =  stuName +String.valueOf((char) (random.nextInt(26) + 'a'));
                
                student.setStuName(stuName);
                
                //学号有 12 位数字构成,随机产生,学号需要保证具有唯一性。        
                long stuid = 100000000000L;
                for(int m=0;; m++) {
                     stuid = next(m);
                    if(!stuNumsset.contains(stuid)){
                        stuNumsset.add(stuid);
                        break;
                    }            
                }
                student.setStuNo(stuid);
                
                //随机生成学生的成绩    
                ArrayList<Integer> scoreList = new ArrayList<>();
                for (int p = 0;p<4;p++) {
                    int score = random.nextInt(100);//每个学生的成绩包含四门(操作系统 os、Java、c 语言、外语),百分制。分数随机产生,都为整形。
                    scoreList.add(score);
                }
                student.setScoreList(scoreList);
                studentsList.add(student);
            }
            datasList.put(banji, studentsList);
            
            
        }
        grade.setTotalStuCnt(totalStuCnt);
        
        //数据初始化结束后,打印所有已经初始化的信息,包括:年级信息、年级内的所有班级、班级内的所有学生。
        //打印年级信息
        System.out.println(grade.toString());
    
        for (Map.Entry<Banji, ArrayList<Student>> entry : datasList.entrySet()) {
            //打印班级信息
            System.out.println(entry.getKey().toString());
            //打印学生信息
            for(Student stu : entry.getValue()) {
                   System.out.println(stu.toString());
            }
           
            //分割线
            System.out.println("-----------------------------------------------");
          }
    

    }
    private static final long MIN = 100000000000L;
     
    private static final long SUFFIX_ID = ((1L << 34) - 1);
 
    private static final long PRE_ID = (7L << 34);
 
    private static final long MAX_ID = 999999999999L;
 
    public static long next(long id) {
 
        if (id < 0 || id > MAX_ID) {
            throw new IllegalArgumentException("Illegal id: " + id);
        }
 
        // 非线性
        id = swap(id, 7, 0);
        id = swap(id, 6, 1);
 
        // Id后34位
        long value = id & SUFFIX_ID;
 
        // Id后34位的最低八位和高1-9位交换
        value = (((value >> 8) | ((value & 255) << 26)));
 
        // Id前3位|Id后34位
        id = (id & PRE_ID) | value;
 
        // 加上最小值, 保证生成的12位
        id += MIN;
 
        return id;
    }
 
    /**
     * xxxx xxxx xxxx x0xx xxxx xx0x xxxx xxxx|0000 0000 0000 0b00 0000 00a0
     * 0000 0000
     */
    private static long swap(long value, int x, int y) {
 
        return (value & (~(1 << x)) & (~(1 << y))) | (((value >> x) & 1) << y) | (((value >> y) & 1) << x);
    }
}

最后的效果:

img


望采纳!!!!!!!!!!!!!!!!!

student 类

package StudentManger;
/*
学生信息:姓名,地址
 */
public class Student {
    String name;
    String address;
    int ChineseGrade;
    int MathGrade;
    int EnglishGrade;
    int sum;
    double averGrade;
 
    public int getSum() {
        return sum;
    }
 
    public void setSum(int sum) {
        this.sum = sum;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    public int getChineseGrade() {
        return ChineseGrade;
    }
 
    public void setChineseGrade(int chineseGrade) {
        ChineseGrade = chineseGrade;
    }
 
    public int getMathGrade() {
        return MathGrade;
    }
 
    public void setMathGrade(int mathGrade) {
        MathGrade = mathGrade;
    }
 
    public int getEnglishGrade() {
        return EnglishGrade;
    }
 
    public void setEnglishGrade(int englishGrade) {
        EnglishGrade = englishGrade;
    }
 
    public double getAverGrade() {
        return averGrade;
    }
 
    public void setAverGrade(double averGrade) {
        this.averGrade = averGrade;
    }
}

不是学生信息管理系统课设,只是一般的需要实现题目要求的代码

可以参考:https://blog.csdn.net/m0_56514491/article/details/122498375?ops_request_misc=&request_id=&biz_id=102&utm_term=使用java实现对年级、班级、学生及其成绩进行管理&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-122498375.142^v73^insert_down3,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187

实现的效果在题目的最后一点,上面的每一点是相对独立的。你按照步骤,将每一部分实现出来,然后看难点在哪,有什么卡住了


import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;

public class SchoolManager {
    // 年级列表
    private ArrayList<Grade> gradeList;

    public SchoolManager() {
        this.gradeList = new ArrayList<>();
    }

    // 随机初始化一个年级及其包含的班级,班级内的学生,每个学生的成绩
    public void initSchool() {
        // 随机选择一个年级
        String[] gradeNames = {"一年级", "二年级", "三年级", "四年级", "五年级", "六年级", "七年级"};
        Random random = new Random();
        int gradeIndex = random.nextInt(gradeNames.length);
        String gradeName = gradeNames[gradeIndex];
        // 随机产生班级数量和每个班级的学生数量
        int bjCnt = random.nextInt(3) + 5; // 班级数量为 5~7
        int totalStuCnt = 0;
        ArrayList<Banji> banjiList = new ArrayList<>();
        for (int i = 1; i <= bjCnt; i++) {
            int stuCnt = random.nextInt(31) + 30; // 学生数量为 30~60
            Banji banji = new Banji(gradeName + i, stuCnt);
            banjiList.add(banji);
            totalStuCnt += stuCnt;
        }
        // 随机生成学生信息和成绩
        HashSet<String> stuNoSet = new HashSet<>(); // 用于保证学号唯一性
        for (Banji banji : banjiList) {
            for (int i = 1; i <= banji.getStuCnt(); i++) {
                String stuName = generateStuName();
                String stuNo;
                do {
                    stuNo = generateStuNo();
                } while (stuNoSet.contains(stuNo));
                stuNoSet.add(stuNo);
                ArrayList<Integer> scoreList = new ArrayList<>();
                for (int j = 0; j < 4; j++) {
                    int score = random.nextInt(51) + 50; // 成绩为 50~100
                    scoreList.add(score);
                }
                Student student = new Student(stuNo, stuName, scoreList);
                banji.addStudent(student);
            }
        }
        // 将年级信息添加到年级列表中
        Grade grade = new Grade(gradeName, bjCnt, totalStuCnt, banjiList);
        this.gradeList.add(grade);
    }

    // 生成随机学生名
    private String generateStuName() {
        String str = "abcdefghijklmnopqrstuvwxyz";
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            int index = random.nextInt(str.length());
            char ch = str.charAt(index);
            sb.append(ch);
        }
        return sb.toString();
    }

    // 生成随机学号
    private String generateStuNo() {
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 12; i++) {
            int digit = random.nextInt(10);
           

你好题主,这是比较直观的写法了,而且还算规范,如果有不懂的问题可以继续反馈。


public class Grade {
  
  // 年级名
  private String gradeName;

  // 班级数
  private int bjCnt;

  // 总人数
  private int totalStuCnt;

  // 班级列表
  private List<Banji> banjiList;

  // 初始化
  public void initGrade() {
    // 随机生成年级名
    this.gradeName = getRandomGradeName();

    // 班级数
    this.bjCnt = getRandomBjCnt();

    // 初始化班级列表
    this.banjiList = new ArrayList<Banji>();
    for (int i = 0; i < this.bjCnt; i++) {
      Banji banji = new Banji();
      banji.initBanji(this.gradeName, i);
      this.banjiList.add(banji);

      // 总人数
      this.totalStuCnt += banji.getStuCnt();
    }
  }

  // 随机获取年级名
  private String getRandomGradeName() {
    String[] names = new String[] {"一", "二", "三", "四", "五", "六", "七"};
    Random random = new Random();
    int index = random.nextInt(names.length);
    String gradeName = names[index] + "年级";
    return gradeName;
  }

  // 随机获取班级数
  private int getRandomBjCnt() {
    Random random = new Random();
    return random.nextInt(3) + 5;
  }

  // 打印信息
  public void printInfo() {
    System.out.println("年级名:" + this.gradeName);
    System.out.println("班级数:" + this.bjCnt);
    System.out.println("总人数:" + this.totalStuCnt);

    for (Banji banji : this.banjiList) {
      System.out.println("班级名:" + banji.getBjName());
      System.out.println("学生人数:" + banji.getStuCnt());
      for (Student student : banji.getStuList()) {
        System.out.println("学号:" + student.getStuNo());
        System.out.println("学生名:" + student.getStuName());
        System.out.println("成绩列表:" + student.getScoreList());
      }
    }
  }

}

public class Banji {

  // 班级名
  private String bjName;

  // 学生人数
  private int stuCnt;

  // 学生列表
  private List<Student> stuList;

  // 初始化
  public void initBanji(String gradeName, int bjIndex) {
    // 班级名
    this.bjName = gradeName + (bjIndex + 1) + "班";

    // 学生人数
    Random random = new Random();
    this.stuCnt = random.nextInt(31) + 30;

    // 初始化学生列表
    this.stuList = new ArrayList<Student>();
    for (int i = 0; i < this.stuCnt; i++) {
      Student student = new Student();
      student.initStudent();
      this.stuList.add(student);
    }
  }

  // getter
  public String getBjName() {
    return bjName;
  }

  public int getStuCnt() {
    return stuCnt;
  }

  public List<Student> getStuList() {
    return stuList;
  }

}

public class Student {

  // 学号
  private String stuNo;

  // 学生名
  private String stuName;

  // 成绩列表
  private int[] scoreList;

  // 初始化
  public void initStudent() {
    // 学号
    this.stuNo = getRandomStuNo();

    // 学生名
    this.stuName = getRandomStuName();

    // 成绩列表
    this.scoreList = new int[4];
    Random random = new Random();
    for (int i = 0; i < this.scoreList.length; i++) {
      this.scoreList[i] = random.nextInt(101);
    }
  }

  // 随机获取学号
  private String getRandomStuNo() {
    Random random = new Random();
    String stuNo = "";
    for (int i = 0; i < 12; i++) {
      stuNo += random.nextInt(10);
    }
    return stuNo;
  }

  // 随机获取学生名
  private String getRandomStuName() {
    Random random = new Random();
    char[] chars = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    String stuName = "";
    for (int i = 0; i < 5; i++) {
      int index = random.nextInt(chars.length);
      stuName += chars[index];
    }
    return stuName;
  }

  // getter
  public String getStuNo() {
    return stuNo;
  }

  public String getStuName() {
    return stuName;
  }

  public int[] getScoreList() {
    return scoreList;
  }

}

public class Test {
  public static void main(String[] args) {
    Grade grade = new Grade();
    grade.initGrade();
    grade.printInfo();
  }
}