JAVA按要求完成下列程序编写,学生类

⒈创建一个学生类,数据成员包含了学号、姓名、数学成绩,方法包含了构造方法、输出学生信息的方法、修改成绩的方法、获得成绩的方法。⒉建立一个含有n个学生的数组,n由用户从键盘... ⒈创建一个学生类,数据成员包含了学号、姓名、数学成绩,方法包含了构造方法、输出学生信息的方法、修改成绩的方法、获得成绩的方法。
⒉建立一个含有n个学生的数组,n由用户从键盘输入,每个学生的信息也让用户从键盘输入,计算学生的数学成绩的平均分。
⒊建立Student类的子类CollegeStudent,增加成员变量出生时间Date,性别sex,重写displays()方法。测试该类,并建立上转型变量测试。
⒋修改Student,使Student类实现下面的接口,然后调用接口中的方法对Student数组按数学成绩从高到低排序。
interface Compare{ boolean compare(Object o); }
⒌自定义一个异常类,检查Student类初始化时数学成绩是否合理。并在建立对象时使用该异常类。

补充:如果可以请尽量用简单的方法~最好有解释,如果代码详尽也可以就不用解释了~还有这是一个题目,要满足上面的五个要求,本人不是很会JAVA所以只要参考诸位的代码了~应该不难的,麻烦诸位了>.<
前面三个条件我基本上都能够达成,主要是加入后面两个条件就不会做了T.T 不知道要怎么修改
展开
 我来答
duoloniori
2014-10-20 · TA获得超过456个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:233万
展开全部

给你一个相对完整的代码吧

Student类:

package com.baidu.students;

import java.util.List;
import java.util.Scanner;

public class Student implements Comparable<Student> { // 继承现有的java.lang.Comparable接口,可支持List的排序
private String stuNo; // 学号
private String stuName; // 姓名
private float mathScore; // 数学成绩

public Student() {} // 默认构造方法

public Student(String stuNo, String stuName, float mathScore) throws ScoreException { // 初始化构造方法
this.stuNo = stuNo;
this.stuName = stuName;

// 这就是你要的在初始化时判断成绩是否合理
if(mathScore < 0 || mathScore > 100) {
throw new ScoreException("分数不能小于0且不能大于100");
}
if(mathScore % 0.5f != 0) {
throw new ScoreException("分数必须是整数或是0.5的倍数");
}
this.mathScore = mathScore;
}

public void disylay() { // 输出成绩
// 以类似表格的形式输出
System.out.println(String.format("%s\t%s\t%.1f", stuNo, stuName, mathScore));
}

public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}

// 获得成绩的方法直接用Getter方法
public float getMathScore() {
return mathScore;
}
// 修改成绩的方法也直接用Setter方法
public void setMathScore(float mathScore) {
this.mathScore = mathScore;
}

/**
 * 创建学生对象
 * @param scanner
 * @return
 */
public static Student create(Scanner scanner) {
String stuNo;
String stuName;
float mathScore;
System.out.print("请输入学号:");
stuNo = scanner.next();
System.out.print("请输入姓名:");
stuName = scanner.next();
Student student;
do { // 获取数学成绩,当成绩不合理时重新输入,进入无限循环
mathScore = inputScore(scanner);
try {
//若学生成绩合理即退出无限循环
student = new Student(stuNo, stuName, mathScore);
break;
} catch (ScoreException e) {
System.out.println(e.getMessage());
}
} while(true);
return student;
}

private static float inputScore(Scanner scanner) {
System.out.print("请输入成绩:");
float mathScore;
mathScore = scanner.nextFloat();
return mathScore;
}

/**
 * 计算平均分
 * @param students
 * @return
 */
public static float getAvg(List<Student> students) {
if(null == students || students.isEmpty()) {
return 0;
}
int totalScore = 0;
for(Student s : students) {
totalScore += s.getMathScore();
}
return (float) (totalScore / (double) students.size());
}

@Override
public int compareTo(Student o) {
if(null == o) {
return 1;
}
if(this.mathScore < o.mathScore) {
return -1;
} else if(this.mathScore > o.mathScore) {
return 1;
}
return 0;
}
}

