对象和类:使用java编写一个模拟录入学生成绩的程序

对象和类:使用java编写一个模拟录入学生成绩的程序,第1张

目录
  • 一、实验内容
    • 1.编写描述课程的类
    • 2.编写描述学生的类
    • 3.编写描述录入成绩信息的类
    • 4.编写模拟录入成绩的程序
  • 二、实验过程
    • 1.课程类
    • 2.学生类
    • 3.成绩信息类
    • 4.主程序
    • 5.运行结果
  • 三、经验总结


一、实验内容

编写一个模拟录入学生成绩的程序,该程序包括一个用来记录课程信息的类(Course),记录学生信息的类(Student),用来记录学生选课信息的类(SelectCourse),以及一个用来完成录入过程的类(Test)。

1.编写描述课程的类

编写一个描述课程的类Course。Course类的字段包括:
课程号(cid)
课程名(cname)
学分(credits)
选课人数(num)
本门课的平均分(avgScore)
Course类实现的方法包括:
构造方法:初始化课程号、课程名和学分,其余两个字段的初始值为0;
get方法:读取每个字段的值(getCid、getCname、getCredits …);
set方法:设置选课人数和平均分(setNum、setAvgScore),课程号、课程名和学分三个字段不需要set方法;
addStudent(double score):每当有学生选择该课程时即调用此方法,参数score为此学生学习本门课所得到的成绩。在该方法中首先使该课程的选课人数加1,再重新计算本门课程的平均分。

2.编写描述学生的类

编写一个描述学生的类Student。Student类的字段包括:
学号(sid)
姓名(sname)
选课数(num)
该生的平均分(avgScore)
获得的总学分(totalCredits)
记录下一个学生编号的静态字段(nextId)
其中每个学生的sid在创建该学生对象时由nextId获取,第一个学生对象的学号为1,第二个为2,以此类推。
Student类实现的方法包括:
构造方法:设定学生的姓名,并生成学号,其余字段初始值为0;
get方法:读取每个字段的值(getSid、getSname、getTotalCredits …);
set方法:设置选课数、平均分和获得的总学分三个字段(setNum、setAvgScore、setTotalCredits);学号和姓名不能由set方法设定;
addCourse(double score, double credits):每当学生选择一门课程时即调用此方法,参数score为此学生学习本门课所获得的成绩,credits为本门课的学分。调用本方法首先使该学生的选课数加1,再重新计算该学生的平均分。

3.编写描述录入成绩信息的类

编写一个描述录入成绩信息的类SelectCourse。该类的字段包括学生学号(sid)、课程号(cid)、所得分数(score)。SelectCourse类包含一个有三个参数的构造方法。
Student类实现的方法包括:
构造方法:设定学生的姓名,并生成学号,其余字段初始值为0;
get方法:读取每个字段的值(getSid、getSname、getTotalCredits …);
set方法:设置选课数、平均分和获得的总学分三个字段(setNum、setAvgScore、setTotalCredits);学号和姓名不能由set方法设定;
addCourse(double score, double credits):每当学生选择一门课程时即调用此方法,参数score为此学生学习本门课所获得的成绩,credits为本门课的学分。调用本方法首先使该学生的选课数加1,再重新计算该学生的平均分。

4.编写模拟录入成绩的程序

编写类Test,该类中只有一个main方法。将前面定义的类实例化来模拟录入成绩的过程。
程序首先创建一个Student类型的一维数组,数组中至少包含3个学生“Alice” 、“Bob” 、“Cindy” ;然后创建一个Course类型的数组,记录课程的名称及学分数,数组中至少包含2门课程:1号课程“Java”3学分 、2号课程“C++”2学分 ;再创建一个SelectCourse类型的数组,该数组至少可容纳6条选课信息。
初始化阶段完成之后,程序提示用户输入学生成绩的信息,该信息包括学生学号、所选课程号、得到的分数。读入一条选课信息之后先根据该信息实例化一个SelectCourse类的对象并存入数组中;再调用Course类中的addStudent方法对相应的课程对象进行处理;然后还要调用Student类中的addCourse方法对选课的这个学生对象进行处理,要将其选课数加1,并重新计算该学生的平均分。每门课的学分可由已建立的相应课程的对象中得到。
完成信息的录入之后:
程序直接输出所有学生详细信息(包括学号、姓名、选课数、平均分和获得的总学分)。
再输出所有课程的信息(包括课程号、课程名、学分、选课人数、平均分)。


二、实验过程 1.课程类

编写类Course,定义需要的各种变量,注意变量全为private型,然后编写它们相应的get函数,以及除学号姓名外的set函数,代码如下:

