要求:
编写一个学生成绩管理系统。学生的属性包括学号、姓名、年龄等。每个学生要学习若干课程,每门课程有平时成绩、其中考试成绩、实习成绩、期末考试成绩以及总评成绩等多个成绩,其中平时成绩的数目不定(因为不同课程的教师布置的平时作业不同),而总评成绩是其它成绩的平均值。请先设计合理的类存放这些信息,然后设计程序完成以下功能:
(1)列出某个学生的所有成绩;
(2)列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分;
(3)分区段统计某门课程的学生总评成绩,例如60分以下的学生人数、60至70分的学生人数等。
分析:
(1)存放学生信息的类
属性:姓名、学号、年龄、所学课程集合
操作:设置课程的方法、其他属性的设置以及获取方法、获取自身信息的字符串表示、构造方法(对所有属性的初始化)
(2)代表课程的类
属性:课程名、平时成绩、期中成绩、实习成绩、期末成绩、总评成绩
操作:构造方法(对所有属性初始化)、所有属性的get/set方法、toString方法(返回代表自身信息的字符串方法)
(3)具体功能实现类
属性:学生集合
操作:根据名字搜索学生信息、列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分、分区段统计某门课程的学生总评成绩,例如60分以下的学生人数、60至70分的学生人数等。
(4)测试类
功能:创建系统菜单
1——创建学生集合(学生相关信息可以从键盘录入也可以直接初始化)
2——查询学生信息
3——列出某门课程每个学生的总评成绩,及所有学生总评成绩的总评分
4——分区段统计某门课程的学生总评成绩,例如60分以下的学生人数、60至70分的学生人数等
根据用户输入的选项,调用功能类相关操作。
部分代码展示:
(由于代码文件数量较多,此处仅给出部分源码,完整源码可通过下方链接下载)
学生成绩管理系统源码链接
学生类Student
import java.util.List;
public class Student {
private String stuName;
private String stuNo;
private int stuAge;
List<Course> courses;
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
public Student(String stuName, String stuNo, int stuAge, List<Course> courses) {
this.stuName = stuName;
this.stuNo = stuNo;
this.stuAge = stuAge;
this.courses = courses;
}
public Student() {
}
@Override
public String toString() {
return "Student[" +
"stuName='" + stuName + '\'' +
", stuNo='" + stuNo + '\'' +
", stuAge=" + stuAge +
", courses=" + courses +
']';
}
}
课程类Course
public class Course {
private String courseName;//课程名称
private double dailyGrade;//平时成绩
private double midGrade;//期中成绩
private double doGrade;//实习成绩
private double endGrade;//期末成绩
private double sumGrade;//总评成绩
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public double getDailyGrade() {
return dailyGrade;
}
public void setDailyGrade(double dailyGrade) {
this.dailyGrade = dailyGrade;
}
public double getMidGrade() {
return midGrade;
}
public void setMidGrade(double midGrade) {
this.midGrade = midGrade;
}
public double getDoGrade() {
return doGrade;
}
public void setDoGrade(double doGrade) {
this.doGrade = doGrade;
}
public double getEndGrade() {
return endGrade;
}
public void setEndGrade(double endGrade) {
this.endGrade = endGrade;
}
public double getSumGrade() {
return sumGrade;
}
public void setSumGrade(double sumGrade) {
this.sumGrade = sumGrade;
}
public Course(String courseName, double dailyGrade, double midGrade, double doGrade, double endGrade, double sumGrade) {
this.courseName = courseName;
this.dailyGrade = dailyGrade;
this.midGrade = midGrade;
this.doGrade = doGrade;
this.endGrade = endGrade;
this.sumGrade = sumGrade;
}
@Override
public String toString() {
return "Course[" +
"courseName='" + courseName + '\'' +
", dailyGrade=" + dailyGrade +
", midGrade=" + midGrade +
", doGrade=" + doGrade +
", endGrade=" + endGrade +
", sumGrade=" + sumGrade +
']';
}
}
按名字查询学生
public void selectName(String name) {
boolean temp = false;
for (int i = 0; i < studentList.size(); i++) {
if (name.equals(studentList.get(i).getStuName())){
temp = true;
System.out.println("姓名:"+studentList.get(i).getStuName()+",学号:"+studentList.get(i).getStuNo()+",年龄:"+studentList.get(i).getStuAge());
System.out.println("该学生的成绩是:");
for (int j = 0; j < studentList.get(i).getCourses().size(); j++) {
System.out.println(studentList.get(i).getCourses().get(j).toString());
}
}
}
if (!temp){
System.out.println("很抱歉没有找到该学生信息!");
}
}
某门课程每个学生的总评成绩,及所有学生总评成绩的总评分
public void selectCourse(String courseName) {
boolean temp = false;
double sumGrade = 0;
for (int i = 0; i < studentList.size(); i++) {
for (int j = 0; j < studentList.get(i).getCourses().size(); j++) {
if (courseName.equals(studentList.get(i).getCourses().get(j).getCourseName())){
temp = true;
sumGrade += studentList.get(i).getCourses().get(j).getSumGrade();
System.out.println(studentList.get(i).getStuName()+"总评分是:"+studentList.get(i).getCourses().get(j).getSumGrade());
}
}
}
if(!temp) {
System.out.println("很抱歉没有找到该课程信息!");
}else {
System.out.println("所有学生的总评分是:"+sumGrade);
}
}
分区段统计学生总评成绩的总评分
public void selectCourseGrade(String course) {
int excellent = 0;//优秀:90-100
int fine = 0;//良好:70-89
int qualified = 0;//合格:60-69
int disqualification = 0;//不合格:0-59
for (int i = 0; i < studentList.size(); i++) {
for (int j = 0; j < studentList.get(i).getCourses().size(); j++) {
if (studentList.get(i).getCourses().get(j).getSumGrade()>=90 ){
excellent++;
}else if (studentList.get(i).getCourses().get(j).getSumGrade()>=70){
fine++;
}else if (studentList.get(i).getCourses().get(j).getSumGrade()>=60){
qualified++;
}else if (studentList.get(i).getCourses().get(j).getSumGrade()>=0){
disqualification++;
}
}
}
System.out.println("优秀:90-100分的有:"+excellent+"人");
System.out.println("良好:70-89分的有:"+fine+"人");
System.out.println("合格:60-69分的有:"+qualified+"人");
System.out.println("不合格:0-59分的有:"+disqualification+"人");
}
运行截图