# 大作业 **Repository Path**: fast-and-fast/project_work ## Basic Information - **Project Name**: 大作业 - **Description**: 数据结构设计大作业,学生端任务系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-16 - **Last Updated**: 2025-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 学生端任务管理模块 ## 项目概述 本项目实现了一个学生端任务管理模块,旨在通过合理的数据结构和功能设计,满足学生领用任务、提交任务以及管理任务附件等需求,提升学生任务管理的效率和体验。 ## 技术栈 - Java 8+ - Spring Boot 3.4.5 - MyBatis 3.0.4 - MySQL 数据库 ## 数据结构设计 ### 学生基本信息 - 学生ID (studentId) - 学生姓名 (name) - 学生密码 (password) - 个人任务列表 (tasks) ### 任务基本信息 - 任务ID (taskId) - 任务名称 (taskName) - 任务描述 (taskDescription) - 任务量 (workload) - 开始时间 (startTime) - 截止时间 (endTime) - 任务领用状态 (claimStatus) - 任务完成状态 (completionStatus) - 教师评分 (teacherScore) ### 附件基本信息 - 附件ID (attachmentId) - 文件名 (fileName) - 文件路径 (filePath) - 上传时间 (uploadTime) - 所属任务ID (taskId) ### 学生任务关联 - 关联ID (id) - 学生ID (studentId) - 任务ID (taskId) - 领取时间 (claimTime) ## 功能实现 ### 数据结构实现 - 学生任务列表:使用 `List` 实现,支持遍历、过滤操作 - 任务快速查找:使用 `Map` 实现,支持 O(1) 时间复杂度的查找 - 附件管理:使用 `List` 实现,支持增、删、查操作 - 任务排序:使用 Java 8 Stream API 和 Comparator 实现任务排序 - 任务状态查询:使用哈希索引和过滤算法实现 - 时间合法性校验:使用 LocalDateTime 比较算法实现 ### 核心功能 1. 任务领用:学生可以领用未被领用的任务 2. 任务提交:学生可以提交已领用任务的完成状态 3. 附件管理:学生可以上传、查看、删除任务附件 4. 任务排序:支持按截止时间、工作量等条件排序任务 5. 任务过滤:支持按完成状态、领用状态等条件过滤任务 6. 时间校验:确保任务的开始时间不晚于截止时间 ## API 接口 ### 学生相关接口 - `GET /api/student/{studentId}` - 获取学生信息 - `GET /api/student/{studentId}/tasks` - 获取学生的任务列表 - `GET /api/student/{studentId}/tasks/sorted-by-deadline` - 获取按截止时间排序的任务列表 - `GET /api/student/{studentId}/tasks/sorted-by-workload` - 获取按工作量排序的任务列表 - `GET /api/student/{studentId}/tasks/incomplete` - 获取学生的未完成任务 - `GET /api/student/{studentId}/tasks/upcoming` - 获取学生的即将到期任务 - `POST /api/student/{studentId}/claim-task/{taskId}` - 学生领用任务 - `POST /api/student/{studentId}/cancel-task/{taskId}` - 学生取消领用任务 - `POST /api/student/{studentId}/complete-task/{taskId}` - 学生完成任务 - `POST /api/student/{studentId}/task/{taskId}/upload` - 上传任务附件 - `GET /api/student/task/{taskId}/attachments` - 获取任务附件列表 - `DELETE /api/student/{studentId}/attachment/{attachmentId}` - 删除任务附件 - `GET /api/student/available-tasks` - 获取可领用的任务列表 ## 项目结构 ``` src/main/java/org/example/bigwork/ ├── BigWorkApplication.java # 应用程序入口 ├── controller/ # 控制器层 │ └── StudentTaskController.java # 学生任务控制器 ├── entity/ # 实体类 │ ├── Attachment.java # 附件实体 │ ├── Student.java # 学生实体 │ ├── StudentTask.java # 学生任务关联实体 │ └── Task.java # 任务实体 ├── mapper/ # MyBatis Mapper接口 │ ├── AttachmentMapper.java # 附件Mapper │ ├── StudentMapper.java # 学生Mapper │ ├── StudentTaskMapper.java # 学生任务关联Mapper │ └── TaskMapper.java # 任务Mapper ├── service/ # 服务层 │ ├── AttachmentService.java # 附件服务接口 │ ├── StudentService.java # 学生服务接口 │ ├── TaskService.java # 任务服务接口 │ └── impl/ # 服务实现 │ ├── AttachmentServiceImpl.java # 附件服务实现 │ ├── StudentServiceImpl.java # 学生服务实现 │ └── TaskServiceImpl.java # 任务服务实现 └── util/ # 工具类 └── TaskUtils.java # 任务工具类 ``` ## 数据库设计 ```sql -- 学生表 CREATE TABLE student ( student_id VARCHAR(50) PRIMARY KEY, name VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL ); -- 任务表 CREATE TABLE task ( task_id VARCHAR(50) PRIMARY KEY, task_name VARCHAR(200) NOT NULL, task_description TEXT, workload INT, start_time DATETIME, end_time DATETIME, claim_status VARCHAR(20) DEFAULT '未领用', completion_status VARCHAR(20) DEFAULT '未完成', teacher_score DECIMAL(5,2) ); -- 学生任务关联表 CREATE TABLE student_task ( id INT AUTO_INCREMENT PRIMARY KEY, student_id VARCHAR(50) NOT NULL, task_id VARCHAR(50) NOT NULL, claim_time DATETIME NOT NULL, FOREIGN KEY (student_id) REFERENCES student(student_id), FOREIGN KEY (task_id) REFERENCES task(task_id) ); -- 附件表 CREATE TABLE attachment ( attachment_id INT AUTO_INCREMENT PRIMARY KEY, file_name VARCHAR(255) NOT NULL, file_path VARCHAR(500) NOT NULL, upload_time DATETIME NOT NULL, task_id VARCHAR(50) NOT NULL, FOREIGN KEY (task_id) REFERENCES task(task_id) ); ```