• Java 实现简单的《用户登录小程序》


    用户登录小程序

    需要连接的其他程序可以放进代码中

    这只是个用户登录小程序

    学生管理系统在主页中有哦!

     需求:

    ​   书写一个登陆、注册、忘记密码的功能。

    ​   只有用户登录成功之后,才能进入到其他系统。

    分析:

    登录界面:

    ("欢迎来到学生管理系统");

    ("请选择操作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的javabean

    1. public class User {
    2. private String user;
    3. private String password;
    4. private String userNum;
    5. private String userPhone;
    6. public User() {
    7. }
    8. public User(String user, String password, String userNum, String userPhone) {
    9. this.user = user;
    10. this.password = password;
    11. this.userNum = userNum;
    12. this.userPhone = userPhone;
    13. }
    14. public String getUser() {
    15. return user;
    16. }
    17. public void setUser(String user) {
    18. this.user = user;
    19. }
    20. public String getPassword() {
    21. return password;
    22. }
    23. public void setPassword(String password) {
    24. this.password = password;
    25. }
    26. public String getUserNum() {
    27. return userNum;
    28. }
    29. public void setUserNum(String userNum) {
    30. this.userNum = userNum;
    31. }
    32. public String getUserPhone() {
    33. return userPhone;
    34. }
    35. public void setUserPhone(String userPhone) {
    36. this.userPhone = userPhone;
    37. }
    38. }

    接下来是程序代码:

    1. import java.util.ArrayList;
    2. import java.util.Random;
    3. import java.util.Scanner;
    4. public class newStudentSystem {
    5. public static void main(String[] args) {
    6. System.out.println("欢迎来到学生管理系统");
    7. //创建集合 记录用户信息
    8. ArrayList list = new ArrayList<>();
    9. User u1 = new User("pjq123", "pang", "230230200208081910", "110");
    10. User u2 = new User("whm123", "wang", "230230200208081911", "111");
    11. User u3 = new User("hm123", "hei", "23023020020808191X", "112");
    12. list.add(u1);
    13. list.add(u2);
    14. list.add(u3);
    15. loop:
    16. while (true) {
    17. System.out.println("请选择操作 1登录 2注册 3忘记密码 4退出");
    18. Scanner sc = new Scanner(System.in);
    19. //用于用户选择操作
    20. int num = sc.nextInt();
    21. switch (num) {
    22. case 1 -> login(list);
    23. case 2 -> enroll(list);
    24. case 3 -> forgetPassword(list);
    25. case 4 -> {
    26. break loop;
    27. //第二种退出的方法,关闭虚拟机
    28. //System.exit(0);
    29. }
    30. default -> System.out.println("没有这个选项请重新选择");
    31. }
    32. }
    33. }
    34. //登录的方法
    35. public static void login(ArrayList list) {
    36. Scanner sc = new Scanner(System.in);
    37. while (true) {
    38. boolean flag5 = false;
    39. System.out.println("请输入账号");
    40. String admin = sc.next();
    41. System.out.println("请输入密码");
    42. String password = sc.next();
    43. if(test());
    44. for (int i = 0; i < list.size(); i++) {
    45. if (list.get(i).getUser() .equals(admin)) {
    46. if (list.get(i).getPassword() .equals(password)) {
    47. System.out.println("登录成功");
    48. flag5=true;
    49. }
    50. }
    51. }
    52. if (!flag5){
    53. System.out.println("账号或者密码输入错误");
    54. }
    55. if (flag5){
    56. break ;
    57. }
    58. }
    59. // studentSystem ss = new studentSystem();
    60. // ss.startStudentSystem();
    61. /*
    62. 这只是个登录系统
    63. 这里可以放你需要的系统
    64. */
    65. }
    66. //注册的方法
    67. public static void enroll(ArrayList list) {
    68. System.out.println("请输入账号 要求如下");
    69. System.out.println("长度在3-15位之间,只能是字母和数字组合,且不能是纯数字");
    70. boolean flag = false;
    71. Scanner sc = new Scanner(System.in);
    72. User u = new User();
    73. //账号的注册
    74. while (true) {
    75. String user = sc.next();
    76. boolean flag1 = checkUserName(user);
    77. if (!flag1) {
    78. System.out.println("用户格式不满足,重新输入");
    79. continue;
    80. }
    81. if (flag1) {
    82. for (int i = 0; i < list.size(); i++) {
    83. if (list.get(i).getUser().equals(user)) {
    84. System.out.println("用户名已存在 请重新输入");
    85. flag = true;
    86. }
    87. }
    88. if (!flag) {
    89. u.setUser(user);
    90. break;
    91. }
    92. flag = false;
    93. }
    94. }
    95. //密码的注册
    96. while (true) {
    97. System.out.println("请输入密码");
    98. String passwordOnce = sc.next();
    99. if (passwordOnce.length() > 2 && passwordOnce.length() < 16) {
    100. System.out.println("请再次输入密码");
    101. String passwordTwice = sc.next();
    102. if (!passwordTwice.equals(passwordOnce)) {
    103. System.out.println("两次密码不一致 请重新输入");
    104. }
    105. if (passwordOnce.equals(passwordTwice)) {
    106. u.setPassword(passwordOnce);
    107. flag = true;
    108. }
    109. if (flag) {
    110. break;
    111. }
    112. } else System.out.println("账号不符合要求 请重新输入");
    113. }
    114. //注册身份证号
    115. while (true) {
    116. System.out.println("请输入身份证号码");
    117. String userNum = sc.next();
    118. boolean flag3 = checkUserNum(userNum);
    119. if (!flag3) {
    120. System.out.println("身份证号格式不满足 请重新输入");
    121. continue;
    122. }
    123. u.setUserNum(userNum);
    124. break;
    125. }
    126. //注册手机号
    127. while (true) {
    128. System.out.println("请输入手机号");
    129. String userPhone = sc.next();
    130. boolean flag4 = checkUnmPhone(userPhone);
    131. if (!flag4) {
    132. System.out.println("手机号格式不满足 请重新输入");
    133. continue;
    134. }
    135. if (flag4) {
    136. u.setUserPhone(userPhone);
    137. break;
    138. }
    139. }
    140. //把数据存入集合
    141. list.add(u);
    142. System.out.println("恭喜你注册成功!!!");
    143. }
    144. //忘记密码的方法
    145. private static void forgetPassword(ArrayList list) {
    146. System.out.println("请输入忘记密码的账号");
    147. Scanner sc = new Scanner(System.in);
    148. String forgetAdmin = sc.next();
    149. for (int i = 0; i < list.size(); i++) {
    150. if (list.get(i).getUser().equals(forgetAdmin)) {
    151. System.out.println("请输入该账号的手机号");
    152. String forgetPhone = sc.next();
    153. System.out.println("请输入该账号的身份证号");
    154. String forgetUserNum = sc.next();
    155. if (list.get(i).getUserNum().equals(forgetUserNum) && list.get(i).getUserPhone().equals(forgetPhone)) {
    156. System.out.println("该账号的的密码是 " + list.get(i).getPassword());
    157. break;
    158. }
    159. }
    160. }
    161. }
    162. //判断用户账号是否合格 长度3-15 而且不全是数字
    163. private static boolean checkUserName(String user) {
    164. //长度校验
    165. if (user.length() < 3 || user.length() > 15) {
    166. return false;
    167. }
    168. //只能是字母和数字
    169. for (int i = 0; i < user.length(); i++) {
    170. char c = user.charAt(i);
    171. if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')) {
    172. return false;
    173. }
    174. }
    175. //判断不能是纯数字
    176. int count = 0;
    177. for (int i = 0; i < user.length(); i++) {
    178. char c = user.charAt(i);
    179. if (c >= '0' && c <= '9') {
    180. count++;
    181. }
    182. }
    183. if (count == user.length()) {
    184. return false;
    185. }
    186. return true;
    187. }
    188. //判断身份证号格式是否正确 长度为18 而且前十七位只能是数字 最后两位是数字或者X x 第一位不能是0
    189. private static boolean checkUserNum(String userNum) {
    190. //判断长度为18位
    191. if (userNum.length() != 18) return false;
    192. //判断第一位不是0
    193. boolean flag = userNum.startsWith("0");
    194. if (flag) {
    195. return false;
    196. }
    197. //判断前十七位都是数字
    198. for (int i = 0; i < userNum.length() - 1; i++) {
    199. char c1 = userNum.charAt(i);
    200. if (!(c1 >= '0' && c1 <= '9')) {
    201. return false;
    202. }
    203. }
    204. //判断最后一位 是数字或者X x
    205. char c2 = userNum.charAt(17);
    206. if (!(c2 >= '0' && c2 <= '9' || c2 == 'X' || c2 == 'x')) {
    207. return false;
    208. }
    209. return true;
    210. }
    211. //判断手机号 长度为11位 且开头不能是0
    212. private static boolean checkUnmPhone(String userPhone) {
    213. //判断长度为11位
    214. if (userPhone.length() != 11) {
    215. return false;
    216. }
    217. //判断第一位是不是0
    218. char c = userPhone.charAt(0);
    219. if (c == '0') {
    220. return false;
    221. }
    222. //判断都是数字
    223. for (int i = 0; i < userPhone.length(); i++) {
    224. char c1 = userPhone.charAt(i);
    225. if (!(c1 >= '0' && c1 <= '9')) {
    226. return false;
    227. }
    228. }
    229. return true;
    230. }
    231. //验证码的方法
    232. public static boolean test() {
    233. //把字母放一个数组中
    234. char[] arr = new char[52];
    235. //存入大写字母
    236. for (char c = 'A'; c <= 'Z'; c++) {
    237. arr[c - 'A'] = c;
    238. }
    239. //存入小写字母
    240. for (char c = 'a'; c <= 'z'; c++) {
    241. arr[c - 'a' + 26] = c;
    242. }
    243. while (true) {
    244. System.out.println("验证码为");
    245. Random r = new Random();
    246. String str = "";
    247. StringBuilder sb = new StringBuilder(str);
    248. for (int i = 0; i < 4; i++) {
    249. sb.append(arr[r.nextInt(52)]);
    250. }
    251. //最后一位加上数字
    252. sb.append(r.nextInt(10));
    253. String str1 = sb.toString();
    254. //把字符串变成字符数组
    255. char[] arr1 = str1.toCharArray();
    256. //打乱字符串
    257. char temp;
    258. for (int i = 0; i < arr1.length; i++) {
    259. int num1 = r.nextInt(arr1.length);
    260. int num2 = r.nextInt(arr1.length);
    261. temp = arr1[num1];
    262. arr1[num1] = arr1[num2];
    263. arr1[num2] = temp;
    264. }
    265. //将打乱后的字符数组转变回字符串
    266. String strNew = String.valueOf(arr1);
    267. System.out.println(strNew);
    268. Scanner sc = new Scanner(System.in);
    269. String userStr = sc.next();
    270. if (strNew.equalsIgnoreCase(userStr)) {
    271. System.out.println("输入正确");
    272. return true;
    273. } else System.out.println("输入错误");
    274. }
    275. }
    276. }

    插入其他程序的位置在代码中已表明!

    制作不易 感谢点赞!!!

  • 相关阅读:
    elementPlus Pagination 分页怎样变中文
    IIOT&IMS背后究竟有哪些技术力量?听7位产业专家透彻解析
    Jakob Jenkov 个人博客 JCE 部分(译文)
    自主研究,开发并产业化的一套UWB精确定位系统源码 UWB源码
    【PyTorch】Training Model
    Spring Boot 2.x系列【9】功能篇之SpringApplication启动参数使用详解
    关于大模型是否开源的分析
    Android 数据库
    java计算机毕业设计学生综合考评管理系统源程序+mysql+系统+lw文档+远程调试
    aliyun服务器centos8安装docker
  • 原文地址:https://blog.csdn.net/kdjdkkd/article/details/136772209