CollegeStudent类:

package com.baidu.students;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class CollegeStudent extends Student {
private Date birthDate;
private String sex;

private DateFormat outFormat = new SimpleDateFormat("yyyy-mm-dd"); // 输出的日期格式
private static DateFormat inFormat = new SimpleDateFormat("yyyymmdd"); // 输入的日期格式

private CollegeStudent() {
super();
}
private CollegeStudent(String stuNo, String stuName, float mathScore) throws ScoreException {
super(stuNo, stuName, mathScore);
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR) - 20; // 出生日期预设为20年前
cal.set(Calendar.YEAR, year);
this.birthDate = cal.getTime();
this.sex = "未知";
}

public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}

public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

@Override
public void disylay() {
System.out.println(String.format("%s\t%s\t%.1f\t%s\t%s", getStuNo(),
getStuName(), getMathScore(),
outFormat.format(this.birthDate), this.sex));
}

/**
 * 创建学生对象
 * @param scanner
 * @return
 */
public static Student create(Scanner scanner) { // 静态方法不可继承
String stuNo;
String stuName;
float mathScore;
System.out.print("请输入学号:");
stuNo = scanner.next();
System.out.print("请输入姓名:");
stuName = scanner.next();
CollegeStudent student;
do { // 获取数学成绩,当成绩不合理时重新输入,进入无限循环
mathScore = inputScore(scanner);
try {
//若学生成绩合理即退出无限循环
student = new CollegeStudent(stuNo, stuName, mathScore);
break;
} catch (ScoreException e) {
System.out.println(e.getMessage());
// mathScore = inputScore(scanner);
}
} while(true);

System.out.print("请输入出生日期(如20020101):");
String birth = scanner.next();
Date birthDate = null;
try {
birthDate = inFormat.parse(birth);
} catch (ParseException e) {
birth = null;
}
if(null != birthDate) {
student.setBirthDate(birthDate);
}
System.out.print("请输入性别(0:男,1或其他:女):");
int gender = scanner.nextInt();
String sex = null;
if(0 == gender) {
sex = "男";
} else {
sex = "女";
}
if(null != sex) {
student.setSex(sex);
}
// 返回类型为Student,即是向上转型
return student;
}

private static float inputScore(Scanner scanner) {
System.out.print("请输入成绩:");
float mathScore;
mathScore = scanner.nextFloat();
return mathScore;
}
}

异常类:

package com.baidu.students;

public class ScoreException extends Exception {
private static final long serialVersionUID = 1L;

public ScoreException() {
super();
}

public ScoreException(String arg0) {
super(arg0);
}
}

测试类:

package com.baidu.students;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * 测试类
 */
public class TestStudent {
static int n; // 学生数量
static List<Student> students = new ArrayList<Student>(); // 学生数组,用List方便排序
private static Scanner scanner;

public static void main(String[] args) {
scanner = new Scanner(System.in); // 初始化键盘输入
setN(false);

inputStudents();
showStudents();
}

// 循环输入学生信息
private static void inputStudents() {
for(int i = 0; i < n; i ++) {
System.out.println(String.format("请输入第%d个学生信息:", i + 1));
Student s = null;
// 交替创建Student对象和CollegeStudent对象
if(i % 2 == 0) {
s = Student.create(scanner);
} else {
s = CollegeStudent.create(scanner);
}
if(null != s) {
students.add(s);
}
System.out.println("------------------------------------------------------");
}
Collections.sort(students); // 升序排序,即分数从低到高
Collections.reverse(students); // 反转列表,即将排序设置成降序
}

// 输出学生信息
private static void showStudents() {
System.out.println("\r\n学生信息如下:\r\n学号\t姓名\t成绩\t出生日期\t\t性别");
for(Student s : students) {
s.disylay();
}
System.out.println("\r\n平均分:" + Student.getAvg(students));
}

/**
 * 迭代输入学生数量
 * @param retry - 用来标识是否重新输入,以显示不同提示
 */
private static void setN(boolean retry) {
if(retry) {
System.out.print("请重新输入学生数量:");
} else {
System.out.print("请输入学生数量:");
}
n = scanner.nextInt();
if(n > 0) { // 判断n的有效性
System.out.println("学生数量已设为" + n);
return;
}
System.out.print("学生数量必须大于0,");
setN(true);
}
}
yugi111
推荐于2017-10-12 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
package zhidao;

