这是我刚学完Java封装继承的时候写的一个小案例,还不会使用集合,就用数组硬写了出来,但数组的缺点是不能改变数组的长度,虽然可以写个方法新建长度加一的数组然后把旧的数组装进去,但是真的好麻烦还没必要。如果想看用集合实现的代码可以到我的空间来看。
题目:设计一个名为Student 的类,包括属性有“学号”、“姓名”、以及 3 门课程“数学”、“英语”和“计算机”的成绩,包括的方法有计算 3 门课程的“总分”、“平均分”、“最高分”及“最低分”。
使用数组来实现对多个学生的管理。写一个控制台应用程序。
菜单如下:
1.添加学生
2.删除学生
3.查询学生
4.修改学生
5.打印学生
打印格式如下
学号 姓名 数学 英语 计算机
01 张三 56 65 77
02 李四 89 55 44
6.统计学生:
所有学生的“数学”、“英语”和“计算机”每门课程总的平均成绩、最高分、最低分。
打印格式:
学科 平均成绩 最高分 最低分
数学
英语
计算机
package com.qf.weektest;
import java.util.Scanner;
class Student{
private String stuno;
private String name;
private float math;
private float english;
private float computer;
public float sum(float math,float english,float computer){
return math+english+computer;
}
public float avg(Student stu[],String subject){//求学生数组的平均成绩
if (subject.equals("数学")){
float sum=0;
for (int i = 0; i < stu.length; i++) {
if (!stu[i].getName().equals("null")){
sum=sum+stu[i].getMath();
}
}
return sum;
} else if (subject.equals("英语")) {
float sum=0;
for (int i = 0; i < stu.length; i++) {
if (!stu[i].getName().equals("null")){
sum=sum+stu[i].getEnglish();
}
}
return sum;
}else if(subject.equals("计算机")){
float sum=0;
for (int i = 0; i < stu.length; i++) {
if (!stu[i].getName().equals("null")){
sum=sum+stu[i].getComputer();
}
}
return sum;
}
return 0.0f;
}
public float max(Student stu[],String subject){//求单科最大值
if (subject.equals("数学")){
float temp=stu[0].getMath();
for (int i = 1; i < stu.length; i++) {
if (!stu[i].getName().equals("null")&&temp<stu[i].getMath()){
temp=stu[i].getMath();
}
}
return temp;
}else if (subject.equals("英语")){
float temp=stu[0].getEnglish();
for (int i = 1; i < stu.length; i++) {
if (!stu[i].getName().equals("null")&&temp<stu[i].getEnglish()){
temp=stu[i].getEnglish();
}
}
return temp;
}else if(subject.equals("计算机")){
float temp=stu[0].getComputer();
for (int i = 1; i < stu.length; i++) {
if (!stu[i].getName().equals("null")&&temp<stu[i].getComputer()){
temp=stu[i].getComputer();
}
}
return temp;
}
return 0.0f;
}
public float min(Student stu[],String subject){//求单科最小值
if (subject.equals("数学")){
float temp=stu[0].getMath();
for (int i = 1; i < stu.length; i++) {
if (!stu[i].getName().equals("null")&&temp>stu[i].getMath()){
temp=stu[i].getMath();
}
}
return temp;
}else if (subject.equals("英语")){
float temp=stu[0].getEnglish();
for (int i = 1; i < stu.length; i++) {
if (!stu[i].getName().equals("null")&&temp>stu[i].getEnglish()){
temp=stu[i].getEnglish();
}
}
return temp;
}else if(subject.equals("计算机")){
float temp=stu[0].getComputer();
for (int i = 1; i < stu.length; i++) {
if (!stu[i].getName().equals("null")&&temp>stu[i].getComputer()){
temp=stu[i].getComputer();
}
}
return temp;
}
return 0.0f;
}
public String getStuno() {
return stuno;
}
public void setStuno(String stuno) {
this.stuno = stuno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getMath() {
return math;
}
public void setMath(float math) {
this.math = math;
}
public float getEnglish() {
return english;
}
public void setEnglish(float english) {
this.english = english;
}
public float getComputer() {
return computer;
}
public void setComputer(float computer) {
this.computer = computer;
}
}
class StudentManager extends Student{
public void storageStudent(Student stu[]){//初始化学生信息
for (int i = 0; i < stu.length; i++) {
stu[i]=new Student();
Scanner sc=new Scanner(System.in);
System.out.println("请输入第"+(i+1)+"个学生的信息:");
System.out.print("姓名:");
stu[i].setName(sc.next());
if (stu[i].getName().equals("null")){
stu[i].setStuno("null");
stu[i].setComputer(0);
stu[i].setEnglish(0);
stu[i].setMath(0);
}else {
System.out.print(" 学号:");
stu[i].setStuno(sc.next());
System.out.print(" 数学:");
stu[i].setMath(sc.nextFloat());
System.out.print(" 英语:");
stu[i].setEnglish(sc.nextFloat());
System.out.print(" 计算机:");
stu[i].setComputer(sc.nextFloat());
}
}
}
public int checkStudent(Student stu[]){//从左往右检查学生数组是否有空余的位置,如果有就返回空余位置的下标,如果没有就返回-1
for (int i = 0; i < stu.length; i++) {
if (stu[i].getName().equals("null")){
return i;
}
}
return -1;
}
public int findStudent(Student stu[],String name){//根据姓名查找学生的姓名,如果有就返回相应的坐标,如果没有就返回-1,这个方法和后面的查询学生方法有些重复,但是我在修改学生,删除学生方法中需要用到查询,所以就直接重写了一个方法
for (int i = 0; i < stu.length; i++) {
if (stu[i].getName().equals(name)){
return i;
}
}
return -1;
}
public void addStudent(Student stu[]){//添加学生信息
int index=checkStudent(stu);
if (index>=0){
Scanner sc=new Scanner(System.in);
System.out.println("请添加学生信息");
System.out.print("姓名: ");
stu[index].setName(sc.next());
System.out.print("学号: ");
stu[index].setStuno(sc.next());
System.out.print("数学成绩:");
stu[index].setMath(sc.nextFloat());
System.out.print("英语成绩:");
stu[index].setEnglish(sc.nextFloat());
System.out.print("计算机成绩:");
stu[index].setComputer(sc.nextFloat());
System.out.println("添加成功");
}
else {
System.out.println("没有多余的位置了,添加失败");
}
}
public void deleteStudent(Student stu[]){//删除学生
Scanner sc=new Scanner(System.in);
System.out.println("请输入要删除的学生姓名:");
String name=sc.next();
int index=findStudent(stu,name);
if (index>=0){
stu[index].setName("null");
stu[index].setStuno("null");
stu[index].setComputer(0);
stu[index].setEnglish(0);
stu[index].setMath(0);
System.out.println("删除完毕");
}else {
System.out.println("没有这个学生,删除失败");
}
}
public void searchStudent(Student stu[],String name){//查询学生
int index=findStudent(stu,name);
if (index>=0){
System.out.println("存在这个学生");
}else {
System.out.println("不存在这个学生");
}
}
public void reviseStudent(Student stu[],String name){//修改学生的学号,成绩
int index=findStudent(stu,name);
if (index>=0){
Scanner sc=new Scanner(System.in);
System.out.println("原来的学生姓名为:"+stu[index].getName());
System.out.print("请输入要修改的学生姓名:");
stu[index].setName(sc.next());
System.out.println("原来的学生学号为:"+stu[index].getStuno());
System.out.print("请输入要修改的学生学号:");
stu[index].setStuno(sc.next());
System.out.println("原来的学生数学成绩为:"+stu[index].getMath());
System.out.print("请输入要修改的数学成绩:");
stu[index].setMath(sc.nextFloat());
System.out.println("原来的学生英语成绩为:"+stu[index].getEnglish());
System.out.print("请输入要修改的英语成绩:");
stu[index].setEnglish(sc.nextFloat());
System.out.println("原来的学生计算机成绩为:"+stu[index].getComputer());
System.out.print("请输入要修改的计算机成绩:");
stu[index].setComputer(sc.nextFloat());
System.out.println("修改成功");
}else {
System.out.println("不存在这个人");
}
}
public void printStudent(Student stu[]){//打印学生信息
System.out.println("学生所有信息如下:");
for (int i = 0; i < stu.length; i++) {
if (!stu[i].getName().equals("null")){
System.out.print("学号:"+stu[i].getStuno()+" 姓名:"+stu[i].getName()+" 数学:"+stu[i].getMath()+" 英语:"+stu[i].getEnglish()+" 计算机:"+stu[i].getComputer());
System.out.println();
}
}
}
public void statisticsStudent(Student stu[],String subject){//统计学生信息
System.out.println(subject+" "+avg(stu,subject)+" "+max(stu,subject)+" "+min(stu,subject));
}
}
public class Demo12 {
public static void main(String[] args) {
Student stu[]=new Student[4];
StudentManager stum=new StudentManager();
stum.storageStudent(stu);
loop:while (true){
Scanner sc=new Scanner(System.in);
System.out.println("请选择要进行的操作:");
System.out.println("1.添加学生");
System.out.println("2.删除学生");
System.out.println("3.查询学生");
System.out.println("4.修改学生");
System.out.println("5.打印学生");
System.out.println("6.统计学生");
System.out.println("7.退出操作");
int chose=sc.nextInt();
switch (chose){
case 1:
stum.addStudent(stu);
break;
case 2:
stum.deleteStudent(stu);
break;
case 3:
System.out.println("请输入要查询的学生姓名:");
String name1=sc.next();
stum.searchStudent(stu,name1);
break;
case 4:
System.out.println("请输入要修改的学生姓名:");
String name2=sc.next();
stum.reviseStudent(stu,name2);
break;
case 5:
stum.printStudent(stu);
break;
case 6:
System.out.println("学科 平均成绩 最高分 最低分");
stum.statisticsStudent(stu,"数学");
stum.statisticsStudent(stu,"英语");
stum.statisticsStudent(stu,"计算机");
break;
case 7:
System.out.println("退出成功");
break loop;
default:
break;
}
}
}
}