-
功能介绍:学生的增删改查,都是在区分专业的前提下进行。
- 添加学生信息
- 删除学生信息
- 根据学号查询学生信息
- 显示所有学生
- 修改学生分数(只修改分数,保留学号、姓名)
-
运行截图
-
-
实体类
-
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能够在同学们接下来的学习中助一臂之力,更进一步提升友友的技术。
区分专业的学生信息管理系统
最新推荐文章于 2024-10-06 20:16:20 发布