4.3 数据库的逻辑设计
根据数据库的概念设计,可以创建与实体对应的数据表。 1、用户表(User) 下面是对表User的具体设计
表4-1 user
1 2 3 4 5 6 字段名 userName password rePassword mainUrl loginTime gradeNo 属性 varchar(30) varchar(25) varchar(25) varchar(50) datetime int 约束 primary key 无 无 无 无 Foreign key 意义 用户名 密码 确认密码 地址 注册时间 用户等级 说明:*userName是注册用户的用户名,为User表的主键。 *password是用户密码,为用户登录时用。 *rePassword是确认密码,与用户密码对应。
*mailUrl是用户的地址,通过它,我们可以与之通过通信。 *loginTime表示用户注册的时间。
*gradeNo表示用户的等级,与登记表(grade)中的gradeId相关联,组成表的外键。共分为四个等级:菜鸟、列兵、星级标兵和士官。
*在注册过程中,password和rePassword必须一致,否则无法成功注册。 2、管理员表(admin)
表4-2 admin
1 2 3 4 字段名 adminId adminName password adminTime 属性 int varchar(25) varchar(25) datetime 约束 primary key 无 无 无 意义 管理员编号 管理员 密码 创建时间 3、帖子表(Article) 下面是对表Article的具体设计
表4-3 article
字段名 属性 约束 意义
1 2 3 4 5 6 7 8 9 10 11 id pid rootid editNo title cont pdate writer viewCount replyCount isleaf int int int Int varchar(30) text datetime varchar(30) int int int primary key 无 无 无 无 无 无 foreign key 无 无 无 帖子id 父亲id 根id 所属版块 标题 容 发帖时间 作者 帖子查看量 帖子回复量 判断帖子是否为叶子节点 判断帖子是否为精华帖 12 isEssence int 无 说明:*id是帖子的编号,为本表的主键。 *pid是父亲id的编号,表示被回复的帖子id号。
*rootid表示根贴的id号,表示最初发起主题的帖子id号。 *editNo表示帖子所属的板块号,每个版块的帖子分版块区别显示。 *title表示帖子的主题。 *cont表示帖子的容。 *pdate表示发帖的具体时间。
*writer表示发帖的作者,此外键对应user表中userName字段。 *viewCount表示帖子的查看量。 *replyCount表示帖子的回复量。
*isLeaf判断帖子是否为叶子节点,值为1时表示为非叶子节点;为0时
表示为叶子节点。
*isEssence判断帖子是否为精华帖,值为1是表示是精华帖;反之,则不
是。
4、用户等级表(grade)
图4-4 grade
字段名 属性
约束 意义
1 2 gradeId gradeCont int varchar(25) primary key 无 等级编号 等级容 5、版块类别表(edit) 图4-5 edit
字段名 属性 int varchar(25) 约束 primary key 无 意义 版块编号 版块容 1 edited 2 editName
articlePK idpidrootideditNotitlecontpdateviewCountreplyCountwriterisEssenceisLeafeditPK editIdeditNameuserPK userNamepasswordrePasswordloginTimegradeNogradePK gradeIdgradeCont
图4-5 数据库模型图
5 系统详细设计与实现
5.1 前台设计
系统的前台,即是直接面向用户的所有页面。因为前台的功能模块较多,而各个模块的实现过程都是类似的,所以对于系统前台的介绍,只是做有选择的系统重点设计介绍。
5.1.1 前台页面设计与实现 本系统的所有页面都采用了统一的简化页面框架,包括页头和容显示区。前台首页的页面运行结果已在前文中出现过,此处不再累述。
下面主要介绍前台首页面index.jsp的具体实现。由于论坛是以主题分版块展示的,下面以其中一个板块页面做详细介绍。部分主要代码如下:
<%
List
ResultSet rs = DB.executeQuery(stmt, sql ); //执行sql语句,并返回结果集 while (rs.next()) { Article a = new Article(); a.initFromRs(rs); articles.add(a); }
//记录总查看量
int totalViewNum=0; //记录帖子总数
int totalArticleNum=0; /*查询出帖子的总查看量*/
for (Iterator
/*查询出帖子的总回复量*/
String sql1=\; ResultSet rs1 = DB.executeQuery(stmt, sql1); rs1.next();
totalArticleNum = rs1.getInt(1);
/*查询出最后的发帖作者*/
String sql2=\; ResultSet rs2 = DB.executeQuery(stmt, sql2);
%>
while (rs2.next()) { Article a = new Article(); a.initFromRs(rs2); articles.add(a); } Iterator
以上的语句实现的有三个功能:1、查询出帖子的总查看量;2、查询出帖子的总回复量;3、查询出最后的发帖作者。这些都是对整个板块的总体统计,是对板块信息的最直观的展现。
5.1.2 用户注册/登录、管理员登录 在论坛首页,提供了三个登录、注册入口,包括:用户注册/登录、管理员登录;通过点击如下,进入到对应各个界面。
href=\>普通用户注册
href=\>普通用户登录
href=\>管理员登录入口
1>用户注册
用户注册的网页文件对应的是“loginUser.jsp”文件,在此页面下,非注册用户可以进行注册的操作。
运行效果图如下:
相关推荐: