线性代数的学习网站
数据库的设计
在完成基本功能在去看了阿里巴巴 Java 开发手册,发现我创建的表一塌糊涂,如果按照规范去修改的话,我项目得重写,实在惭愧。(用户的邮箱是他在这个网站的唯一的标识)
库名studyweb
五张表(分别是user,question,answer,math,log)
user表
CREATE TABLE `user` (
`u_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`u_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`u_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`u_role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT 'user',
`u_registertime` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`u_money` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '0',
PRIMARY KEY (`u_email`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
question表
CREATE TABLE `question` (
`u_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`q_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`q_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
`q_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`q_money` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`u_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`q_state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '待审核',
`a_number` int(11) DEFAULT 0,
PRIMARY KEY (`q_title`, `u_email`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
answer表
CREATE TABLE `answer` (
`u_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`u_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`a_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
`a_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`q_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`u_email`, `a_time`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
math表
CREATE TABLE `math` (
`u_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`m_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`m_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`u_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`m_money` int(11) DEFAULT 0,
`m_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`m_location`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
log表
CREATE TABLE `log` (
`l_modular` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`u_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`u_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`l_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`l_behavior` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`l_time`, `u_email`, `l_behavior`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
用户登录、注册(邮件发送)
邮件发送总是出了一点问题,直到我发现了下面的博客
邮件发送主要参考
本来想做一个过滤器,如果用户没有进行登录注册就不得访问往后页面,可时间有限,就没有实现(2月18号)
普通用户
问答功能
问答我是模仿csdn的问答,在实现基本问答的情况下,增加了金币功能
问答的业务逻辑
/*问答模块用户的操作
* 思路:
* 我把用户问答功能分为
* 一:我与所有用户的问答
* 1查看所有的问答
* 仅展示问题题目和少量内容,以及用户名,提问时间,回答的个数,以及问题状态,奖赏金币
* 2查看问题详情(通过点击标题查看问题详情)
* 问题详情:展示问题题目和全部内容,以及用户名,提问时间,以及问题状态,奖赏金币
* 回答详情:还展示所有回答的个数,回答者的姓名,回答时间,回答内容
* 3我回答问题
*
* 二:我自己的问答
* 1.我要提问
* 填入问题标题
* 填入问题内容
* 填入奖赏金币
* 2.我的问答
* 我提出的
* 通过用户的u_email查出所以我提出的问题,并返回一个list集合
* 通过list.size()计算出我提出问题的总数
* 通过点击标题查看问题详情
* 通过点击采纳来说明我已经找到答案
* 我回答的
* 通过用户的u_email查出所以我回答的问题,并返回一个list集合
* 通过list.size()计算出我回答问题的总数
* 通过点击标题查看问题详情
*
*
*
*注意:因为很多功能都用到了问题标题,故一个问题的标题不能为空且不能重复
*
*问答模块与日志管理(问答模块仅仅记录用户的操作)
*不管在问答管理的那个操作都属于问答模块
*不同的操作有不同的定义
* 用户浏览
* 查看详情
* 回答问题
* 用户提问
*
* 查看自己提出的所有问题
* 查看自己回答所有的问题
* 采纳问题
*
*
*
* */
上传算法、下载算法
这里还是模仿了csdn的上传下载
上传我因为文件名踩过无数的坑,最后通过字符串的截取解决了,不得不感叹java基础真的好重要呀
上传下载的业务逻辑
/*
* 用户上传下载算法操作
* 思路:
* 上传:上传到服务器后,把文件路径,文件名,上传时间,上传者的基本信息写入数据库
* 下载:从数据库读出所有文件的基本信息,然后根据文件名从服务器下载文件
*
*
* 1:因为并不会用类加载器,所有把用户上传下载算法仅仅做成 用户上传下载文件
* 2:增加功能
* 上传用户设置金币
* 下载需要金币,一方面下载者的金币数减少,另一方面上传者增加金币,( 前提:下载者金币数量充足)
*/
在线实现线性代数的运算
1:算法专门放在工具包中进行调用
2:数据传递是用ajax,前端传字符串,java把字符串转化成对应的一维二维数组,后台响应后再把数据转成字符串
3:由于前端没有做任何的限制,所以我们servlet层要对是否传来数据,数据的格式等等进行判断
4:逻辑关系一定要理清,要知道哪个具体的操作,限制等等在前,哪个在后,不然容易出异常·
5:算法的实现太多用for以及嵌套的for循环了,好实现也好理解,但太暴力,也没考虑效率问题
6:部分运算我实现不了,借鉴修改了别人的算法
查看个人信息(新增)
由于设置了金币功能,用户肯定得知道自己的金币数,故实现用户可查看自己的ID号,昵称,金币数,注册时间
管理员
问答的管理
功能:
1审核提问,决定用户的提问是否能发表
2对问题和回答中不合规的进行删除
问答的管理业务逻辑
/*管理员问答模块
* 思路
* 1审核提问,决定## 标题用户的提问是否能发表
* 遍历出待审核的提问
* 确认通过审核
* 对不合格的进行删除
* 2对问题和回答中不合规的进行删除
* 遍历出所有问题
* 查看问题详情
* 对不合规的提问以及这个提问下的所有回答进行删除
* 对某个不合规的回答进行删除
*
*
*
*
* */
人员的管理
功能:
1 管理员查出所有用户的基本信息
2管理员删除学生(删除非法用户.比如名字涉及黄暴,非法积累金币)
算法的管理
功能:
1:对用户上传的算法,对算法的增删查改
对在服务器中的算法文件进行查和删操作用到了文件流
日志管理
功能:
1:用户所有行为都存入日志
2:根据用户模块的不同功能进行分类查看
3:可以清空日志
页面
由于页面太多,没有能力美化所有页面,但保证了页面总体的形象,页面没有用模板,直接改用了好工具网,csdn等等的源码
结语
第一次一个人写javaweb项目,感觉挺难的。最难的不是不知道怎么写,而是是之前好好的,后来突然出问题,真的需要耐心呀。问答模块是我花时间最多的地方,真的要理清里面的逻辑,在项目里不断的用io流,数组,集合,等等,明白了java基础的重要性,不说了,补基础去了!!!