学生管理系统
简单实现学生系统的登录和注册,以及学生信息添加、删除,修改、查询功能。根据需求,创建一个学生类和和用户类以及学生系统类,在登录管理系统之前需要先注册用户,只有输入正确的用户名和密码才可以登录,忘记密码后可以根据用户信息进行修改,用容器存储学生信息和用户信息,这里用到ArrayList<E>,这是基础版的,进一步可以将信息存到数据库中。
1.项目演示
2.学生管理系统实现思路
1.定义用户类
2.实现登录界面的代码编写
3.实现注册、登录、忘记密码功能的代码编写
4.定义学生类
5.管理系统主界面的代码编写
6.实现增删改查功能的代码编写
3.1定义用户类
package com.ithm.student; public class User { private String username; private String password; private String personID; private String phoneNumber; public User() { } public User(String username, String password, String personID, String phoneNumber) { this.username = username; this.password = password; this.personID = personID; this.phoneNumber = phoneNumber; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPersonID() { return personID; } public void setPersonID(String personID) { this.personID = personID; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } }
3.2定义学生类
package com.ithm.student; public class Student { private int id; private String name; private int age; private String address; public Student() { } public Student(int id, String name, int age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
4.1主界面的实现
思路:
- 用输出语句完成主界面的编写
- 用Scanner实现键盘录入数据
- 用switch语句完成操作的选择
- 用循环完成再次回到主界面
public static void menu(){ System.out.println("-------------欢迎来到学生管理系统-----------"); System.out.println("--- 1.添加学生 ---"); System.out.println("--- 2.删除学生 ---"); System.out.println("--- 3.修改学生 ---"); System.out.println("--- 4.查询学生 ---"); System.out.println("--- 0.退出 ---"); System.out.println("----------------------------------------"); } public static void choose(ArrayList<Student> list){ while (true){ menu(); System.out.print("请输入你的选择:"); Scanner sc=new Scanner(System.in); int t= sc.nextInt(); switch (t){ case(1): addStudent(list); break; case(2): deleteStudent(list); break; case(3): updateStudent(list); break; case(4): queryStudent(list); break; case(0): System.exit(0); default: return; } } }
4.2添加学生的代码编写
用键盘录入选择添加学生
定义一个方法,用于添加学生
显示提示信息,提示要输入何种信息
录入id时定义一个查询方法,查看集合中是否已经添加过此id,确保id唯一
键盘录入学生对象所需要的数据创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
将学生对象添加到集合中(保存数据)
public static void addStudent(ArrayList<Student> list){ Student stu=new Student(); Scanner sc=new Scanner(System.in); System.out.print("请输入学生的学号id:"); while (true){ int id= sc.nextInt(); boolean item=comain(list,id); if(item){ System.out.println("此学生已经存在,请重新输入学生id"); }else { stu.setId(id); break; } } System.out.print("请输入学生的名字:"); String name=sc.next(); stu.setName(name); System.out.print("请输入学生的年龄:"); int age= sc.nextInt(); stu.setAge(age); System.out.print("请输入学生的地址:"); String address=sc.next(); stu.setAddress(address); list.add(stu); } public static boolean comain(ArrayList<Student> list,int id){ for (int i = 0; i < list.size(); i++) { if(id==list.get(i).getId()){ return true; } } return false; }
4.3删除学生的代码编写
- 用键盘录入选择删除学生信息
- 定义一个方法,用于删除学生信息
提示信息
键盘录入要删除的学生学号
遍历集合将对应学生对象从集合里删除
给出删除成功提示
public static void deleteStudent(ArrayList<Student> list){ System.out.println("请输入要删除的学生学号:"); while (true){ Scanner sc=new Scanner(System.in); int id= sc.nextInt(); for (int i = 0; i < list.size(); i++) { if(list.get(i).getId()==id){ list.remove(i); System.out.println("删除成功"); return; } } System.out.println("未找到该学生,请重新输入id"); } }
4.4修改学生的代码编写
- 键盘录入选择修改学生
- 自定义一个方法,用于修改学生信息
提示信息
键盘录入要修改的学生学号
根据提示选择修改哪一个信息 - 键盘录入要修改的学生信息
遍历集合修改对应学生信息
给出成功提示
public static void updateStudent(ArrayList<Student> list){ while (true){ System.out.print("请输入学生id:"); Scanner sc=new Scanner(System.in); int id= sc.nextInt(); for (int i = 0; i < list.size(); i++) { if(list.get(i).getId()==id){ System.out.println("已查询到该学生,请选择更改哪一条信息"); Student stu=list.get(i); System.out.println("1.更改学生姓名 2.更改学生年龄 3.更改学生家庭地址"); int item=sc.nextInt(); if(item==1){ System.out.println("请输入更改后的学生姓名"); String name=sc.next(); stu.setName(name); System.out.println("更改成功!"); return; }else if(item==2){ System.out.println("请输入更改后的学生年龄"); int age=sc.nextInt(); stu.setAge(age); System.out.println("更改成功!"); return; }else if(item==3){ System.out.println("请输入更改后的学生家庭地址"); String address=sc.next(); stu.setName(address); System.out.println("更改成功!"); return; } } } System.out.println("未查询到该学生"); } }
4.5查询学生的代码
- 首先判断集合里是否存在学生对象,如果没有直接返回
- 根据提示,按照id查询或查询全部学生
- 将集合中数据取出按照对应格式显示学生信息
public static void queryStudent(ArrayList<Student> list){ if(list.size()==0){ System.out.println("请先添加学生,暂无学生信息!"); return; } System.out.println("1.根据学生id查询 2.查询全部学生"); Scanner sc=new Scanner(System.in); int t= sc.nextInt(); if(t==1){ System.out.println("请输入要查询的学生id"); while (true){ int id= sc.nextInt(); for (int i = 0; i < list.size(); i++) { if(list.get(i).getId()==id){ System.out.println("id\t\t姓名\t\t年龄\t家庭地址"); Student stu=list.get(i); System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress()); return; } } System.out.println("没有该学生信息,请重新输入id"); } }else if(t==2) { for (int i = 0; i < list.size(); i++) { System.out.println("id\t\t姓名\t\t年龄\t家庭地址"); Student stu=list.get(i); System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress()); } } }
实现用户类与学生类的思路相同,都是先定义一个用户对象,根据提示将数据添加到对象中,再将对象添加到集合中,实现用户类时对用户的各种信息的长度和格式都有要求,只有满足格式输入正确才可以成功输入,具体代码就不展示了,只展示一下验证码功能
5.登录时的验证码功能
- 定义一个集合存放所有的大小写字母
- 通过随机数获取集合的下标
- 遍历得到4个不同的大小写字母,将字母都添加到StringBuider,最后随机一个数字并添加
- 将StringBuider变成字符串再变成字符数字,随机得到该数组的任意下标,将最后一位数字与下标交换,实现了随机数字和字母的验证码
private static String getCode(){ //验证码要求有数字和大小写字母,且数字出现在任意位置 ArrayList<Character> list=new ArrayList<>(); for (int i = 0; i < 26; i++) { list.add((char)('a'+i)); list.add((char)('A'+i)); } Random random=new Random(); StringBuilder sb=new StringBuilder(); for (int i = 0; i < 4; i++) { int index=random.nextInt(list.size()); char c=list.get(index); sb.append(c); } int number=random.nextInt(10); sb.append(number); char []arr=sb.toString().toCharArray(); int flag=random.nextInt(arr.length); char temp=arr[flag]; arr[flag]=arr[arr.length-1]; arr[arr.length-1]=temp; return new String(arr); }
6.1项目结构
6.2全部代码
package com.ithm.student; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class StudentSystem { public static void main(String[] args) { ArrayList<Student> list=new ArrayList<>(); ArrayList<User> userlist=new ArrayList<>(); loginPage(userlist,list); } public static void loginPage(ArrayList<User> userlist,ArrayList<Student> list){ while (true){ System.out.println("\t欢迎来到学生管理系统"); System.out.println("请选择操作:1登录 2注册 3忘记密码"); Scanner sc=new Scanner(System.in); int item=sc.nextInt(); switch (item){ case (1): loginUser(userlist,list); break; case (2): reggisterUser(userlist); break; case (3): forgetPassword(userlist); break; default: return; } } } public static void loginUser(ArrayList<User> userlist,ArrayList<Student> list){ Scanner sc=new Scanner(System.in); while (true){ System.out.print("请输入用户名:"); String username=sc.next(); boolean t=containsUsername(userlist,username); if(!t){ System.out.println(username+"不存在,请先注册"); return; } System.out.print("请输入密码:"); String password=sc.next(); while (true){ String rightcode=getCode(); System.out.println("当前正确的验证码是:"+rightcode); System.out.print("请输入验证码:"); String Code=sc.next(); if(rightcode.equalsIgnoreCase(Code)){ System.out.println("验证码正确"); break; }else{ System.out.println("验证码错误,请重新输入"); } } User useInfo=new User(username,password,null,null); boolean flag=checklogin(useInfo,userlist); int count=0; if(flag){ System.out.println("登录成功!"); break; } else{ count++; System.out.println("账户或者密码错误,您还有"+(3-count)+"次机会尝试登录"); if(count==3){ System.out.println("您已连续三次登录失败,当前用户"+username+"已经被锁定"); } } } choose(list); } public static void reggisterUser(ArrayList<User> userlist){ Scanner sc=new Scanner(System.in); String username,password1,personID, number; while (true){ System.out.print("请输入用户名(4-16位字母加数字):"); username= sc.next(); boolean flag1=checkUsername(username); if(flag1){ boolean flag2=containsUsername(userlist,username); if(flag2){ System.out.println("已经存在该用户,请重新输入"); }else{ System.out.println("用户名:"+username+"可以使用"); break; } }else{ System.out.println("用户名的格式不满足条件,请重新输入"); } } while (true){ System.out.print("请输入密码:"); password1= sc.next(); System.out.print("请再次输入密码:"); String password2= sc.next(); if(password1.equals(password2)){ System.out.println("两次密码一致"); break; }else{ System.out.println("两次密码不一致,请重新输入"); } } while (true){ System.out.print("请输入身份证号码:"); personID=sc.next(); boolean flag=checkPersonID(personID); if(flag){ System.out.println("身份证号码满足要求"); break; }else { System.out.println("身份证格式错误,请重新输入"); } } while (true){ System.out.print("请输入电话号码:"); number=sc.next(); boolean flag=checkPhoneNumber(number); if(flag){ System.out.println("电话号码满足格式要求"); break; }else { System.out.println("电话号码格式错误,请重新输入"); } } User user=new User(username,password1,personID,number); userlist.add(user); System.out.println("注册成功"); } public static void forgetPassword(ArrayList<User> userlist){ Scanner sc=new Scanner(System.in); System.out.print("请输入用户名:"); String username=sc.next(); boolean flag=containsUsername(userlist,username); int index=findIndex(userlist,username); User user=userlist.get(index); if(!flag){ System.out.println(username+"不存在,请先注册"); return; } System.out.print("请输入身份证号码:"); String personID=sc.next(); System.out.print("请输入手机号码:"); String number= sc.next(); if(!(user.getPersonID().equals(personID)&&user.getPhoneNumber().equals(number))){ System.out.println("用户信息输入有误,无法修改密码"); return; } String passwor1; while (true){ System.out.print("请输入新密码:"); passwor1= sc.next(); System.out.print("请再次输入新密码:"); String passwor2= sc.next(); if(passwor1.equals(passwor2)){ System.out.println("两次密码输入一致"); break; }else{ System.out.println("两次密码不一致,请重新输入"); } } user.setPassword(passwor1); System.out.println("密码修改成功!"); } public static boolean checkUsername(String username){ //检查用户名长度合法,长度在4到16位 if(username.length()<4 ||username.length()>16){ return false; } //用户名只能是字母加数字,但不能是纯数字 int count=0; for (int i = 0; i < username.length(); i++) { char c=username.charAt(i); if(!((c>='0'&&c<='9') ||(c>='a'&&c<='z') ||(c>='A'&&c<='Z'))){ return false; } if((c>='a'&&c<='z') ||(c>='A'&&c<='Z')){ count++; break; } } return count>0; } public static boolean containsUsername(ArrayList<User> userlist,String username){ for (int i = 0; i < userlist.size(); i++) { if(userlist.get(i).getUsername().equals(username)){ return true; } } return false; } private static boolean checkPersonID(String personID) { //身份证号码必须是18位,首位不能为0,前17位是数字,第18位是数字或字母x if(personID.length()!=18) return false; if(personID.startsWith("0")) return false; for (int i = 0; i < personID.length()-1; i++) { char c=personID.charAt(i); if(!(c>='0'&&c<='9')){ return false; } } char end=personID.charAt(personID.length()-1); if(!(end=='x'|| end=='X'|| (end>='0'&&end<='9'))) return false; return true; } private static boolean checkPhoneNumber(String number) { //电话号码为11位纯数字,首位不能为0 if(number.length()!=11) return false; if(number.startsWith("0")) return false; for (int i = 0; i < number.length(); i++) { char c=number.charAt(i); if(!(c>='0'&&c<='9')) return false; } return true; } private static boolean checklogin(User useInfo,ArrayList<User> userlist) { for (int i = 0; i < userlist.size(); i++) { User u=userlist.get(i); if(u.getUsername().equals(useInfo.getUsername()) &&u.getPassword().equals(useInfo.getPassword())){ return true; } } return false; } private static String getCode(){ //验证码要求有数字和大小写字母,且数字出现在任意位置 ArrayList<Character> list=new ArrayList<>(); for (int i = 0; i < 26; i++) { list.add((char)('a'+i)); list.add((char)('A'+i)); } Random random=new Random(); StringBuilder sb=new StringBuilder(); for (int i = 0; i < 4; i++) { int index=random.nextInt(list.size()); char c=list.get(index); sb.append(c); } int number=random.nextInt(10); sb.append(number); char []arr=sb.toString().toCharArray(); int flag=random.nextInt(arr.length); char temp=arr[flag]; arr[flag]=arr[arr.length-1]; arr[arr.length-1]=temp; return new String(arr); } private static int findIndex(ArrayList<User> userlist, String username) { for (int i = 0; i < userlist.size(); i++) { if(userlist.get(i).getUsername().equals(username)){ return i; } } return -1; } public static void menu(){ System.out.println("-------------欢迎来到学生管理系统-----------"); System.out.println("--- 1.添加学生 ---"); System.out.println("--- 2.删除学生 ---"); System.out.println("--- 3.修改学生 ---"); System.out.println("--- 4.查询学生 ---"); System.out.println("--- 0.退出 ---"); System.out.println("----------------------------------------"); } public static void choose(ArrayList<Student> list){ while (true){ menu(); System.out.print("请输入你的选择:"); Scanner sc=new Scanner(System.in); int t= sc.nextInt(); switch (t){ case(1): addStudent(list); break; case(2): deleteStudent(list); break; case(3): updateStudent(list); break; case(4): queryStudent(list); break; case(0): System.exit(0); default: return; } } } public static void addStudent(ArrayList<Student> list){ Student stu=new Student(); Scanner sc=new Scanner(System.in); System.out.print("请输入学生的学号id:"); while (true){ int id= sc.nextInt(); boolean item=comain(list,id); if(item){ System.out.println("此学生已经存在,请重新输入学生id"); }else { stu.setId(id); break; } } System.out.print("请输入学生的名字:"); String name=sc.next(); stu.setName(name); System.out.print("请输入学生的年龄:"); int age= sc.nextInt(); stu.setAge(age); System.out.print("请输入学生的地址:"); String address=sc.next(); stu.setAddress(address); list.add(stu); } public static void deleteStudent(ArrayList<Student> list){ System.out.println("请输入要删除的学生学号:"); while (true){ Scanner sc=new Scanner(System.in); int id= sc.nextInt(); for (int i = 0; i < list.size(); i++) { if(list.get(i).getId()==id){ list.remove(i); System.out.println("删除成功"); return; } } System.out.println("未找到该学生,请重新输入id"); } } public static void updateStudent(ArrayList<Student> list){ while (true){ System.out.print("请输入学生id:"); Scanner sc=new Scanner(System.in); int id= sc.nextInt(); for (int i = 0; i < list.size(); i++) { if(list.get(i).getId()==id){ System.out.println("已查询到该学生,请选择更改哪一条信息"); Student stu=list.get(i); System.out.println("1.更改学生姓名 2.更改学生年龄 3.更改学生家庭地址"); int item=sc.nextInt(); if(item==1){ System.out.println("请输入更改后的学生姓名"); String name=sc.next(); stu.setName(name); System.out.println("更改成功!"); return; }else if(item==2){ System.out.println("请输入更改后的学生年龄"); int age=sc.nextInt(); stu.setAge(age); System.out.println("更改成功!"); return; }else if(item==3){ System.out.println("请输入更改后的学生家庭地址"); String address=sc.next(); stu.setName(address); System.out.println("更改成功!"); return; } } } System.out.println("未查询到该学生"); } } public static void queryStudent(ArrayList<Student> list){ if(list.size()==0){ System.out.println("请先添加学生,暂无学生信息!"); return; } System.out.println("1.根据学生id查询 2.查询全部学生"); Scanner sc=new Scanner(System.in); int t= sc.nextInt(); if(t==1){ System.out.println("请输入要查询的学生id"); while (true){ int id= sc.nextInt(); for (int i = 0; i < list.size(); i++) { if(list.get(i).getId()==id){ System.out.println("id\t\t姓名\t\t年龄\t家庭地址"); Student stu=list.get(i); System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress()); return; } } System.out.println("没有该学生信息,请重新输入id"); } }else if(t==2) { for (int i = 0; i < list.size(); i++) { System.out.println("id\t\t姓名\t\t年龄\t家庭地址"); Student stu=list.get(i); System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress()); } } } public static boolean comain(ArrayList<Student> list,int id){ for (int i = 0; i < list.size(); i++) { if(id==list.get(i).getId()){ return true; } } return false; } }
总结
1.注册时所有的信息都有数据上的判断和要求,都是基础的String方法,没有使用正则表达式。
2.使用ArrayList集合来实现简单的学生管理系统,测试类和用数组实现的方法一样。
2.添加学生时候先对list数组内学生进行判断,确保学生id唯一,修改学生信息可以根据需求修改每一项数据,查询学生可以根据id查询或者查询全部。
注:需将用户类和学生类和测试类三个代码放在同一个包下才可运行