学生管理系统(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 }
posted @ 2019-11-30 16:46  夜半情深  阅读(261)  评论(0编辑  收藏  举报