
- 一、实验内容
- 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,再重新计算本门课程的平均分。
编写一个描述学生的类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,再重新计算该学生的平均分。
编写一个描述录入成绩信息的类SelectCourse。该类的字段包括学生学号(sid)、课程号(cid)、所得分数(score)。SelectCourse类包含一个有三个参数的构造方法。
Student类实现的方法包括:
构造方法:设定学生的姓名,并生成学号,其余字段初始值为0;
get方法:读取每个字段的值(getSid、getSname、getTotalCredits …);
set方法:设置选课数、平均分和获得的总学分三个字段(setNum、setAvgScore、setTotalCredits);学号和姓名不能由set方法设定;
addCourse(double score, double credits):每当学生选择一门课程时即调用此方法,参数score为此学生学习本门课所获得的成绩,credits为本门课的学分。调用本方法首先使该学生的选课数加1,再重新计算该学生的平均分。
编写类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语言中对象和类知识的理解运用,由于只是针对性地完成实验,因此代码的健壮性欠缺,望谅解!本人为萌新,如有错误,敬请指正。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)