【JavaSE项目】利用数组完成学生管理系统【简】
项目描述
设计一个名为Student的类,包括属性有"学号"、“姓名”、以及3门课程
“数学”、“英语"和"计算机"的成绩,包括的方法有计算3门课程的"总分”、
“平均分”、“最高分"及"最低分”。
使用数组来实现对多个学生的管理。写一个控制台应用程序。
菜单如下:
1.添加学生
2.删除学生
3.查询学生
4.修改学生
5.打印学生
打印格式如下
学号 姓名 数学 英语 计算机
01 张三 56 65 77
02 李四 89 55 44
6.统计学生:
所有学生的“数学”、“英语”和“计算机”每门课程总的平均成绩、最高分、最低分。
打印格式:
学科 平均成绩 最高分 最低分
数学
英语
class Student2 {//学生类
private String id;//学号
private String name;//姓名
private float math;//数学成绩
private float english;//英语成绩
private float computer;//计算机成绩
public Student2() {
}
public Student2(String id, String name, float math, float english, float computer) {
this.id = id;
this.name = name;
this.math = math;
this.english = english;
this.computer = computer;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return id + "\t\t\t" + name + "\t\t" + math + "\t\t" + english + "\t\t" + computer;
}
/*
三门课程的总和
*/
public float sum() {
return getMath() + getEnglish() + getComputer();
}
/*
三门课程的平均值
*/
public float avg() {
return (getMath() + getEnglish() + getComputer()) / 3;
}
/*
三门课程中的最大值
*/
public float max() {
float m = getMath();
float e = getEnglish();
float c = getComputer();
float max = Math.max(m, e);
max = Math.max(max, c);
return max;
}
/*
三门课程中的最小值
*/
public float min() {
float m = getMath();
float e = getEnglish();
float c = getComputer();
float min = Math.min(m, e);
min = Math.min(min, c);
return min;
}
}
class Manager {//学生操作类
static Student2[] stus = {
new Student2("1", "张三", 99, 147, 60),
new Student2("2", "李四", 96, 130, 100)};//学生信息数组
private static int count = 10;//当前学生个数
public Manager() {
}
public Manager(Student2[] stus, int count) {
Manager.stus = stus;
Manager.count = count;
}
public Student2[] getStus() {
return stus;
}
public int getCount() {
return count;
}
/*
添加学生
*/
public boolean add(Student2 student) {
Scanner scanner = new Scanner(in);
out.println("请输入添加的学生的id");
String id = scanner.next();
out.println("请输入添加的学生的姓名");
String name = scanner.next();
out.println("请输入添加的学生的数学成绩");
float math = scanner.nextFloat();
out.println("请输入添加的学生的英语成绩");
float english = scanner.nextFloat();
out.println("请输入添加的学生的计算机成绩");
float computer = scanner.nextFloat();
student.setId(id);
student.setName(name);
student.setMath(math);
student.setEnglish(english);
student.setComputer(computer);
Student2[] newStudents = new Student2[stus.length + 1];//定义一个新数组,容量比原数组大1
boolean flag = false;
for (int i = 0; i < stus.length; i++) {//遍历原数组
if (stus[i].getId().equals(student.getId())) {
out.println("添加失败,提示:该学生学号已存在,请输入正确的学号");
break;
}
if (stus.length < getCount()) {//如果原数组的容量小于学生人数,则把原数组的数据放入新数组
newStudents[i] = stus[i];
flag = true;
}else {
out.println("学生人数已满,无法添加");
break;
}
}
while (flag) {
out.println("添加成功");
newStudents[newStudents.length - 1] = student;//把要添加的数据放入到新数组的最后一位
stus = newStudents;//把原数组的引用指向新数组
flag = false;
}
out.println();
return true;
}
/*
通过id删除学生
*/
public boolean deleteById(String id) {
for (int i = 0; i < stus.length; i++) {//遍历原数组
if (stus[i].getId().equals(id)) {//如果传入的id在原数组中找到
stus[i] = stus[stus.length - 1];//把最后一位元素赋给要删除的那个位置上
Student2[] student2s = Arrays.copyOf(stus, stus.length - 1);//取[0,length-1]范围内的数组
stus = student2s;
out.println("删除成功");
} else {
out.println("删除失败,提示:该学生不存在,请输入正确的学号");
break;
}
}
out.println();
return true;
}
/*
通过 name 查询学生
*/
public Student2[] select(String name) {
for (Student2 student2 : stus) {
boolean flag = false;
if (student2.getName().equals(name)) {
out.println("找到了这名学生,信息如下:");
out.println("学号" + "\t\t" + "姓名" + "\t\t" + "数学" + "\t\t" + "英语" + "\t\t" + "计算机");
out.println(student2);
flag = true;
break;
}
while (flag) {
out.println("查找失败,提示:该学生不存在,请输入正确的姓名");
}
}
out.println();
return stus;
}
/*
通过id修改数组中的学生信息
*/
public boolean update(Student2[] stus) {
out.println("请输入要修改的学生的id");
Scanner scanner = new Scanner(in);
String id = scanner.nextLine();
for (Student2 student2 : stus) {
if (student2.getId().equals(id)) {
out.println("请选择要修改的序号");
out.println("1.姓名");
out.println("2.数学成绩");
out.println("3.英语成绩");
out.println("4.计算机成绩");
int choose = scanner.nextInt();
switch (choose) {
case 1:
out.println("请输入你想修改的姓名");
String name = scanner.next();
student2.setName(name);
break;
case 2:
out.println("请输入你想修改的数学成绩");
float mathScore = scanner.nextFloat();
student2.setMath(mathScore);
break;
case 3:
out.println("请输入你想修改的英语成绩");
float englishScore = scanner.nextFloat();
student2.setEnglish(englishScore);
break;
case 4:
out.println("请输入你想修改的计算机成绩");
float computerScore = scanner.nextFloat();
student2.setComputer(computerScore);
break;
default:
out.println("请输入正确的序号");
}
} else {
out.println("修改失败,提示:该学生不存在,请输入正确的学号");
break;
}
}
out.println();
return true;
}
/*
打印学生
*/
public void printInfo(Student2[] students) {
out.println("学号" + "\t\t" + "姓名" + "\t\t" + "数学" + "\t\t" + "英语" + "\t\t" + "计算机");
for (Student2 student : students) {
out.println(student);
}
out.println();
}
/*
统计学生
*/
public void statistic() {
float[] maths = new float[stus.length];//定义数学成绩数组用来接收数学成绩
float mathSum = 0;//数学成绩总和
float[] englishs = new float[stus.length];//定义英语成绩数组用来接收英语成绩
float englishSum = 0;//英语成绩总和
float[] computers = new float[stus.length];//定义计算机成绩数组用来接收计算机成绩
float computerSum = 0;//计算机成绩总和
for (int i = 0; i < stus.length; i++) {//遍历原数组,把学生数学成绩放入到数学成绩数组中
maths[i] = stus[i].getMath();
}
for (float math : maths) {//遍历数学成绩数组求出所有学生的数学成绩总和
mathSum += math;
}
for (int i = 0; i < stus.length; i++) {//遍历原数组,把学生数学成绩放入到英语成绩数组中
englishs[i] = stus[i].getEnglish();
}
for (float english : englishs) {//遍历英语成绩数组求出所有学生的英语成绩总和
englishSum += english;
}
for (int i = 0; i < stus.length; i++) {//遍历原数组,把学生数学成绩放入到计算机成绩数组中
computers[i] = stus[i].getComputer();
}
for (float computer : computers) {//遍历计算机成绩数组求出所有学生的计算机成绩总和
computerSum += computer;
}
float mathAverage = mathSum / stus.length;//求出数学成绩的平均数
float englishAverage = englishSum / stus.length;//求出英语成绩的平均数
float computerAverage = computerSum / stus.length;//求出计算机成绩的平均数
float mathMax = 0;//数学成绩最大值
float mathMin = 0;//数学成绩最小值
float englishMax = 0;//英语成绩最大值
float englishMin = 0;//英语成绩最小值
float computerMax = 0;//计算机成绩最大值
float computerMin = 0;//计算机成绩最小值
//遍历数学成绩数组求出数学成绩的最大值
for (int i = 0; i < maths.length - i - 1; i++) {
mathMax = maths[i];//数学成绩最大值
for (int j = i; j < maths.length; j++) {
if (maths[i] < maths[j]) {
mathMax = maths[j];
}
}
}
//遍历数学成绩数组求出数学成绩的最小值
for (int i = 0; i < maths.length - i - 1; i++) {
mathMin = maths[i];//数学成绩最小值
for (int j = i; j < maths.length; j++) {
if (maths[i] > maths[j]) {
mathMin = maths[j];
}
}
}
//遍历英语成绩数组求出数学英语的最大值
for (int i = 0; i < englishs.length - i - 1; i++) {
englishMax = englishs[i];//英语成绩最大值
for (int j = i; j < englishs.length; j++) {
if (englishs[i] < englishs[j]) {
englishMax = englishs[j];
}
}
}
//遍历英语成绩数组求出英语成绩的最小值
for (int i = 0; i < englishs.length - i - 1; i++) {
englishMin = englishs[i];//英语成绩最小值
for (int j = i; j < englishs.length; j++) {
if (englishs[i] > englishs[j]) {
englishMin = englishs[j];
}
}
}
//遍历计算机成绩数组求出计算机成绩的最大值
for (int i = 0; i < computers.length - i - 1; i++) {
computerMax = computers[i];//计算机成绩最大值
for (int j = i; j < computers.length; j++) {
if (computers[i] < computers[j]) {
computerMax = computers[j];
}
}
}
//遍历计算机成绩数组求出计算机成绩的最小值
for (int i = 0; i < computers.length - i - 1; i++) {
computerMin = computers[i];//计算机成绩最大值
for (int j = i; j < computers.length; j++) {
if (computers[i] > computers[j]) {
computerMin = computers[j];
}
}
}
//打印统计的学生信息
out.println("学科" + "\t\t" + "平均成绩" + "\t\t" + "最高分" + "\t\t" + "最低分");
out.println("数学" + "\t\t" + mathAverage + "\t\t" + mathMax + "\t\t" + mathMin);
out.println("英语" + "\t\t" + englishAverage + "\t\t" + englishMax + "\t\t" + englishMin);
out.println("计算机" + "\t\t" + computerAverage + "\t\t" + computerMax + "\t\t" + computerMin);
out.println();
}
}
public class Demo13 {
public static void main(String[] args) {
Manager manager = new Manager();
while (true) {
out.println("===============学生管理系统===============");
out.println("\uF06C\t1.添加学生");
out.println("\uF06C\t2.删除学生");
out.println("\uF06C\t3.查询学生");
out.println("\uF06C\t4.修改学生");
out.println("\uF06C\t5.打印学生");
out.println("\uF06C\t6.统计学生");
out.println("\uF06C\t7.退出程序");
Scanner scanner = new Scanner(in);
int choose = scanner.nextInt();
switch (choose) {
case 1://添加学生
Student2 student = new Student2();
manager.add(student);
break;
case 2://删除学生
out.println("请输入要删除的学生的id");
String did = scanner.next();
manager.deleteById(did);
break;
case 3://查询学生
out.println("请输入要查询的学生的姓名");
String cname = scanner.next();
manager.select(cname);
break;
case 4://修改学生
manager.update(manager.getStus());
break;
case 5://打印学生
manager.printInfo(manager.getStus());
break;
case 6://统计学生
manager.statistic();
break;
case 7://退出程序
out.println("程序已退出,感谢您的使用");
exit(0);
return;
default:
out.println("请输入正确的选择");
}
}
}
}