完成了接口和基本的类定义

This commit is contained in:
2025-11-14 01:54:04 +08:00
commit b73727ccc2
22 changed files with 988 additions and 0 deletions

29
.gitignore vendored Normal file
View File

@@ -0,0 +1,29 @@
### IntelliJ IDEA ###
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

6
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/DataManagerSystem.iml" filepath="$PROJECT_DIR$/DataManagerSystem.iml" />
</modules>
</component>
</project>

11
DataManagerSystem.iml Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,27 @@
package backend.controller.interfaces;
import backend.service.interfaces.AuthService;
/**
* 登录控制器接口,用于处理用户登录和注册相关的业务逻辑
*/
public interface LoginController {
AuthService authService;
//getter/setter
/**
* 处理用户登录请求
* @param username 用户名
* @param password 密码
*/
public void handleLogin(String username, String password);
/**
* 处理用户注册请求
* @param username 用户名
* @param password 密码
* @param email 邮箱地址
*/
public void handleRegister(String username, String password, String email);
}

View File

@@ -0,0 +1,33 @@
package backend.controller.interfaces;
import backend.service.interfaces.DataQueryService;
/**
* 查询控制器接口
* 定义了数据查询和管理的相关操作接口
*/
public interface QueryController {
DataQueryService dataService;
//getter/setter
/**
* 显示所有数据项
* 该方法用于获取并展示系统中的全部数据记录
*/
void displayAll();
/**
* 根据关键字搜索数据
* @param keyword 搜索关键字,用于匹配数据项的标题、描述等字段
*/
void searchData(String keyword);
/**
* 添加新的数据项
* @param title 数据项标题
* @param desc 数据项描述
* @param category 数据项分类
* @param userId 用户ID标识数据项的创建者
*/
void addDataItem(String title, String desc, String category, int userId);
}

View File

@@ -0,0 +1,33 @@
package backend.controller.interfaces;
import backend.service.interfaces.UserService;
/**
* 用户控制器接口
* 定义了用户管理相关的核心操作方法
*/
public interface UserController {
UserService userService;
//getter/setter
/**
* 显示指定用户的详细信息
* @param id 用户ID
*/
void showUserInfo(int id);
/**
* 列出所有用户信息
* @param adminId 管理员ID用于权限验证
*/
void listAllUsers(int adminId);
/**
* 更新用户角色
* @param targetId 目标用户ID
* @param newRole 新的角色名称
* @param adminId 执行操作的管理员ID
*/
void updateRole(int targetId, String newRole, int adminId);
}

View File

@@ -0,0 +1,51 @@
package backend.dao.interfaces;
import backend.model.DataItem;
import java.util.*;
import java.sql.*;
/**
* 数据项DAO接口提供数据项的增删改查操作
*/
public interface DataItemDao {
/**
* 根据ID查找数据项
* @param id 数据项ID
* @return 找到的数据项对象如果未找到则返回null
*/
DataItem findById(int id);
/**
* 查找所有数据项
* @return 包含所有数据项的列表
*/
List<DataItem> findAll();
/**
* 根据关键字搜索数据项
* @param keyword 搜索关键字
* @return 匹配关键字的数据项列表
*/
List<DataItem> searchByKeyword(String keyword);
/**
* 添加数据项
* @param item 要添加的数据项对象
* @return 添加成功返回true失败返回false
*/
boolean addItem(DataItem item);
/**
* 更新数据项
* @param item 包含更新信息的数据项对象
* @return 更新成功返回true失败返回false
*/
boolean updateItem(DataItem item);
/**
* 删除数据项
* @param id 要删除的数据项ID
* @return 删除成功返回true失败返回false
*/
boolean deleteItem(int id);
}

View File

@@ -0,0 +1,28 @@
package backend.dao.interfaces;
import backend.model.QueryRecord;
import java.util.*;
/**
* 查询记录数据访问接口
* 定义了对查询记录进行持久化操作的方法
*/
public interface QueryRecordDao {
/**
* 添加查询记录
* 将指定的查询记录保存到数据存储中
*
* @param record 要添加的查询记录对象不能为null
* @return 添加成功返回true否则返回false
*/
boolean addRecord(QueryRecord record);
/**
* 根据用户ID查找查询记录
* 返回指定用户的所有查询记录列表
*
* @param userId 用户唯一标识符
* @return 查询记录列表,如果未找到则返回空列表
*/
List<QueryRecord> findByUserId(int userId);
}

View File

@@ -0,0 +1,52 @@
package backend.dao.interfaces;
import backend.model.User;
import java.util.*;
/**
* 用户数据访问接口
* 定义了用户相关的数据库操作方法
*/
public interface UserDao {
/**
* 根据用户名查找用户
* @param username 用户名
* @return 查找到的用户对象如果未找到则返回null
*/
User findByUsername(String username);
/**
* 根据用户ID查找用户
* @param id 用户ID
* @return 查找到的用户对象如果未找到则返回null
*/
User findById(int id);
/**
* 添加新用户
* @param user 要添加的用户对象
* @return 添加成功返回true失败返回false
*/
boolean addUser(User user);
/**
* 更新用户信息
* @param user 包含更新信息的用户对象
* @return 更新成功返回true失败返回false
*/
boolean updateUser(User user);
/**
* 删除用户
* @param id 要删除的用户ID
* @return 删除成功返回true失败返回false
*/
boolean deleteUser(int id);
/**
* 查找所有用户
* @return 包含所有用户对象的列表
*/
List<User> findAll();
}

View File

@@ -0,0 +1,136 @@
package backend.model;
import java.sql.*;
/**
* DataItem类用于表示数据项的基本信息
* 包含数据项的标识、标题、描述、分类、更新时间和用户ID等属性
*/
public class DataItem {
private int id;
private String title;
private String description;
private String category;
private Date updateDate;
private int userId;
/**
* 无参构造函数,创建一个空的数据项对象
*/
public DataItem() {
}
/**
* 有参构造函数,创建一个包含指定属性的数据项对象
* @param id 数据项的唯一标识符
* @param title 数据项的标题
* @param description 数据项的详细描述
* @param category 数据项所属的分类
* @param updateDate 数据项的最后更新时间
* @param userId 关联的用户ID
*/
public DataItem(int id, String title, String description, String category, Date updateDate, int userId) {
this.id = id;
this.title = title;
this.description = description;
this.category = category;
this.updateDate = updateDate;
this.userId = userId;
}
/**
* 获取数据项的ID
* @return 返回数据项的唯一标识符
*/
public int getId() {
return id;
}
/**
* 设置数据项的ID
* @param id 要设置的数据项唯一标识符
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取数据项的标题
* @return 返回数据项的标题
*/
public String getTitle() {
return title;
}
/**
* 设置数据项的标题
* @param title 要设置的数据项标题
*/
public void setTitle(String title) {
this.title = title;
}
/**
* 获取数据项的描述
* @return 返回数据项的详细描述
*/
public String getDescription() {
return description;
}
/**
* 设置数据项的描述
* @param description 要设置的数据项详细描述
*/
public void setDescription(String description) {
this.description = description;
}
/**
* 获取数据项的分类
* @return 返回数据项所属的分类
*/
public String getCategory() {
return category;
}
/**
* 设置数据项的分类
* @param category 要设置的数据项分类
*/
public void setCategory(String category) {
this.category = category;
}
/**
* 获取数据项的更新时间
* @return 返回数据项的最后更新时间
*/
public Date getUpdateDate() {
return updateDate;
}
/**
* 设置数据项的更新时间
* @param updateDate 要设置的数据项最后更新时间
*/
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
/**
* 获取关联的用户ID
* @return 返回关联的用户唯一标识符
*/
public int getUserId() {
return userId;
}
/**
* 设置关联的用户ID
* @param userId 要设置的用户唯一标识符
*/
public void setUserId(int userId) {
this.userId = userId;
}
}

