随机初始化一个年级及其包含的班级,班级内的学生,每个学生的成绩。
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);
}
}
最后的效果:
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;
}
}
不是学生信息管理系统课设,只是一般的需要实现题目要求的代码
实现的效果在题目的最后一点,上面的每一点是相对独立的。你按照步骤,将每一部分实现出来,然后看难点在哪,有什么卡住了
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();
}
}