Java实验报告——教务系统(继承)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实验报告——教务系统(继承)相关的知识,希望对你有一定的参考价值。
一、实验目的
使学生进一步了解Java面向对象中继承、封装、抽象、重载的运用。
二、实验内容
1、设计教师、学生、课程这三个教务系统中的对象类,包括这些对象的属性和方法。实现学生选课、删除课程、查看课程成绩、教师批准选课及录入成绩。
2、要求用到继承、封装、抽象、重载。
三、实验步骤
1抽象类Person的设计
//Person.java
package wsdchong;
public abstract class Person
protected String name;
protected String sex;
protected int age;
public final String getName()
return name;
abstract String getInfo();
2学生类的设计:继承自Person类,用两个<课程类>的动态数组保存选课列表和已经选上的课程列表,实现选课、删除选课、查看成绩、查看个人信息等方法。
//Student.java
package wsdchong;
import java.util.ArrayList;
public class Student extends Person
private String stuno;
private int grade;
private ArrayList<Course> myCourses = new ArrayList<Course>(); //我的课程
private ArrayList<Course> mySelectCourses = new ArrayList<Course>(); //我的选课
Student(String name, String sex, int age, String stuno, int grade)
super();
this.name = name;
this.sex = sex;
this.age = age;
this.stuno = stuno;
this.grade = grade;
public void selectCourse(Course c) //选课
if(!myCourses.contains(c) && !mySelectCourses.contains(c))
mySelectCourses.add(c);
public void delateSelectCourse(Course c) //删除选课
mySelectCourses.remove(c);
if (ifApprove(c)) // 如果已中签
myCourses.remove(c);
c.removeStudent(this);
c.getTeacher().removeStudent(this);
public void addCourse(Course c) //选课成功,将课程加入我的课程
myCourses.add(c);
public String getScore(Course c) //获取学生课程的成绩
if (myCourses.contains(c))
return name+"的"+c.getName()+"成绩为: "+c.searchScore(this);
else
return "你的课程列表里没有这门课";
public Boolean ifSelect(Course c) //判断学生是否选择某课程
return mySelectCourses.contains(c);
public Boolean ifApprove(Course c) //判断学生是否选择某课程
return myCourses.contains(c);
public String getCourse() //获取课程列表
String s = "课程:";
for(Course c:myCourses)
s += c.getName() + " ";
return s;
public String getScoreList() //获取成绩单
String s = "学生 "+ getName() + " 的成绩单如下:\\n";
for(Course c:myCourses)
s = s+ c.getName() + " " + c.searchScore(this) + "\\n";
return s;
public String getInfo()
return "姓名:"+name+"\\n性别:"+sex+"\\n年龄:"+age+"\\n学号:"+stuno+"\\n年级:"+grade+"\\n"+getCourse();
3、教师类的设计:继承自Person类,用<课程类>的动态数组表示教师所教课程列表,用<学生类>的动态数组表示自己的学生名单,实现设置教师所教课程、同意学生选课、为学生设置成绩等方法。
//Teacher.java
package wsdchong;
import java.util.ArrayList;
public class Teacher extends Person
private String tno;
private ArrayList<Course> myCourse = new ArrayList<Course>(); //所授课程列表
private ArrayList<Student> myStudents = new ArrayList<Student>(); //学生名单
Teacher(String name,String sex, int age, String tno)
super();
this.name = name;
this.sex = sex;
this.age = age;
this.tno = tno;
void setCourse(Course c) //为老师设置所教课程
myCourse.add(c) ;
public void approveSelectCoures (Student s,Course c)
if (s.ifSelect(c) && myCourse.contains(c)) //如果学生s申请了这门课 且老师教这门课
s.addCourse(c); //同意选课,将课程加入到学生的课程表中
c.addStudent(s); //将课程加入到课程的学生名单中
if(!myStudents.contains(s))
myStudents.add(s);
public boolean removeStudent(Student s) //移除一名学生
for(Course c:myCourse)
if (c.ifContainStudent(s))
return false;
myStudents.remove(s);
return true;
public void setScore(Student s, float score,Course c) //为一名学生设置成绩
if(s.ifApprove(c) && myCourse.contains(c))
c.setScores(s, score);
else
System.out.println("学生"+s.getName()+"的课表中没有"+c.getName());
public String getInfo()
String s = "姓名:"+name+"\\n工号:"+tno+"\\n所授课程:";
for(Course c : myCourse) //遍历老师所教课程
s += c.getName();
s +=" ";
return s;
public String getStudentList(Course c) //获取课程名单
if(!myCourse.contains(c))
return "教师"+getName()+"并不教"+c.getName()+"这门课。\\n";
String s = "教师"+getName()+"所教的"+c.getName()+"课程学生名单:\\n";
for(Student stu: myStudents)
if (stu.ifApprove(c))
s = s + stu.getName() +"\\n";
return s;
4设计课程类,用<学生类>的动态数组表示该课程学生名单,用一个<学生类、浮点型>的hashmap来保存课程每名学生的成绩单。实现向课程名单中添加学生、向成绩单中添加一名学生的成绩的接口,实现获取课程成绩表的方法。
//Course.java
package wsdchong;
import java.util.HashMap;
import java.util.ArrayList;
public class Course
private String name;
private String cno;
private Teacher itsTeacher ;
private ArrayList<Student> studentList = new ArrayList<Student>(); //课程学生名单
private HashMap<Student, Float> scoreList = new HashMap<Student, Float>(); //课程成绩单
Course(String name, String cno)
super();
this.name = name;
this.cno = cno;
public String getName() return name;
public Teacher getTeacher() return itsTeacher;
public void setTeacher (Teacher t) //为这门课设置一名教师
this.itsTeacher = t;
t.setCourse(this);
public void addStudent (Student s) //课程名单里添加一名学生
studentList.add(s);
public void setScores (Student s , float score) //给学生s设置成绩
scoreList.put(s, score);
public float searchScore (Student s) //返回学生s的成绩
return scoreList.get(s);
public void removeStudent(Student s) //移除学生
if (s.ifApprove(this))
studentList.remove(s);
public boolean ifContainStudent(Student s)
return studentList.contains(s);
public String getInfo()
return "课程名称:"+name+"课程编号:"+cno+"授课教师:"+itsTeacher;
public String getStudentList() //获取学生列表
String s = "" ;
for(Student stu : studentList)
s += stu.getName()+" ";
return s;
public String getScoreList() //课程成绩表
String s = "课程"+this.getName()+"的成绩表\\n";
for(Student stu:scoreList.keySet())
s += stu.getName()+" "+scoreList.get(stu)+"\\n";
return s;
5进行测试,经测试,各功能均可以正常实现。
五、实验总结
1、本次实验使我进一步了解了Java中继承、封装、抽象、重载的运用。
以上是关于Java实验报告——教务系统(继承)的主要内容,如果未能解决你的问题,请参考以下文章