在做东西之前,第一件事情永远是分析

分析什么?分析程序逻辑
主菜单有 注册、登录、查询、退出功能
在登录之后 才可以进行 修改名字、修改密码、删除用户、添加员工、修改员工等等


思维导图

mainMenu.jpg

mainMenu.jpg

managerMenu.png
managerMenu.png


具体思路已经放出,每次输入都要考虑是否会有错误
把所有功能模块化,让他更简单,尽量减少重复的代码

User类

public class User { private int username; private int password; private int uuid; public User() { } public User(int username, int password,int uuid) { this.uuid = uuid; this.username = username; this.password = password; } public int getUuid() { return uuid; } public void setUuid(int uuid) { this.uuid = uuid; } public int getUsername() { return username; } public void setUsername(int username) { this.username = username; } public int getPassword() { return password; } public void setPassword(int password) { this.password = password; } }

主类

int index = 0; static Scanner scanner = new Scanner(System.in); static Demo demo = new Demo(); static EmployeeManager employeeManager = new EmployeeManager();

main函数

public static void main(String[] args) { User [] users = new User[1]; demo.mainMenu(users); }

mainMenu函数

public void mainMenu(User [] users) { System.out.println("[!] 请选择功能:\n1、注册 2、登录 \n3、查询 4、退出"); System.out.print("[?] 请输入: "); String flag = scanner.next(); switch (flag) { case "1": demo.registerUser(users); break; case "2": demo.userLogin(users); break; case "3": demo.searchUser(users); break; case "4": System.exit(0); break; default: System.out.println("[❌] 你输入了一个错误的内容,请重新输入!"); demo.mainMenu(users); break; } }

registerUser函数

