学生管理系统(Java)——控制台输入
一、需求:
1、进入系统前,需要登录注册:如果没有用户,不允许登录,从注册开始。
2、登录注册中,需要使用到验证码。
3、进入首页:
增加学生
修改学生
删除学生
查询所有学生
根据学号查询学生
根据班级查询学生
根据姓名查询学生
根据班主任查询所管理的班级人员。
查询班级中的平均考试成绩
最高成绩、最低成绩。
可以根据学生成绩排序(班级为单位)
二、实现
1、学生模型类
1 package cn.aura.demo01; 2 /** 3 * 学生模型类 4 */ 5 public class Student { 6 //学生属性 7 private int sno;//学号 8 private String name;//姓名 9 private int age;//年龄 10 private String sex;//性别 11 private String grade;//班级 12 private String teacher;//班主任 13 private double score;//成绩 14 15 //构造方法 16 public Student() { 17 super(); 18 } 19 public Student(int sno, String name, int age, String sex, String grade, String teacher, double score) { 20 this.sno = sno; 21 this.name = name; 22 this.age = age; 23 this.sex = sex; 24 this.grade = grade; 25 this.teacher = teacher; 26 this.score = score; 27 } 28 29 //set和get方法 30 public int getSno() { 31 return sno; 32 } 33 public void setSno(int sno) { 34 this.sno = sno; 35 } 36 public String getName() { 37 return name; 38 } 39 public void setName(String name) { 40 this.name = name; 41 } 42 public int getAge() { 43 return age; 44 } 45 public void setAge(int age) { 46 this.age = age; 47 } 48 public String getSex() { 49 return sex; 50 } 51 public void setSex(String sex) { 52 this.sex = sex; 53 } 54 public String getGrade() { 55 return grade; 56 } 57 public void setGrade(String grade) { 58 this.grade = grade; 59 } 60 public String getTeacher() { 61 return teacher; 62 } 63 public void setTeacher(String teacher) { 64 this.teacher = teacher; 65 } 66 public double getScore() { 67 return score; 68 } 69 public void setScore(double score) { 70 this.score = score; 71 } 72 73 //toString方法 74 @Override 75 public String toString() { 76 return "Student [sno=" + sno + ", name=" + name + ", age=" + age + ", sex=" + sex + ", grade=" + grade 77 + ", teacher=" + teacher + ", score=" + score + "]"; 78 } 79 }
2、管理员模型类
1 package cn.aura.demo01; 2 /** 3 * 管理员模型 4 */ 5 public class Person { 6 //属性 7 private String username;//账户 8 private String password;//密码 9 10 //构造方法 11 public Person(String username, String password) { 12 super(); 13 this.username = username; 14 this.password = password; 15 } 16 17 //set和get方法 18 public String getUsername() { 19 return username; 20 } 21 public void setUsername(String username) { 22 this.username = username; 23 } 24 public String getPassword() { 25 return password; 26 } 27 public void setPassword(String password) { 28 this.password = password; 29 } 30 }
3、验证码工具类
1 package cn.aura.demo01; 2 3 import java.util.Random; 4 5 /** 6 * 验证码生成工具类 7 */ 8 public class CodeUtils { 9 10 //创建一个数组对象 11 private char[] codes = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 12 '0','1','2','3','4','5','6','7','8','9', 13 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 14 15 //创建一个随机数对象 16 private Random random = new Random(); 17 18 /* 19 * 随机生成4位验证码 20 */ 21 public String getStringCode4() { 22 //空字符串 23 String code = ""; 24 //循环生成4位数验证码 25 for(int i = 0; i < 4; i++) { 26 //每循环一次,随机拿一个验证码 27 int index = random.nextInt(codes.length); 28 //每拿到一个,就添加到空的字符串中拼接 29 code += codes[index]; 30 } 31 return code; 32 } 33 34 /* 35 * 随机生成6位数验证码 36 */ 37 public String getStringCode6() { 38 //空字符串 39 String code = ""; 40 //循环生成4位数验证码 41 for(int i = 0; i < 6; i++) { 42 //每循环一次,我就随机拿一个验证码 43 int index = random.nextInt(codes.length); 44 //每拿到一个,就添加到空的字符串中拼接 45 code += codes[index]; 46 } 47 return code; 48 } 49 }
4、学生管理类
1 package cn.aura.demo01; 2 /** 3 * 学生管理类 4 */ 5 6 import java.util.ArrayList; 7 import java.util.Scanner; 8 9 10 public class StudentManager { 11 //定义集合存储学生信息 12 private static ArrayList<Student> students = new ArrayList<Student>(); 13 14 /* 15 * 添加学生信息方法 16 */ 17 public void addStudent(Scanner scanner) { 18 System.out.println("请输入学生学号:"); 19 String ssno = scanner.nextLine(); 20 //判断当前的集合不为空,且学号不重复 21 Student student = this.findBySno(Integer.parseInt(ssno)); 22 if (students.size() > 0 && student != null) { 23 System.out.println("当前学号已被使用,请重新输入!"); 24 }else { 25 System.out.println("请输入学生姓名:"); 26 String name = scanner.nextLine(); 27 28 System.out.println("请输入学生年龄:"); 29 String sage = scanner.nextLine(); 30 31 System.out.println("请输入学生性别:"); 32 String sex = scanner.nextLine(); 33 34 System.out.println("请输入学生班级:"); 35 String grade = scanner.nextLine(); 36 37 System.out.println("请输入学生的班主任:"); 38 String teacher = scanner.nextLine(); 39 40 System.out.println("请输入学生成绩:"); 41 String sscore = scanner.nextLine(); 42 43 //转换类型 44 int sno = Integer.parseInt(ssno); 45 int age = Integer.parseInt(sage); 46 double score = Double.parseDouble(sscore); 47 Student s = new Student(sno, name, age, sex, grade, teacher, score); 48 students.add(s); 49 System.out.println("当前学生信息添加成功!"); 50 } 51 } 52 53 /* 54 * 查询所有学生信息 55 */ 56 public void findAll() { 57 if (students != null && students.size() > 0) { 58 System.out.println("当前所有学生信息为:"); 59 for (Student student : students) { 60 System.out.println(student); 61 } 62 }else { 63 System.out.println("当前暂无员工信息,请添加!"); 64 } 65 } 66 67 /* 68 * 根据学号查询学生信息 69 */ 70 private Student findBySno(int sno) { 71 //循环集合,查到了返回学生信息 72 for (Student student : students) { 73 if (student.getSno() == sno) { 74 return student; 75 } 76 } 77 //查不到 78 return null; 79 } 80 81 /* 82 * 修改学生信息 83 */ 84 public void updateStudent(int sno, Scanner scanner) { 85 //调用根据id查询 86 Student student = this.findBySno(sno); 87 //判断 88 if(student != null) { 89 //查询到了,除了sno不能修改,其他都可以 90 System.out.println("请输入修改后的学生姓名:"); 91 String name = scanner.nextLine(); 92 System.out.println("请输入修改后的学生年龄:"); 93 String age = scanner.nextLine(); 94 System.out.println("请输入修改后的学生性别:"); 95 String sex = scanner.nextLine(); 96 System.out.println("请输入修改后的学生班级:"); 97 String grade = scanner.nextLine(); 98 System.out.println("请输入修改后的学生班主任:"); 99 String teacher = scanner.nextLine(); 100 System.out.println("请输入修改后的学生成绩:"); 101 String score = scanner.nextLine(); 102 103 //角标获取 104 int index = students.indexOf(student); 105 //角标拿到后,我们就把内容替换掉 106 student.setName(name); 107 student.setAge(Integer.parseInt(age)); 108 student.setSex(sex); 109 student.setGrade(grade); 110 student.setTeacher(teacher); 111 student.setScore(Double.parseDouble(score)); 112 //进行替换:需要两个值,一个是角标,一个是值 113 students.set(index, student); 114 115 //提示 116 System.out.println("当前修改学生信息完成!"); 117 118 }else { 119 System.out.println("您要修改的学生,不存在,请重新尝试!"); 120 } 121 } 122 123 /* 124 * 删除学生方法 125 */ 126 public void deleteStudent(int sno) { 127 //调用查询单个内容 128 Student student = this.findBySno(sno); 129 130 //判断 131 if(student != null) { 132 //查询到了 133 students.remove(student); 134 System.out.println("当前删除已成功,请重新查看!"); 135 }else { 136 //查无此人 137 System.out.println("您要删除的学生,不存在,请重新尝试!"); 138 } 139 } 140 141 /* 142 * 根据学生姓名查询 143 */ 144 public ArrayList<Student> findByName(String name) { 145 146 //创建返回的容器,因为根据姓名查询,有可能会是多个对象 147 ArrayList<Student> result = new ArrayList<Student>(); 148 149 //遍历集合 150 for (Student student : students) { 151 if(student.getName().equals(name)) { 152 //将当前的学生存储在返回结果中 153 result.add(student); 154 } 155 } 156 157 //遍历完成后,进行返回 158 return result; 159 } 160 161 /* 162 * 根据班级信息查询 163 */ 164 public ArrayList<Student> findByGrade(String grade) { 165 //创建返回的容器 166 ArrayList<Student> result = new ArrayList<Student>(); 167 168 //遍历集合 169 for (Student student : students) { 170 if(student.getGrade().equals(grade)) { 171 //存储 172 result.add(student); 173 } 174 } 175 return result; 176 } 177 178 /* 179 * 根据班主任查询班级 180 */ 181 public ArrayList<Student> findByTeacher(String teacher) { 182 //创建返回的容器 183 ArrayList<Student> result = new ArrayList<Student>(); 184 185 //遍历集合 186 for (Student student : students) { 187 if(student.getTeacher().equals(teacher)) { 188 //存储 189 result.add(student); 190 } 191 } 192 return result; 193 } 194 195 /* 196 * 输入班级查询该班级平均成绩 197 */ 198 public void Average(String grade) { 199 //创建返回的容器 200 ArrayList<Student> result = new ArrayList<Student>(); 201 double sum = 0; 202 for (Student student : students) { 203 if (student.getGrade().equals(grade)) { 204 //存储 205 result.add(student); 206 } 207 sum+=student.getScore(); 208 } 209 double average = sum/result.size(); 210 System.out.println(grade+"班平均成绩为:"+average); 211 } 212 213 /* 214 * 最高成绩 215 */ 216 public void Maxscore() { 217 double maxscore = 0; 218 for (Student student : students) { 219 maxscore = students.get(0).getScore(); 220 if (student.getScore() > maxscore) { 221 maxscore = student.getScore(); 222 } 223 } 224 System.out.println("最高成绩为:"+maxscore); 225 } 226 227 /* 228 * 最低成绩 229 */ 230 public void Minscore() { 231 double minscore = 0; 232 for (Student student : students) { 233 minscore = students.get(0).getScore(); 234 if (student.getScore() < minscore) { 235 minscore = student.getScore(); 236 } 237 } 238 System.out.println("最低成绩为:"+minscore); 239 } 240 241 /* 242 * 以班级为单位对学生成绩排序 243 */ 244 public ArrayList<Student> Paixu(String grade) { 245 //创建返回的空容器 246 ArrayList<Student> result = new ArrayList<Student>(); 247 for (Student student : students) { 248 if (student.getGrade().equals(grade)) { 249 result.add(student); 250 251 } 252 } 253 int[] arr = new int[result.size()]; 254 for (int i = 0; i < students.size(); i++) { 255 if (students.get(i).getGrade().equals(grade)) { 256 arr[i] = (int) students.get(i).getScore(); 257 } 258 } 259 int temp = 0; 260 for (int i = 0; i < arr.length; i++) { 261 for (int j = 0; j < arr.length-i-1; j++) { 262 if (arr[j] > arr[j+1]) { 263 temp = arr[j]; 264 arr[j] = arr[j+1]; 265 arr[j+1] = temp; 266 } 267 } 268 } 269 System.out.println("排序成绩如下:"); 270 for (int i = 0; i < arr.length; i++) { 271 System.out.println(arr[i]); 272 } 273 return null; 274 } 275 276 /* 277 * 根据学号查询学生 278 */ 279 public ArrayList<Student> FindSno(int sno) { 280 //创建返回的空容器 281 ArrayList<Student> result = new ArrayList<Student>(); 282 // 循环遍历集合 283 for (Student student : students) { 284 if (student.getSno() == sno) { 285 result.add(student); 286 } 287 } 288 return result; 289 } 290 }
5、测试类
1 package cn.aura.demo01; 2 /** 3 * 测试类 4 */ 5 import java.util.Scanner; 6 import java.util.ArrayList; 7 8 public class Test01 { 9 //用户输入 10 private static Scanner scanner = new Scanner(System.in); 11 //学生管理类 12 private static StudentManager pm = new StudentManager(); 13 //定义集合存储管理员信息 14 private static ArrayList<Person> persons = new ArrayList<Person>(); 15 //创建验证码工具 16 private static CodeUtils codeUtils = new CodeUtils(); 17 18 //主函数 19 public static void main(String[] args) { 20 while(true) { 21 //用户提示 22 System.out.println("欢迎使用学生管理系统:1、登录 2、注册"); 23 String flag = scanner.nextLine(); 24 if (flag.equals("1")) { 25 if (persons.isEmpty()){ 26 System.out.println("当前账号不存在,请先注册!"); 27 } else { 28 //登录 29 login(); 30 while (true) { 31 System.out.println("********** 您可以做如下操作: **********"); 32 System.out.println("1、增加学生信息"); 33 System.out.println("2、查看所有学生信息"); 34 System.out.println("3、修改学生信息"); 35 System.out.println("4、删除学生信息"); 36 System.out.println("5、根据学生姓名查询"); 37 System.out.println("6、根据学生班级查询"); 38 System.out.println("7、根据学号查询"); 39 System.out.println("8、根据班主任查询"); 40 System.out.println("9、查询每个班的平均成绩"); 41 System.out.println("10、查询每个班的最低成绩与最高成绩"); 42 System.out.println("11、根据班级查询学生成绩排序"); 43 System.out.println("12、退出"); 44 System.out.println("******************************************"); 45 String flag1 = scanner.nextLine(); 46 if (flag1.equals("1")) { 47 // 增加员工 48 pm.addStudent(scanner); 49 50 } else if (flag1.equals("2")) { 51 // 查询所有员工信息 52 pm.findAll(); 53 } else if (flag1.equals("3")) { 54 // 修改信息方法 55 System.out.println("请输入您要修改的学生学号:"); 56 String ssno = scanner.nextLine(); 57 int sno = Integer.parseInt(ssno); 58 pm.updateStudent(sno, scanner); 59 } else if (flag1.equals("4")) { 60 // 删除信息方法 61 System.out.println("请输入您要删除的学生学号:"); 62 String ssno = scanner.nextLine(); 63 int sno = Integer.parseInt(ssno); 64 pm.deleteStudent(sno); 65 } else if (flag1.equals("5")) { 66 // 根据姓名查询 67 System.out.println("请输入您要查询的学生姓名:"); 68 String name = scanner.nextLine(); 69 // 调用查询方法 70 ArrayList<Student> s = pm.findByName(name); 71 // 判断 72 if (s.size() <= 0 || s == null) { 73 // 没查到 74 System.out.println("很抱歉,暂无您要查询的学生信息!"); 75 } else { 76 // 查到了 77 System.out.println("您查询的学生信息如下:"); 78 for (Student student : s) { 79 System.out.println(student); 80 } 81 } 82 } else if (flag1.equals("6")) { 83 // 根据班级查询 84 System.out.println("请输入您要查询的学生班级:"); 85 String grade = scanner.nextLine(); 86 // 调用班级查询方法 87 ArrayList<Student> s = pm.findByGrade(grade); 88 89 // 判断 90 if (s == null || s.size() <= 0) { 91 // 没有查到 92 System.out.println("很抱歉,当前班级暂无人员,请重新尝试!"); 93 } else { 94 System.out.println("您查询的班级人员信息如下:"); 95 for (Student student : s) { 96 System.out.println(student); 97 } 98 } 99 }else if (flag1.equals("7")) { 100 //根据学号查询 101 System.out.println("请输入你要查询的学号:"); 102 String ssno = scanner.nextLine(); 103 int sno = Integer.parseInt(ssno); 104 //调用学号查询方法 105 ArrayList<Student> s = pm.FindSno(sno); 106 }else if (flag1.equals("8")) { 107 // 根据班主任姓名查询 108 System.out.println("请输入您要查询的班主任姓名:"); 109 String teacher = scanner.nextLine(); 110 // 调用查询方法 111 ArrayList<Student> t = pm.findByTeacher(teacher); 112 // 判断 113 if (t.size() <= 0 || t == null) { 114 // 没查到 115 System.out.println("很抱歉,暂无您要查询的学生信息!"); 116 } else { 117 // 查到了 118 System.out.println("班主任:"+teacher+"的学生信息如下:"); 119 for (Student student : t) { 120 System.out.println(student); 121 } 122 } 123 }else if (flag1.equals("9")) { 124 //根据班级查询班级平均成绩 125 System.out.println("请输入你要查询的班级:"); 126 String grade = scanner.nextLine(); 127 //调用平均成绩方法 128 pm.Average(grade); 129 }else if (flag1.equals("10")) { 130 //调用最高成绩方法 131 pm.Maxscore(); 132 //调用最低成绩方法 133 pm.Minscore(); 134 }else if (flag1.equals("11")) { 135 //根据班级查询每个班的学生成绩排序 136 System.out.println("请输入你要查询的班级:"); 137 String grade = scanner.nextLine(); 138 //调用排序方法 139 ArrayList<Student> students = pm.Paixu(grade); 140 }else if (flag1.equals("12")) { 141 break; 142 } 143 144 } 145 } 146 }else if (flag.equals("2")) { 147 //注册 148 regist(); 149 } 150 } 151 } 152 /* 153 * 登录方法 154 */ 155 public static void login() { 156 //设置登录的开关 157 boolean isLogin = false; 158 System.out.println("请输入您要登录的账号:"); 159 String username = scanner.nextLine(); 160 System.out.println("请输入您要登录的密码:"); 161 String password = scanner.nextLine(); 162 System.out.print("请输入您要登录操作的验证码信息:"); 163 String code4 = codeUtils.getStringCode4(); 164 System.err.println(code4); 165 String code = scanner.nextLine(); 166 167 //判断验证码是否正确 168 if (code4.equals(code)) { 169 //循环遍历集合中所有元素,是否和输入的匹配 170 for (Person person : persons) { 171 if (person.getUsername().equals(username) && person.getPassword().equals(password)) { 172 //登录成功 173 System.out.println("当前登录成功!"); 174 isLogin =false; 175 break; 176 }else { 177 isLogin = true; 178 } 179 } 180 if (isLogin) { 181 System.out.println("当前登录失败,请重试!"); 182 } 183 }else { 184 System.out.println("验证码输入错误,请重新输入!"); 185 } 186 } 187 188 /* 189 * 注册方法 190 */ 191 public static void regist() { 192 //设置一个注册开关 193 boolean isRegist = false; 194 System.out.println("请输入您的注册账号:"); 195 String username = scanner.nextLine(); 196 //判断当前账号是否存在 197 if(persons.isEmpty()) { 198 //如果当前都没值,不循环 199 isRegist = true; 200 }else { 201 for (Person person : persons) { 202 if(person.getUsername().equals(username)) { 203 //存在 204 System.out.println("当前输入的账号,已存在!请重新注册!"); 205 isRegist = false; 206 break; 207 }else { 208 //不存在 209 isRegist = true; 210 } 211 } 212 } 213 //判断当前能否继续注册 214 if(isRegist) { 215 //密码与确认密码 216 System.out.println("请输入注册密码:"); 217 String password = scanner.nextLine(); 218 System.out.println("请输入注册确认密码:"); 219 String repassword = scanner.nextLine(); 220 System.out.print("请输入当前的验证码信息:"); 221 String code6 = codeUtils.getStringCode6(); 222 System.err.println(code6); 223 String code = scanner.nextLine(); 224 //判断验证码是否正确 225 if (code6.equals(code)) { 226 if(password.equals(repassword)) { 227 //密码一致 228 Person person = new Person(username, password); 229 //存储集合 230 persons.add(person); 231 System.out.println("当前注册成功!"); 232 }else { 233 System.out.println("密码与确认密码不一致,请重新注册!"); 234 } 235 }else { 236 System.out.println("验证码输入错误,请重新注册!"); 237 } 238 } 239 } 240 }