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 Scanner;
/**
* @author HIT_Tsukinai
*/
class Course {//课程类
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;
thisame = cname;
this.avgScore =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.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)");
System.out.println("请输⼊学号(Alice:1 Bob:2 Cindy:3)");
int sid = Int();
System.out.println("请输⼊所选课程号(Java:0 C++:1)");
int cid = Int();
System.out.println("请输⼊成绩");
double score = Double();
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 = Int();
if(sid ==0){
System.out.println("查询结束");
}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课程第⼀个实验,算是掌握了构造⽅法,字段,⽬前学习的知识还不扎实,还需要继续努⼒

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。