View File

@@ -0,0 +1,110 @@
package backend.model;
import java.sql.*;
/**
* 查询记录实体类
* 用于封装用户的查询记录信息包括查询ID、用户ID、查询内容和查询时间
*/
public class QueryRecord {
private int id;
private int userId;
private String queryContent;
private Timestamp queryTime;
/**
* 无参构造函数
* 创建一个空的查询记录对象
*/
public QueryRecord() {
}
/**
* 有参构造函数
* 根据提供的参数创建查询记录对象
*
* @param id 查询记录的唯一标识符
* @param userId 发起查询的用户ID
* @param queryContent 查询的内容
* @param queryTime 查询执行的时间戳
*/
public QueryRecord(int id, int userId, String queryContent, Timestamp queryTime) {
this.id = id;
this.userId = userId;
this.queryContent = queryContent;
this.queryTime = queryTime;
}
/**
* 获取查询记录ID
*
* @return 返回查询记录的唯一标识符
*/
public int getId() {
return id;
}
/**
* 设置查询记录ID
*
* @param id 要设置的查询记录唯一标识符
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取用户ID
*
* @return 返回发起查询的用户ID
*/
public int getUserId() {
return userId;
}
/**
* 设置用户ID
*
* @param userId 要设置的用户ID
*/
public void setUserId(int userId) {
this.userId = userId;
}
/**
* 获取查询内容
*
* @return 返回查询的具体内容
*/
public String getQueryContent() {
return queryContent;
}
/**
* 设置查询内容
*
* @param queryContent 要设置的查询内容
*/
public void setQueryContent(String queryContent) {
this.queryContent = queryContent;
}
/**
* 获取查询时间
*
* @return 返回查询执行的时间戳
*/
public Timestamp getQueryTime() {
return queryTime;
}
/**
* 设置查询时间
*
* @param queryTime 要设置的查询时间戳
*/
public void setQueryTime(Timestamp queryTime) {
this.queryTime = queryTime;
}
}

152
src/backend/model/User.java Normal file
View File

@@ -0,0 +1,152 @@
package backend.model;
import java.sql.*;
/**
* 用户实体类,用于表示系统中的用户信息
* 包含用户的基本属性如ID、用户名、密码、角色、邮箱和创建时间
*/
public class User {
private int id;
private String username;
private String password;
private String role; // "admin", "user"
private String email;
private Date createdAt;
// getter/setter
/**
* 无参构造函数,创建一个空的用户对象
*/
public User() {
}
/**
* 带参构造函数,使用指定的属性值创建用户对象
*
* @param id 用户唯一标识符
* @param username 用户名
* @param password 用户密码
* @param role 用户角色,可选值为"admin"或"user"
* @param email 用户邮箱地址
* @param createdAt 用户创建时间
*/
public User(int id, String username, String password, String role, String email, Date createdAt) {
this.id = id;
this.username = username;
this.password = password;
this.role = role;
this.email = email;
this.createdAt = createdAt;
}
/**
* 设置用户ID
*
* @param id 用户唯一标识符
*/
public void setId(int id) {
this.id = id;
}
/**
* 设置用户名
*
* @param username 用户名
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 设置用户角色
*
* @param role 用户角色,可选值为"admin"或"user"
*/
public void setRole(String role) {
this.role = role;
}
/**
* 设置用户邮箱
*
* @param email 用户邮箱地址
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 设置用户密码
*
* @param password 用户密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 设置用户创建时间
*
* @param createdAt 用户创建时间
*/
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
/**
* 获取用户ID
*
* @return 用户唯一标识符
*/
public int getId() {
return id;
}
/**
* 获取用户名
*
* @return 用户名
*/
public String getUsername() {
return username;
}
/**
* 获取用户密码
*
* @return 用户密码
*/
public String getPassword() {
return password;
}
/**
* 获取用户角色
*
* @return 用户角色,可能的值为"admin"或"user"
*/
public String getRole() {
return role;
}
/**
* 获取用户邮箱
*
* @return 用户邮箱地址
*/
public String getEmail() {
return email;
}
/**
* 获取用户创建时间
*
* @return 用户创建时间
*/
public Date getCreatedAt() {
return createdAt;
}
}

