Java实验(编写一个模拟录入学生成绩的程序)

编写一个模拟录入学生成绩的程序

实验1:对象和类
实验内容:
编写一个模拟录入学生成绩的程序,该程序包括一个用来记录课程信息的类(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):每当学生选择一门课程时即调用此方法,参数score为此学生学习本门课所获得的成绩。调用本方法首先使该学生的选课数加1,再重新计算该学生的平均分。
3.编写描述录入成绩信息的类
编写一个描述录入成绩信息的类SelectCourse。该类的字段包括学生学号(sid)、课程号(cid)、所得分数(score)。
SelectCourse类包含一个有三个参数的构造方法。
4.编写模拟录入成绩的程序
编写类Test,该类中只有一个main方法。将前面定义的类实例化来模拟录入成绩的过程。
程序首先创建一个Student类型的一维数组,数组中至少包含3个学生“Alice” 、“Bob” 、“Cindy” ;然后创建一个Course类型的数组,记录课程的名称及学分数,数组中至少包含2门课程“Java”3学分 、“C++”2学分 ;再创建一个SelectCourse类型的数组,该数组至少可容纳6条选课信息。
初始化阶段完成之后,程序提示用户输入学生成绩的信息,该信息包括学生学号、所选课程号、得到的分数。读入一条选课信息之后先根据该信息实例化一个SelectCourse类的对象并存入数组中;再调用Course类中的addStudent方法对相应的课程对象进行处理;然后还要调用Student类中的addCourse方法对选课的这个学生对象进行处理,要将其选课数加1,并重新计算该学生的平均分,如果分数及格还要将本门课的学分加入总学分,不及格将不获得学分。每门课的学分可由已建立的相应课程的对象中得到。
完成信息的录入之后,程序直接输出所有平均分大于等于60的学生详细信息(包括学号、姓名、选课数、平均分和获得的总学分)。再根据输入的学号,输出该学生的各门课的成绩及获得的总学分信息。

import java.util.Scanner;
/**
 * @author HIT_Tsukinai 
 */
class Course {//课程类
    private int cid;
    private String cname;
    private int credits;
    private int num = 0;
    private double avgScore;
    private double totalScore;

    public Course(int cid, String cname, int credits) {
        this.cid = cid;
        this.cname = cname;
        this.credits = credits;
        this.avgScore = 0;
        this.totalScore = 0;
    }

    public int getCid() {
        return cid;
    }

    public String getCname() {
        return cname;
    }

    public int getCredits() {
        return credits;
    }

    public double getAvgScore() {
        return avgScore;
    }

    public void setAvgScore(double newScore) {
        totalScore += newScore;
        avgScore = totalScore / num;
    }

    public void addStudent(double score) {
        num++;
        setAvgScore(score);
    }
}

class Student {//学生类
    private String sname;
    private int sid;
    private int num = 0;
    private double avgScore;
    private int totalCredits;
    private double totalScore = 0;
    private double[] eachScore = new double[2];//储存每门课成绩
    private static int nextId = 1;


    public Student(String name) {
        this.sname = name;
        this.num = 0;
        this.avgScore = 0;
        this.totalCredits = 0;
        this.sid = nextId++;
    }

    public double getEachScore(int cid) {
        return eachScore[cid];
    }

    public void setEachScore(int cid, double score) {
        eachScore[cid] = score;
    }

    public int getSid() {
        return sid;
    }

    public String getSname() {
        return sname;
    }

    public int getNum() {
        return num;
    }

    public double getAvgScore() {
        return avgScore;
    }

    public int getTotalCredits() {
        return totalCredits;
    }

    public void setAvgScore(double newScore) {
        totalScore += newScore;
        avgScore = totalScore / num;
    }

    public void setTotalCredits(int newCredits) {
        totalCredits += newCredits;
    }

    public void addCourse(double score, double credits) {
        num++;
        setAvgScore(score);
    }
}

class SelectCourse {//选课类
    private int sid;
    private int cid;
    private double score;

    public SelectCourse(int sid, int cid, double score) {
        this.cid = cid;
        this.sid = sid;
        this.score = score;
    }

}

public class Test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Student[] s = new Student[4];
        Course[] c = new Course[2];
        SelectCourse[] sc = new SelectCourse[6];
        s[1] = new Student("Alice");
        s[2] = new Student("Bob");
        s[3] = new Student("Cindy");
        c[0] = new Course(0, "Java", 3);
        c[1] = new Course(1, "C++", 2);
        for (int i = 0; i < 6; i++) {
            System.out.println("请输入学号(Alice:1 Bob:2 Cindy:3)");
            int sid = scan.nextInt();
            System.out.println("请输入所选课程号(Java:0 C++:1)");
            int cid = scan.nextInt();
            System.out.println("请输入成绩");
            double score = scan.nextDouble();
            s[sid].setEachScore(cid, score);
            if (score >= 60) {
                s[sid].setTotalCredits(c[cid].getCredits());
            }
            sc[i] = new SelectCourse(sid, cid, score);
            c[cid].addStudent(score);
            s[sid].addCourse(score, c[cid].getCredits());
        }
        for (int i = 1; i <= 3; i++) {
            if (s[i].getAvgScore() >= 60) {
                System.out.printf("学号:%d\n姓名:%s\n选课数:%d\n平均分:%f\n总学分:%d\n\n",
                        s[i].getSid(), s[i].getSname(), s[i].getNum(), s[i].getAvgScore(), s[i].getTotalCredits());
            }
        }
        while (true) {
            System.out.println("请输入需要查询的学号,结束查询输入0");
            int sid = scan.nextInt();
            if (sid == 0) {
                System.out.println("查询结束");
                System.exit(0);
            } else {
                System.out.printf("%s同学成绩单\n%s的成绩为%f\n%s的成绩为%f\n总学分为%d\n\n", s[sid].getSname(), c[0].getCname(), s[sid].getEachScore(0), c[1].getCname(), s[sid].getEachScore(1), s[sid].getTotalCredits());
            }
        }
    }
}

tips:这是本人JavaEE课程第一个实验,算是掌握了构造方法,字段,目前学习的知识还不扎实,还需要继续努力

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值