校园论坛(Java)—— 考研学习模块
创始人
2024-03-14 06:59:42
0

校园论坛(Java)—— 考研学习模块

文章目录

  • 校园论坛(Java)—— 考研学习模块
    • 1、写在前面
    • 2、系统结构设计
      • 2.1 各个页面之间的调用关系
      • 2.2. 登录注册模块各层的设计
    • 3、考研学习模块设计
      • 3.1 浏览和查看帖子
      • 3.2 发表帖子
      • 3.3 删除帖子
      • 3.4 回复帖子
      • 3.5 删除回帖
    • 5、项目代码


在这里插入图片描述


1、写在前面

  • Windows版本:Windows10
  • JDK版本:Java8
  • MySQL版本:MySQL5.7
  • Tomcat版本:Tomcat9.0
  • IDE:IntelliJ IDEA Ultimate2020.2.3

2、系统结构设计

2.1 各个页面之间的调用关系

在这里插入图片描述

考研学习模块

  • TouristStudy.jsp:游客模式下,提示登录使用发表功能
  • touristStudyReply.jsp:游客模式下,只有查看学习专帖的权限,提示登录使用回复等功能
  • studyList.jsp:学习专帖的展示页面
  • study.jsp:发表学习专帖
  • releaseStudyJudge.jsp:学习专帖标题判空操作
  • studyReply.jsp:查看回帖信息
  • MdeleteUserStudyServlet:当前登录用户或管理员删除当前登录的学习专帖
  • UpdeleteStudyReplyByIdServlet:当前登录用户删除当前登录的学习专帖回帖
  • userlist.jsp:所有用户包括管理员自身的用户信息列表

2.2. 登录注册模块各层的设计

  • Entity层

实体层声明学习专帖的sid、title、content、cover、createTime等变量以及对应的set、get方法

