基于之前的简易学生管理系统做的一个升级版,主要增加了用户登陆的操作
需求如下
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
登录界面:
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
代码如下:
Student类:
public class Student {
private String id;
private String name;
private int age;
private String address;
//无参构造
public Student() {
}
//带参构造
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
//取id
public String getId() {
return id;
}
//设置id
public void setId(String id) {
this.id = id;
}
//取name
public String getName() {
return name;
}
//设置name
public void setName(String name) {
this.name = name;
}
//取age
public int getAge() {
return age;
}
//设置age
public void setAge(int age) {
this.age = age;
}
//取address
public String getAddress() {
return address;
}
//设置address
public void setAddress(String address) {
this.address = address;
}
}
User类
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;
}
}
StudentManagementSystem类 :
main方法:
public static void main(String[] args) {
//创建集合存储学生信息
ArrayList <Student> list = new ArrayList<>();
//创建集合存储用户信息
ArrayList <User> userList = new ArrayList<>();
Scanner sc = null;
loop:while (true) {
//欢迎界面
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
//输入选项
sc = new Scanner(System.in);
String choose = sc.next();
switch (choose){
//登陆
case "1":
boolean flag = loginUser(userList);
if(flag){
break loop;
}
break ;
//注册
case "2":
registerUser(userList);
break;
//忘记密码
case "3":
forgetPassword(userList);
break ;
default:
System.out.println("该选项不存在,请重新选择");
break;
}
}
while (true) {
welcome();
System.out.println("请输入您的选择:");
String choose = sc.next();
switch (choose){
//添加学生
case "1":
addStudent(list);
break;
//删除学生
case "2":
deleteStudent(list);
break;
//修改学生
case "3":
updateStudent(list);
break;
//查询学生
case "4":
queryStudent(list);
break;
//退出系统
case "5":
System.exit(0);//停止虚拟机运行
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}
welcom方法:
public static void welcome(){
//打印欢迎界面
System.out.println("---------------欢迎来到学生管理系统----------------");
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
}
addStudent方法:
//添加学生
public static void addStudent(ArrayList <Student> list){
Scanner sc = new Scanner(System.in);
//新建学生对象
Student student = new Student();
//添加id
String id = null;
//用一个循环添加id,
while (true) {
System.out.println("请添加id:");
id = sc.next();
//判断id的唯一性
if(judgeOnly(list,id)){
//不唯一则提示添加失败,继续循环直至添加成功
System.out.println("添加失败,已经有该id");
}
//唯一则添加完id结束循环
else{
student.setId(id);
break;
}
}
//添加年龄
System.out.println("请添加年龄:");
int age = sc.nextInt();
student.setAge(age);
//添加姓名
System.out.println("请添加姓名:");
String name = sc.next();
student.setName(name);
//添加家庭住址
System.out.println("请添加家庭住址:");
String address = sc.next();
student.setAddress(address);
list.add(student);
}
deleteStudent方法:
//删除学生
public static void deleteStudent(ArrayList <Student> list){
Scanner sc =new Scanner(System.in);
System.out.println("请输入要删除的学生id:");
String id =sc.next();
boolean flag = judgeOnly(list, id);
//判断是否存在相同id,如果存在,就删除
if(flag){
//遍历集合,找相同id索引
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
//找到索引,用集合remove方法移除该索引对应元素
list.remove(i);
}
}
}
else{
System.out.println("不存在该id");
return;
}
}
updateStudent方法:
//修改学生
public static void updateStudent(ArrayList <Student> list){
Scanner sc =new Scanner(System.in);
System.out.println("请输入要修改的学生id:");
String id = sc.next();
//判断id是否存在
boolean flag = judgeOnly(list, id);
if(flag){
//存在则修改id
System.out.println("该学生存在,请输入要修改的学生信息:");
//创建一个新的学生对象
Student newStudent = new Student();
//将原id传递给新学生对象
newStudent.setId(id);
System.out.println("请输入学生的姓名:");
String name = sc.next();
newStudent.setName(name);
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
newStudent.setAge(age);
System.out.println("请输入学生的家庭住址:");
String address = sc.next();
newStudent.setAddress(address);
//遍历集合,获取id相同的索引
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
list.set(i,newStudent);
}
}
}
else{
System.out.println("不存在该id");
return;
}
}
queryStudent方法:
//查询学生
public static void queryStudent(ArrayList <Student> list){
if(list.size() == 0){
System.out.println("当前无学生信息,请添加后再查询");
return;
}
else{
System.out.println("id"+"\t\t"+"姓名"+"\t\t"+"年龄"+"\t\t"+"家庭住址");
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(student.getId()+"\t\t"+student.getName()+"\t\t"+student.getAge()+"\t\t"+student.getAddress());
}
}
}
judgeOnly方法:
//判断唯一性
public static boolean judgeOnly(ArrayList <Student> list,String id){
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
return true;
}
}
return false;
}
returnIndex方法:
//输出id相同的索引
public static int returnIndex(ArrayList <Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
return i;
}
}
return -1;
}
registerUser方法:
//注册用户
public static void registerUser(ArrayList <User> userList){
loop:while (true) {
User user = new User();
//创建用户名
loop01:while (true) {
System.out.println("请输入要创建的用户名:");
Scanner sc = new Scanner(System.in);
//输入用户名
String username = sc.next();
//判断用户名唯一性
boolean flag = judgeUserNameOnly(userList, username);
//创建用户对象
if(flag){
System.out.println("已有该用户,请重新输入!");
}
else{
//要求2:长度必须在3~15之间
if(username.length()<3&&username.length()>15){
System.out.println("用户名长度必须为3~15位,您的用户名长度不符合要求,请重新输入!");
}
else {
//要求3:只能是数字加字母,不能是纯数字
//1.判断输入的用户名是否在0~9,a~z,A~Z
boolean standardFlag = judgeUserNameStandard(username);
if(standardFlag){
System.out.println("用户名创建成功");
user.setUsername(username);
break loop01;
}
else {
System.out.println("不符合用户名规范,用户名只能是字母加数字的组合,不能是纯数字或纯字母");
}
}
}
}
//创建密码
loop02:while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户密码:");
String userPassword01 = sc.next();
System.out.println("请再次输入用户密码:");
String userPassword02 =sc.next();
//验证两次密码是否一致
if(userPassword02.equals(userPassword01)){
System.out.println("密码创建成功!");
//将密码添加进user对象
user.setPassword(userPassword01);
//跳出loop02循环
break loop02;
}
else{
System.out.println("两次密码输入的不一致,请重新创建密码!");
}
}
//录入身份证号
loop03:while (true) {
System.out.println("请输入身份证号:");
Scanner sc = new Scanner(System.in);
String personId = sc.next();
//如果身份证号长度等于18位,进行之后操作
if(personId.length() == 18){
//判断身份证号是否符合规范
boolean standard = judgePersonIdStandard(personId);
if(standard){
user.setPersonId(personId);
System.out.println("身份证添加成功!");
break loop03;
}
else{
System.out.println("您输入的身份证不符合规则,要求:\n" +
"\u200B 长度为18位\n" +
"\u200B 不能以0为开头\n" +
"\u200B 前17位,必须都是数字\n" +
"\u200B 最为一位可以是数字,也可以是大写X或小写x\n"+
"请重新输入!");
}
}
else{
System.out.println("身份证号位数错误,请重新输入" );
}
}
//录入手机号
loop04:while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String phoneNumber = sc.next();
//要求1:长度为11位
if(phoneNumber.length() == 11){
boolean standard = judgePhoneNumberStandard(phoneNumber);
if(standard){
System.out.println("手机号添加成功!");
user.setPhoneNumber(phoneNumber);
break loop04;
}
else{
System.out.println("手机号添加失败,请重新输入!要求:\n" +
"\u200B 长度为11位\n" +
"\u200B 不能以0为开头\n" +
"\u200B 必须都是数字");
}
}
else{
System.out.println("您输入的手机号位数有误,请重新输入11位的手机号!");
}
}
//所有循环都能结束,则将对象添加进集合
userList.add(user);
break loop;
}
}
loginUser方法:
//用户登陆
public static boolean loginUser(ArrayList <User> userList){
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
//判断用户名是否存在
boolean flag = judgeUserNameOnly(userList, username);
if(flag){
//一共三次机会
for(int i = 0;i < 3;i++) {
System.out.println("用户名存在!请输入密码:");
String userPasswords = sc.next();
//判断用户名密码是否正确
boolean flag01 = judgePassNumber(userList, userPasswords, username);
if(flag01){
System.out.println("密码正确!");
//输入验证码,每次循环获取一次验证码,直至验证码输对为止
while (true) {
String code1 = getCode();
System.out.println("获取验证码:"+code1);
String code = sc.next();
//对比用户输入和系统随机生成的验证码,对比规则忽略大小写
if(code.equalsIgnoreCase(code1))
{
//验证码输入正确返回true值退出登陆模块
return true;
}
else{
System.out.println("验证码错误!请重新输入");
}
}
}
else{
System.out.println("密码错误,请重新输入,您还有"+(3-i-1)+"次机会");
}
}
}
else{
System.out.println("用户未注册,请先注册");
return false;
}
}
}
forgetPassword方法:
//忘记密码
public static void forgetPassword(ArrayList <User> userList){
Scanner sc = new Scanner(System.in);
//输入用户名
System.out.println("请输入要修改的用户名");
String username = sc.next();
//判断用户是否存在
boolean flag = judgeUserNameOnly(userList, username);
if(flag){
System.out.println("请输入该用户的身份证号:");
String personId = sc.next();
System.out.println("请输入该用户的手机号码:");
String phoneNumber = sc.next();
//修改密码
getPersonIdIndex(personId,phoneNumber,userList);
}
else{
System.out.println("该用户未注册!请注册");
return;
}
}
judgeUserNameOnly方法:
//判断用户名唯一性性
public static boolean judgeUserNameOnly(ArrayList <User> userList,String username){
//遍历集合
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
if(username.equals(user.getUsername())){
return true;
}
}
return false;
}
judgeUserNameStandard方法:
//判断用户名是否规范
public static boolean judgeUserNameStandard(String username){
int countNum = 0;
int countWords = 0;
//遍历用户字符串,获取字符串中的每一个字符,统计数字个数,字母个数
for (int i = 0; i < username.length(); i++) {
char user = username.charAt(i);
if(user >= '0'&&user <= '9'){
countNum++;
}
else if(user >= 'a'&&user <= 'z'){
countWords++;
}
else if(user >= 'A'&&user <= 'Z'){
countWords++;
}
}
//字母个数+数字个数=字符串长度,而且字母个数和数字个数不为零,则符合用户名规范
if(countWords+countNum == username.length()&&countWords > 0&&countNum>0){
return true;
}
else{
return false;
}
}
judgePersonIdStandard方法:
//判断身份证号是否规范
public static boolean judgePersonIdStandard(String personId){
//要求1:不能以0为开头
char words0 = personId.charAt(0);
int count = 0;
if(words0 == '0'){
return false;
}
else{
//要求2:前17位必须是数字
for (int i = 0; i < personId.length()-1; i++) {
char words = personId.charAt(i);
if(words >= '0'&&words <='9'){
count++;
}
}
//要求3:最后一位可以是数字,也可以是大写X或小写x
char wordsLast = personId.charAt(personId.length() - 1);
if(wordsLast >='0'&&wordsLast <='9'){
count++;
}
else if(wordsLast == 'X'||wordsLast == 'x'){
count++;
}
}
if(count == 18){
return true;
}
return false;
}
judgePhoneNumberStandard方法:
//判断手机号录入是否规范
public static boolean judgePhoneNumberStandard(String phoneNumber){
char words0 = phoneNumber.charAt(0);
if(words0 == '0'){
System.out.println("手机号开头不能为0,请重新输入!");
return false;
}
else{
//遍历字符串,找不是数字的
for (int i = 0; i < phoneNumber.length(); i++){
char words = phoneNumber.charAt(i);
if(words >= '0'&&words <= '9'){
return true;
}
}
}
return false;
}
judgePassNumber方法:
//判断密码是否正确密码
public static boolean judgePassNumber(ArrayList <User> userList,String password,String username){
int index = -1;
//遍历集合根据用户名找索引
for (int i = 0; i < userList.size(); i++) {
//
if(username.equals(userList.get(i).getUsername())){
index = i;
}
}
//判断用户名对应的密码是否相同
if(password.equals(userList.get(index).getPassword())){
return true;
}
return false;
}
getCode方法:
//获取验证码
public static String getCode(){
//将26个大小写英文字母添加到字符数组中
char [] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//添加大小写字母
if(i <= 25){
chs[i] = (char)(97+i);
}
else{
chs[i] = (char) (65+i-26);
}
}
//生成随机数
Random r =new Random();
String code = "";
//添加4个字母
for(int i =0 ; i < 4 ; i++){
//生成随机索引
int index = r.nextInt(52);
//将索引对应的元素添加进字符串
code = code + chs[index];
}
int num = r.nextInt(10);
//添加数字
code = code+num;
//打乱字符串
char[] chars = code.toCharArray();
for (int i = 0; i < chars.length; i++) {
int index = r.nextInt(chars.length);
char temp = chars[i];
chars[i] = chars[index];
chars[index] = temp;
}
String result = new String(chars);
return result;
}
getPersonIdinde方法:
//判断身份证和手机号是否一致并修改密码
public static void getPersonIdIndex(String personId,String phoneNumber,ArrayList<User> userList){
Scanner sc = new Scanner(System.in);
//遍历集合取出集合元素
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
//与集合中的每一个user对象比较身份证号和手机号
if(personId.equals(user.getPersonId())&&phoneNumber.equals(user.getPhoneNumber())){
//匹配成功,修改手机号
System.out.println("信息匹配!请输入您要修改的密码:");
String passwords = sc.next();
user.setPassword(passwords);
System.out.println("修改成功!");
return;
}
}
System.out.println("修改失败!账号信息不匹配" );
return;
}
StudentManagementSystem类:
所有代码如下:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudentManagementSystem {
public static void main(String[] args) {
//创建集合存储学生信息
ArrayList <Student> list = new ArrayList<>();
//创建集合存储用户信息
ArrayList <User> userList = new ArrayList<>();
Scanner sc = null;
loop:while (true) {
//欢迎界面
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
//输入选项
sc = new Scanner(System.in);
String choose = sc.next();
switch (choose){
//登陆
case "1":
boolean flag = loginUser(userList);
if(flag){
break loop;
}
break ;
//注册
case "2":
registerUser(userList);
break;
//忘记密码
case "3":
forgetPassword(userList);
break ;
default:
System.out.println("该选项不存在,请重新选择");
break;
}
}
while (true) {
welcome();
System.out.println("请输入您的选择:");
String choose = sc.next();
switch (choose){
//添加学生
case "1":
addStudent(list);
break;
//删除学生
case "2":
deleteStudent(list);
break;
//修改学生
case "3":
updateStudent(list);
break;
//查询学生
case "4":
queryStudent(list);
break;
//退出系统
case "5":
System.exit(0);//停止虚拟机运行
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}
//打印欢迎界面
public static void welcome(){
//打印欢迎界面
System.out.println("---------------欢迎来到学生管理系统----------------");
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
}
//添加学生
public static void addStudent(ArrayList <Student> list){
Scanner sc = new Scanner(System.in);
//新建学生对象
Student student = new Student();
//添加id
String id = null;
//用一个循环添加id,
while (true) {
System.out.println("请添加id:");
id = sc.next();
//判断id的唯一性
if(judgeOnly(list,id)){
//不唯一则提示添加失败,继续循环直至添加成功
System.out.println("添加失败,已经有该id");
}
//唯一则添加完id结束循环
else{
student.setId(id);
break;
}
}
//添加年龄
System.out.println("请添加年龄:");
int age = sc.nextInt();
student.setAge(age);
//添加姓名
System.out.println("请添加姓名:");
String name = sc.next();
student.setName(name);
//添加家庭住址
System.out.println("请添加家庭住址:");
String address = sc.next();
student.setAddress(address);
list.add(student);
}
//删除学生
public static void deleteStudent(ArrayList <Student> list){
Scanner sc =new Scanner(System.in);
System.out.println("请输入要删除的学生id:");
String id =sc.next();
boolean flag = judgeOnly(list, id);
//判断是否存在相同id,如果存在,就删除
if(flag){
//遍历集合,找相同id索引
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
//找到索引,用集合remove方法移除该索引对应元素
list.remove(i);
}
}
}
else{
System.out.println("不存在该id");
return;
}
}
//修改学生
public static void updateStudent(ArrayList <Student> list){
Scanner sc =new Scanner(System.in);
System.out.println("请输入要修改的学生id:");
String id = sc.next();
//判断id是否存在
boolean flag = judgeOnly(list, id);
if(flag){
//存在则修改id
System.out.println("该学生存在,请输入要修改的学生信息:");
//创建一个新的学生对象
Student newStudent = new Student();
//将原id传递给新学生对象
newStudent.setId(id);
System.out.println("请输入学生的姓名:");
String name = sc.next();
newStudent.setName(name);
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
newStudent.setAge(age);
System.out.println("请输入学生的家庭住址:");
String address = sc.next();
newStudent.setAddress(address);
//遍历集合,获取id相同的索引
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
list.set(i,newStudent);
}
}
}
else{
System.out.println("不存在该id");
return;
}
}
//查询学生
public static void queryStudent(ArrayList <Student> list){
if(list.size() == 0){
System.out.println("当前无学生信息,请添加后再查询");
return;
}
else{
System.out.println("id"+"\t\t"+"姓名"+"\t\t"+"年龄"+"\t\t"+"家庭住址");
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(student.getId()+"\t\t"+student.getName()+"\t\t"+student.getAge()+"\t\t"+student.getAddress());
}
}
}
//判断唯一性
public static boolean judgeOnly(ArrayList <Student> list,String id){
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
return true;
}
}
return false;
}
//输出id相同的索引
public static int returnIndex(ArrayList <Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
if(id.equals(student.getId())){
return i;
}
}
return -1;
}
//注册用户
public static void registerUser(ArrayList <User> userList){
loop:while (true) {
User user = new User();
//创建用户名
loop01:while (true) {
System.out.println("请输入要创建的用户名:");
Scanner sc = new Scanner(System.in);
//输入用户名
String username = sc.next();
//判断用户名唯一性
boolean flag = judgeUserNameOnly(userList, username);
//创建用户对象
if(flag){
System.out.println("已有该用户,请重新输入!");
}
else{
//要求2:长度必须在3~15之间
if(username.length()<3&&username.length()>15){
System.out.println("用户名长度必须为3~15位,您的用户名长度不符合要求,请重新输入!");
}
else {
//要求3:只能是数字加字母,不能是纯数字
//1.判断输入的用户名是否在0~9,a~z,A~Z
boolean standardFlag = judgeUserNameStandard(username);
if(standardFlag){
System.out.println("用户名创建成功");
user.setUsername(username);
break loop01;
}
else {
System.out.println("不符合用户名规范,用户名只能是字母加数字的组合,不能是纯数字或纯字母");
}
}
}
}
//创建密码
loop02:while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户密码:");
String userPassword01 = sc.next();
System.out.println("请再次输入用户密码:");
String userPassword02 =sc.next();
//验证两次密码是否一致
if(userPassword02.equals(userPassword01)){
System.out.println("密码创建成功!");
//将密码添加进user对象
user.setPassword(userPassword01);
//跳出loop02循环
break loop02;
}
else{
System.out.println("两次密码输入的不一致,请重新创建密码!");
}
}
//录入身份证号
loop03:while (true) {
System.out.println("请输入身份证号:");
Scanner sc = new Scanner(System.in);
String personId = sc.next();
//如果身份证号长度等于18位,进行之后操作
if(personId.length() == 18){
//判断身份证号是否符合规范
boolean standard = judgePersonIdStandard(personId);
if(standard){
user.setPersonId(personId);
System.out.println("身份证添加成功!");
break loop03;
}
else{
System.out.println("您输入的身份证不符合规则,要求:\n" +
"\u200B 长度为18位\n" +
"\u200B 不能以0为开头\n" +
"\u200B 前17位,必须都是数字\n" +
"\u200B 最为一位可以是数字,也可以是大写X或小写x\n"+
"请重新输入!");
}
}
else{
System.out.println("身份证号位数错误,请重新输入" );
}
}
//录入手机号
loop04:while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String phoneNumber = sc.next();
//要求1:长度为11位
if(phoneNumber.length() == 11){
boolean standard = judgePhoneNumberStandard(phoneNumber);
if(standard){
System.out.println("手机号添加成功!");
user.setPhoneNumber(phoneNumber);
break loop04;
}
else{
System.out.println("手机号添加失败,请重新输入!要求:\n" +
"\u200B 长度为11位\n" +
"\u200B 不能以0为开头\n" +
"\u200B 必须都是数字");
}
}
else{
System.out.println("您输入的手机号位数有误,请重新输入11位的手机号!");
}
}
//所有循环都能结束,则将对象添加进集合
userList.add(user);
break loop;
}
}
//用户登陆
public static boolean loginUser(ArrayList <User> userList){
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
//判断用户名是否存在
boolean flag = judgeUserNameOnly(userList, username);
if(flag){
//一共三次机会
for(int i = 0;i < 3;i++) {
System.out.println("用户名存在!请输入密码:");
String userPasswords = sc.next();
//判断用户名密码是否正确
boolean flag01 = judgePassNumber(userList, userPasswords, username);
if(flag01){
System.out.println("密码正确!");
//输入验证码,每次循环获取一次验证码,直至验证码输对为止
while (true) {
String code1 = getCode();
System.out.println("获取验证码:"+code1);
String code = sc.next();
//对比用户输入和系统随机生成的验证码,对比规则忽略大小写
if(code.equalsIgnoreCase(code1))
{
//验证码输入正确返回true值退出登陆模块
return true;
}
else{
System.out.println("验证码错误!请重新输入");
}
}
}
else{
System.out.println("密码错误,请重新输入,您还有"+(3-i-1)+"次机会");
}
}
}
else{
System.out.println("用户未注册,请先注册");
return false;
}
}
}
//忘记密码
public static void forgetPassword(ArrayList <User> userList){
Scanner sc = new Scanner(System.in);
//输入用户名
System.out.println("请输入要修改的用户名");
String username = sc.next();
//判断用户是否存在
boolean flag = judgeUserNameOnly(userList, username);
if(flag){
System.out.println("请输入该用户的身份证号:");
String personId = sc.next();
System.out.println("请输入该用户的手机号码:");
String phoneNumber = sc.next();
//修改密码
getPersonIdIndex(personId,phoneNumber,userList);
}
else{
System.out.println("该用户未注册!请注册");
return;
}
}
//判断用户名唯一性性
public static boolean judgeUserNameOnly(ArrayList <User> userList,String username){
//遍历集合
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
if(username.equals(user.getUsername())){
return true;
}
}
return false;
}
//判断用户名是否规范
public static boolean judgeUserNameStandard(String username){
int countNum = 0;
int countWords = 0;
//遍历用户字符串,获取字符串中的每一个字符,统计数字个数,字母个数
for (int i = 0; i < username.length(); i++) {
char user = username.charAt(i);
if(user >= '0'&&user <= '9'){
countNum++;
}
else if(user >= 'a'&&user <= 'z'){
countWords++;
}
else if(user >= 'A'&&user <= 'Z'){
countWords++;
}
}
//字母个数+数字个数=字符串长度,而且字母个数和数字个数不为零,则符合用户名规范
if(countWords+countNum == username.length()&&countWords > 0&&countNum>0){
return true;
}
else{
return false;
}
}
//判断身份证号是否规范
public static boolean judgePersonIdStandard(String personId){
//要求1:不能以0为开头
char words0 = personId.charAt(0);
int count = 0;
if(words0 == '0'){
return false;
}
else{
//要求2:前17位必须是数字
for (int i = 0; i < personId.length()-1; i++) {
char words = personId.charAt(i);
if(words >= '0'&&words <='9'){
count++;
}
}
//要求3:最后一位可以是数字,也可以是大写X或小写x
char wordsLast = personId.charAt(personId.length() - 1);
if(wordsLast >='0'&&wordsLast <='9'){
count++;
}
else if(wordsLast == 'X'||wordsLast == 'x'){
count++;
}
}
if(count == 18){
return true;
}
return false;
}
//判断手机号录入是否规范
public static boolean judgePhoneNumberStandard(String phoneNumber){
char words0 = phoneNumber.charAt(0);
if(words0 == '0'){
System.out.println("手机号开头不能为0,请重新输入!");
return false;
}
else{
//遍历字符串,找不是数字的
for (int i = 0; i < phoneNumber.length(); i++){
char words = phoneNumber.charAt(i);
if(words >= '0'&&words <= '9'){
return true;
}
}
}
return false;
}
//判断密码是否正确密码
public static boolean judgePassNumber(ArrayList <User> userList,String password,String username){
int index = -1;
//遍历集合根据用户名找索引
for (int i = 0; i < userList.size(); i++) {
//
if(username.equals(userList.get(i).getUsername())){
index = i;
}
}
//判断用户名对应的密码是否相同
if(password.equals(userList.get(index).getPassword())){
return true;
}
return false;
}
//获取验证码
public static String getCode(){
//将26个大小写英文字母添加到字符数组中
char [] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//添加大小写字母
if(i <= 25){
chs[i] = (char)(97+i);
}
else{
chs[i] = (char) (65+i-26);
}
}
//生成随机数
Random r =new Random();
String code = "";
//添加4个字母
for(int i =0 ; i < 4 ; i++){
//生成随机索引
int index = r.nextInt(52);
//将索引对应的元素添加进字符串
code = code + chs[index];
}
int num = r.nextInt(10);
//添加数字
code = code+num;
//打乱字符串
char[] chars = code.toCharArray();
for (int i = 0; i < chars.length; i++) {
int index = r.nextInt(chars.length);
char temp = chars[i];
chars[i] = chars[index];
chars[index] = temp;
}
String result = new String(chars);
return result;
}
//判断身份证和手机号是否一致并修改密码
public static void getPersonIdIndex(String personId,String phoneNumber,ArrayList<User> userList){
Scanner sc = new Scanner(System.in);
//遍历集合取出集合元素
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
//与集合中的每一个user对象比较身份证号和手机号
if(personId.equals(user.getPersonId())&&phoneNumber.equals(user.getPhoneNumber())){
//匹配成功,修改手机号
System.out.println("信息匹配!请输入您要修改的密码:");
String passwords = sc.next();
user.setPassword(passwords);
System.out.println("修改成功!");
return;
}
}
System.out.println("修改失败!账号信息不匹配" );
return;
}
//测试方法
public static void test(ArrayList <User> userList){
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
System.out.println("用户名:"+user.getUsername()+"密码:"+user.getPassword()+"身份证号:"+user.getPersonId()+"手机号:"+user.getPhoneNumber());
}
}
}
不足:
逻辑过于基础导致代码冗余,有一些重复地方,可以多写几个方法避免冗余。