分层结构图:
![](https://img-blog.csdnimg.cn/79d4eb05a11648999d8678f0a9a295e3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aG65YW26Ieq54S2bGxs,size_8,color_FFFFFF,t_70,g_se,x_16)
运行代码:
主类
Text.java
:
主类 Text.java:
package gxnu.jb.view;
//import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.util.Scanner;
import gxnu.jb.serviceimpl.StudentOperationlmpl;
import gxnu.jb.vo.Course;
import gxnu.jb.vo.Student;
import gxnu.jb.vo.User;
//import gxnu.jb.vo.text;
public class Test {
public static void main(String[] args) throws FileNotFoundException
{
// TODO Auto-generated method stub
String[] studentNames;//学生 5 名学生
double[][] studentScores;//每人每科成绩
String[] courseName;//课程名 假设有 n 门课程
String[] courseId;//课程号
studentNames=new String[5];
studentScores=new double[5][4];
courseName=new String[4];
courseId=new String[4];
//从键盘输入数据到数组
Scanner sc = new Scanner(System.in);
System.out.println("请输入总课程号和对应的课程名:");
/*例如:
* 课程号 课程名
* 1 高等数学
* 2 数据结构
* 3 算法设计
* 4 概率论与数理统计
*/
for(int i=0;i<courseId.length;i++)
{
courseId[i]=sc.next();
courseName[i]=sc.next();
}
System.out.println("请输入学生姓名及每科成绩:");
/*例如:
* 姓名 每科成绩
* liu 78,79,70,80
* li 89 80 86 88
* huang 67 88 99 90
* wang 66 89 90 87
*/
for(int i=0;i<studentNames.length;i++)
{
studentNames[i]=sc.next();
for(int j=0;j<courseName.length;j++)
{
studentScores[i][j]=sc.nextInt();
}
}
Course[] course ;
course=new Course[courseName.length];
Course courseSet=new Course();
for(int i=0;i<courseName.length;i++)
{
for(int j=0;j<studentNames.length;j++)
{
course[i]=new Course(courseId[i],courseName[i],studentScores[j][i]);
courseSet.setScore(studentScores[j][i]);
}
}
Student student;
student=new Student();
for(int i=0;i<studentNames.length;i++)
{
student.setA(course);
}
StudentOperationlmpl student1=new StudentOperationlmpl();
// student1.getMaxCourse(student);
// student1.getAverage(student);
int index,couseIndex=0;
System.out.println("输入要查询的学生名字");
String name=sc.next();
for(int i=0;i<studentNames.length;i++)
{
if(name.equals(studentNames[i]))
{
index=i;
for(int j=0;j<courseName.length;j++)
{
courseSet.setScore(studentScores[index][j]);
}
student1.getAverage(student); //最高成绩的分数为:
student1.getMaxCourse(student).getScore()
double maxCourse=student1.getMaxCourse(student).getScore();
for(int k=0;k<courseName.length;k++)
{
if(maxCourse==studentScores[index][k]) { couseIndex=k; }
}
System.out.println("学生"+studentNames[i]+"\n 的成绩平均分为:"+student1.getAverage(student)+"\n 最高科目是: "+course[couseIndex].getName()+"\n 最高科目的课程号为:
"+course[couseIndex].getId()+"\n 最高分数为:"+maxCourse);
}
}
}
}
2.Gxnu.jb.vo
包中的
Course.java
类
package gxnu.jb.vo;
public class Course
{
//一个类中有属性就应该要私有化
private String id;//学号
private String name;//姓名
private Double score;//成绩
public Course()
{
super();
// TODO Auto-generated constructor stub
}
public Course(String id, String name, Double score)
{
super();
this.id = id;
this.name = name;
this.score = score;
}
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getName() {return name; }
public void setName(String name) { this.name = name; }
public double getScore() { return score; }
public void setScore(double score) { this.score = score; }
@Override
public String toString() {
return "id=" + id + ", name=" + name + ", score=" + score;
}
}
3. Gxnu.jb.vo
包中的
Student.java
类
package gxnu.jb.vo;
public class Student extends User {
private Course a[]; //一个学生有很多课
public Student()
{
super();
}
public Student(String id, String password) {
//原来的东西不要改变它(不要再往 student 的构造方法添加别的东西)
super(id, password);
}
public Course[] getA()
{
return a;
}
public void setA(Course[] a)
{
this.a = a;
}
/*@Override public String toString() { return super.toString(); }
*/
}
4. gxnu.jb.vo
包中的
User.java
类
package gxnu.jb.vo;
public abstract class User {
private String id;
private String password; //方法重载 无参构造方法
public User()
{
super();
}//有参构造方法
public User(String id, String password)
{
super();
this.id = id;
this.password = password;
}//对属性进行读写操作
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
//to String 方法 @Override
public String toString() { return "id=" + id + ", password=" + password ; }
}
5. gxnu.jb.serviceimpl
包中的
StudentOperationlmpl.java
包
package gxnu.jb.serviceimpl;
import gxnu.jb.service.StudentOparation;
import gxnu.jb.vo.Course;
import gxnu.jb.vo.Student;
public class StudentOperationlmpl implements StudentOparation
{ @Override
public double getAverage(Student stu)
{
Course c[]=stu.getA();
double sum=0;
double average=0;
int i;
for(i=0;i<c.length;i++)
{//学生人数 4 个分组
sum=sum+c[i].getScore();
}
average=sum/c.length;
return average;
}
@Override
public Course getMaxCourse(Student stu)
{
Course c[]=stu.getA();//课程数
double max=0;
int i,index = 0;
for(i=0;i<c.length;i++)
{
if(max<c[i].getScore())
{
max=c[i].getScore();
index=i;
}
}
return c[index];
}@Override
public String toString()
{
return "StudentOperationlmpl [getClass()=" + getClass() + ", hashCode()=" +
hashCode() + ", toString()=" + super.toString() + "]";
}
}
6. gxnu.jb.service
包中的
StudentOperation.java
类
package gxnu.jb.service;
import gxnu.jb.vo.Course;
import gxnu.jb.vo.Student;
public interface StudentOparation
{
double getAverage(Student stu);//成绩平均值
Course getMaxCourse(Student stu);//最高成绩
}
运行结果截图:
![](https://img-blog.csdnimg.cn/ac6a3c9673fb4f42a61831dff92d45a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aG65YW26Ieq54S2bGxs,size_16,color_FFFFFF,t_70,g_se,x_16)