public class StudyEntity {private int sid;private String title;private String content;private String cover;private Timestamp createTime;//关联用户,多对一额关联private UserEntity author = new UserEntity();//关联回复private List studyReplyList = new ArrayList<>();public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Timestamp getCreateTime() {return createTime;}public void setCreateTime(Timestamp createTime) {this.createTime = createTime;}public String getCover() {return cover;}public void setCover(String cover) {this.cover = cover;}public UserEntity getAuthor() {return author;}public void setAuthor(UserEntity author) {this.author = author;}public List getStudyReplyList() {return studyReplyList;}public void setStudyReplyList(List studyReplyList) {this.studyReplyList = studyReplyList;}}
  • Dao层

Dao层分别实现一个interface接口类以及一个接口方法实现类

接口类:

public interface StudyDaoInf {// TODO 查询所有考研学习信息public List findStudyList();// TODO 根据ID查询某个考研帖子public StudyEntity findStudyById(int id);// TODO 添加考研帖子public int addStudy(StudyEntity study);// TODO 根据考研帖子的ID查询所有回复public List findStudyReplyList(int fid);// TODO 添加回复public int addStudyReply(StudyReplyEntity reply);// TODO 根据用户ID查询用户的所有考研发帖public List personStudy(int uid);// TODO 用户删除个人某个学习帖子public void deleteStudy(int fid);// TODO 管理员根据学习帖子id删除所有回复public void deleteStudyReply(int sid);// TODO 用户删除某个考研回帖public void deleteStudyReplyByRid(int rid);// TODO 用户管理模块// TODO 删除用户所有考研发帖public void dUserAllStudyByUid(int uid);// TODO 删除该用户所有考研回帖public void dUserAllStudyReplyByUid(int uid);// TODO 删除用户帖子下的所有考研回帖public void dUserOtherStudyRelyBySid(int uid);
}

接口实现方法

public class StudyDaoImpl implements StudyDaoInf {/*** TODO 查询考研帖子列表* @return*/public List findStudyList() {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List list = new ArrayList();String sql = "select * from study_info order by create_time desc";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);rs = ps.executeQuery();while (rs.next()) {StudyEntity study = new StudyEntity();study.setSid(rs.getInt(1));study.setTitle(rs.getString(2));study.setContent(rs.getString(3));study.setCover(rs.getString(4));study.setCreateTime(rs.getTimestamp(5));// TODO 获取对应用户表中的外键UserEntity author = new UserEntity();author.setUser_id(rs.getInt(6));study.setAuthor(author);list.add(study);System.out.println("查询所有考研帖子:" + rs.getString(3));}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(rs, ps, conn);}return list;}/*** TODO 添加考研帖子* @param study* @return*/public int addStudy(StudyEntity study) {Connection conn = null;PreparedStatement ps = null;String sql = "insert into study_info(title,content,cover,create_time,user_id) values(?,?,?,?,?)";System.out.println("添加考研帖子");int i = 0;System.out.println(study.getCreateTime());try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setString(1, study.getTitle());ps.setString(2, study.getContent());ps.setString(3, study.getCover());ps.setTimestamp(4, study.getCreateTime());ps.setInt(5, study.getAuthor().getUser_id());i = ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(null, ps, conn);}return i;}/*** TODO 根据ID查询某个考研帖子* @param sid* @return*/public StudyEntity findStudyById(int sid) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;StudyEntity study = null;String sql = "select * from study_info where sid = ?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, sid);rs = ps.executeQuery();if(rs.next()){study = new StudyEntity();study.setSid(rs.getInt(1));study.setTitle(rs.getString(2));study.setContent(rs.getString(3));study.setCover(rs.getString(4));study.setCreateTime(rs.getTimestamp(5));// TODO 获取对应用户表中的外键UserEntity author = new UserEntity();author.setUser_id(rs.getInt(6));study.setAuthor(author);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(rs, ps, conn);}return study;}/*** TODO 查询考研帖子对应的所有回复* @param sid* @return*/public List findStudyReplyList(int sid) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List list = new ArrayList();// TODO 根据外键作为条件查询当前帖子的所有回复String sql = "select * from study_reply_info where sid = ?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, sid);rs = ps.executeQuery();while(rs.next()){StudyReplyEntity reply = new StudyReplyEntity();reply.setRid(rs.getInt(1));reply.setContent(rs.getString(2));reply.setStudyReplyTime(rs.getTimestamp(3));// TODO 获取对应用户表中的外键UserEntity replyUser = new UserEntity();replyUser.setUser_id(rs.getInt(4));reply.setUser(replyUser);list.add(reply);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(rs, ps, conn);}return list;}/*** TODO 添加考研回复* @param reply* @return*/public int addStudyReply(StudyReplyEntity reply) {Connection conn = null;PreparedStatement ps = null;int i = 0;System.out.println("添加回复成功");String sql = "insert into study_reply_info(reply_content, reply_time, user_id, sid) values(?,?,?,?)";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setString(1, reply.getContent());ps.setTimestamp(2, reply.getStudyReplyTime());// TODO 将相应的两个外键设值ps.setInt(3, reply.getUser().getUser_id());ps.setInt(4, reply.getStudy().getSid());i = ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(null, ps, conn);}return i;}/*** TODO 根据用户ID查询用户的所有考研发帖* @param pid* @return*/public List personStudy(int pid){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;String sql = "select * from study_info where user_id=?";List list = new ArrayList();try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, pid);rs = ps.executeQuery();while (rs.next()) {StudyEntity study = new StudyEntity();study.setSid(rs.getInt(1));study.setTitle(rs.getString(2));study.setContent(rs.getString(3));study.setCover(rs.getString(4));study.setCreateTime(rs.getTimestamp(5));UserEntity user = new UserEntity();user.setUser_id(rs.getInt(6));study.setAuthor(user);list.add(study);}} catch (Exception e) {e.printStackTrace();}return list;}/*** TODO 用户删除个人某个学习帖子* @param sid*/public void deleteStudy(int sid){Connection conn = null;PreparedStatement ps = null;String sql = "delete from study_info where sid =?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, sid);ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(null, ps, conn);}}/*** TODO 管理员根据学习帖子id删除所有回复* @param sid*/public void deleteStudyReply(int sid){System.out.println("sid: " + sid);Connection conn = null;PreparedStatement ps = null;String sql = "delete from study_reply_info where sid = ?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, sid);ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(null, ps, conn);}}/*** TODO 用户删除某个考研学习回帖* @param rid*/public void deleteStudyReplyByRid(int rid){Connection conn = null;PreparedStatement ps = null;String sql = "delete from study_reply_info where reply_id = ?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, rid);ps.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {DBUtil.close(null, ps, conn);}}// TODO 2. 用户管理模块/*** TODO 删除用户所有考研发帖* @param uid*/public void dUserAllStudyByUid(int uid){Connection conn = null;PreparedStatement ps = null;String sql = "delete from study_info where user_id=?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, uid);ps.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {DBUtil.close(null, ps, conn);}}/*** TODO 删除用户的所有考研回帖* @param uid*/public void dUserAllStudyReplyByUid(int uid){Connection conn = null;PreparedStatement ps = null;String sql = "delete from study_reply_info where user_id=?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, uid);ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(null, ps, conn);}}/*** TODO 删除用户帖子下的所有考研回帖* @param uid*/public void dUserOtherStudyRelyBySid(int uid){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;String sql = "select sid from study_info where user_id=?";List sidlist = new ArrayList();try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setInt(1, uid);rs = ps.executeQuery();while (rs.next()) {StudyEntity forum=new StudyEntity();forum.setSid(rs.getInt(1));sidlist.add(forum);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(null, ps, conn);}String ssql = "delete from study_reply_info where sid=?";try {for (StudyEntity forum : sidlist) {conn = DBUtil.getConnection();ps = conn.prepareStatement(ssql);ps.setInt(1, forum.getSid());ps.executeUpdate();DBUtil.close(null, ps, conn);}} catch (Exception e) {e.printStackTrace();}}
}
  • service层

实现servlet层调用的方法,对数据库进行增删改查操作。

