- 为员工管理系统书写一个登录、注册、忘记密码的功能
- 采用控制台的方式书写员工管理系统
- 用户登录成功后,可以进入员工管理系统进行增删改查操作
初始化菜单:
--------欢迎来到员工管理系统---------- 1.添加员工 2.删除员工 3.查找员工 4.修改员工 5.清空员工 6.退出 请输入您的选择: |
员工类:
属性:id、姓名、年龄、家庭住址
用户类:
属性:用户名、密码、身份证号、手机号
注册功能:
- 用户名需要满足以下需求:
验证要求:
- 用户名唯一
- 用户名长度必须3-15位之间
- 只能是字母加数字的组合,但是不能是纯数字
需求分析: 用户名满足的要求: Scanner键盘录入用户名username 唯一性:先到list集合中判断是否存在 contains 长度必须3-15位之间:用字符串的length() 字符类型:
|
- 密码键盘输入两次,两次一致才能注册
需求分析: 利用Scanner第一次输入密码 利用Scanner第二次输入密码 两次一致,符合要求,否则不符合要求 |
- 身份证号码需要验证
验证需求:
- 长度为18位
- 不能以0位开头
- 前17位,都必须是数字
- 最后一位可以是数字,也可以是大写X或者小写x
需求分析: 利用字符串length()判断长度是否是18 利用字符串的charAt(0) ,获取第一个字符,跟‘0’进行比较 遍历前17位,如果有一个不在‘0’-‘9’之间,就不合符条件 获取最后一个字符,如果这个字符在‘0’-‘9’之间,或者‘x’ ‘X’,就满足 |
- 手机号验证:
验证要求:
- 长度位11位
- 不能以0开头
- 都必须是数字
需求分析: 利用字符串length()判断长度是否是11 利用字符串的charAt(0) ,获取第一个字符,跟‘0’进行比较 遍历手机号码,如果有一个字符不在‘0’-‘9’之间,则手机号码错误 |
登录功能:
- 键盘录入用户名
- 键盘录入密码
- 键盘录入验证码
验证要求:
- 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
- 判断验证码是否正确,如果不正确,重新输入
- 再判断用户名和密码是否正确,有三次机会
忘记密码:
- 键盘录入用户名,判断当前用户名是否存在,如果不存在,直接结束方法,并提示未注册
- 键盘录入身份证号码和手机号码
- 判断当前用户身份证号码和手机号码是否一致
如果一致,则提示输入密码,进行修改
如果不一致,则提示:账号信息不匹配,修改失败
验证码规则:
长度为5
由4位大写或者小写字母和一位数字组成,同一个字母可重复
数字可以出现在任意位置 X79bk
添加功能:
键盘录入每个员工信息并添加,需要满足如下需求:id唯一
删除功能:
键盘录入要删除员工id,需要满足以下要求:
- Id存在删除
- Id不存在,需要提示不存在,并回到初始菜单
修改功能:
键盘录入要修改的员工id,需要满足以下要求:
- Id存在,记录录入其他信息
- Id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的员工信息,需要满足以下需求:
如果没有员工信息,提示:当前无员工信息,请添加后再查询
如果有员工信息,按照要求输出。
//员工类
public class Employee {
//id
private String id;
//name
private String name;
//age
private int age;
//address
private String address;
//无参构造方法
public Employee (){
}
//有参构造方法
public Employee(String id,String name,int age,String address ){
this.id =id;
this.name=name;
this.age=age;
this.address=address;
}
//name取值方法
public String getName() {
return name;
}
//name赋值方法
public void setName(String name) {
this.name = name;
}
//age赋值方法
public void setAge(int age) {
this.age = age;
}
//age取值方法
public int getAge() {
return age;
}
//id赋值方法
public void setId(String id) {
this.id = id;
}
//id取值方法
public String getId() {
return id;
}
//address取值方法
public String getAddress() {
return address;
}
//address赋值方法
public void setAddress(String address) {
this.address = address;
}
}
//用户类
public class User {
//username
private String username;
//password
private String password;
//idnumber
private String idnumber;
//phone
private String phone;
//无参构造方法
public User() {
}
//有参构造方法
public User(String username, String password,String idnumber, String phone) {
this.username = username;
this.password = password;
this.idnumber = idnumber;
this.phone = phone;
}
//idnumber取值方法
public String getIdnumber() {
return idnumber;
}
//username取值方法
public String getUsername() {
return username;
}
//password取值方法
public String getPassword() {
return password;
}
//phone取值方法
public String getPhone() {
return phone;
}
//idnumer赋值方法
public void setIdnumber(String idnumber) {
this.idnumber = idnumber;
}
//password赋值方法
public void setPassword(String password) {
this.password = password;
}
//phone赋值方法
public void setPhone(String phone) {
this.phone = phone;
}
//username赋值方法
public void setUsername(String username) {
this.username = username;
}
}
//员工管理系统
import java.util.ArrayList;
import java.util.Scanner ;
public class test {
//定义方法
public static void employeeSystem() {
ArrayList<Employee> list = new ArrayList<>();
//初始化菜单
menu: while(true) {
System.out.println("--------欢迎来到员工管理系统----------");
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 scan = new Scanner(System.in);
String x = scan.next();
switch (x) {
case "1":{
addemployee(list);
break;
}
case "2": {
deleemployee(list);
break;
}
case "3": {
findemployee(list);
break;
}
case "4": {
changeemployee(list);
break;
}
case "5": {
clearemployee(list);
break;
}
case "6":{
System.out.println("退出系统");
break menu;
}
default:{
System.out.println("输入不合法!");
}
}
}
}
//修改员工信息
public static void changeemployee(ArrayList<Employee> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的员工id");
String id = sc.next();
//调用索引
int index = getIndex(list, id);
if (index == -1) {
System.out.println("要修改的id" + id + "不存在,请重新输入");
}
else{
Employee emp = list.get(index);
System.out.println("请输入修改的员工姓名:");
String newName = sc.next();
emp.setName(newName);
System.out.println("请输入修改的员工年龄:");
String newAge = sc.next();
emp.setAge(Integer.parseInt(newAge));
System.out.println("请输入修改的员工家庭地址:");
String newAddress = sc.next();
emp.setAddress(newAddress);
System.out.println("修改成功");
}
return ;
}
//添加员工
public static void addemployee(ArrayList<Employee> list) {
Employee e = new Employee();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入员工id:");
String id = sc.next();
boolean flag = contains(list, id);
if (flag) {
System.out.println("id已存在,请重新输入");
} else {
e.setId(id);
break;
}
}
System.out.println("请输入员工的姓名:");
String name = sc.next();
e.setName(name);
System.out.println("请输入员工的年龄:");
int age = sc.nextInt();
e.setAge(age);
System.out.println("请输入员工家庭住址");
String address = sc.next();
e.setAddress(address);
list.add(e);
System.out.println("员工信息添加成功");
return;
}
//删除员工
public static void deleemployee(ArrayList<Employee> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的员工id:");
String id = sc.next();
int index = getIndex(list, id);
if (index >= 0) {
list.remove(index);
System.out.println("id为:" + id + "的员工删除成功");
return;
}
else {
System.out.println("员工不存在,删除失败");
return;
}
}
//查询员工
public static void findemployee(ArrayList<Employee> list) {
if (list.size() == 0) {
System.out.println("无员工信息,请输入员工信息");
return;
}
System.out.println("id\t\t姓名\t\t年龄\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Employee employee = list.get(i);
System.out.println(employee.getId() + '\t'+'\t' + employee.getName() + '\t' +'\t'+ employee.getAge() + '\t' + employee.getAddress());
}
}
public static int getIndex(ArrayList<Employee> list, String id) {
//循环遍历集合得到里面的每一个学生对象
for (int i = 0; i < list.size(); i++) {
//拿到学生对象后,获取id并和要查询的id进行比较
String sid = list.get(i).getId();
if (id.equals(sid)) {
//如果一样,那么就返回索引
return i;
}
}
//当循环结束之后还没有找到,就表示不存在,返回-1
return -1;
}
//判断id在是否在列表当中
public static boolean contains(ArrayList<Employee> list, String id) {
return getIndex(list, id) >= 0;
}
//清空员工
public static void clearemployee(ArrayList<Employee> list) {
list.clear();
System.out.println("员工已清空!");
return;
}
}
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class usersystem {
public static void main(String[] args){
ArrayList<User> list = new ArrayList<>();
//定义用户对象
User u1=new User("mmk","123m","410725200201080026","18637387723");
//将其添加到集合中
list.add(u1);
Scanner sc = new Scanner(System.in);
//用户登录界面,同时使用死循环在重复显示界面
while(true) {
System.out.println("--------欢迎进入用户登录页面----------");
System.out.println("1.用户注册");
System.out.println("2.用户登录");
System.out.println("3.忘记密码");
System.out.println("4.退出");
System.out.println("请输入您的选择:");
Scanner scan = new Scanner(System.in);
String x = scan.next();
//使用switch结构调用对应方法
switch (x) {
case "1": {
adduser(list);
break;
}
case "2": {
openuser(list);
break;
}
case "3": {
forgetpassword(list);
break;
}
case "4": {
System.out.println("退出系统");
System.exit(0);
}
default: {
System.out.println("输入不合法!");
}
}
}
}
//用户登录界面方法
public static void openuser(ArrayList<User> list) {
System.out.println("登录");
for (int i = 0; i < 3; i++) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
// 判断用户名是否存在
boolean flag = contains(list, username);
if (flag) {
System.out.println("用户名未注册,请先注册再登录");
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封装成对象
User userInfo = new User(username, password, null, null);
boolean result = checkUserInfo(list, userInfo);
//验证成功进入系统,验证失败总共有三次机会
if (result) {
System.out.println("登录成功!可以进入员工管理系统");
test empy = new test();
empy.employeeSystem();
break;
}
else {
System.out.println("登录失败,用户名或密码错误");
if (i == 2) {
System.out.println("当前账号已被锁定");
}
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;
}
// 注册
private static void adduser(ArrayList<User> list) {
System.out.println("欢迎来到注册界面");
Scanner sc = new Scanner(System.in);
String username;
String password;
String idnumber;
String phone;
// 键盘录入用户名判断是否符合要求
while (true) {
System.out.println("请输入用户名:");
username = sc.next();
boolean flag = checkUsername(username);
if (!flag) {
System.out.println("用户格式不满足,请重新输入");
continue;
}
// 判断用户名是否唯一
if (!contains(list, username)) {
System.out.println("当前用户名无法注册,请重新输入");
} else {
System.out.println("当前用户名可用,继续录入信息");
break;
}
}
// 键盘录入密码判断是否符合要求
while (true) {
System.out.println("请输入密码:");
password = sc.next();
System.out.println("请再次输入密码:");
String password2 = sc.next();
if (!password.equals(password2)) {
System.out.println("两次密码输入不一致,请重新输入");
continue;
} else {
System.out.println("两次密码一致,继续录入其他数据");
break;
}
}
// 键盘录入身份证判断是否符合要求
while (true) {
System.out.println("请输入身份证号码");
idnumber = sc.next();
boolean flag = checkPersonID(idnumber );
if (flag) {
System.out.println("身份证号码符合要求");
break;
} else {
System.out.println("身份证号码格式有误,请重新输入");
continue;
}
}
// 键盘录入手机号码判断是否符合要求
while (true) {
System.out.println("请输入手机号码");
phone = sc.next();
boolean flag = checkPhoneNumber(phone);
if (flag) {
System.out.println("手机号码符合要求");
break;
} else {
System.out.println("手机号码格式有误,请重新输入");
continue;
}
}
// 创建对象,用户名、密码、身份证号码、手机号放到用户对象中
User u = new User(username, password ,idnumber, phone);
list.add(u);
System.out.println("注册成功");
return;
}
// 遍历集合的方法
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.getIdnumber() + ", " + user.getPhone());
}
}
// 验证手机号码,使用了正则表达式
private static boolean checkPhoneNumber(String phone) {
String regex1="[1][3-9]\\d{9}";
Pattern pattern = Pattern.compile(regex1);
Matcher matcher = pattern.matcher(phone);
if (matcher.matches()) {
return true;
}
else{
return false;
}
}
// 验证身份证号码,使用正则表达式判断
private static boolean checkPersonID(String idnumber) {
String regex2="[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))((0[1-9])|([12]\\d)|3[01])\\d{3}[\\dxX]";
Pattern p = Pattern.compile(regex2);
Matcher m = p.matcher(idnumber );
if (m.matches()) {
return true;
}
else{
return false;
}
}
// 用户名唯一性检验
private static boolean contains(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
if (username.equals(list.get(i).getUsername())) {
return false;
}
}
return true;
}
// 检验用户名是否符合规范,使用正则表达式验证
private static boolean checkUsername(String username) {
// 用户名长度必须在3-15之间,且只能为数字或字母,不能是纯数字
String regex3="[a-zA-Z0-9]{3,15}";
Pattern pat = Pattern.compile(regex3);
Matcher mat = pat.matcher(username);
if (mat.matches()) {
return true;
}
else{
return false;
}
}
// 忘记密码
private static void forgetpassword(ArrayList<User> list) {
System.out.println("忘记密码");
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
// 判断用户名是否存在
boolean flag = contains(list, username);
if (flag) {
System.out.println("用户名未注册,请先注册");
return;
}
System.out.println("请输入身份证号码");
String idnumber = sc.next();
System.out.println("请输入手机号");
String phone = sc.next();
// 判断身份证号码和手机号码是否一致
int index = findIndex(list, username);
User user = list.get(index);
if (!((user.getIdnumber().equalsIgnoreCase(idnumber)) && (user.getPhone().equalsIgnoreCase(phone)))) {
System.out.println("身份证号码或手机号码输入有误,不能修改密码");
return;
}
// 验证成功,可以修改
String password;
while (true) {
System.out.println("请输入新密码:");
password = sc.next();
System.out.println("请再次输入新密码:");
String password2 = sc.next();
if (!password.equals(password2)) {
System.out.println("两次密码输入不一致,请重新输入");
continue;
} else
{
System.out.println("两次密码一致");
break;
}
}
user.setPassword(password);
System.out.println("密码修改成功");
return;
}
// 查找对应用户名的索引
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;
}
// 生成一个验证码,4位大小写字母+1位数字,顺序随机
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 r = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int num = r.nextInt(list.size());
char c = list.get(num);
sb.append(c);
}
int number = r.nextInt(10);
sb.append(number);
// 如果要修改字符串中的内容,需要先把字符串变成字符数组,在数组中修改,然后再创建一个新的字符串
char[] arr = sb.toString().toCharArray();
int randomOfIndex = r.nextInt(arr.length);
// 最大索引指向的元素跟随机索引指向的元素进行交换
char temp = arr[randomOfIndex];
arr[randomOfIndex] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
// 返回一个新的字符串
return new String(arr);
}
}