运行截图
实体类
public class Student {//学生类对象
private String name;
private int stuId;
private double chinese;
private double math;
private double proCourse;//统一指专业课
@Override
public String toString() {//属性之间,保持空格方式输出
return stuId + "\t\t" + name + "\t\t" + chinese + "\t\t" + math + "\t\t" + proCourse + "\t\t";
}
public Student(int stuId, String name, double chinese, double math, double proCourse) {//创建一个学生类对象,类构造器
this.stuId = stuId;
this.name = name;
this.chinese = chinese;
this.math = math;
this.proCourse = proCourse;
}
public double getChinese() {//返回语文成绩
return chinese;
}
public void setChinese(double chinese) {//重新设置语文成绩
this.chinese = chinese;
}
public double getMath() {//获取一个数学成绩
return math;
}
public void setMath(double math) {
this.math = math;
}
public double getProCourse() {//求得专业课成绩
return proCourse;
}
public void setProCourse(double proCourse) {
this.proCourse = proCourse;
}
public Student() {//空构造器方法
}
public String getName() {//获得学生姓名
return name;
}
public void setName(String name) {//修改学生姓名
this.name = name;
}
public int getStuId() {//获取学号
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;//修改学号
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
public class RunMain {
public static void main(String[] args) {
HashMap<String, ArrayList<Student>> courseMap = new HashMap<>();
ArrayList<Student> englishList = new ArrayList<>();
ArrayList<Student> softList = new ArrayList<>();
courseMap.put("english", englishList);
courseMap.put("software", softList);
// while(true)无限循环语句,语句块中有break语句才都能跳出循环。
while (true) {
System.out.println("---------------欢迎使用学生管理系统---------------");
System.out.println("0.添加学生信息");
System.out.println("1.将学生信息删除");
System.out.println("2.根据学号查询学生");
System.out.println("3.显示所有学生");
System.out.println("4.修改学生分数");
System.out.println("5.退出");
System.out.print("请输入要执行的操作序号: ");
// 输入管理系统选项
Scanner sc = new Scanner(System.in);
String choice = sc.nextLine();
switch (choice) {
case "0":
addStudent(courseMap);//调用添加学生信息方法
break;
case "1":
removeStudent(courseMap);//调用学生信息删除方法
break;
case "2":
findOneStudent(courseMap);//调用根据学号查询学生方法
break;
case "3":
findAllStudent(courseMap);//调用显示所有学生方法
break;
case "4":
updateStudentScore(courseMap);//调用修改学生分数方法
break;
case "5": // 退出
System.out.println("谢谢使用学生管理系统,欢迎下次光临");
System.exit(0);// java虚拟机退出
default:
System.out.println("您输入的操作序号错误,请检查后重新输入! ");
}
}
}
public static void addStudent(HashMap<String, ArrayList<Student>> courseMap){//添加学生信息
ArrayList<Student> englishList = courseMap.get("english");
ArrayList<Student> softList = courseMap.get("software");
System.out.print("请选择要添加的学生的专业(1英语2软件):");
String name;
int stuId;
double chinese, math, proCourse;
Student student;
Scanner scanner = new Scanner(System.in);
int index = scanner.nextInt();
switch (index) {
case 1:
System.out.println("请输入英语专业学生信息!");
System.out.print("请输入学号:");
stuId = scanner.nextInt();
System.out.print("请输入姓名:");
name = scanner.next();
System.out.print("请输入语文成绩:");
chinese = scanner.nextDouble();
System.out.print("请输入数学成绩:");
math = scanner.nextDouble();
System.out.print("请输入英语成绩:");
proCourse = scanner.nextDouble();
student = new Student(stuId, name, chinese, math, proCourse);
englishList.add(student);//根据输入的学生相关信息,创建对象,并且添加进学生集合
courseMap.put("english", englishList);
System.out.println(" 录入成功");
break;
case 2:
System.out.println("请输入软件专业学生信息!");
System.out.print("请输入学号:");
stuId = scanner.nextInt();
System.out.print("请输入姓名:");
name = scanner.next();
System.out.print("请输入语文成绩:");
chinese = scanner.nextDouble();
System.out.print("请输入数学成绩:");
math = scanner.nextDouble();
System.out.print("请输入软件成绩");
proCourse = scanner.nextDouble();
student = new Student(stuId, name, chinese, math, proCourse);
softList.add(student);//根据输入的学生相关信息,创建对象,并且添加进学生集合
courseMap.put("software", softList);
System.out.println("录入成功");
break;
default:
System.out.println("输入错误请重新输入");
}
}
public static void removeStudent(HashMap<String, ArrayList<Student>> courseMap){//将学生信息删除
ArrayList<Student> englishList = courseMap.get("english");
ArrayList<Student> softList = courseMap.get("software");
Scanner sc = new Scanner(System.in);
System.out.print("请输入你要删除学生的专业(1英语2软件):");
String choice = sc.next();
boolean flag = true;
while (flag) {
switch (choice) {
case "1":
System.out.println("请输入要删除英语专业学生的学号:");
int stuId = sc.nextInt(); // 键盘录入的学号返回给No
int englishIndex = -1;
for (int i = 0; i < englishList.size(); i++) {
Student s = englishList.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getStuId() == stuId) {
englishIndex = i;
break;
}
}
if (englishIndex == -1) {
System.out.println("您要删除的学生信息不存在,请重新选择: ");
} else {
englishList.remove(englishIndex); // 删除获取的学生信息
courseMap.put("english", englishList);
System.out.println("英语专业学生信息删除成功");
}
flag = false;
break;
case "2":
System.out.print("请输入要删除软件专业学生的学号:");
int Id = sc.nextInt(); // 键盘录入的学号返回给No
int softIndex = -1;
for (int i = 0; i < softList.size(); i++) {
Student s = softList.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getStuId() == Id) {
softIndex = i;
break;
}
}
if (softIndex == -1) {
System.out.println("您要删除的学生信息不存在,请重新选择: ");
} else {
softList.remove(softIndex); // 删除获取的学生信息
courseMap.put("software", softList);
System.out.println("软件专业学生信息删除成功");
}
flag = false;
break;
default:
System.out.println("输入有误,友情提示要输入的专业只能是1或者2,检查后请重新输入!");
}
}
}
public static void updateStudentScore(HashMap<String, ArrayList<Student>> courseMap) { //修改学生分数
ArrayList<Student> englishList = courseMap.get("english");
ArrayList<Student> softList = courseMap.get("software");
System.out.print("请选择要修改的学生所属专业(1英语2软件):");
String name;
int stuId;
double chinese, math, proCourse;//统一指专业课
Scanner scanner = new Scanner(System.in);
Student student;
String choice = scanner.next();
switch (choice) {
case "1":
System.out.print("请输入你要修改的英语专业学生的学号: ");
stuId = scanner.nextInt(); // 键盘录入的学号返回给No
int englishIndex = -1;//索引标志
for (int i = 0; i < englishList.size(); i++) {// 遍历查找学生信息,进行匹配
Student s = englishList.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getStuId() == stuId) {
englishIndex = i;
break;
}
}
if (englishIndex == -1) {
System.out.println("您要修改的学生信息不存在,请您重新选择: ");
} else { // 当index = i;的时候
Student student1 = englishList.get(englishIndex);
System.out.print("请输入语文成绩:");
chinese = scanner.nextDouble();
student1.setChinese(chinese);
System.out.print("请输入数学成绩:");
math = scanner.nextDouble();
student1.setMath(math);
System.out.print("请输入英语成绩:");
proCourse = scanner.nextDouble();
student1.setProCourse(proCourse);
englishList.set(englishIndex, student1);
courseMap.put("english", englishList);
System.out.println("修改学生信息成功!!");
}
break;
case "2":
System.out.print("请输入你要修改的软件专业学生的学号: ");
stuId = scanner.nextInt();
int softIndex = -1;//索引标志
for (int i = 0; i < softList.size(); i++) {// 遍历查找学生信息,进行匹配
Student s = softList.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getStuId() == stuId) {
softIndex = i;
break;
}
}
if (softIndex == -1) {
System.out.println("您要修改的学生信息不存在,请您重新选择: ");
} else { // 当index = i;的时候
Student student2 = softList.get( softIndex);
System.out.print("请输入语文成绩:");
chinese = scanner.nextDouble();
student2.setChinese(chinese);
System.out.print("请输入数学成绩:");
math = scanner.nextDouble();
student2.setMath(math);
System.out.print("请输入软件成绩:");
proCourse = scanner.nextDouble();
student2.setProCourse(proCourse);
softList.set(softIndex, student2);
courseMap.put("software", softList);
System.out.println("修改学生信息成功!!");
}
break;
}
}
public static void findAllStudent(HashMap<String, ArrayList<Student>> courseMap){ // 查询学生信息
ArrayList<Student> englishList = courseMap.get("english");//根据HashMap的键,获得英语列表
ArrayList<Student> softList = courseMap.get("software");//根据HashMap的键,获得软件列表
// 判断学生信息集合的长度,如果等于0,输出提示性语句,不为0,则继续下列操作
if (englishList.size() == 0) {
System.out.println("对不起,当前英语学生信息为空,请您重新选择: ");
} else {
// 学生信息列表
System.out.println("学号\t姓名\t语文成绩\t数学成绩\t 英语成绩\t 总分\t平均分");//
// 遍历集合
Iterator<Student> iterator = englishList.iterator();
while(iterator.hasNext()){
Student student = iterator.next();
double sum = 0, average = 0;
double math = student.getMath();
double chinese = student.getChinese();
double proCourse = student.getProCourse();
sum += math + chinese + proCourse;
average = sum / 3;
System.out.println(student.toString() + sum + "\t" + String.format("%.2f", average));//toString方法链接总分+平均分
}
}
if (softList.size() == 0) {
System.out.println("对不起,当前软件学生信息为空,请您重新选择: ");
} else {
// 学生信息列表
System.out.println("学号\t姓名\t语文成绩\t数学成绩\t 软件成绩\t 总分\t平均分");//
// 遍历集合
Iterator<Student> iterator = softList.iterator();
while(iterator.hasNext()){
Student student = iterator.next();
double sum = 0, average = 0;
double math = student.getMath();//获取学生的数学成绩
double chinese = student.getChinese();//获取学生的语文成绩
double proCourse = student.getProCourse();//获取学生的软件成绩
sum += math + chinese + proCourse;
average += sum / 3;
System.out.println(student.toString() + sum + "\t" + String.format("%.2f", average));//toString方法链接总分+平均分
}
}
}
public static void findOneStudent(HashMap<String, ArrayList<Student>> courseMap){
ArrayList<Student> englishList = courseMap.get("english");//根据HashMap的键,获得英语列表
ArrayList<Student> softList = courseMap.get("software");//根据HashMap的键,获得软件列表
Scanner scanner = new Scanner(System.in);
int stuId;
// 判断学生信息集合的长度,如果等于0,学生信息为空,程序结束
boolean flag = true;
while (flag) {
System.out.print("请输入你要查询学生的专业(1英语2软件):");
int index = scanner.nextInt();
switch (index) {
case 1:
if (englishList.size() == 0) {//英语list里面要是长度为0,说明没有添加进英语专业学生
System.out.println("对不起,当前英语专业学生信息为空,请您重新选择: ");
} else {
System.out.print("请输入英语专业学生的学号:");
stuId = scanner.nextInt();
Iterator<Student> englishIterator = englishList.iterator();//使用迭代器
System.out.println("学号\t姓名\t语文成绩\t数学成绩\t 英语成绩\t 总分\t平均分");//
Iterator<Student> iterator = englishList.iterator();
while(iterator.hasNext()){
Student student = iterator.next();
if(student.getStuId()==stuId){
double sum = 0, average = 0;
double math = student.getMath();
double chinese = student.getChinese();
double proCourse = student.getProCourse();
sum += math + chinese + proCourse;
average = sum / 3;
System.out.println(student.toString() + sum + "\t" + String.format("%.2f", average));//toString方法链接总分+平均分
}
}
}
flag = false;//修改循环变量,跳出while循环
break;
case 2:
if (softList.size() == 0) {
System.out.println("对不起,当前软件专业学生信息为空,请您重新选择: ");
return;// 不让程序往下执行
} else {
System.out.print("请输入要查询软件专业学生的学号:");
stuId = scanner.nextInt();
System.out.println("学号\t姓名\t语文成绩\t数学成绩\t 软件成绩\t 总分\t平均分");//
Iterator<Student> iterator = softList.iterator();
while(iterator.hasNext()){
Student student = iterator.next();
if (student.getStuId() == stuId) {
double sum = 0, average = 0;
double math = student.getMath();//获取学生的数学成绩
double chinese = student.getChinese();//获取学生的语文成绩
double proCourse = student.getProCourse();//获取学生的软件成绩
sum += math + chinese + proCourse;
average += sum / 3;
System.out.println(student.toString() + sum + "\t" + String.format("%.2f", average));//toString方法链接总分+平均分
}
}
}
flag = false;//修改循环变量,跳出while循环
break;
default:
System.out.println(" 输入错误请重新输入");//输出提示性语句,直到输入成功
}
}
}
}
要复制我代码的友友,必须建立和我一模一样的类才可以,包名可以自己另外起。
小数点的保留,可以使用Java字符串格式化String.format(String fmt, Object… args)来解决,其中fmt是格式输出,像我上面那样,%.2f以浮点型保留两位小数输出,后面紧接着是args变量。
迭代器Iterator的使用,在遇到大量的代码时,建议先使用迭代器,避免代码的冗余,看起来也美观些。
System.out.println("学号\t姓名\t语文成绩\t数学成绩\t 英语成绩\t 总分\t平均分");
//怎样输出来之后,显得美观、大方,需要不断调试,找到最佳位置。
本系统的特点
以往做的学生管理系统都是纯ArrayList来进行,区分不同专业这一功能配合学过HaspMap,适合刚刚入门或者想要复习、巩固Java基础的同学使用。方法都是通用的,除了使用HaspMap、ArrayList这些涉及到的技术之外,还可以提取出公共的方法,建一个接口打包,即实现接口的方式重写这些方法。希望我这个小Demo能够在同学们接下来的学习中助一臂之力,更进一步提升友友的技术。