学生管理系统升级版

需求:

​ 为学生管理系统书写一个登陆、注册、忘记密码的功能。

​ 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

登录界面:

System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");

用户类:

​ 属性:用户名、密码、身份证号码、手机号码

注册功能:

​ 1,用户名需要满足以下要求:

​ 验证要求:

​ 用户名唯一

​ 用户名长度必须在3~15位之间

​ 只能是字母加数字的组合,但是不能是纯数字

​ 2,密码键盘输入两次,两次一致才可以进行注册。

​ 3,身份证号码需要验证。

​ 验证要求:

​ 长度为18位

​ 不能以0为开头

​ 前17位,必须都是数字

​ 最为一位可以是数字,也可以是大写X或小写x

​ 4,手机号验证。

​ 验证要求:

​ 长度为11位

​ 不能以0为开头

​ 必须都是数字

登录功能:

​ 1,键盘录入用户名

​ 2,键盘录入密码

​ 3,键盘录入验证码

验证要求:

​ 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册

​ 判断验证码是否正确,如不正确,重新输入

​ 再判断用户名和密码是否正确,有3次机会

忘记密码:

​ 1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册

​ 2,键盘录入身份证号码和手机号码

​ 3,判断当前用户的身份证号码和手机号码是否一致,

​ 如果一致,则提示输入密码,进行修改。

​ 如果不一致,则提示:账号信息不匹配,修改失败。

验证码规则:

​ 长度为5

​ 由4位大写或者小写字母和1位数字组成,同一个字母可重复

​ 数字可以出现在任意位置

比如:

​ aQa1K

完整代码如下:
User:

public class User {private String username;private String password;private String personID;private String phoneNumber;public User(String username, String password, String personID, String phoneNumber) {this.username = username;this.password = password;this.personID = personID;this.phoneNumber = phoneNumber;}public User() {}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;}
}

App:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.Scanner;public class App {public static void main(String[] args) {ArrayList<User> list = new ArrayList<>();Scanner sc = new Scanner(System.in);while (true){System.out.println("欢迎来到学生管理系统");System.out.println("请选择操作:1.登录 2.注册 3.忘记密码 4.退出");String choose = sc.next();switch (choose){case "1" -> login(list);case "2" -> register(list);case "3" -> forgetPassword(list);case "4" -> {System.out.println("谢谢使用,再见");System.exit(0);}default -> System.out.println("没有这个选项");}}}//1.登录private static void login(ArrayList<User> list) {Scanner sc = new Scanner(System.in);for (int i = 0 ; i < 3 ;i++) {System.out.println("请输入用户名");String username = sc.next();//判断用户名是否存在boolean flag = contains(list,username);if (!flag){System.out.println("用户名"+username+"未注册,请先注册再登录");return;}System.out.println("请输入密码");String password = sc.next();while (true) {String rightCode = getCode();System.out.println("当前正确的验证码为:"+rightCode);System.out.println("请输入验证码");String code = sc.next();if (code.equalsIgnoreCase(rightCode)){System.out.println("验证码正确");break;}else {System.out.println("验证码错误");continue;}}//验证用户名和密码是否正确//集合中是否包含用户名和密码//定义一个方法验证用户名和密码是否正确User userInfo = new User(username,password,null,null);boolean result = checkUserInfo(list,userInfo);if (result){System.out.println("登录成功,可以使用学生管理系统");break;}else {if (i == 2){System.out.println("当前账号"+username+"被锁定");return;}else {System.out.println("用户名或密码错误,还剩余"+(2-i)+"次机会");}}}}//检查用户和密码是否存在private static boolean checkUserInfo(ArrayList<User> list, User userInfo) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (user.getUsername().equals(userInfo.getUsername()) && user.getPassword().equals(userInfo.getPassword())){return true;}}return false;}//2.注册private static void register(ArrayList<User> list) {Scanner sc = new Scanner(System.in);//1.用户名String username;while (true) {System.out.println("请输入用户名:");username = sc.next();boolean flag1 = checkUsername(username);if (!flag1){System.out.println("格式不满足条件,重新输入");continue;}boolean flag2 = contains(list,username);if (flag2){System.out.println("用户名"+username+"已存在");}else {System.out.println("用户名"+username+"可用");break;}}//2.密码String password;while (true) {System.out.println("输入密码");password = sc.next();System.out.println("再次输入密码");String againPassword = sc.next();if (!password.equals(againPassword)){System.out.println("密码不一致,重新输入");continue;}else {System.out.println("密码一致,继续");break;}}//3.身份证号String personID;while (true){System.out.println("输入身份证号");personID = sc.next();boolean flag = checkPersonID(personID);if (flag){System.out.println("身份证号码满足要求");break;}else {System.out.println("格式有误,重新输入");continue;}}//4.手机号String phoneNumber;while (true){System.out.println("输入手机号");phoneNumber = sc.next();boolean flag = checkPhoneNumber(phoneNumber);if (flag){System.out.println("手机号满足要求");break;}else {System.out.println("格式有误,重新输入");continue;}}//用户名、密码、身份证号、手机号放在用户对象中User u = new User(username,password,personID,phoneNumber);//把对象添加到集合中list.add(u);System.out.println("注册成功");//遍历集合printList(list);}//3.忘记密码private static void forgetPassword(ArrayList<User> list) {Scanner sc = new Scanner(System.in);System.out.println("请输入用户名");String username = sc.next();boolean flag = contains(list, username);if (!flag){System.out.println("当前用户"+username+"未注册,请先注册");return;}//身份证号和手机号System.out.println("请输入身份证号");String personID = sc.next();System.out.println("请输入手机号码");String phoneNumber = sc.next();//比较用户对象中的手机号和身份证号是否相同//需要把用户对象通过索引先获取出来int index = findIndex(list,username);User user = list.get(index);//比较用户对象中的手机号码和身份证号码是否相同if (!user.getPhoneNumber().equals(phoneNumber) && user.getPersonID().equals(personID)){System.out.println("身份证号码或手机号码输入错误");return;}String password;while (true) {System.out.println("请输入新的密码");password = sc.next();System.out.println("请再次输入新密码");String againPassword = sc.next();if (password.equals(againPassword)){System.out.println("两次密码输入一致");break;}else {System.out.println("不一致,重新输入");continue;}}//直接修改密码user.setPassword(password);System.out.println("密码修改成功");}private static int findIndex(ArrayList<User> list, String username) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (user.getUsername().equals(username)){return i;}}return -1;}//打印遍历集合private static void printList(ArrayList<User> list) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);System.out.println(user.getUsername()+", "+user.getPassword()+", "+user.getPersonID()+", "+user.getPhoneNumber());}}//检查手机号private static boolean checkPhoneNumber(String phoneNumber) {// 判断长度if (phoneNumber.length() != 11) {return false;}// 判断是否以0开头if (phoneNumber.charAt(0) == '0') {return false;}// 判断是否全部是数字for (int i = 0; i < phoneNumber.length(); i++) {if (!Character.isDigit(phoneNumber.charAt(i))) {return false;}}return true;}//检查身份证号private static boolean checkPersonID(String personID) {if (personID == null || personID.length() != 18) {return false;}if (!personID.matches("^[1-9][0-9]{16}[0-9Xx]$")) {return false;}return true;}//用户名唯一性private static boolean contains(ArrayList<User> list, String username) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);String rightUsername = user.getUsername();if (rightUsername.equals(username)){return true;}}return false;}//检查用户名private static boolean checkUsername(String username) {if (username == null || username.length() < 3 || username.length() > 15) {return false;}boolean hasLetter = false;for (int i = 0; i < username.length(); i++) {char aChar = username.charAt(i);if (!Character.isLetterOrDigit(aChar)) {return false;}if (Character.isLetter(aChar)) {hasLetter = true;}}if (!hasLetter) {return false;}return true;}//生成验证码private static String getCode(){Random random = new Random();//所有的字母StringBuilder sb1 = new StringBuilder();for (int i = 0; i < 26; i++) {sb1.append((char) (i + 'A'));sb1.append((char) (i + 'a'));}//随机取出四个并加一个数字StringBuilder sb2 = new StringBuilder();for (int i = 0; i < 4; i++) {int rd = random.nextInt(sb1.length());sb2.append((char) sb1.charAt(rd));}sb2.append(random.nextInt(10));//将其转为字符串后再转为数组集合char[] array = sb2.toString().toCharArray();ArrayList<Object> list = new ArrayList<>();for (char c : array){list.add(c);}//用集合中的shuffle方法刷新内容Collections.shuffle(list);StringBuilder sb = new StringBuilder();for (Object c : list){sb.append(c);}return sb.toString();}
}