View File

@@ -0,0 +1,64 @@
package backend.model.enums;
/**
* 登录状态枚举类
* 定义了系统中所有可能的登录相关状态码和对应的消息描述
*/
public enum LoginStatus {
SUCCESS(490,"登录成功"),
USER_NOT_FOUND(491,"用户不存在"),
PASSWORD_ERROR(492,"密码错误"),
ALREADY_LOGGED_IN(493,"重复登录"),
CAPTCHA_ERROR(494,"验证码错误"),
ACCOUNT_LOCKED(495,"账户被封禁"),
PERMISSION_DENIED(496,"权限不足"),
LOGOUT_SUCCESS(497,"登出成功"),
NOT_LOGGED_IN(498,"未登录"),
UNKNOWN_ERROR(499,"未知错误");
private final int code;
private final String msg;
/**
* 构造函数,初始化状态码和消息
* @param code 状态码
* @param msg 状态消息
*/
LoginStatus(int code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 根据状态码获取对应的登录状态枚举值
* @param code 状态码
* @return 对应的LoginStatus枚举值如果未找到则返回null
*/
public static LoginStatus getByCode(int code){
// 遍历所有枚举值查找匹配的状态码
for(LoginStatus status:values()){
if(status.code==code){
return status;
}
}
return null;
}
/**
* 获取状态码
* @return 状态码
*/
public int getCode() {
return code;
}
/**
* 获取状态消息
* @return 状态消息
*/
public String getMsg() {
return msg;
}
}

View File

@@ -0,0 +1,48 @@
package backend.service.interfaces;
/**
* 认证服务接口
* 提供用户认证和权限管理相关功能
*/
public interface AuthService {
/**
* 用户登录验证
* 验证用户名和密码是否匹配,如果匹配则允许用户登录系统
*
* @param username 用户名
* @param password 密码
* @return 登录成功返回true失败返回false
*/
boolean login(String username, String password);
/**
* 用户注册
* 创建新的用户账户,将用户信息存储到系统中
*
* @param username 用户名
* @param password 密码
* @param email 邮箱地址
* @return 注册成功返回true失败返回false
*/
boolean register(String username, String password, String email);
/**
* 用户登出
* 使指定用户的会话失效,结束用户的登录状态
*
* @param userId 用户唯一标识符
* @return 登出成功返回true失败返回false
*/
boolean logout(int userId);
/**
* 权限检查
* 检查指定用户是否具有所需的权限角色
*
* @param userId 用户唯一标识符
* @param requiredRole 所需的角色权限
* @return 具有权限返回true无权限返回false
*/
boolean hasPermission(int userId, String requiredRole);
}

View File

@@ -0,0 +1,49 @@
package backend.service.interfaces;
import backend.model.DataItem;
import backend.model.QueryRecord;
import backend.model.User;
import java.util.*;
/**
* 数据查询服务接口
* 提供数据项的增删改查功能
*/
public interface DataQueryService {
/**
* 查询所有数据项
* @return 包含所有数据项的列表
*/
List<DataItem> queryAll();
/**
* 根据关键字搜索数据项
* @param keyword 搜索关键字
* @return 匹配关键字的数据项列表
*/
List<DataItem> search(String keyword);
/**
* 添加数据项
* @param item 要添加的数据项对象
* @param userId 执行操作的用户ID
* @return 添加成功返回true失败返回false
*/
boolean addDataItem(DataItem item, int userId);
/**
* 更新数据项
* @param item 要更新的数据项对象
* @param userId 执行操作的用户ID
* @return 更新成功返回true失败返回false
*/
boolean updateDataItem(DataItem item, int userId);
/**
* 删除数据项
* @param id 要删除的数据项ID
* @param userId 执行操作的用户ID
* @return 删除成功返回true失败返回false
*/
boolean deleteDataItem(int id, int userId);
}

View File

@@ -0,0 +1,33 @@
package backend.service.interfaces;
import backend.model.User;
import java.util.*;
/**
* 用户服务接口
* 定义了用户相关的业务操作方法
*/
public interface UserService {
/**
* 根据用户ID获取用户信息
* @param id 用户ID
* @return 用户对象如果未找到则返回null
*/
User getUserInfo(int id);
/**
* 列出所有用户信息
* @param requesterId 请求者用户ID用于权限验证
* @return 用户列表
*/
List<User> listAllUsers(int requesterId);
/**
* 更新用户角色权限
* @param targetId 目标用户ID
* @param newRole 新的角色权限
* @param adminId 管理员用户ID
* @return 操作是否成功
*/
boolean updateUserRole(int targetId, String newRole, int adminId);//用户权限
}

View File

@@ -0,0 +1,41 @@
package backend.utils.interfaces;
import java.util.Random;
/**
* 验证码工具类接口
* 提供验证码的生成和验证功能
*/
public interface CaptchaUtils {
/**
* 字符集常量,包含大小写字母和数字
*/
static final String CHAR_SET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
/**
* 验证码长度常量默认为4位
*/
static final int CAPTCHA_LENGTH=4;
/**
* 私有构造函数,防止实例化
*/
private CaptchaUtils();
/**
* 生成随机验证码
*
* @return 生成的验证码字符串
*/
static String generateCaptcha();
/**
* 验证用户输入的验证码是否正确
*
* @param inputCaptcha 用户输入的验证码
* @param systemCaptcha 系统生成的验证码
* @return 验证结果正确返回true错误返回false
*/
static boolean verifyCaptcha(String inputCaptcha,String systemCaptcha);
}

View File

@@ -0,0 +1,24 @@
package backend.utils.interfaces;
import java.sql.*;
/**
* 数据库工具接口,提供数据库连接和资源关闭的通用方法
*/
public interface DBUtil {
/**
* 获取数据库连接对象
*
* @return Connection 数据库连接对象用于执行SQL语句
*/
static Connection getConnection();
/**
* 关闭数据库相关资源,包括连接、语句和结果集
*
* @param conn 数据库连接对象,需要被关闭的连接
* @param stmt SQL语句对象需要被关闭的语句
* @param rs 结果集对象,需要被关闭的结果集
*/
static void close(Connection conn, Statement stmt, ResultSet rs);
}

View File

@@ -0,0 +1,24 @@
package backend.utils.interfaces;
/**
* 密码工具接口,提供密码加密和验证功能
*/
public interface PasswordUtil {
/**
* 对明文密码进行加密处理
*
* @param plainText 需要加密的明文密码字符串
* @return 加密后的密码字符串
*/
static String encrypt(String plainText);
/**
* 验证明文密码与已加密密码是否匹配
*
* @param plainText 明文密码字符串
* @param hashed 已加密的密码字符串
* @return 如果匹配返回true否则返回false
*/
static boolean verify(String plainText, String hashed);
}

View File

@@ -0,0 +1,21 @@
package backend.utils.interfaces;
/**
* 角色工具类接口,提供角色判断功能
*/
public interface RoleUtil {
/**
* 判断给定的角色是否为管理员角色
* @param role 待判断的角色字符串
* @return 如果是管理员角色返回true否则返回false
*/
static boolean isAdmin(String role);
/**
* 判断给定的角色是否为普通用户角色
* @param role 待判断的角色字符串
* @return 如果是普通用户角色返回true否则返回false
*/
static boolean isUser(String role);
}