public void registerUser(User [] users) { System.out.print("[!] 请输入账号:"); int username = scanner.nextInt(); if (demo.findUsername(users,username) ) { System.out.println("[❌] 用户名已经存在,请重新注册!"); registerUser(users); } System.out.print("[!] 请输入密码:"); int password = scanner.nextInt(); if (users[users.length-1]!=null) { users=demo.increaseUsers(users); } User user = new User(username,password,index+1001); users[index] = user; System.out.println("[V] 注册成功,编号:"+users[index].getUuid()+",账号:" + users[index].getUsername()+",密码:"+users[index].getPassword()); index++; while (true) { System.out.println("[?] 是否还要继续注册?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { registerUser(users); } if (getYes == 0) { mainMenu(users); } } }

userLogin函数

public void userLogin(User [] users) { System.out.print("[?] 请输入你要登录的账号: "); int username = scanner.nextInt(); if (!demo.findUsername(users,username)) { System.out.println("[❌] 没有找到该账号,可能你的输入存在问题!"); while (true) { System.out.println("[?] 是否还要继续登录?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { userLogin(users); } if (getYes == 0) { mainMenu(users); } } } System.out.print("[?] 请输入账号的密码: "); int password = scanner.nextInt(); if (!verifyPassword(users,username,password)) { System.out.println("[❌] 登录失败!密码错误!请重新登录你的账号!(将返回至登录账号界面)"); userLogin(users); } System.out.println("[!] 登录成功!"); demo.loginSuccessMenu(users,findUsernameInUsers(users,username)); }

findUsername函数

public boolean findUsername(User [] users,int username) { for (User u : users) { if (u != null) { if (u.getUsername() == username) { return true; } } } return false; }

findUsernameInusers

public User findUsernameInUsers(User [] users,int username) { for (User u : users) { if (u != null) { if (u.getUsername() == username) { return u; } } } return null; }

increaseUsers函数

public User[] increaseUsers(User [] u) { User [] tempUsers = new User[u.length+1]; for (int i = 0; i < u.length; i++) { tempUsers[i]=u[i]; } return tempUsers; }

loginSuccessMenu函数

public void loginSuccessMenu(User [] users,User user) { System.out.println("[!] "+user.getUsername()+" 欢迎你,请选择功能:\n1、修改名字 2、修改密码 \n3、删除账号 4、添加员工 "); System.out.println("5、删除员工 6、修改员工 \n7、查询员工 8、返回主菜单"); System.out.print("[?] 请输入: "); String flag = scanner.next(); switch (flag) { case "1": demo.changeUsername(users,user); break; case "2": demo.changePassword(users,user); case "3": System.out.println("[!] 此操作将会彻底删除你的账户!"); while (true) { System.out.println("[?] 你真的要删除账户吗?(yes/no) 否将返回至上一级菜单"); int getYes = yesOrno(); if (getYes == 1) { demo.deleteUser(users,user); } if (getYes == 0) { loginSuccessMenu(users,user); } } case "4": employeeManager.addEmployee(); loginSuccessMenu(users,user); case "5": employeeManager.deleteEmploy(); loginSuccessMenu(users,user); case "6": employeeManager.changeEmployee(); loginSuccessMenu(users,user); case "7": employeeManager.searchEmploy(); loginSuccessMenu(users,user); case "8": mainMenu(users); default: System.out.println("[❌] 输入错误,请重新选择!"); loginSuccessMenu(users,user); } }

searchUser函数

public void searchUser(User [] users) { System.out.println("[!] 请输入你要查询的账户,将会返回是否存在!"); System.out.print("[?] 请输入: "); int username = scanner.nextInt(); boolean isFound = findUsername(users,username); if ( !isFound ) { System.out.println("[❌] 账户没有找到!请检查是否输入正确!"); while (true) { System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { searchUser(users); } if (getYes == 0) { mainMenu(users); } } } User u = findUsernameInUsers(users,username); System.out.println("[V] 找到账户:"+username+",编号:"+u.getUuid()); while (true) { System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { searchUser(users); } if (getYes == 0) { mainMenu(users); } } }

yesOrno函数

public int yesOrno() { System.out.print("[!] 请输入: "); String flag = scanner.next(); switch (flag) { case "yes": return 1; case "no": return 0; default: System.out.println("[❌] 你输入了一个错误的内容,请重新输入!"); return -1; } }

VerifyPassword函数

public boolean verifyPassword(User [] users,int username,int password) { for (User u : users) { if (u != null) { if (u.getUsername() == username && u.getPassword() == password) { return true; } } } return false; }

changeUsername函数

public void changeUsername(User [] users,User user) { System.out.print("[?] 请输入你要修改成的名字: "); int backUsername = user.getUsername(); user.setUsername(scanner.nextInt()); System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() +" (原账号: "+backUsername+")"+ ",密码:" + user.getPassword()); while (true) { System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { loginSuccessMenu(users,user); } if (getYes == 0) { mainMenu(users); } } }

changePassword函数

public void changePassword(User [] users,User user) { System.out.print("[?] 请输入你要修改成的密码: "); int backPassword = user.getPassword(); user.setPassword(scanner.nextInt()); System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() + ",密码:" + user.getPassword()+" (原密码: "+backPassword+")"); while (true) { System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { loginSuccessMenu(users,user); } if (getYes == 0) { mainMenu(users); } } }

deleteUser函数

public void deleteUser(User [] users,User user) { int index = users.length; for (int i = 0; i < users.length; i++) { if (users[i] == user) { users[i] = null; index = i; } } while (index < users.length-1) { users[index] = users[index+1]; index++; } if (users.length != 1) { User [] tempUsers = new User[users.length-1]; for (int i = 0; i < users.length-1; i++) { tempUsers[i]=users[i]; } users = tempUsers; System.out.println("[!] 删除成功,自动返回至主菜单!"); mainMenu(users); } }

全部代码

主类代码

public class Demo { int index = 0; static Scanner scanner = new Scanner(System.in); static Demo demo = new Demo(); static EmployeeManager employeeManager = new EmployeeManager(); public User[] increaseUsers(User [] u) { User [] tempUsers = new User[u.length+1]; for (int i = 0; i < u.length; i++) { tempUsers[i]=u[i]; } return tempUsers; } public boolean findUsername(User [] users,int username) { for (User u : users) { if (u != null) { if (u.getUsername() == username) { return true; } } } return false; } public User findUsernameInUsers(User [] users,int username) { for (User u : users) { if (u != null) { if (u.getUsername() == username) { return u; } } } return null; } public void registerUser(User [] users) { System.out.print("[!] 请输入账号:"); int username = scanner.nextInt(); if (demo.findUsername(users,username) ) { System.out.println("[❌] 用户名已经存在,请重新注册!"); registerUser(users); } System.out.print("[!] 请输入密码:"); int password = scanner.nextInt(); if (users[users.length-1]!=null) { users=demo.increaseUsers(users); } User user = new User(username,password,index+1001); users[index] = user; System.out.println("[V] 注册成功,编号:"+users[index].getUuid()+",账号:" + users[index].getUsername()+",密码:"+users[index].getPassword()); index++; while (true) { System.out.println("[?] 是否还要继续注册?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { registerUser(users); } if (getYes == 0) { mainMenu(users); } } } public boolean verifyPassword(User [] users,int username,int password) { for (User u : users) { if (u != null) { if (u.getUsername() == username && u.getPassword() == password) { return true; } } } return false; } public int yesOrno() { System.out.print("[!] 请输入: "); String flag = scanner.next(); switch (flag) { case "yes": return 1; case "no": return 0; default: System.out.println("[❌] 你输入了一个错误的内容,请重新输入!"); return -1; } } public void userLogin(User [] users) { System.out.print("[?] 请输入你要登录的账号: "); int username = scanner.nextInt(); if (!demo.findUsername(users,username)) { System.out.println("[❌] 没有找到该账号,可能你的输入存在问题!"); while (true) { System.out.println("[?] 是否还要继续登录?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { userLogin(users); } if (getYes == 0) { mainMenu(users); } } } System.out.print("[?] 请输入账号的密码: "); int password = scanner.nextInt(); if (!verifyPassword(users,username,password)) { System.out.println("[❌] 登录失败!密码错误!请重新登录你的账号!(将返回至登录账号界面)"); userLogin(users); } System.out.println("[!] 登录成功!"); demo.loginSuccessMenu(users,findUsernameInUsers(users,username)); } public void changeUsername(User [] users,User user) { System.out.print("[?] 请输入你要修改成的名字: "); int backUsername = user.getUsername(); user.setUsername(scanner.nextInt()); System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() +" (原账号: "+backUsername+")"+ ",密码:" + user.getPassword()); while (true) { System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { loginSuccessMenu(users,user); } if (getYes == 0) { mainMenu(users); } } } public void changePassword(User [] users,User user) { System.out.print("[?] 请输入你要修改成的密码: "); int backPassword = user.getPassword(); user.setPassword(scanner.nextInt()); System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() + ",密码:" + user.getPassword()+" (原密码: "+backPassword+")"); while (true) { System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { loginSuccessMenu(users,user); } if (getYes == 0) { mainMenu(users); } } } public void deleteUser(User [] users,User user) { int index = users.length; for (int i = 0; i < users.length; i++) { if (users[i] == user) { users[i] = null; index = i; } } while (index < users.length-1) { users[index] = users[index+1]; index++; } if (users.length != 1) { User [] tempUsers = new User[users.length-1]; for (int i = 0; i < users.length-1; i++) { tempUsers[i]=users[i]; } users = tempUsers; System.out.println("[!] 删除成功,自动返回至主菜单!"); mainMenu(users); } } public void loginSuccessMenu(User [] users,User user) { System.out.println("[!] "+user.getUsername()+" 欢迎你,请选择功能:\n1、修改名字 2、修改密码 \n3、删除账号 4、添加员工 "); System.out.println("5、删除员工 6、修改员工 \n7、查询员工 8、返回主菜单"); System.out.print("[?] 请输入: "); String flag = scanner.next(); switch (flag) { case "1": demo.changeUsername(users,user); break; case "2": demo.changePassword(users,user); case "3": System.out.println("[!] 此操作将会彻底删除你的账户!"); while (true) { System.out.println("[?] 你真的要删除账户吗?(yes/no) 否将返回至上一级菜单"); int getYes = yesOrno(); if (getYes == 1) { demo.deleteUser(users,user); } if (getYes == 0) { loginSuccessMenu(users,user); } } case "4": employeeManager.addEmployee(); loginSuccessMenu(users,user); case "5": employeeManager.deleteEmploy(); loginSuccessMenu(users,user); case "6": employeeManager.changeEmployee(); loginSuccessMenu(users,user); case "7": employeeManager.searchEmploy(); loginSuccessMenu(users,user); case "8": mainMenu(users); default: System.out.println("[❌] 输入错误,请重新选择!"); loginSuccessMenu(users,user); } } public void searchUser(User [] users) { System.out.println("[!] 请输入你要查询的账户,将会返回是否存在!"); System.out.print("[?] 请输入: "); int username = scanner.nextInt(); boolean isFound = findUsername(users,username); if ( !isFound ) { System.out.println("[❌] 账户没有找到!请检查是否输入正确!"); while (true) { System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { searchUser(users); } if (getYes == 0) { mainMenu(users); } } } User u = findUsernameInUsers(users,username); System.out.println("[V] 找到账户:"+username+",编号:"+u.getUuid()); while (true) { System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单"); int getYes = yesOrno(); if (getYes == 1) { searchUser(users); } if (getYes == 0) { mainMenu(users); } } } public void mainMenu(User [] users) { System.out.println("[!] 请选择功能:\n1、注册 2、登录 \n3、查询 4、退出"); System.out.print("[?] 请输入: "); String flag = scanner.next(); switch (flag) { case "1": demo.registerUser(users); break; case "2": demo.userLogin(users); break; case "3": demo.searchUser(users); break; case "4": System.exit(0); break; default: System.out.println("[❌] 你输入了一个错误的内容,请重新输入!"); demo.mainMenu(users); break; } } public static void main(String[] args) { User [] users = new User[1]; demo.mainMenu(users); } }

总结

通过思维导图,将所有要做的事情提前规划
功能的实现,在修改、删除上,都需要使用查询,所以可以将查询单拿出来
在注册时,也要查询一遍是否有同样的名字出现,如果出现了则需要换一个名字注册
所以在查询的功能上,可以定义为Boolean类型,true代表查询到了,false则代表没有

在进行删除操作的时候,要注意一件事情,删除数据后,要将该位置之后的所有位置前移
同时,我也做了数组自减的方法,删除一条数据后,也会将数组的长度自减
注册的时候会自增

主类里面定义的yesOrno是用来判断你到底输入了yes还是no,还是其他内容
因为我制作了在功能完毕后,提示是否还要继续的操作
我将登录的验证做成了一个单独的模块,即verifyPassword,如果账号和密码相匹配
则返回值为true,反之则为false

最后修改:2023 年 01 月 09 日
如果觉得我的文章对你有用,请随意赞赏