基于java中Scanner实现用户管理
1.具体功能如下:
这个项目要求开发一个自动化软件系统,该系统将提供给这些办事处的管理者(role=1)和普通用户(role=0)用于管理航班信息。根据以上描述,要求实现系统的用户模块和办事处模块,包含以下功能(注:系统存在一个默认管理员admin/admin123):
用户模块:用户添加;密码修改;个人信息查看;账号状态修改(禁用0、启用1);用户登录(被禁用账号无法登录并提示友好的消息);修改用户角色(设置取消管理员);用户列表;查询指定办事处的员工;删除用户
办事处模块:办事处添加;办事处列表
管理员具备以上所有功能,普通用户只有密码修改和个人信息查看功能。
参考类如下:
用户类(User):
id,账号(username),密码(passord),年龄(age),角色(role),邮箱(email),办事处id(officeID),账户状态(status)
办事处类(Office):
id,办公室名(officeName)
2.实现想法:
在窗口中实现功能之前,添加用户,这样的话要在运行的方法(menu,start等)中传入参数,不采用成员变量。用户有有多种属性,这就要创建一个用户类(User)和用户管理类(UserManager);同样办事处也要创建办事处类(Office)和办事处管理类(OfficeManager);最后创建功能实现类(Test)。在Test类中创建方法来调用用户管理类(UserManager)和办事处管理类(OfficeManager)的方法。
User类:(get,set方法就不展示
public class User {
private int id;
private String username;
private String password;
private int age;
private int role; //0:普通用户/1:管理者
private String email;
private int officeID;
private int status;//0:禁用/1:启用
public User() {
super();
}
// 为了初始化管理员的账户、密码(admin/admin123),创建了一个
//只有username,password的构造器。
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public User(int id, String username, String password, int age, int role, String email, int officeID, int status) {
super();
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.role = role;
this.email = email;
this.officeID = officeID;
this.status = status;
}
UserManager类:
//导包
import java.util.ArrayList;
public class UserManager {
static ArrayList<User> list = new ArrayList<>();
public UserManager(){
list.add(new User("admin","admin123"));
}
/**用户添加*/
public void add(User user){
list.add(user);
}
/**密码修改*/
public boolean updatePassword(User user,String password){
user.setPassword(password);
return true;
}
/**根据id查询商品*/
public User findById(int id){
User user = null;
for(User u:list){
//判断是否找到匹配id的商品
if(u.getId() == id){
user = u;
break;
}
}
return user;
}
/**个人信息查看*/
public void findOneUser(User user){
msg (user);
}
/**账号状态修改(禁用0、启用1)*/
public boolean updateStatus(User user,int r){
user.setStatus(r);
return true;
}
/**用户登录(被禁用账号无法登录并提示友好的消息)*/
public boolean login(String m ,String p){
for(User u:list){
if(u.getUsername().equals(m)||u.getPassword().equals(p)){
return true;
}
}
return false;
}
/**修改用户角色(设置取消管理员)*/
public void updateRole(User user){
user.setRole(0);
msg("取消该用户管理员权限");
}
/**用户列表*/
public ArrayList<User> findAllUser(){
return list;
}
/**删除用户*/
public boolean delete(int id){
User user = findById(id);
if(user != null){
return list.remove(user);
}
return false;
}
/**输出语句*/
public String msg(Object obj){
return obj.toString();
}
Office类:
public class Office {
private int oid;
private String officeName;
public Office() {
super();
}
public Office(int oid, String officeName) {
super();
this.oid = oid;
this.officeName = officeName;
}
OfficeManager类:
public class Office {
private int oid;
private String officeName;
public Office() {
super();
}
public Office(int oid, String officeName) {
super();
this.oid = oid;
this.officeName = officeName;
}
Test类:
package com.softeem.lesson12.Test2;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
private OfficeManager om = new OfficeManager();
private Scanner sc;
public void menu(UserManager um){
msg("============================");
msg("======航空公司管理系统============");
msg("===========登录 ==============");
msg("============================");
msg("请输入账号密码(按一下格式:id/账号/密码)");
start(um);
}
public void menu1(UserManager um,User user){
msg("====航空公司管理系统 ==============");
msg("====【1】 用户添加 ===============");
msg("====【2】 修改密码 ===============");
msg("====【3】 个人信息查看 =============");
msg("====【4】 账号状态修改(禁用0、启用1)===");
msg("====【5】 修改用户角色(设置取消管理员)===");
msg("====【6】 用户列表 ================");
msg("====【7】 删除用户================");
msg("====【8】 办事处添加 ===============");
msg("====【9】 办事处列表===============");
msg("====【10】 查询指定办事处的所有员工======");
msg("====【0】 退出系统=================");
msg("=============================");
msg("请输入操作指令:");
start1(um,user);
}
public void menu2(UserManager um,User user){
msg("============================");
msg("======航空公司管理系统============");
msg("======【1】密码修改 =============");
msg("======【2】个人信息查看===========");
msg("======【0】 退出系统=============");
msg("============================");
msg("请输入操作指令:");
start2(um,user);
}
public void start(UserManager um){
User u = null;
sc = new Scanner(System.in);
String s = sc.nextLine();
//根据"/"截取信息
String[] info = s.split("/");
u = um.findById(Integer.parseInt(info[0]));
System.out.println(u);
if(u == null){
msg("该账户不存在!!!");
menu(um);
}else{
if(u.getStatus() == 0){
msg("该账户被禁用!!!");
start(um);
}else{
if(info[1].equals("admin")||info[2].equals("admin123")){
menu1(um,u);
}else if(um.login(info[1],info[2])){
menu2(um,u);
}else{
msg("账户或密码错误!!!");
menu(um);
}
}
}
}
public void start1(UserManager um,User user){
sc = new Scanner(System.in);
int i = sc.nextInt();
switch(i){
case 1:
addUser(um);
break;
case 2:
updatePassword(um,user);
break;
case 3:
showOne(um,user);
break;
case 4:
updateStatus(um,user);
break;
case 5:
updateRole(um);
break;
case 6:
list(um);
break;
case 7:
delete(um);
break;
case 8:
addOffice();
break;
case 9:
list1();
break;
case 10:
queryByOid();
break;
case 0:
exit();
break;
default:
msg("请输入正确的操作指令!!!");
break;
}
menu1(um,user);
}
public void start2(UserManager um,User user){
sc = new Scanner(System.in);
int i = sc.nextInt();
switch(i){
case 1:
updatePassword(um,user);
break;
case 2:
showOne(um,user);
break;
case 0:
exit();
break;
default:
msg("请输入正确的操作指令!!!");
break;
}
menu2( um,user);
}
private void exit() {
sc = new Scanner(System.in);
msg("是否确定退出?(Y/N)");
String op = sc.nextLine();
if(op.equalsIgnoreCase("y")){
msg("谢谢使用,再见!");
System.exit(1);
}
}
/** 查询指定办事处的所有员的客户端实现*/
private void queryByOid() {
sc = new Scanner(System.in);
int oid = sc.nextInt();
ArrayList<User> list = om.findUserByOid(oid);
msg("id\t账号\t密码\t年龄\t角色\t邮箱\t办事处\t账户状态");
if(list.size() > 0){
for(User o:list){
msg(o);
}
}
}
/** 办事处列表的客户端实现*/
private void list1() {
msg("oid\t办事处)");
for(Office o:om.findAllOffice()){
msg(o);
}
}
/** 办事处添加的客户端实现*/
private void addOffice() {
msg("请输入办事处(按一下格式:oid/办事处)");
sc = new Scanner(System.in);
String s = sc.nextLine();
//根据"/"截取员工信息
String[] info = s.split("/");
if(om.findByOid(Integer.parseInt(info[0])) != null){
msg("该办事处已存在,请重新输入");
addOffice();
}else{
Office o = new Office(Integer.parseInt(info[0]),
info[1]);
om.add(o);
msg("添加成功");
}
}
/** 删除用户的客户端实现*/
private void delete(UserManager um) {
sc = new Scanner(System.in);
int id = sc.nextInt();
if(um.delete(id)){
msg("删除成功!");
}else{
msg("删除失败!");
}
}
/** 用户列表的客户端实现*/
private void list(UserManager um) {
msg("id\t账号\t密码\t年龄\t角色\t邮箱\t办事处\t账户状态");
for(User u:um.findAllUser()){
msg(u);
}
}
/** 修改用户角色(设置取消管理员)的客户端实现*/
private void updateRole(UserManager um) {
sc = new Scanner(System.in);
msg("请输入用户id:");
int id = sc.nextInt();
msg("设置取消管理员(格式:0:普通用户/1:管理者):");
int r = sc.nextInt();
User u = um.findById(id);
if(um.updateStatus(u, r)){
msg("修改成功");
}else{
msg("修改失败");
}
}
/** 账号状态修改的客户端实现*/
private void updateStatus(UserManager um,User user) {
sc = new Scanner(System.in);
msg("请输入状态(按一下格式:0:禁用/1:启用):");
int s = sc.nextInt();
if(um.updateStatus(user,s)){
msg("修改成功");
}else{
msg("修改失败");
}
}
/**个人信息查看的客户端实现*/
private void showOne(UserManager um,User u ) {
msg("id\t账号\t密码\t年龄\t角色\t邮箱\t办事处\t账户状态");
msg(u);
}
/**修改密码的客户端实现*/
private void updatePassword(UserManager um,User u) {
sc = new Scanner(System.in);
msg("请输入原来密码:");
String s = sc.nextLine();
msg("请输入修改的密码:");
String s1 = sc.nextLine();
if(u.getPassword().equals(s)){
if(um.updatePassword(u,s1)){
msg("修改成功");
}
}else{
msg("修改失败");
}
}
/**添加的客户端实现*/
private void addUser(UserManager um) {
msg("请输入商品信息(按一下格式:id/账号/密码/年龄/角色/邮箱/办事处/账户状态");
sc = new Scanner(System.in);
String s = sc.nextLine();
//根据"/"截取员工信息
String[] info = s.split("/");
if(um.findById(Integer.parseInt(info[0])) != null){
msg("该商品信息已存在,请重新输入");
addUser(um);
return;
}else{
User u = new User(Integer.parseInt(info[0]),
info[1],
info[2],
Integer.parseInt(info[3]),
Integer.parseInt(info[4]),
info[5],
Integer.parseInt(info[6]),
Integer.parseInt(info[7]));
um.add(u);
msg("添加成功");
}
}
/**输出语句*/
public void msg(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
User u1 = new User(1,"li01","113",23,0,"66",201,1);
User u2 = new User(2,"li02","123",23,0,"66",201,1);
User u3 = new User(3,"li03","133",23,0,"66",201,1);
User u4 = new User(4,"admin","admin123",23,1,"66",201,1);
User u5 = new User(5,"li05","153",23,0,"66",201,1);
UserManager um = new UserManager();
um.add(u1);
um.add(u2);
um.add(u3);
um.add(u4);
um.add(u5);
System.out.println(um.msg(u1));
new Test().menu(um);
}
}
3.总结
在刚完成代码时,我在测试类中用的是全局变量,所以一直不能实现登录功能,连主要的功能页面都跳不过去,后来是朋友告诉我不要使用成员变量,不然就会产生两个对象,要用局部变量,传入参数到方法当中才能成功。后来我改动过后终于实现了所有功能。