class Course{
    private int cid;
    private String cname;
    private double credits;
    private int num;
    private double avgScore;
    public Course (int cid,String cname,double credits){
        this.cid = cid;
        this.cname = cname;
        this.credits = credits;
        //this.num = 0;
       // this.avgScore = 0;
    }
    public int getCid(){
        return cid;
    }
    public String getCname(){
        return cname;
    }
    public double getCredits(){
        return credits;
    }
    public int getNum(){
        return num;
    }
    public double getAvgScore(){
        return avgScore;
    }
    public void setNum(int num){
        this.num = num;
    }
    public void setAvgScore(double avgScore){
        this.avgScore = avgScore;
    }
    public void addStudent(double score){
        num++;
        avgScore = (avgScore*(num-1)+score)/num;
	}
}
2.学生类

编写类Student,同课程类,定义private型的各种变量,后编写其相对应的get函数和set函数,代码如下:

class Student{
    private int sid;
    private String sname;
    private int num;
    private double avgScore;
    private double totalCredits;
    private static int nextId = 1;
    public Student(String sname){
        this.sname = sname;
        sid = nextId++;
    }
    public int getSid(){
        return sid;
    }
    public String getSname(){
        return sname;
    }
    
    public int getNum(){
        return num;
    }
    public void setNum(int num){
        this.num = num;
    }
    public double getAvgScore(){
        return avgScore;
    }
    public void setAvgScore(double avgScore){
        this.avgScore = avgScore;
    }
    public double getTotalCredits(){
        return totalCredits;
    }
    public void setTotalCredits(double totalCredits){
        this.totalCredits += totalCredits;
    }
    
    public void addCourse(double score){
        num++;
        avgScore = (avgScore*(num-1)+score)/num;
	}
}
3.成绩信息类
class SelectCourse{
    private int sid;
    private int cid;
    private double score;
    public SelectCourse(int sid,int cid, double score){
        this.sid = sid;
        this.cid = cid;
        this.score = score;
    }
    public int getSid(){
        return sid;
    }
    public int getCid(){
        return cid;
    }
    public double getScore(){
        return score;
    }
}
4.主程序

编写主函数,首先定义三个学生类数组,“Alice”,“Bob”,“Cindy”,和两个课程类数组,“Java”,“C++”,再编写for循环对每一个学生的信息进行读入,最后输出想要的结果,代码如下:

class shiyan{
    public static void main(String[] args){
        Student[] s = new Student [3];
        s[0] = new Student("Alice");
        s[1] = new Student("Bob");
        s[2] = new Student("Cindy");
        Course[] c = new Course [2];
        c[0] = new Course (1,"Java",3.0);
        c[1] = new Course (2,"C++",2.0);
        SelectCourse[] sl = new SelectCourse[6];

        //读成绩
        int l = 0;
        Scanner input=new Scanner(System.in);
        for (int i = 0;i<sl.length;i++)
        {
            l++;
            System.out.println("学号");
            int sid = input.nextInt();
            System.out.println("课程号:");
            int cid = input.nextInt();
            System.out.println("课程分数:");
            double score = input.nextDouble();
            sl[i] = new SelectCourse(sid, cid, score);
        }
        for(int i=0; i<l; i++){
            
            for(int j=0; j<c.length; j++){
                if(sl[i].getCid() == c[j].getCid()){
                    c[j].addStudent(sl[i].getScore());
                }
            }
            
            for(int j=0; j<s.length; j++){
                if(sl[i].getSid() == s[j].getSid()){
                    s[j].addCourse(sl[i].getScore());
                    if(sl[i].getScore()>=60) {
                        for(int k=0; k<c.length; k++){
                            if(sl[i].getCid() == c[k].getCid()){
                                s[j].setTotalCredits(c[k].getCredits());
                            }
                        }
                    }
                }
            }

        }
        System.out.println();
        
        System.out.println("学号\t姓名\t选课数\t平均分\t学分");
        for(int i=0; i<s.length; i++) {
                System.out.println(s[i].getSid() + "\t" + s[i].getSname() + "\t" + s[i].getNum() + "\t" + s[i].getAvgScore() + "\t" + s[i].getTotalCredits());
        }
		System.out.println("课程号\t课程名\t学分\t选课数\t平均分");
		for(int i=0; i<s.length; i++) {
            if(s[i].getAvgScore() >= 60) {
				System.out.println(c[i].getCid() + "\t" + c[i].getCname() + "\t" + c[i].getCredits() + "\t" + c[i].getNum() + "\t" + c[i].getAvgScore());
			}
		}
	}
}
5.运行结果

运行结果如下图:


三、经验总结

本次实验是哈工大javaee课程的第一个实验内容,主要是对java语言中对象和类知识的理解运用,由于只是针对性地完成实验,因此代码的健壮性欠缺,望谅解!本人为萌新,如有错误,敬请指正。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/942076.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-17
下一篇2022-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存