JAVA学生信息管理系统
前言
朋友们好,这个学生信息管理系统是我跟着黑马老师写的,大家可以通过这个链接看黑马阿伟老师的讲解: 学生信息管理系统
系统主要功能
首先是登录,注册界面: 1:登录 2:注册 3:忘记密码 4:退出程序
这个系统的逻辑是,你需要先登录,注册才能使用下面的功能:
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:打印学生
6:退出程序
演示
注意
- 身份证号一定是18位,否则会打印提示信息。
- 手机号一定是11位,否则会打印提示信息。
Student类
package com.akbar.student_system;
public class Student {
//成员变量属性
private String name; //姓名
private int age; //年龄
private String studentNumber; //学号
private String major; //专业
private String phoneNumber; //手机号
//空参构造方法
public Student() {
}
//带全部参数的构造方法
public Student(String name, int age, String studentNumber, String major, String phoneNumber) {
this.name = name;
this.age = age;
this.studentNumber = studentNumber;
this.major = major;
this.phoneNumber = phoneNumber;
}
//1.name
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//2.age
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//3.studentNumber
public String getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
//4.major
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
//5.phoneNumber
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
StudentSystem类
package com.akbar.student_system;
import java.util.Scanner;
import java.util.ArrayList;
public class StudentSystem {
public static void main(String[] args) {
//创建学生对象的集合
ArrayList<Student> studentList=new ArrayList<>();
//欢迎界面
System.out.println("-----------------------欢迎使用学生管理系统----------------------------");
loop:while (true) { //给循环起个名字,方便管理
//选项
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:打印学生");
System.out.println("6:退出程序");
System.out.println("请输入你选择的序号:");
//接受用户的选择
Scanner sc=new Scanner(System.in);
String choose=sc.nextLine(); //使用nextLine是因为容错率高
System.out.println("*********************************************");
//用switch语句进行操作
switch(choose){
case "1"->addStudent(studentList);
case "2"->deleteStudent(studentList);
case "3"->updateStudent(studentList);
case "4"->{
if(studentList.isEmpty()){
System.out.println("当前没有学生信息,请添加后再查询!");
break ;
}
System.out.println("请输入要查询学生的学号:");
String number=sc.next();
inquireStudent(studentList,number);
}
case "5"->printStudent(studentList);
case "6"->{
System.out.println("程序已退出!");
break loop; //也可以使用System.exit(0);,这句语句可以停止虚拟机运行
}
default ->System.out.println("没有这个选项,请重新输入!");
}
}
}
//添加学生
public static void addStudent(ArrayList<Student> studentList){
Scanner sc=new Scanner(System.in);
Student s=new Student();
while(true){
System.out.println("请输入学生的学号(按-1回到主菜单):");
String studentNumber=sc.next();
if(studentNumber.equals("-1")){
System.out.println("*********************************************");
return;
}
//判断学号是否已经存在
boolean flag=contains(studentList,studentNumber);
if(flag){
System.out.println("该学生已经存在,请重新输入(按0回到菜单栏):");
}else{
s.setStudentNumber(studentNumber);
break;
}
}
System.out.println("请输入学生的姓名:");
String name=sc.next();
s.setName(name);
System.out.println("请输入学生的年龄:");
int age=sc.nextInt();
s.setAge(age);
System.out.println("请输入学生的专业:");
String major=sc.next();
s.setMajor(major);
System.out.println("请输入学生的手机号:");
String phoneNumber=sc.next();
s.setPhoneNumber(phoneNumber);
studentList.add(s);
System.out.println("学生信息添加成功!");
System.out.println("*********************************************");
}
//删除学生
public static void deleteStudent(ArrayList<Student> studentList){
if(studentList.isEmpty()){
System.out.println("当前没有学生信息,请添加后再删除!");
System.out.println("*********************************************");
return;
}
Scanner sc=new Scanner(System.in);
System.out.println("请输入要删除的学生学号:");
String studentNumber=sc.next();
//调用方法获取该学生集合中的方法
int index=getIndex(studentList,studentNumber);
//对index进行判断
if(index>=0){
//提示是否真的删除
System.out.println("确定要删除该学生的信息吗?(\"否\"或者\"任意字符\"):");
String sureOrNot=sc.next();
if(sureOrNot.equals("否")){
System.out.println("命令撤回成功!");
System.out.println("*********************************************");
return;
}
studentList.remove(index);
System.out.println("学号为\""+studentNumber+"\"的学生的信息删除成功!");
System.out.println("*********************************************");
}else{
System.out.println("该学生不存在,删除操作失败!");
System.out.println("*********************************************");
}
}
//修改学生
public static void updateStudent(ArrayList<Student> studentList){
if(studentList.isEmpty()){
System.out.println("当前没有学生信息,请添加后再删除!");
System.out.println("*********************************************");
return;
}
Scanner sc=new Scanner(System.in);
System.out.println("请输入要修改学生的学号:");
String studentNumber=sc.next();
int index=getIndex(studentList,studentNumber);
if(index==-1){
System.out.println("该学生不存在,删除操作失败!");
System.out.println("*********************************************");
return;
}
//如果当前学号存在
Student s=studentList.get(index);
System.out.println("请输入新的学号(按-1回到主菜单):");
String number=sc.next();
if(number.equals("-1")){
System.out.println("命令撤回成功!");
System.out.println("*********************************************");
return;
}
System.out.println("请输入新的姓名:");
String newName=sc.next();
s.setName(newName);
System.out.println("请输入新的年龄:");
int newAge=sc.nextInt();
s.setAge(newAge);
System.out.println("请输入新的专业:");
String newMajor=sc.next();
s.setMajor(newMajor);
System.out.println("请输入新的的手机号:");
String newPhoneNumber=sc.next();
s.setPhoneNumber(newPhoneNumber);
}
//查询学生(已完成)
public static void inquireStudent(ArrayList<Student> studentList,String number){
System.out.println("姓名\t年龄\t学号\t专业\t手机号");
for (int i = 0; i < studentList.size(); i++) {
Student s=studentList.get(i);
if(s.getStudentNumber().equals(number)){
System.out.println(s.getName()+"\t"+s.getAge()+"\t\t"+s.getStudentNumber()+"\t"+s.getMajor()+"\t"+s.getPhoneNumber());
break;
}else{
System.out.println("没有查询到该学生的信息!");
}
}
System.out.println("*********************************************");
}
//打印学生(已完成)
public static void printStudent(ArrayList<Student> studentList){
if(studentList.isEmpty()){
System.out.println("当前没有学生信息,请添加后再打印!");
System.out.println("*********************************************");
return;
}
System.out.println("姓名\t年龄\t学号\t专业\t手机号");
for (int i = 0; i < studentList.size(); i++) {
Student s=studentList.get(i);
System.out.println(s.getName()+"\t"+s.getAge()+"\t\t"+s.getStudentNumber()+"\t\t"+s.getMajor()+"\t"+s.getPhoneNumber());
}
System.out.println("*********************************************");
}
//判断学号再集合中是否已经存在
public static boolean contains(ArrayList<Student> studentList,String stuNumber){
/*
for (int i = 0; i < studentList.size(); i++) {
Student s=studentList.get(i);
if(s.getStudentNumber().equals(stuNumber)){
return true;
}
}
return false;
*/
return getIndex(studentList,stuNumber)>0;
}
//通过学号获取索引的方法
public static int getIndex(ArrayList<Student> studentList,String studentNumber){
for (int i = 0; i < studentList.size(); i++) {
Student s=studentList.get(i);
if(s.getStudentNumber().equals(studentNumber)){
return i;
}
}
return -1;
}
}
User类
package com.akbar.student_system;
public class User {
private String userName;
private String userPassword;
private String userID;
private String userPhoneNumber;
public User() {
}
public User(String userName, String userPassword, String userID, String userPhoneNumber) {
this.userName = userName;
this.userPassword = userPassword;
this.userID = userID;
this.userPhoneNumber = userPhoneNumber;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserPhoneNumber() {
return userPhoneNumber;
}
public void setUserPhoneNumber(String userPhoneNumber) {
this.userPhoneNumber = userPhoneNumber;
}
}
APP类
package com.akbar.student_system;
import java.util.Random;
import java.util.Scanner;
import java.util.ArrayList;
public class APP {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<User> userList=new ArrayList<>();
System.out.println("-----------------------欢迎使用学生管理系统----------------------------");
while(true){
System.out.println("请选择操作:");
System.out.println("1:登录\t2:注册\t3:忘记密码\t4:退出程序");
String userChoose=sc.next();
switch(userChoose) {
case "1" -> login(userList);
case "2" -> register(userList);
case "3" -> forgetPassword(userList);
case "4" -> {
System.out.println("程序已退出,谢谢使用!");
System.exit(0);
}
default -> System.out.println("没有这个选项,请重新输入!");
}
}
}
//登录
public static void login(ArrayList<User> userList){
Scanner sc=new Scanner(System.in);
for(int i=0;i<3;i++){ //密码或者用户名错误3次,账号被锁定
System.out.println("请输入用户名:");
String userName=sc.next();
//判断用户是否已经注册
boolean flag=contains(userList,userName);
if(!flag){
System.out.println("用户名"+userName+"未注册,请先注册再登录!");
return;
}
System.out.println("请输入密码:");
String password=sc.next();
while (true) {
String rightCode=getCode();
System.out.print("验证码:"+rightCode);
System.out.println();
System.out.println("请输入验证码:");
String code=sc.next();
//比较验证码
if(!code.equalsIgnoreCase(rightCode)){
System.out.println("验证码错误,请重新输入!");
continue;
}
else{
break;
}
}
//验证密码是否正确
User userInfo=new User(userName,password,null,null);
boolean result=checkPassword(userList,userInfo);
if(result){
System.out.println("登录成功,可以开始使用学生信息管理系统!");
StudentSystem ss=new StudentSystem();
ss.startStudentSystem();
break;
}else{
System.out.println("登录失败,用户名或者密码错误!");
if(i==2){
System.out.println("您的当前账号被锁定,请联系管理员!");
return;
}
}
}
}
//注册
public static void register(ArrayList<User> userList){
Scanner sc=new Scanner(System.in);
String userName;
String password;
String id;
String phoneNumber;
//用户名处理
while (true) {
System.out.println("请输入用户名(按\"-1\"回到主菜单):");
userName=sc.next();
if(userName.equals("-1")){
return;
}
//对用户名校验的结果进行判断
boolean flag1=checkUserName(userName);
if(!flag1){ //如果格式满足条件,继续判断用户名是否已经存在
System.out.println("用户名格式有误,请重新输入!");
continue;
}
boolean flag2=contains(userList,userName);
if(flag2){ //flag2=tru表示当前用户名已经存在
System.out.println("用户名\""+userName+"\"已存在,请重新输入!");
}else{
break;
}
} //用户名校验完毕
//密码处理
while (true) {
System.out.println("请输入密码(按\"-1\"回到主菜单):");
password=sc.next();
if(password.equals("-1")){
return;
}
System.out.println("请再次输入密码(按\"-1\"回到主菜单):");
String againPassword=sc.next();
if(againPassword.equals("-1")){
return;
}
if(!password.equals(againPassword)){
System.out.println("两次密码输入不一致,请重新输入!");
continue;
}else{
break;
}
} //密码校验完毕
//身份证号码处理
while (true) {
System.out.println("请输入身份证号码(按\"-1\"回到主菜单):");
id=sc.next();
if(id.equals("-1")){
return;
}
boolean flag=checkId(id);
if(!flag){
System.out.println("身份证号码格式有误,请重新输入!");
continue;
}else{
break;
}
} //身份证号校验完毕
//手机号码处理
while (true) {
System.out.println("请输入手机号(按\"-1\"回到主菜单):");
phoneNumber=sc.next();
if(phoneNumber.equals("-1")){
return;
}
boolean flag4=checkPhone(phoneNumber);
if(!flag4){
System.out.println("手机号格式有误,请重新输入!");
continue;
}else{
break;
}
} //手机号校验完毕
//把上面的信息都放到用户对象当找那个,然后把该对象放到
User u=new User(userName,password,id,phoneNumber);
userList.add(u);
//检验用户的信息是否录入成功
//printUserInfo(userList);
}
//忘记密码
public static void forgetPassword(ArrayList<User> userList){
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String userName=sc.next();
boolean flag=contains(userList,userName);
if(!flag){
System.out.println("用户名"+userName+"未注册,请先注册!");
return;
}
System.out.println("请输入身份证号码:");
String idNumber=sc.next();
System.out.println("请输入手机号码:");
String phoneNumber=sc.next();
//比较用户对象中的手机号码和身份证号码是否相同
//需要把用户对象先拿出来
int index=getIndex(userList,userName);
User user=userList.get(index);
//当输入有误的时候
if(!(user.getUserID().equalsIgnoreCase(idNumber) && user.getUserPhoneNumber().equals(phoneNumber))){
System.out.println("身份证号码或者手机号码输入有误,不能修改密码!");
return;
}
//当输入正确的时候
System.out.println("你的密码是:"+user.getUserPassword());
System.out.println("你想修改密码吗(\"1\"表示确定)?");
String sure=sc.next();
String newId1;
String newId2;
if(sure.equals("1")){
while (true) {
System.out.println("请输入新的密码:");
newId1=sc.next();
System.out.println("请再次输入新的密码:");
newId2=sc.next();
if(newId1.equals(newId2)){
break;
}else{
System.out.println("两次密码输入不一致,需要重新输入!");
continue;
}
}
}else{
return;
}
//密码校验完毕,可以修改
user.setUserPassword(newId2);
System.out.println("密码修改成功!");
}
//校验用户名书写格式是否准确
public static boolean checkUserName(String userName){
//校验长度
int len=userName.length();
if(len<3 || len>15){
return false;
}
//校验字母加数字的格式
for (int i = 0; i < userName.length(); i++) {
char c=userName.charAt(i);
if(!((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))){
return false;
}
}
//当代码执行到这里,表示已经满足,上面的两个要求。
//校验用户名是不是纯数字
int count=0;//记录用户名中有多少个字符串
for (int i = 0; i < userName.length(); i++) {
char c=userName.charAt(i);
if((c>='a' && c<='z') || (c>='A' && c<='Z')){
count++;
break; //当有一个字符满足要求直接停止循环,防止无用循环进行
}
}
return count>0;
}
//判断用户名是否已经存在
public static boolean contains(ArrayList<User> userList,String userName){
for (int i = 0; i < userList.size(); i++) {
User u=userList.get(i);
if(u.getUserName().equals(userName)){
return true;
}
}
return false; //当循环结束了,集合里面的每一个用户都比较完毕,就是没有跟用户名一样的,所以return false
}
//判断身份张号码是否合法
public static boolean checkId(String idNumber){
//校验长度
if(idNumber.length()!=18){
return false;
}
//判断是不是以零开头
boolean flag=idNumber.startsWith("0");
if(flag){
return false;
}
//前面17为一定是数字
for (int i = 0; i < idNumber.length()-1; i++) {
char c=idNumber.charAt(i);
if(!(c>='0' && c<='9')){
return false;
}
}
//身份证号码最后一位校验
char endChar=idNumber.charAt(idNumber.length()-1);
if((endChar>='0' && endChar<='9') || (endChar=='x') || (endChar=='X')){
return true;
}
return false;
}
//判断手机号是否合法
public static boolean checkPhone(String phoneNumber){
//判断是不是11位
if(phoneNumber.length()!=11){
return false;
}
//判断是不是0开头
boolean startNumber=phoneNumber.startsWith("0");
if(startNumber){
return false;
}
//必须都是数字
for (int i = 0; i < phoneNumber.length(); i++) {
char c=phoneNumber.charAt(i);
if(!(c>='0' && c<='9')){
return false;
}
}
//当代码进行到这里,就表明,手机号都符合上面的要求
return true;
}
//遍历用户对象,查看是不是成功添加信息
public static void printUserInfo(ArrayList<User> userList){
for (int i = 0; i < userList.size(); i++) {
User u=userList.get(i);
System.out.println(u.getUserName()+"\t"+u.getUserPassword()+"\t"+u.getUserID()+"\t"+u.getUserPhoneNumber());
}
}
//生成验证码
public static String getCode(){
//创建一个集合添加所有的大写和小写字母
ArrayList<Character> randomList=new ArrayList<>();
for (int i = 0; i < 26; i++) {
randomList.add((char)('a'+i));
randomList.add((char)('A'+i));
}
//随机抽取4个字符
StringBuilder sb=new StringBuilder();
Random r=new Random();
for (int i = 0; i <4; i++) {
int index=r.nextInt(randomList.size());
//利用随机索引,抽取随机字符
char c=randomList.get(index);
//把随机字符添加到sb当中
sb.append(c);
}
//把一个随机数字添加到sb的末尾
int number=r.nextInt(10);
sb.append(number);
//数字再任意位置出现
//先把字符串编程字符数组,再数组中修改,然后再创建一个新的字符
char[] arr=sb.toString().toCharArray();
//拿着最后索引,跟随机索引进行交换
int randomIndex=r.nextInt(arr.length);
char temp=arr[randomIndex];
arr[randomIndex]=arr[arr.length-1];
arr[arr.length-1]=temp;
//创建一个新的字符串
return new String(arr);
}
//验证密码是否正确
public static boolean checkPassword(ArrayList<User> userList,User userInfo){
for (int i = 0; i < userList.size(); i++) {
User u=userList.get(i);
if(u.getUserName().equals(userInfo.getUserName()) && u.getUserPassword().equals(userInfo.getUserPassword())){
return true;
}
}
return false;
}
//获取索引
public static int getIndex(ArrayList<User> userList,String userName){
for (int i = 0; i < userList.size(); i++) {
User u=userList.get(i);
if(u.getUserName().equals(userName)){
return i;
}
}
return -1;
}
}