声明
该项目用了阿里云OSS对象存储,不需要的话可以删了,使用 UploadServlet 即可。
项目介绍
想法起源于学习文化课时错题,因为懒,因此老是不复习,以及文化课笔记较杂。由于本学期有 JSP+Servlet 课程,要完成大作业,因此借此机会实现我的想法。
借助 “Learning-Assistant” 来帮助自己定期规划复习时间。
在笔记方面,当你迷糊记得一定内容,可是不记得在那个笔记中时,“根据内容查找便成为有利的工具”,但无论是自己用 word 还是 typora 等笔记软件,几乎都缺少或不太完美完善(好吧,或许有的很完美但我没用过…)。
由于只教了 “Servlet+JSP”,只能用课本上的知识。因此该项目我尽量避免使用 JSON 和 Ajax 等(老师说教的不深,因此尽量别用),emmm…所以我也留了很多坑,例如文件上传的验证、CSRF 安全、异常处理、404处理等,现在该项目用的几乎都是同步(除了迫不得已)。
2023年 06月 13日 星期二 15:21:16 CST
功能设计
-
注册:没有,暂时考虑辅助个人学习使用。
-
登陆:每个账号都是独立的。
-
信息 icon:直接跳转到个人主页的信息箱。
-
个人主页
- 个人信息
- 我的错题本
- 信息箱
- 收藏
- 笔记本
-
错题训练:复习错题。
-
错题世界。
-
笔记:用富文本?还是便利贴?(那就富文本吧…)
个人主页
- 个人信息:个人信息修改。
- 我的错题本:保存和添加错题。
- 信息箱:接收评论的信息。
- 收藏:收藏错题。
- 笔记本:保存个人笔记。
我的错题本
功能如下:
- 显示所有错题。
- 添加错题。
- 错题可以设置为共享状态,或私有状态(默认)。
错题训练(好像没做这个?emmmm…不知道,忘记了,随便吧…)
- 根据算法选出要复习的错题。
- 每道题目提供三种选项:
- 答对:可以按照一定规则降低权重。
- 答错:加权。
- 熟知:不再安排复习。
错题世界
- 显示所有已共享的错题。
- 可以对错题进行评论。
- 可以对共享的错题进行收藏(但不安排复习)。
开发环境
笔记本:
- 系统:Linux
- MySQL:5.7.41
- IDEA:2022.3.1
- Tomcat:9
宿舍台式机:
- 系统:Window 10
- MySQL:5.7.41
- Eclipse:2019.12.x
- Tomcat:9
数据库设计
用户表 user
字段名 | 类型 | 备注 |
---|---|---|
u_id | int | 用户唯一标识 |
username | varchar | 用户名 |
password | varchar | 密码 |
CREATE TABLE users (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`signature` VARCHAR(255),
`image` VARCHAR(255)
);
insert into users values(null, "admin", "admin", "哈哈", "default.jpeg");
概率(统计)表 statistics
字段名 | 类型 | 备注 |
---|---|---|
id | int | 唯一标识 |
total | int | 答题总次数 |
mistake | int | 答错总次数 |
countdown_day | int | 倒数日 |
save_countdown | int | 保存 countdown_day |
u_id | int | 所属用户 |
m_id | int | 所属错题 |
CREATE TABLE statistics (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`total` INT NOT NULL,
`mistake` INT NOT NULL,
`countdown_day` INT NOT NULL,
`save` INT NOT NULL,
`u_id` INT NOT NULL,
`m_id` INT NOT NULL
);
insert into statistics values(null, 1, 1, 3, 1, 1, 1); #100%
insert into statistics values(null, 4, 2, 3, 1, 1, 2); #50.00%
insert into statistics values(null, 6, 2, 1, 1, 1, 3); #33.33%
概率计算公式:
P
=
m
i
s
t
a
k
e
t
o
t
a
l
P = \frac{mistake}{total}
P=totalmistake
概率等级:
- P ≥ 70 P \ge 70 P≥70:立即复习
- P ≥ 50 P \ge 50 P≥50:提前倒数日
- P ≥ 20 P \ge 20 P≥20:提前倒数日
- P < 20 P \lt 20 P<20:正常倒数日
没学过概率统计,无法用更加科学准确的计算方法,因此只能用这种最简单的了…
错题表 mistake
字段名 | 类型 | 备注 |
---|---|---|
id | int | 错题唯一标识 |
mistake | varchar | 错题图片路径 |
correct | varchar | 答案图片路径 |
comment | varchar | 错题备注信息 |
m_info_id | int | 关联到 mistake_info 表 |
u_id | int | 属于那个用户 |
CREATE TABLE mistakes (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`question` VARCHAR(255),
`correct` VARCHAR(255),
`comment` VARCHAR(255),
`m_info_id` INT NOT NULL,
`u_id` INT NOT NULL
);
insert into mistakes values(null, 'question.png', 'correct.png', '测试1', 1, 1);
insert into mistakes values(null, 'question.png', 'correct.png', '测试2', 2, 1);
insert into mistakes values(null, 'default.png', 'default.png', '测试3', 3, 1);
错题信息表 mistake_info
字段名 | 类型 | 备注 |
---|---|---|
id | int | 信息表唯一标识 |
date | date | 录入的时间,无法更改 |
tag_id | varchar | (多)标签,关联到 tag 表 |
CREATE TABLE mistake_info (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`date` DATE NOT NULL,
`tag_id` VARCHAR(255)
);
insert into mistake_info values(null, '2023-05-26', '1');
insert into mistake_info values(null, '2023-05-25', '2');
insert into mistake_info values(null, '2023-05-20', '1,2,3');
标签 tag
字段名 | 类型 | 备注 |
---|---|---|
t_id | int | Tag 唯一标识 |
name | varchar | Tag 名 |
u_id | int | 所属用户 |
CREATE TABLE tags (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`u_id` INT NOT NULL
);
insert into tags values(null, '数学', 1);
insert into tags values(null, '英语', 1);
insert into tags values(null, '计算机', 1);
笔记 notebook
字段名 | 类型 | 备注 |
---|---|---|
id | int | 唯一标识 |
tittle | varchar | 笔记标题 |
date | date | 新建笔记日期 |
content | text | 文本内容 |
overview | varcharr | 文本摘要,不超过 50 字 |
u_id | int | 所属用户 |
CREATE TABLE notebook (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`tittle` VARCHAR(255),
`date` DATE,
`content` TEXT,
`overview` VARCHAR(255),
`u_id` INT
);
UI 界面(只展示 PC 端,移动端不展示)
旧版 —— 被舍友吐槽…(我改完之后,回过头来看,他说的没错 😭)
新版 —— 极简风格
完整代码下载地址:错题本管理系统