  • Servlet层

在该层,通过jsp页面传递的参数,调用相应的方法进行操作。

3、考研学习模块设计

考研学习模块分为浏览、查看、发表、删除、回复帖子的功能。

3.1 浏览和查看帖子

考研学习模块的帖子列表如下图所示:

在这里插入图片描述

单击帖子标题,即可查看该帖子的详细内容,同时,如果查看的帖子的发表者是当前登录用户或者当前登录用户是管理员,则均具有删除本帖的权限,否则,不会显示「删除本帖」按钮。三种情况分别如下方3张图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

与普通帖子一样,学习专帖也可以通过单击用户名即可查看发表者的信息,如图3-22所示。

在这里插入图片描述

3.2 发表帖子

发表考研学习帖子:

点击学习专区的「发表学习专帖」按钮进入发表页面,此处不同于普通帖子的是,学习专区的帖子新增了帖子封面壁纸的选择,完成帖子信息的填写之后,点击“发表”按钮即可发表成功。如下图所示:

在这里插入图片描述

发表的学习专帖可以通过考研学习专区帖子列表来查看。

3.3 删除帖子

通过studyReply.jsp页面的“删除本帖”按钮,页面设计和逻辑实现和普通帖子的删除也是大同小异的。

若查看的学习专帖的发表者为当前登录用户或者当前登录用户为管理员身份,均拥有删除此条帖子的功能。如下图所示:

在这里插入图片描述

3.4 回复帖子

在studyReply.jsp页面底部设置有回复框,页面设计和逻辑实现和普通帖子的回复也是大同小异的。

与普通帖子的回复如出一辙,学习专帖的回复如下图所示:

回帖前:

在这里插入图片描述

回帖后:

在这里插入图片描述

3.5 删除回帖

在studyReply.jsp页面,主帖下的每一条回帖都设置有“删除回帖”按钮,页面设计和逻辑实现和普通帖子的删除回帖也是大同小异的。

如下图所示,若查看的学习专帖的发表者为当前登录用户,则当前用户拥有删除此条帖子下所有回帖的权限。

在这里插入图片描述

5、项目代码

  • GitHub
  • Gitee

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...