12-学生管理系统升级版相关推荐

  1. 【Java】升级版学生管理系统项目

    目录 一.前言 二.学生管理系统主要功能 在学生类下 在学生总部类下: main方法: 登录密码验证: 打印菜单: 增加学生信息: 查看学生信息: 删除学生信息: 修改学生信息: 查找学生信息: 代码 ...

  2. C/C++课程设计 之学生管理系统(一)

    文章目录 1) 案例一 2) 案例二 3) 案例三 4) 案例四 5) 案例五 6) 案例六 7) 案例七 8) 案例八 9) 案例九 10)案例十 11)案例十一 12)案例十二 13)案例十三 1 ...

  3. 学生管理系统(C语言版)

    学生管理系统 这个是大一学习C语言的时候做的一个小项目,代码部分基本都是自己一人完成,没用到什么高大上的技术,在图形化方面用了EasyX(一个C++的图形库),其他都是C语言的基础内容. 项目介绍 项 ...

  4. JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper

    -Model2模式 如果数据模型会很多,怎么办? 处理业务逻辑的:Model层 后台又分为:处理业务逻辑和对数据库的操作DAO-data access object -决定,再抽象一层出来:数据模型: ...

  5. java管理系统用怎么框架做_java 使用servlet做学生管理系统(无框架)

    使用工具: JavaJDK1.8 32位 Tomcat 8.5.33 32位 IDEA MySQL5.6 使用Jar包: c3p0-0.9.1.2.jar commons-dbutils-1.4.ja ...

  6. python学生管理系统-学生管理系统python

    广告关闭 腾讯云+校园是针对学生用户推出的专项扶持计划,1核2G云服务器9元/月起,云数据库2元/月起,并享受按购买价续费的优惠,助力莘莘学子轻松上云 print(该学生不存在)return none ...

  7. java 使用servlet做学生管理系统(无框架)

    使用工具: JavaJDK1.8 32位 Tomcat 8.5.33 32位 IDEA MySQL5.6 使用Jar包: c3p0-0.9.1.2.jar commons-dbutils-1.4.ja ...

  8. Mybatis框架实现简单的学生管理系统

    目录 使用工具 使用jar包 环境搭建 代码示例 java目录 Student.java Common.java IStudentDao.java IStudentDao.xml Main.java ...

  9. spring框架实现一个学生管理系统

    目录 使用工具 使用jar包 环境搭建 代码示例 java目录 Student.java StudentDaoImpl.java IStudentDao.java Main.java StudentS ...

最新文章

  1. 云服务器操作系统怎么安装,云服务器上怎么安装操作系统
  2. 小五思科技术学习笔记之SSH
  3. 深度学习(三十八)——深度强化学习(1)教程
  4. TextBox只读时不能通过后台赋值取值解决办法
  5. Linux系统openssl升级,在Linux系统上升级OpenSSL的方法
  6. 对称加密、非对称加密深度解析
  7. VS2012下基于Glut OpenGL GL_POLYGON示例程序:
  8. 7-8 mmh学长的Excel表格 (20分)
  9. 像素px与厘米怎么换算
  10. win10:为U盘设计图标
  11. 真的精采!AI赢了DOTA界的世界冠军 让人兴奋又纠结
  12. Pr:导出设置之编码设置
  13. Android 无法播放此视频
  14. 专享 IP 与共享 IP:差异、优势及其影响
  15. echarts中配置图例形状、图标宽高、图标和文字间距、图例位置、文字颜色、字体大小等基础配置
  16. html5 微信获取当前位置,「微信小程序」实现获取当前位置并在地图上显示
  17. 牛客:毕业生的纪念礼物(优先队列 || STL嵌套)
  18. SSH原理与运用:远程登录
  19. docker国内镜像拉取和镜像加速registry-mirrors配置修改
  20. Head First 设计模式各模式思想及总结

热门文章

  1. octave符号计算及注意事项(和MATLAB还是有些区别的)(上)
  2. xform的应用——MEL
  3. BCGControlBarPro 31.2 零售源码版
  4. Java 核心技术总结出 PDF 版本了!!!
  5. 解决Springboot 项目启动时,出现大量CONDITIONS EVALUATION REPORT的问题
  6. FlashBack闪回技术
  7. c语言模仿自动析构,C语言实现析构器
  8. 智慧树日均直播课堂超1.5万次 声网RTC技术保障学生“学的好”
  9. 音视频编解码:FLV封装格式笔记
  10. Flutter之BoxShadow组件