实验目标
实现一个档案管理系统的用户管理模块的初步模型。功能包括:密码机制的登录界面;普通用户对自身信息的查询、修改;管理员用户对其他用户信息的增添、删除、修改。
模块解析
用户分为:Administrator 档案管理员,负责管理所有用户的信息;Browser 档案浏览员,负责文件的上传与下载;Operator 档案录入员,可进行文件的下载与浏览。三者对应初始用户分别为 kate、rose、jack,密码均为123。
模块结构图:
模块具体实现:
1)完成了用户类 User 各属性的封装,并构造 setter()、getter() 方法实现属性访问;
2)不同的角色类 Administrator、Operator、Browser 继承于用户类 User;
3)通过多态实现不同菜单的展示,根据用户角色的不同,系统自动调用对应角色的 showMenu() 方法;
4)本实验未涉及数据库,故使用 DataProcessing 类的成员 users 存储用户信息 (数据类型为 Hashtable 哈希表),且类内部有一系列方法可对 users 进行增删查改。每次角色类需要对用户进行操作时,调用 DataProcessing 类中的方法实现操作。
5)本实验未涉及I/O流,故对文件操作时仅打印语句。
源代码
·DataProcessing
import java.util.*;
public class DataProcessing {
// 哈希表
// 存储模式类似于python的字典,以键值对方式存储
static Hashtable users;
// 三个初始化用户
static {
users = new Hashtable();
users.put("rose", new Browser("rose", "123", "browser"));
users.put("jack", new Operator("jack", "123", "operator"));
users.put("kate", new Administrator("kate", "123", "administrator"));
}
// 查找用户
public static User searchUser(String name) {
if (users.containsKey(name)) {
return users.get(name);
}
return null;
}<
24000
/span>
// 密码查找用户
public static User search(String name, String password) {
if (users.containsKey(name)) {
User temp = users.get(name);
if ((temp.getPassword()).equals(password))
return temp;
}
return null;
}
// 获取所有用户
public static Enumeration getAllUser() {
Enumeration e = users.elements();
return e;
}
// 更新用户信息
public static boolean update(String name, String password, String role) {
User user;
if (users.containsKey(name)) {
if (role.equalsIgnoreCase("administrator"))
user = new Administrator(name, password, role);
else if (role.equalsIgnoreCase("operator"))
user = new Operator(name, password, role);
else
user = new Browser(name, password, role);
users.put(name, user);
return true;
} else
return false;
}
// 增添新用户
public static boolean insert(String name, String password, String role) {
User user;
if (users.containsKey(name))
return false;
else {
if (role.equalsIgnoreCase("administrator"))
user = new Administrator(name, password, role);
else if (role.equalsIgnoreCase("operator"))
user = new Operator(name, password, role);
else
user = new Browser(name, password, role);
users.put(name, user);
return true;
}
}
// 删除用户
public static boolean delete(String name) {
if (users.containsKey(name)) {
users.remove(name);
return true;
} else
return false;
}
}
DataProcessing 类负责用户信息的管理,需要注意的是 Hashtable 结构的用法:例如 put() 加入新