import java.util.Scanner;

public class Student implements Compare
{
private String no;
private String name;
private double score;

public Student ( String no, String name, double score )
{
this.no = no;
this.name = name;
this.score = score;
}

public String displays ()
{
StringBuilder builder = new StringBuilder ();
builder.append ("Student [no=");
builder.append (no);
builder.append (", name=");
builder.append (name);
builder.append (", score=");
builder.append (score);
builder.append ("]");
return builder.toString ();
}

public void setScore ( double score )
{
this.score = score;
}

public double getScore ()
{
return score;
}

@Override
public boolean compare ( Object o )
{
return ( this == o || null != o && o.getClass ().equals (this.getClass ()) )
&& ( (Student) o ).score > this.score;
}

public static void sort ( Student[] students )
{
for ( int i = 0; i < students.length; i++ )
{
for ( int j = i + 1; j < students.length; j++ )
{
if (students[i].compare (students[j]))
{
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}

public static void main ( String[] args )
{
System.out.print ("建立一个含有n个学生的数组, 从键盘输入n: ");
Scanner scanner = new Scanner (System.in);
int count = 0;
double scores = 0;
int n = scanner.nextInt ();
Student[] students = new Student[n];
System.out.println ("从键盘输入每个学生的信息: 学号、姓名、数学成绩 用英文逗号分隔.");
String line = null;
try
{
while (count < n && null != ( line = scanner.next () ))
{
if (line.matches ("^\\w+\\,\\w+\\,\\d+(\\.\\d*)?$"))
{
String no = line.split ("\\,")[0].trim ();
String name = line.split ("\\,")[1].trim ();
double score = Double.parseDouble (line.split ("\\,")[2].trim ());
students[count] = new Student (no, name, score);
scores += score;
count++;
}
}
}
catch (ScoreException e)
{
e.printStackTrace ();
}
System.out.println ("排序:");
sort (students);
for ( int i = 0; i < students.length; i++ )
{
System.out.println (students[i].displays ());
}
System.out.println ("学生的数学成绩的平均分: " + ( scores / n ));
scanner.close ();
Student collegeStudent = new CollegeStudent ("001", "yugi111", 120, "1999-01-01", "man");
System.out.println (collegeStudent.displays ());
}
}

class CollegeStudent extends Student
{
private String Date;
private String sex;

public CollegeStudent ( String no, String name, double score, String Date, String sex )
{
super (no, name, score);
this.Date = Date;
this.sex = sex;
}

@Override
public String displays ()
{
StringBuilder builder = new StringBuilder ();
builder.append ("CollegeStudent [Date=").append (Date).append (", sex=").append (sex).append ("]");
return builder.toString ();
}
}

interface Compare
{
boolean compare ( Object o );
}

class ScoreException extends IllegalArgumentException
{
private static final long serialVersionUID = 1L;

public ScoreException ()
{
super ();
}

public ScoreException ( String s )
{
super (s);
}

static ScoreException forInputString ( String s )
{
return new ScoreException ("For input string: \"" + s + "\"");
}
}
追问
谢谢,你的答案很完整,虽然我看了很久还有些地方没看懂的…比如74行到第92行之间的…
原谅我JAVA几乎才刚入门,不太理解…
追答
额,说来话长啊
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
燃De日記
2014-10-20 · 超过12用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:9.2万
展开全部
只给你写那么多,下面的自己查资料,多动脑,才能学好编程,希望采纳

package com.test;

public class Student {
private String sNum;
private String sName;
private float sMath;

public Student(){}

/**
* @param sNum
* @param sName
* @param sMath
* 有参构造方法
*/
public Student(String sNum,String sName,float sMath){
this.sNum = sNum;
this.sName = sName;
this.sMath = sMath;
}

/**
* @param student
* 输出学生信息
*/
public void printStudent(Student student){

System.out.println( "学号"+student.getsNum()+" 姓名:"+student.getsName()+" 数学成绩"+student.getsMath() );
}

public String getsNum() {
return sNum;
}

public void setsNum(String sNum) {
this.sNum = sNum;
}

public String getsName() {
return sName;
}

public void setsName(String sName) {
this.sName = sName;
}

/**
* @return 学生成绩
*/
public float getsMath() {
return sMath;
}

/**
* @param sMath
* 修改学生成绩
*/
public void setsMath(float sMath) {
this.sMath = sMath;
}

}

package com.test;

import java.util.Scanner;

public class TestStudent {

public static void main(String[] args) {

@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
//由键盘输入数组大小
Student[] array = new Student[ sc.nextInt() ];

for(int i=0;i<array.length;i++){
Student student = array[i];
//键盘输入学号
student.setsNum(sc.nextLine());
//键盘输入姓名
student.setsName(sc.nextLine());
//键盘输入数学成绩
student.setsMath(sc.nextFloat());
}

//计算数组里学生的平均成绩
float sum = 0;
float avgMath = 0;
for(int i=0;i<array.length;i++){
sum +=array[i].getsMath();
}
avgMath = sum/array.length;

System.out.println("学生的平均成绩是:"+avgMath);
}

}

package com.test;

import java.util.Date;

public class CollegeStudent extends Student{
private Date sDate;
private String sSex;

public CollegeStudent(){}
public CollegeStudent(Date sDate,String sSex){
super();
this.sDate = sDate;
this.sSex = sSex;
}

/* (non-Javadoc)
* @see com.test.Student#printStudent(com.test.Student)
* 重写Student的方法,不知道你说的display()就是此方法,只不过名字不同
*/
public void printStudent(CollegeStudent student){
System.out.println( "学号"+student.getsNum()+" 姓名:"+student.getsName()
+" 数学成绩"+student.getsMath()+"出生日期:"+student.getsDate()+"性别:"+student.getsSex() );
}
public Date getsDate() {
return sDate;
}
public void setsDate(Date sDate) {
this.sDate = sDate;
}
public String getsSex() {
return sSex;
}
public void setsSex(String sSex) {
this.sSex = sSex;
}

}
追问
嗯嗯,谢谢你,你的代码我有很认真的看,有些之前不懂的地方看完之后就懂了。
追答
采纳吧,下面还要你自己努力,不难,辛苦一个小时
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-21
展开全部
public class Student implements Comparable<Student> {

private String number;// 学号

private String name;// 姓名

private int mathScore; // 数学成绩

public Student() {
super();
// TODO Auto-generated constructor stub
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getMathScore() {
return mathScore;
}

public void setMathScore(int mathScore) {
this.mathScore = mathScore;
}

@Override
public String toString() {
return "Student [数学成绩=" + mathScore + ", 姓名=" + name
+ ", 学号=" + number + "]";
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((number == null) ? 0 : number.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (number == null) {
if (other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
return true;
}

@Override
public int compareTo(Student student) {
if(student == null)
return 1;
return this.getMathScore()-student.getMathScore();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小锄头andrew
2014-10-20 · TA获得超过627个赞
小锄头andrew
采纳数:224 获赞数:627

向TA提问 私信TA
展开全部

赞同1楼QQMSD8的说法,我写了第一个,你尝试着写写其他的吧:

package com.zhidao;

public class Student {

private String Sno;

private String name;

private String mathScore;

public Student() {
}

public Student(String sno,String name,String mathScore) {
this.Sno=sno;
this.name=name;
this.mathScore=mathScore;
}

public String getSno() {
return Sno;
}

public void setSno(String sno) {
Sno = sno;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getMathScore() {
return mathScore;
}

public void setMathScore(String mathScore) {
this.mathScore = mathScore;
}

@Override
public String toString() {
return "学号:"+this.Sno+" 姓名:"+name+" 数学成绩:"+mathScore;
}


}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式