高校体育馆预约管理系统的设计与实现
系统整体结构
本系统采用前后端分离的架构模式,结合MySQL数据库进行数据持久化存储。该设计有利于后期的功能拓展和代码维护。系统整体结构如下图所示:
界面展示
以下是系统的部分运行界面截图:
关键代码示例
/**
* 用户操作控制器
*/
@RestController
@RequestMapping("/api/user")
public class UserAuthController {
@Autowired
private UserService userService;
@Autowired
private JwtTokenProvider tokenProvider;
/**
* 用户登录接口
*/
@PostMapping("/login")
public ResponseEntity> authenticateUser(@RequestBody LoginRequest loginRequest) {
String uname = loginRequest.getUsername();
String pwd = loginRequest.getPassword();
String userRole = loginRequest.getUserType();
UserInfo userInfo = userService.findByUsername(uname);
if (userInfo == null || !userInfo.getRole().equals(userRole)) {
return ResponseEntity.badRequest().body("权限验证失败");
}
if (!pwd.equals(userInfo.getPassword())) {
return ResponseEntity.badRequest().body("用户名或密码错误");
}
String jwtToken = tokenProvider.createToken(userInfo.getUserId(), uname, userInfo.getRole());
return ResponseEntity.ok(new AuthResponse(jwtToken));
}
/**
* 用户注册接口
*/
@PostMapping("/register")
public ResponseEntity> registerUser(@RequestBody UserInfo newUser) {
if (userService.existsByUsername(newUser.getUsername())) {
return ResponseEntity.badRequest().body("该用户名已被注册");
}
userService.createUser(newUser);
return ResponseEntity.ok("注册成功");
}
/**
* 重置密码
*/
@PutMapping("/reset-password")
public ResponseEntity> resetPassword(@RequestParam String username) {
UserInfo user = userService.findByUsername(username);
if (user == null) {
return ResponseEntity.badRequest().body("用户不存在");
}
user.setPassword("123456");
userService.updateUserInfo(user);
return ResponseEntity.ok("密码已重置为默认值");
}
/**
* 获取当前用户信息
*/
@GetMapping("/profile")
public ResponseEntity> getCurrentUserProfile(HttpServletRequest request) {
String userId = (String) request.getAttribute("userId");
UserInfo user = userService.findById(userId);
return ResponseEntity.ok(user);
}
}
数据库初始化脚本
-- 删除旧表(如果存在)
DROP TABLE IF EXISTS user_accounts;
-- 创建用户账户表
CREATE TABLE user_accounts (
account_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
account_name VARCHAR(100) NOT NULL COMMENT '登录名',
account_password VARCHAR(100) NOT NULL COMMENT '登录密码',
user_role VARCHAR(100) DEFAULT '普通用户' COMMENT '用户角色',
created_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (account_id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
-- 插入初始管理员数据
INSERT INTO user_accounts(account_id, account_name, account_password, user_role, created_time)
VALUES (1, 'admin', 'admin', '管理员', '2022-05-01 00:00:00');
技术选型说明
后端技术
选用Java作为主要开发语言,具备良好的跨平台特性和强大的生态系统。Spring Boot框架简化了配置流程,提高了开发效率。整个系统划分为表现层、业务逻辑层和数据访问层,层次清晰。
数据库技术
采用MySQL关系型数据库进行数据管理,其成熟的事务处理能力和高效的读写性能适合此类管理系统的需求。通过合理的索引优化和查询语句调优,保障系统响应速度。