学生实训任务书
一、题目
基于JSP+Oracle的BBS论坛系统的开发
二、学生信息
专业:Java08-2班学号: 2008131002** 姓名:***
三、用户需求及约束条件
1、基本要求:
⑴用JSP+Oracle实现BBS论坛系统的动态网站开发。
⑵系统总体模块分为:用户注册模块、用户登录模块、信息显示模块、信息操作模块、用户管理模块和数据库模块。各模块间的关系如下图所示:
2、扩展的系统功能模块:
◆积分等级设置模块
◆版面管理模块
◆查询(“版主”或“管理员”对内容的)改动记录
◆文件上传进度条
◆搜索帖子
3、高级编程:
◆使用柜架技术开发基于Struts/Springs/Hibernamte/Ajax的BBS论坛系统。
四、实训的目标、要求、技术路线及设计规格
1、设计的目标:
使用户能够自由地发布、回复信息,交流看法和观点,形成一个交流互动的平台;
2、设计的要求:
通过一个完整的论坛系统,从系统需求分析开始,到系统总体架构的实现,再到数据库系统设计,以及最后各功能模块的实现,把所学过的JSP知识和Oracle知识系统地贯穿起来,熟悉了Web软件系统开发的一整套流程。
3、技术路线:
使用B/S工作模式,以Oracle作为后台数据库,JSP为前台编程语言。还涉及到Servlet、JavaBean、JSTL、SSH等技术。
开发环境:MyEclipse 7.0 Ga、Tomcat 6.0、Oracle 10g、Dreamweaver等。
4、设计规格:
提交实训报告的正文部分内容包括:
⑴系统需求分析;⑵系统总体架构设计;
⑶数据库设计;⑷数据库对象的创建;
⑸系统各模块的页面编程实现;⑹系统的运行测试(可以通过屏幕捕捉来抓图)。
5、所有的设计工作要求同学们真实地、独立地完成。
五、工作量
见《实训进度日历》。
六、考核形式、考核时间、考核指标及成绩评定
实训成绩构成:纪律、态度和平时表现20%;实训结果30%;实训报告30%;实践操作能力20%。
考核形式:
⑴指导教师每日对学生考察、评估和考核;
⑵最后对实训项目完成的质量进行考核和验收。
实训进度日历
题目“基于JSP+Oracle的BBS论坛系统”的开发
指导教师**** 学生班级Java08-1、Java08-2 学年
学期
09-10学年
第2学期
天上午/
下午
实训任务详细描述
教师实训任务的指导(解决方案、实现步骤、
技术路线、难点提示)
通过标准
10
年06月28日上午完成系统需求分析
BBS论坛系统有三类用户:
普通用户、版主和管理员。
文档通过
验收
下午
构思系统的总体架
构设计
包括:用户注册、用户登录、信息显示、信
息操作、用户管理、数据库模块等模块。
各模块的
详细构思
10
年06月29日上午数据库设计
设计系统数据流程图、各实体的E-R图;
把实体转化为关系表,再参照实体间的联系
定义表的主键及其它约束,得到系统中各个
表格的结构。
系统逻辑
结构设计下午数据库对象的创建
按照设计好的逻辑结构,在Oracle中创建这
些表格的数据库对象。
模式对象
10
年06月30日上午
系统各模块的页面
编程实现
数据库功能模块;
论坛首页。
连接数据
库
下午
系统各模块的页面
编程实现
用户注册与登录模块;
版面管理模块、等级称号管理模块。
调试运行
10
年07月01日上午
系统各模块的页面
编程实现
论坛信息内容的显示与操作模块;
用户管理模块。
调试运行下午系统的运行测试测试运行各模块,完善并美化系统。调试运行
10
年07月02日上午撰写实训报告按照《实训报告要求》整理装订。格式把关下午
验收系统
组织讨论
指导教师分组进行验收学生的实训程序,并
组织讨论和优秀作品展示。
系统验收制订教师:闫红岩
目录
一、系统需求分析............................... 错误!未定义书签。
二、系统总体架构设计........................... 错误!未定义书签。
三、数据库设计................................. 错误!未定义书签。
四、数据库对象的创建........................... 错误!未定义书签。
五、系统各模块的页面编程实现................... 错误!未定义书签。
六、实训总结................................... 错误!未定义书签。
七、附录(主要代码)........................... 错误!未定义书签。
一、系统需求分析
近年来, BBS论坛行业经历了很大的变化,从各大门户性网站到校园网站BBS论坛无处不在,BBS论坛在技术交流,讨论中发挥着重要作用。而且BBS 发展方兴未艾。在这种大背景下,我们编写BBS作为实训项目,编写此文档主要是为开发商指定我们对此系统的主要需求,使开发商能够根据该文档更准确的完成该系统。希望开发商能通过该文档完全了解我们对本系统的功能需求。
本系统中有三类用户,即普通用户、版主和管理员。
⑴普通用户的功能:
a)用户注册; b)分页查看所有主题文章列表
c)发表主题文章 ;d)回复文章
e)查看主题文章和回复文章的详细内容
f)对自己发表或回复的文章进行修改和删除
⑵版主的功能:
a)具有普通用户的所有功能
b)对本讨论区的所有文章可以修改或删除
⑶管理员的功能:
a)具有普通用户的所有功能
b)对所有版面的所有文章可以修改或删除
c)具有用户管理功能,包括修改用户的个人信息或删除用户
二、系统总体架构设计
系统总体模块分为:
⑴用户注册模块:完成新用户的注册,并对新用户的注册信息进行错误检查。包含的文件:
a)新用户注册表单页面
b)验证注册信息并将注册信息存入数据库的页面
⑵用户登录模块:提供用户的登录界面,并验证用户名和密码,以确定用户身份。包含的文件:
a)用户登录页面(论坛的主页面)
b)验证登录信息的页面
⑶信息显示模块:显示所有讨论区、各讨论区中的所有主題文章、主题文章和回复文章的详细内容。包含的文件:
a)显示所有讨论区列表的页面
b)各讨论区中所有主题文章的分页显示页面
c)显示主题文章和回复文章详细内容的页面
d)退出论坛,从已登录的用户列表中删除退出的用户
⑷信息操作模块:提供发表主题文章、回复文章、修改文章及删除文章的功能,并对不同身份的用户给予不同的操作权限。包含的文件:
a)发表主题文章或回复文章的页面
b)修改主题文章或回复文章的布面
c)验证文章的合法性并将文章信息存入数据库的页面
d)删除文章的页面
⑸用户管理模块:对用户个人信息进行管理,可设置某用户为版主或删除某用户。包含的文件:
a)显示用户列表的页面
b)修改用户个人信息的页面
c)将修改后的用户信息存入数据库或删除用户
⑹数据库模块:该模块实现通过JDBC-ODBC的技术对Oracle数据库的连接和访问。包含的文件:
a)连接数据库的JavaBean
b)数据库连接池的JavaBean
各模块之间的关系如图所示:
三、数据库设计
1
、系统处理数据的流程,如下图所示:
2、数据库结构设计
把用户信息、版面信息、等级称号信息、内容信息、改动记录信息五个实体,用E-R 图方式描述如下: ⑴用户信息实体E-R 图:
用户编号 用户姓名 性别
用户信息
权限
积分
登录 密码 是否 开放
⑵版面信息实体E-R 图:
⑶等级称号信息实体E-R 图:
⑷内容信息实体E-R 图:
内容编号
版面编号
用户编号
登录IP
内容信息
发布日期
标题 内容明细 所属内容编号
查看次数
等级称号
级别
称号
所需积分
版面信息
版主编号 版面文字 版面介绍 版面编号
是否开放
⑸改动记录信息实体E-R 图:
⑹实体与实体之间的关系E-R 图:
3、数据库各个表格的设计
把实体转化为关系表,再参照实体间的联系定义表格相应的主键,得到数据库各个表格的设计结果。 ⑴用户信息表:
字段名 字段数据类
型 字段长度 是否为空 是否主键 备注 bbs_memberid Number 6 不为空 主键 用户编号 bbs_membername Varchar2 50 为空 用户姓名 bbs_membersex
Varchar2
50 为空 性别 bbs_memberauthority Varchar2
50
为空
权限
创建
拥有
等级称号
用户
发布
版面
生成 改动记录
拥有
内容
拥有
改动记录
编号
内容编号
改动日期
改动人编号
改动类型
增减积分
改动批注
bbs_membercredit Number 6 为空积分
bbs_memberpassword Varchar2 50 为空登录密码bbs_memberisopen Varchar2 50 为空是否开放⑵版面信息表:
字段名字段数据类
型
字段长度是否为空是否主键备注bbs_banmianid Number 6 不为空主键版面编号bbs_banzhuid Number 6 为空版主编号bbs_banmianname Varchar2 50 为空版面名称bbs_banmianintroduce Varchar2 50 为空版面介绍bbs_banmianisopen Varchar2 50 为空是否开放
⑶等级称号表:
字段名字段数据类
型
字段长度是否为空是否主键备注
bbs_level Varchar2 50 为空级别
bbs_chenghao Varchar2 50 为空称号
bbs_jifen Number 6 为空所需积分⑷内容信息表:
字段名字段数据类
型字段长度是否为空是否主
键/外码
备注
bbs_contentid Number 6 不为空主键内容编号
bbs_banmianid Number 6 为空版面编号
bbs_memberid Number 6 为空用户编号
bbs_memberip Varchar2 50 为空登录IP
bbs_contentdate Varchar2 50 为空发布日期
bbs_contenttittle Varchar2 50 为空标题
bbs_content Varchar2 50 为空内容明细
bbs_subcontentid Number 6 为空所属内容编号bbs_totaltimes Number 6 为空查看次数
四、数据库对象的创建
数据库的逻辑结构设计完后,在Oracle数据库系统中实现此逻辑结构,即创建表、触发器对象和视图等。
1、创建表
⑴用户信息表(member):
同时创建相应的约束,比如:姓名能,权限只能取值“管理员”、“版主”、“用户”。使用OEM或SQLPlus创建。
⑵版面信息表(banmian):
⑶等级称号表(step):
⑷内容信息表(content):
2、创建触发器对象
⑴积分触发器
当用户在论坛中发布或回复一条帖子时,用户的积分应该增加1分,所以要为内容表创建一个触发器对象,SQL语句为:
create or replace trigger trg_step
before insert on step
for each row
begin
select seq_step.nextval into:new.bbs_jifen from dual;
end;
同样,如果用户表和文章表有ID字段,也要为此ID字段添加自动加1的触发器。
⑵用户表触发器:
//先为member表创建序列
create sequence seq_member
minvalue 1
maxvalue 999
start with 100
increment by 1
cache 20;
//为表member创建触发器
create or replace trigger trg_member
before insert on member
for each row
begin
select seq_member.nextval into:new.bbs_memberid from dual;
end;
⑶内容信息表触发器:
//为表content创建序列
create sequence seq_content
minvalue 1
maxvalue 999
start with 100
increment by 1
cache 20;
//为表content创建触发器
create or replace trigger trg_content
before insert on content
for each row
begin
select seq_content.nextval into:new.bbs_contentid from dual;
end;
(4)版面信息表触发器
//为表banmian创建序列
create sequence seq_banmian
minvalue 1
maxvalue 999
start with 1
increment by 1
cache 20;
//为表banmian创建触发器
create or replace trigger trg_banmian
before insert on banmian
for each row
begin
select seq_banmian.nextval into:new.bbs_banmianid from dual;
end;
3、创建视图
为简化后期代码编写,创建几个视图对象:版面信息视图、内容列表视图、内容明细视图、用户列表视图。
最后用用户表中添加一行记录,创建admin用户信息;再向版面表中添加一行记录,创建“版面1”的版面信息;向等级称号表中添加一行记录,创建一个等级为1,称号为一级,所需积分为0的等级称号。
五、系统各模块的页面编程实现
1、数据库功能模块
用来实现JSP到数据库的连接和访问功能,论坛中所有对数据库的操作都是通过数据库模块进行的。由于论坛中的用户操作会频繁地连接和访问数据库,因此要考虑采用数据库连接池来提高数据库连接的速度和效率。由于本BBS论坛系统只使用单一的数据库系统,因此没有必要使用连接池管理器。
2、用户登录功能模块
3、用户注册功能模块
用户注册模块是提供给用户一张注册表单,注册表单提交后要对提交的信息
进行客户端和服务器端的验证。如果有误则输出错误信息,正确则提示注册成功。程序register.jsp是注册表单的页面,用JavaScript对注册信息进行客户端的验证。程序chkregister.jsp对提交的注册信息进行服务器端的验证,并将提交的注册信息存入数据库。
4、信息显示功能模块
登录论坛之后就进入了信息显示模块,首先看到的是论坛中的所有讨论区,单击讨论区的链接即可进入相应讨论区中的主题文章列表页面,单击主题文章的标题链接还可以进入查看主题文章内容及其回复内容的页面。此外,对于不同身份的用户显示有不同的权限:普通用户只能修改或删除自己发的文章;版主可以修改或删除本讨论区的所有文章;管理员则对所有讨论区中的所有文章都能进行修改和删除。
5、信息操作功能模块
信息操作模块提供发表主题文章、回复文章、修改文章以及删除文章的功能。该模块对不同身份的用户给予不同的操作权限。为区分不同的操作,我们用参数exe来传递要操作的内容:exe为“write”表示要发表一个主题文章或回复文章;exe为“modify”表示要修改文章。
6、用户管理功能模块
用户管理模块能对各用户的个人信息进行管理,如设置某用户为版主或删除某用户等。该模块供论坛的管理员专用。
为区分对用户管理的不同操作,我们用参数work来传递用户管理操作的内容:work为“mdfusr”表示要修改用户的信息;work为“delusr”表示要删除某个用户。
六、实训总结
对于BBS我们并不陌生,在网络上我们经常看到与BBS相关的论坛,还有很多与BBS类似的,如各种网络留言板等。虽然对这种论坛的版面和布局我们有一定了解,但刚开始时真是无从下手,感觉怎么做都不对,后来我们注册了几个大论坛然后仔细看了看,还试着发了帖子,才对BBS的各个流程步骤才有些真实的了解,再来就是在网上搜索了一般BBS的基本模块架构。
通过对网络上的BBS论坛的初步了解,我们基本熟悉了BBS的各个板块和各个模块的操作流程及步骤。然后,我们根据个人的能力进行了适当任务的分工,接着就是各自做自己的任务模块。
五天时间的实训已经接近尾声了,在这几天的实训中我们学到了很多东西,不仅提高了编程能力,更对编程思想有了新的认识:编程是团体合作项目。通过这次实训,在程序编写的过程中我们遇到了很多问题,这些问题不是一个人就能轻松解决的,这时候我们选择了团队合作,选择了相互鼓励,通过在一块相互讨论,查阅资料和老师请教,最终成功地解决了大部分问题。这时我们也认识到团队力量的重要性。
实训对我们来说,不仅是每天长时间面对电脑的身体挑战,更重要的是心里和精神上的挑战。一个在面对这些挑战时会产生很大的压力,但作为一个团体时
这些压力就会小很多。所以,在这次的期间大家感觉比以前轻松很多,这就是团队的力量。
总体来说,这次实训让我们受益匪浅,这次实训增强了我们的实际操作能力,让我们更能熟练的运用学过的技术为我们服务。
七、附录(主要代码)
1)用户管理模块代码
<%@page contentType="text/html" pageEncoding="gb2312"%>
<%@page import="java.sql.*"%>
BBS-用户管理界面
2)内容信息模块
<%@page contentType="text/html" pageEncoding="gb2312"%> <%@page import="java.sql.*"%>
BBS--帖子列表界面
内容编号 | 版面编号 | 用户编号 | 登陆IP | 发布日期 | 标题 | 所属内容编号 | 访问次数 | |
<%=id%> | <%=rs.getInt(2)%> | <%=rs.getInt(3)%> | <%=rs.getString(4)%> | <%=rs.getString(5)%> | <%=rs.getString(6)%> | <%=rs.getString(7)%> | <%=rs.getInt(8)%> | <%=rs.getInt(9)%> |
3)信息操作模块(发帖)
<%@page contentType="text/html" pageEncoding="gb2312"%>
<%@page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
BBS--发帖成功界面
<%
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
String bbs_contenttitle=request.getParameter("bbs_contenttitle");
String bbs_content=request.getParameter("bbs_content");
out.print(bbs_contenttitle);
try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String s="jdbc:oracle:thin:@localhost:1521:bbs";
Connection con=DriverManager.getConnection(s,"scott","bbs");
//Statement stmt=con.createStatement();
//String sql="insert into
member(bbs_membername,bbs_membersex,bbs_memberauthority,bbs_memberpassword,bbs_me mberisopen,bbs_memberphoto) " +
//
"values('"+bbs_membername+"','"+bbs_membersex+"','"+bbs_memberauthority+"','"+bbs_membe rpassword+"','"+bbs_memberisopen+"','"+str+"')";
//String sql="insert into
member(bbs_membername,bbs_membersex,bbs_memberauthority,bbs_memberpassword,bbs_me mberisopen,bbs_memberphoto)
values('"+bbs_membername+"','"+bbs_membersex+"','"+bbs_memberauthority+"','"+bbs_member password+"','"+bbs_memberisopen+"','"+str+"')";
//stmt.executeUpdate(sql);
//插入图片测试
String sql="insert into content(bbs_contenttitle,bbs_content) values(?,?)"; PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,bbs_contenttitle);
pstmt.setString(2,bbs_content);
pstmt.execute();
https://www.doczj.com/doc/1a3219389.html,mit();
con.close();
}
catch(Exception e){
}
%>