学生管理系统
简单实现学生系统的登录和注册,以及学生信息添加、删除,修改、查询功能。根据需求,创建一个学生类和和用户类以及学生系统类,在登录管理系统之前需要先注册用户,只有输入正确的用户名和密码才可以登录,忘记密码后可以根据用户信息进行修改,用容器存储学生信息和用户信息,这里用到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查询或者查询全部。