首页 > 编程语言 >Java实验报告——教务系统(继承)

Java实验报告——教务系统(继承)

时间:2022-11-01 10:39:17浏览次数:49  
标签:Java String 教务 Course 课程 return 实验报告 public name


一、实验目的

使学生进一步了解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,String,教务,Course,课程,return,实验报告,public,name
From: https://blog.51cto.com/u_15847108/5811953

相关文章

  • Java实现HTML页面截图功能
    概述业务开发中,经常会有HTML页面截图,或打印另存为PDF文件的需求。本文即是HTML页面截图需求的技术调研过程的成文。不想看长篇大论的同学,可以直接看Selenium部分,本人最后也......
  • Java实验报告-计算器(AWT图形界面)
     一、实验目的掌握图形用户界面的设计与实现。二、实验内容使用图形界面制作一个计算器并实现相应功能。三、实验步骤publicclassfirstappextendsAppletimplementsAc......
  • Java实验报告--计时器(线程)
    一、实验目的了解Java线程的使用方法二、实验内容1、使用多线程制作一计时器,要求实现文本框输入一个时间(分),计时结束后提示。2、系统通过点击按钮可实现启动计时、暂停、结束......
  • Java的基本使用
    两个部分:一是理论、二是实践;这里的Java讲解来源于2010年之前,之后的改变看官网。一、Java的基本概念1Java发展历史由sun(Stanforduniversitynetwork)开发,1982年2月成立,2009年......
  • 设计模式-模板模式在Java中的使用示例
    场景模板模式模板模式又叫模板方法模式(TemplateMethodPattern),是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板模式使得子类可以在不改变算法......
  • Java解析cron表达式
    概述Cron表达式是一个字符串,以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,即两种语法格式:SecondsMinutesHoursDayofMonthMonthDayofWeekYear,即:秒分时天月星......
  • Java8学习笔记
    Java8引入函数式编程,好处:代码简洁,意图明确,使用stream接口而不是for循环。多核友好,parallel()方法。相关知识高阶函数高阶函数就是接收函数参数的函数,能够根据传入的函数参......
  • Java学习之位运算(操作)总结
    最近在反思工作第四年的深度,故而写此系列。其他Java系列文章:​​Java学习之编译、反编译以及字节码入门​​​​Java学习之String​​​​Java学习之JDK9新特性​​位操作,......
  • Java学习之NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError
    在菜逼如我短短的三年职业编码生涯中,无数次遇到这两个异常,故而总结一下。Java异常体系大致提一些,不是本文的重点。两者都是标准异常,平时碰到最多的是ClassNotFoundExceptio......
  • Java学习之String
    概述写在前面,工作第四年,重新把基础抓起来吧。String可以说是JDK中最基础的一个类。就记录一些日常开发中最常用的方法。String类是非可变类,其对象一旦创建,就不可销毁。Strin......