最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

BBS系统论文

来源:动视网 责编:小OO 时间:2025-10-04 17:05:32
文档

BBS系统论文

通用论坛BBS系统设计与实现学生姓名×××指导教师×××专业计算机科学与技术学院计算机与信息工程2008年06月16日×××DesignandImplementationofGeneralForumBulletinBoardSystemStudent×××Supervisor×××SpecialtyComputerScienceandTechnologySchoolComputerandInformationEngineering2008-06-16毕业设计(论文)任务书姓名:×××学院:计算
推荐度:
导读通用论坛BBS系统设计与实现学生姓名×××指导教师×××专业计算机科学与技术学院计算机与信息工程2008年06月16日×××DesignandImplementationofGeneralForumBulletinBoardSystemStudent×××Supervisor×××SpecialtyComputerScienceandTechnologySchoolComputerandInformationEngineering2008-06-16毕业设计(论文)任务书姓名:×××学院:计算
通用论坛 BBS 系统

设计与实现

学 生 姓 名      ×××             

指 导 教 师     ×××             

专       业  计算机科学与技术      

学       院  计算机与信息工程      

2008年06月16日

×××

        Design and Implementation of

General Forum Bulletin Board System

Student

          ×××                  

Supervisor

          ×××                

Specialty

Computer Science and Technology    

School

Computer and Information Engineering

2008-06-16

毕业设计(论文)任务书

姓名: ×××

学院:计算机与信息工程
班级:04-2

专业:计算机科学与技术
毕业设计(论文)题目:

通用论坛BBS系统设计与实现

立题目的和意义:

目的:设计的首要目的是运用已经学习到的MyEclipse工具和MySQL数据库知识自主实现一个实用的系统,使得现有知识得到更好的巩固,更加熟练的操作MyEclipse工具和MySQL数据库。同时在实现中学习到更多的知识,能更深入掌握JSP和了解软件开发的全过程,为以后的学习与工作打下坚实的基础。

意义:BBS(电子布告栏系统)是在网上提供交流的手段。它可以用于公告、群组讨论、社区内通信、联系、在线聊天、找工作等,利用网络实时、便捷的特点来方便人们的交流、联系和娱乐。

技术要求与工作计划:

技术要求:本设计所做的网站采用三层结构,以MySQL数据库为后台数据库,以JSP网页作为表现层实现,以Struts整合Spring进行模型控制,因此,要求开发人员熟悉数据库的基本知识,通晓MySQL数据库的特点和用法,掌握Java语言的基本知识,能熟练运用JSP进行网站开发,以及对Struts和Spring框架有所掌握。熟练使用MyEclipse开发工具,了解Tomcat服务器的工程部署。

工作计划:利用一个月来学习Java语言,JSP语言,Struts及Spring框架,MySQL数据库,同时进行需求分析。

利用大约一个半月的时间进行系统设计和编码。

利用十天左右进行系统调试和测试。

利用半个月时间完成论文编写和审定。

时间安排:

2008.3.1-2008.3.31  学习Java语言,JSP语言,Struts及Spring框架,MySQL数据库。

2008.4.1-2008.5.20  进行系统的概要设计,详细设计,代码的编写。

2008.5.21-2008.5.31 进行系统的调试与测试。

2008.6.1-2008.6.15  论文的编写和审定。

指导教师要求:

(签字)            年     月      日

教研室主任意见:

(签字)            年     月      日

院长意见:

(签字)            年     月      日

毕业设计(论文)审阅评语

一、指导教师评语:

指导教师签字:

年    月    日

毕业设计(论文)审阅评语

二、评阅人评语:

评阅人签字:

年    月    日

毕业设计(论文)答辩评语

三、答辩委员会评语:
四、毕业设计(论文)成绩:

专业答辩组负责人签字:

             年    月    日               

五、答辩委员会主任单位:      (签章)     

答辩委员会主任职称:                   

答辩委员会主任签字:                   

年    月    日

摘  要

通用论坛BBS系统是按照MVC模式进行设计实现的,采用Tomcat作为后台服务器,以MySQL数据库作为数据服务器,使用Struts和Spring进行逻辑控制,表现层用JSP页面显示,用于在网络上为网民提供一个信息发布、获取的场所。实现了查看、发表、删除帖子功能,论坛帖子版块控制,注册用户可以修改自己的个人信息、增加好友与黑名单以及用户之间发送短信息,管理员可以对用户、帖子,版块、用户组、版块权限和用户组权限进行管理。论文从问题的提出、基本设计思想、数据的流向到具体的设计过程都做出了详细论述。

关键词:BBS;论坛;主题;回复

Abstract

The general forum BBS system is based on mode of MVC, using Tomcat as the web server. The data is stored in the MySQL database. The Struts and Spring realizes the logical control and the performance level demonstrated with the JSP page. The system is used to provide a place where people can release and gain information online. The system provide the function to look over, deliver and delete the information and the user registered can change their own information, add good friends and blacklist. The users also can transmit information between each other. The manager may to the user, the card, the sector, the user group, the sector jurisdiction and the user group jurisdiction carries on the management. The paper from the question proposed that the basic design thought that data has made the detailed elaboration flow direction to the concrete design process.

Key Words:BBS;forum;topic;Reply

目  录

1 绪  论

1.1 课题研究的目的及意义

设计的首要目的是运用已经学习到的MyEclipse工具和MySQL数据库知识自主实现一个实用的系统,使得现有知识得到更好的巩固,更加熟练的操作MyEclipse工具和MySQL数据库。同时在实现中学习到更多新的知识,能更深入掌握JSP、Java语言,了解软件开发的全过程,为以后的学习与工作打下坚实的基础。

BBS(电子布告栏系统)是在网上提供交流的手段。它可以用于公告、群组讨论、社区内通信、联系、在线聊天、找工作等,利用网络实时、便捷的特点来方便人们的交流、联系和娱乐。

1.2 国内外研究动态

进入二十一世纪,计算机技术迅速向着网络化、集成化方向发展。传统的单机版应用软件正在逐渐退出舞台,取而代之的是支持网络、支持多种数据信息(多媒体)的新一代网络版应用软件,而目前网络版软件中似乎存在着两种不同的趋势,一种是称为客户端——服务器的C/S结构应用系统,这类软件具有结构严谨,运行效率高,服务器端压力小,安全性好等优点,被广泛运用于局域网中。而另一种,也是本毕业设计所采用的,是称为浏览器——服务器的B/S结构应用系统,它的特点是在客户端直接采用了功能强大的浏览器软件作为界面,其优点在于软件开发效率高,客户端不受操作平台的、也不受地域的,网络传输量少,即适用于局域网,更适用于Internet,而且投资小、见效快,用户可以不必进行服务器方面的投资,而是去租用,甚至是免费使用ISP的服务器资源,因而受到越来越多中小型单位的青睐。

Internet起源于20世纪60年代末、70年代初,当时,美国国防部为了将充斥于军事基地内各种厂商的电脑主机互连,让它们可以进行数据交换以便研究工作顺利进行,于是成立了ARPA网络计划。ARPA计划尝试建设一个网络系统,它可将各种不同厂商的电脑连接起来。随着这个计划的成功,各学术单位,研究机构也纷纷与ARPA计划所建立的ARPANet连接。到了20世纪80年代,Internet这个名词因势产生,它代表着这十年来所构建涵盖全球各地的网络系统。从1990年起,商业使用的Internet在美国急速地扩大,而Internet也从原来属于少数人使用的网络系统转变为普通百姓也能够使用的网络系统。

最初的Internet资源服务都还停留在文本模式,19年,量子物理实验室(CERN)下的一个研究小组着手开发一种全新的Internet服务,它可以在网络上传送图片、文本、影像、声音等多媒体数据。于是由Tim Berners Lee领导的小组开发出了一种主从、分布式的网络服务系统,这就是WWW(World Wide Web),俗称“万维网”。

所谓WWW其实就是连上Web服务器访问资源,取得的内容就是所谓的“主页”(HomePage)。进入的网页通常不会只有一页,而是整个网站的内容。

“网站”是一种呈现在网络上的新兴媒体,通过Internet已经成为一个实时的,多媒体的信息传播渠道。它的载体主要是电脑,范围覆盖全球各地,没有国界,不分人种,时时刻刻地提供服务。目前,人们渐渐开始把网站称之为广播、电视、报刊以外的第四新闻媒体,以“共享、公平、公正、创新、国际化、团队精神”为特征的网络文明也已逐渐成为这个时代的标志,人们越来越习惯于通过Internet网络获取信息,通过Internet在网站上发表自己对社会对生活的理解和建议。

随着网络的普及,论坛的内容越来越丰富,论坛也由此深受广大网民的喜爱,因此商业网站对论坛也重视起来,提供与网民交流的平台,同时在线技术支持也在论坛中开展起来。

1.3 本文的工作

BBS系统就是提供给注册用户一个平台,会员用户可以通过Internet接入,登录论坛,在这个平台上发表文章、阅读文章、回复文章等等。

此类系统通常有以下四种类型的操作用户:匿名用户、普通用户、版主、管理员、超级管理员。每类用户有其不同的操作集,系统通常提供一个统一的登录页面,此页面应能自动识别不同级别的用户,并提供不同的操作界面。与之相应,此类系统通常应具有以下功能:用户注册、用户登录、发表文章、阅读文章、回复文章、分页查找、主题查找、作者查找、个人资料维护、找回密码、版面管理、版主管理、用户管理、友情链接管理等等,所有操作都可以由用户在客户端浏览器中完成,而服务器端程序会按用户的要求来完成对系统数据的操作,并将结果传给Web服务器,再由Web服务器处理成HTML文件后发送到客户端浏览器。这就是所谓的B/S结构应用系统,B/S结构即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。

C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。

B/S结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓N-Tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。随着Windows将浏览器技术植入操作系统内部,这种结构更成为当今应用软件的首选体系结构。

结合BBS论坛系统实际需要,本BBS系统采用B/S结构。论文设计开发的系统为通用BBS系统,系统应该具备较大的可伸缩性,应该能适应最基本应用最广泛的Web平台。另外,通用系统应该具备较大的可扩展性,而Java 语言是面向对象的,面向对象编程注重程序的可扩展性,且Java 语言是跨平台执行的,JSP相对其他网页编程语言有更多的优点,所以本系统采用Java+JSP作为编程语言。

2 系统分析

2.1 可行性分析

商业软件是根据客户的根本目的和需要而设计和开发的,可行性是开发的系统具有使用价值和生命力的保证。

2.1.1 社会可行性

当前社会是一个网络化的社会,网络就在人们周围,人们从网络上获取并发布信息,而本系统正是应这一需求而产生,为企业,个人发布,获取有价值的信息提供场所。所以本系统具有社会可行性。

2.1.2 技术可行性

本系统采用三层结构,用MySQL数据库作为后台数据库,安装和使用简单易学,方便操作;前台页面采用JSP动态页面,JSP相比ASP、PHP都有很大的优势;控制层采用Struts+Spring框架,Struts和Spring都是Java Web开发中使用的比较热门的技术。服务器采用Tomcat服务器,它是一个开源软件。开发人员在学习了这些语言或工具之后,有能力开发本系统。

2.1.3 经济可行性

经济可行性是指软件所带来的经济效益与开发设计所需要的投资费用相比较是否适当,软件是否会给使用者带来经济效益。首先随着计算机软件和硬件技术的飞速发展,计算机软、硬件价格不断下降,设计本系统所投入的资金下降。与使用本系统为企业发布、获取信息所节省的价值相比,应用本系统带来的收益较大,经济效益可观,所以在经济上是可行的。

2.2 需求分析

需求分析虽处于软件开发过程的开始阶段,但它对于整个软件开发过程以及软件产品质量是至关重要的。随着软件系统复杂性的提高及规模的扩大,需求分析在软件开发中所处的地位愈加突出[1]。所谓需求,是指用户对目标软件系统在功能、行为、性能设计约束等方面的要求。在需求分析工作中,系统分析人员对用户的需求进行调查和分析,确定现有环境的特征,正确定义目标软件的特征 。因此,需求分析工作是对应用环境及其问题进行理解和分析,为问题涉及的信息、功能及系统行为建立模型,将用户需求精确化。

通用论坛BBS系统设计实现以下功能:

①用户中心:包括用户注册、用户登录、用户注销、增加好友、删除好友、增加黑名单、删除黑名单、发送短信息、查看短信息、删除短信息、修改个人资料等功能。

②主题中心:包括主题分类(论坛版块)、查看主题、查看回复、发表主题、发表回复、对主题或回复进行搜索等功能。

③管理员中心:管理员对论坛进行一些基本的维护,包括对帖子的删除、置顶、设为精华帖,对用户的删除、授权,对版块的权限管理,对用户组及用户组的权限的管理等[2]。

④统计功能:对论坛的相关参数进行统计。

2.2.1 用户中心

当用户进入网站首页时,会有一个登录窗口,已经注册的会员用户可以在这个窗口中登录。没有登录的用户只能查看主题,不能发表主题或评论。登录之后,用户就可以发表主题或回复;查看或修改自己个人信息,包括修改用户头像,可以选择自己喜欢的图片作为自己的头像;可以给好友发送短信息,查看或删除自己收到的信息;用户可以在好友与黑名单里设置自己的关系网,让用户与自己的好友交流更加方便,也可在让用户不接收不愿意见到的人的信息。

没有注册的用户可以在登录窗口中点击注册超链接进入新用户注册页面,输入用户名、密码、密码提示问题、提示问题答案及安全邮箱,即可注册成为网站的会员。密码提示问题是为找密码设置的,当用户忘记密码或密码丢失后可以通过输入提示问题答案来找回密码,如果用户回答正确,系统会自动发送一封邮件到用户的安全邮箱里,提示用户修改密码。

2.2.2 主题中心

系统有版块,主题和回复,其中版块是对主题的分类,回复是在主题下发表的,是用户对主题的评论。当用户进入首页时会显示论坛的所有版块及每个版块下的主题数,帖子总数,最后发表主题的用户、时间。进入版块之后显示该版块下的主题及该主题下的回复数,点击数,最后发表评论的用户、时间。点击主题名进入主题页面,该页面有主题内容,发表该主题的用户的用户名、积分、用户组、注册时间,该主题下的回复及发表回复的用户的个人信息。

已登录用户可以在版块下发表主题,在主题下发表回复,还可以按关键字对主题或回复进行搜索,并支持模糊查询。匿名用户只能查看主题内容,对主题或回复进行搜索,但不能发表主题,不能发表回复。

2.2.3 管理员功能

管理员作为一个特殊的用户,除了拥有普通用户拥有的功能外,还可以修改用户权限,管理用户组,管理版面,设置版主,控制用户组权限。版主作为权限最少的管理者只能对自己所管理的版面的主题进行删除、置顶,设置精华贴,屏蔽用户的回复,编辑版面说明等。

2.2.4 统计功能

显示论坛当前注册总人数、当前帖子总数、论坛点击总数、当前在线人数,会员人数以及游客人数。

用户表现积分排行,调动用户积极性。用户每次上线、发表主题或回复都会得到相应的积分,并以此来体现用户的活跃程度。

系统会对主题按点击数进行排序,对版面按主题数进行排序,帖子点击统计,方便了解热点话题。本日版面排行榜,本日作者排行榜。

2.3 开发工具及相关技术简介

本系统采用的工具有JDK 1.5、Tomcat 5.0、MyEclipse 5.5、MySQL5.0,使用的技术有Java、Servlet、JSP、JavaScript、XML、Struts、Spring。

2.3.1 相关工具简介

(1)JDK 1.5.0

JDK是Sun 公司Java应用程序和组件的开发环境,是编译和测试工具,也是提供java程序的Java虚拟机平台,是调试和运行JSP所不可缺少的工具。本系统采用JDK1.5.0版本[3]。

(2)Tomcat 5.0

Tomcat是开源的servlet和JSP容器(Sun官方推荐容器),它是Jakarta项目中一个重要的组成,由Apache、Sun和其他一些公司及个人开发。Tomcat内部实现了Servlet和JSP引擎,而且扩展了一些应用服务器的功能,例如JNDI、数据库连接池、用户事务处理等。目Tomcat被广泛地应用于中小规模的Java web应用中[4]。

(3)Eclipse/MyEclipse 5.5

Eclipse 是基于Java 的开放源代码的可扩展开发平台,Eclipse平台提供软件开发工具的集成服务,所有开发工具(包括JDE和PDE)都是用插件的形式提供的。这种设计使得Eclipse具有开放式可扩充的结构[5]。

MyEclipse是在Eclipse集成开发环境中提供Web应用程序开发的插件,在目前软件开发的Java领域中,MyEclipse是一个使用非常广泛的工具。

MyEclipse是Eclipse软件的一个插件,Eclipse软件是免费的,但MyEclipse不是一个完全免费的产品,需要购买。

(4)MySQL 5.0

MySQL数据库是一个较小型的数据库系统,同时是一个多用户、多线程强壮的SQL数据库服务器,并提供免费的安装软件[6]。

由于它对平台环境要求不高,安装方便,适合中小型系统的开发。

2.3.2 相关技术概述

(1)Java语言概述

Java编程语言是一种通用、并发、基于类且面向对象的语言。Java编程语言与C和C++相关,但是在组织方式上有差别,Java具有C和C++遗漏的许多优点,同时兼有其他语言包括的一些思想。它旨在成为一种生产语言,而不是一种研究语言,并且正是如此[7]。

(2)Servlet技术概述

Servlet技术主要是为了使用Web上的HTTP协议而设计的。Servlet是在Web服务器上运行的程序,Java Servlet可以用于处理客户请求或生成动态Web网页。Tomcat是支持Java Servlet和JSP的Web服务器[8]。

(3)JSP技术概述

JSP (Java Server Pages)是由Sun 公司倡导,许多公司参与,共同建立人一种动态网页技术标准,JSP技术是在Servlet技术基础上发展起来的。它正在飞速发展中,现在已经成为Java服务器编程的重要组成部分。

(4)JavaScript技术概述

JavaScript是一种基于对象(Object)和事件驱动(Event Driver)并具有安全性能的脚本语言,它所能提供的功能非常强大。

JavaScript是一种简洁的面向对象的描述语言,是专门用来开发Internet客户端和服务器端的应用程序,它可以被轻易的嵌入到HTML文件中,使用JavaScript浏览器可以回应使用者的需求事件而不用通过网络来回传资料,这样,使用者的资料就可以直接被客户端应用程序所处理,它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择[9]

(5)XML技术概述

从1998年2月W3C正式推出XML(eXtensible Markup Language的缩写,意为可扩展的标记语言)后短短的三年间,XML以惊人的速度在广大的设计人员中传播开来。随着Internet的飞速发展,HTML开始对更多的网络设计要求显露出疲态。XML也就是在这种大环境下孕育而生的[10]。

(6)Struts 概述

Struts使用Model2体系结构。 ActionServlet 负责控制流程。另外一个Struts类,Action,负责存取业务逻辑类。当ActionServlet类从窗口中获得一个请求时,它使用请求的URI(也称为路径)来决定是哪一个Action来处理该请求。一个Action可以检验输入的合法性、通过业务逻辑层来读取数据库或者其他数据服务中的信息。

要校验输入的合法性或者是使用该输入来修改数据库中的内容,Action需要用户提交给它处理数据。为了避免每一个Action都要处理从请求中输入数据的操作,Struts将这些输入数据绑定到JavaBean中。每一个这样的Bean都是Struts中ActionForm类的子类。ActionServlet通过查看请求的路径就可以决定哪一个ActionForm用来包含输入数据。这些ActionFormod 类都应该是org.apache.struts.action.ActionForm的子类。

每一个HTTP请求都必须有一个HTTP响应。一般而言,Struts自已并不生成响应,而是将请求转发到其他的资源上去—例如JSP页面。Struts提供一个名为ActionForward的类来将逻辑名保存到每个面的路径。当业务逻辑部分已经执行完成后,Action会选择一个ActionForward,并且将它返回给每个总控servlet。总控Servlet 会使用在该Action Forward中存储的物理路径来调用对应的页面来完成HTTP响应部分。

Struts将所有这些方面的细节信息都定义在ActionMapping对象中。每一个ActionMapping对象都对应于一个指定的路径。当该路径被请求时,总控servlet会获取对应的ActionMapp world wide webing对象。该对象会告诉总控servlet该使用哪些Action,ActionForm和ActionForward对象。

全部有关 Action,ActionForm,ActionForward以及ActionMapping的信息和其他的配置信息都在Struts-config.xml文件中声明。ActionServlet在启动的时候会读取该文件,并且创建包含所有这些配置对象的数据库。在运行时刻,Struts会使用这些对象,而不是文件本身[11]。 

(7)Spring 概述

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。

Spring提供了一种轻量级的解决方案,用于建立“快装式企业应用”。在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Service 远程访问业务逻辑,以及可以多种方法进行的持久化数据库的解决方案。另外,Spring 还有一个全功能的MVC柜架,并能透明地把AOP集成到用户的软件中去[12]。

2.4 系统的数据流图

数据流图即DFD(Data Flow Diagram)图。是用于分析系统数据流程的图形,意在让用户理解系统的功能、输入、输出和数据存储等。BBS系统的第一层数据流图如图2-1所示,描述系统由哪几部分组成,各部分之间有什么联系[13]。

2.5 用例图

用例是系统、子系统或类和外部的参与者(actor)交互的动作序列的说明,包括可选的动作序列和会出现异常的动作序列。

用例是代表系统中各个项目相关人员之间就系统的行为所达成的契约。在UML中,用例用一个椭圆表示,用例名往往用动宾结构或主谓结构命名[14]。参与者是指用户在系统中的扮演的角色,其图形化表示是一个小人。

BBS系统的用例有用户注册、登录、注销、浏览主题、发表主题、发表回复、查看短信、发送短信息、删除短信;管理员管理用户、管理主题、管理用户组、版块权限、管理用户组权限。用例图如图2-2所示。

3 总体设计

3.1 功能分析

BBS系统分为前台和后台两个模块。系统的功能模块图如图3-1所示。

前台模块的使用对象包括了所有用户(管理员、用户、游客),提供的功能包括注册帐号、用户登录、用户注销、浏览文章、发表新主题、回复主题、增加好友、删除好友、增加黑名单、删除黑名单、查看短信息、发送短信息、删除短信息、修改个人信息。如图3-2所示。

后台模块的使用对象为管理人员(版主、管理员、超级管理员),提供的功能包括管理用户、管理版块、管理主题、管理用户组、功能权限管理、版块权限管理。后台功能模块如图3-3所示。

3.2 数据库设计

根据前面的需求描述,本系统中可以抽象出来的数据模型有:用户(user)、模块(module)、主题(topic)、回复(retopic)、好友关系(friends)、用户短信息(note)、用户组(groud)、功能(function)、功能权限(group_has_function)、模块权限(modright)模块版主(user_has_module)、积分(integral)。根据需求分析,可设计如下表:

(1)用户信息表:用户ID、用户名、密码、E-mail地址、密码提示问题、提示问题答案、是否公开注册信息、真实姓名、性别、出生年月日、联系电话、详细地址、邮政编码、用户签名档、用户头像、QQ、注册时间、用户组、用户积分、用户登录次数、最后登录时间、发表的帖子数、被推荐的精华帖数、用户最后登录的IP

(2)论坛模块表:模块ID、模块名、上级模块ID、模块介绍、模块一天的总主题数、模块主题总数、模块回复总数、模块状态(1普通模块、2会员论坛、3嘉宾论坛、4加密论坛、5关闭论坛)、是否审核(false否、true是)、加密论坛的密码、模块创建时间

(3)论坛主题表:主题ID、主题名、主题内容、主题发布者、所属模块、主题状态(0表示在审核中、1表示审核通过、2表示草稿)、访问积分、点击数、是否为精华帖子、是否置顶、被创建时间

(4)主题回复表:回复帖子ID、回复主题ID、回复标题、回复内容、回复者ID、回复时间、是否屏蔽(false否、true是)

(5)关系表:好友ID、用户名、申请的好友用户名,好友标记(0黑名单、1好友、2未确认好友)

(6)用户短信息表:短信ID、发信者、收信者、短信标题、短信内容、发信时间、发信标记(0已删除1已发送2草稿)、收信标记(0已删除、1已读,2未读)

(7)用户组表:组ID、用户组名、组描述

(8)功能表:功能ID、功能名、功能信息

(9)功能权限表:用户组ID、功能ID

(10)模块权限表:权限ID、用户组名(外键)、访问模块ID,访问权限

(11)模块版主表:用户ID、模块ID

(12)积分表:积分ID、积分、等级

由于篇幅所限,关于数据库中的数据表的字段信息请参见附录。表之间的实体关系图(ERD)如图3-4所示。

图3-4 BBS系统的ERD图

4 详细设计与实现

4.1 数据库连接

系统采用JSP+Struts+Spring架构,数据库采用MySQL,使用Spring的配置文件beans.xml连接数据库,其连接数据库的配置信息如下:

使用注入Dao的形式进行数据库操作,在Dao中实现对数据表的增加、删除、查询、修改操作,Dao不进行其他的逻辑操作。前台JSP页面产生的请求交由对应的Action进行逻辑操作,当其要对数据库进行操作时,通过WebApplicationContext 对象获取Dao,将要操作的对象的相关参数传给Dao即可。这就是对接口编程,使各个模块之间低耦合,有利于程序的可扩展性。

4.2 前台显示模块

前台显示模块包括用户的一些功能,具体的可分为用户注册、用户登录、用户注销、修改个人信息、增加好友、删除好友、增加黑名单、删除黑名单、查看短信息、发送短信息、删除短信息、查看版面、查看主题、查看回复、发表主题和发表回复等功能。

由于主题是在版块下存在的,所以在版块下的任何地方都可以发表主题,而回复只能是针对主题进行回复,所以必须在主题下才能发表回复,也就是在主题页面下才能点击发表回复。

现将部分功能说明如下:

(1)用户注册:新用户在login.jsp页面中输入用户名,密码,密码提示问题、提示问题答案、安全邮箱,点击提交按钮,数据提交到LoginAction.java中进行处理,在LoginAction.java中,如果用户名已经有人使用则返回注册页面,否则提示用户注册成功,并跳转到登录页面entry.jsp。

  LoginAction.java的login方法的代码如下:

  public ActionForward login(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.servlet.getServletContext());

        UserDao userDao = (UserDao)ctx.getBean("userDao");

        String userName = request.getParameter("username");

        String pwd = request.getParameter("pwd1");

        String email = request.getParameter("email");

        String question = request.getParameter("question");

        String answer = request.getParameter("answer");

        int isOpen = Integer.parseInt(request.getParameter("isopen"));

        String  realName = request.getParameter("realname");

        int   sex=Integer.parseInt(request.getParameter("sex"));

        String    year=request.getParameter("year");

        String   month=request.getParameter("month");

        String  day=request.getParameter("day");

        String  birthDay = year+month+day;

        String   tel=request.getParameter("tel");

        String   address=request.getParameter("address");

        String   postalcode=request.getParameter("postalcode");

        String    qq=request.getParameter("qq");

        String   idioGraph=request.getParameter("idioGraph");

        User user = new User();

        user.setName(userName);

        user.setPwd(pwd);

        user.setEmail(email);

        user.setQuestion(question);

        user.setAnswer(answer);

        user.setIsOpen(isOpen);

        user.setRealName(realName);

        user.setSex(sex);

        user.setBirthDay(birthDay);

        user.setTel(tel);

        user.setRegTime(new Date());

        user.setLastTime(new Date());

        user.setAddress(address);

        user.setPostalcode(postalcode);

        user.setQq(qq);

        user.setIdioGraph(idioGraph);

        user.setGroupId(4);

        int i = userDao.insertUser(user);

        if(i==-1){

            request.setAttribute("returnInfo", "用户名已存在!");

            return mapping.findForward("login");

        }else if(i==1){

            

            request.getSession().setAttribute("returnInfo", "注册成功,请登录!");

            return mapping.findForward("entry");

        }else {

            request.getSession().setAttribute("returnInfo", "注册失败,请重新注册!");

            return mapping.findForward("defeat");

        }

    }

    public ActionForward loginOut(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

            WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.servlet.getServletContext());

        UserDao userDao = (UserDao)ctx.getBean("userDao");

        User user=(User)request.getSession().getAttribute("user");    

        Date date=new Date();

        user.setLastTime(date);

        userDao.updateUser(user);

        request.getSession().removeAttribute("user");

        return mapping.findForward("bbs");

    }

(2)用户登录:用户在有帐号的前提下,可以在登录页面entry.jsp或主页bbs.jsp中输入用户名和密码点击登录,系统将用户名和密码提交到LoginAction.java中的entry()方法,将用户提交的用户名和密码再转交给后台的Dao进行查询,如果有这样的一条记录存在则登录成功,将用户的个人信息保存在浏览器端的Session中,否则返回登录页面,并提示用户名或密码错误。

  LoginAction.java的entry方法的代码如下:

  public ActionForward entry(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.servlet.getServletContext());

        UserDao userDao = (UserDao)ctx.getBean("userDao");

        String userName = request.getParameter("username");

        String pwd= request.getParameter("pwd");

        if(userDao.checkLogin(userName, pwd)){

            User user= userDao.getUser(userName);

            request.getSession().setAttribute("user",user);

            }else{

            request.setAttribute("returnInfo", "用户名或密码错误!");

        }

        return mapping.findForward("bbs"); 

          }

(3)用户注销:已登录用户在退出网站时注销登录状态,系统将请求交给LoginAction.java的loginOut()方法处理,在loginOut()方法中修改用户最后离线时间,将修改保存到数据库中,并将浏览器端的Session的user属性移除,系统返回主页。用户同时失去登录用户的权限,以游客身份访问网站,只能浏览主题,不能发表主题,也不能发表回复。

  LoginAction.java类的loginOut方法的代码如下:

  public ActionForward loginOut(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

            WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.servlet.getServletContext());

        UserDao userDao = (UserDao)ctx.getBean("userDao");

        User user=(User)request.getSession().getAttribute("user");    

        Date date=new Date();

        user.setLastTime(date);

        userDao.updateUser(user);

        request.getSession().removeAttribute("user");

        return mapping.findForward("bbs");

    }

(4)查看版面:首页显示BBS的版块及主要信息,点击版块名进入版块下会显示主题列表,点击主题名可以进入主题页面。

首页index.jsp采用 方法将请求交给BbsAction.java处理,在BbsAction中从数据库取出所有版块的信息及每个版块下的最新主题信息,并将取出的数据保存在JSP的Session对象中,数据取出后交给bbs.jsp页面,在bbs.jsp页面中将取出的结果显示出来。

BbsAction.java的类主要代码如下:

public class BbsAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        // TODO Auto-generated method stub

        WebApplicationContext ctx = WebApplicationContextUtils

                .getWebApplicationContext(this.servlet.getServletContext());

        TopicDao topicDao = (TopicDao) ctx.getBean("topicDao");

        UserDao userDao = (UserDao) ctx.getBean("userDao");

        ModuleDao moduleDao = (ModuleDao) ctx.getBean("moduleDao");

        List listModule = moduleDao.getModule();

        Map mapTopic = new TreeMap();

        for (Module module : listModule) {

            List list = topicDao.getTopicByModId(module.getId());// 根据模块ID查询主题

            Latest latestTopic =new Latest();

            User user = null;

            if (list != null & !list.isEmpty()) {

                user = userDao.getUser(list.get(0).getUserId());// 根据第一条主题的用户名ID查询用户名

                if (user != null) {

                    latestTopic.setUserId(user.getId());

                    latestTopic.setUserName(user.getName());

                    latestTopic.setPubTime(list.get(0).getCreatTime());    

                }

            }

            mapTopic.put(module.getId(), latestTopic);

        }

        request.getSession().setAttribute("listModule", listModule);

        request.getSession().setAttribute("mapTopic", mapTopic);

        return mapping.findForward("bbs");

    }

}

(5)查看主题:当用户在主页上点击版块名时,会产生一个动作,向服务器产生一个请求,服务器将程序交给TopicAction.java处理,在TopicAction.java中取出模块下的所有主题及最后发表回复的作者的信息并将其存入request对象中,处理完之后返回到版块下的主题显示页面。

TopicAction.java类的部分代码如下:

public ActionForward select(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        // TODO Auto-generated method stub

        WebApplicationContext ctx = WebApplicationContextUtils

                .getWebApplicationContext(this.servlet.getServletContext());

        ModuleDao moduleDao = (ModuleDao) ctx.getBean("moduleDao");

        TopicDao topicDao = (TopicDao) ctx.getBean("topicDao");

        ReTopicDao reTopicDao = (ReTopicDao) ctx.getBean("reTopicDao");

        UserDao userDao = (UserDao) ctx.getBean("userDao");

        int moduleId = Integer.parseInt(request.getParameter("moduleId"));

        List listTopic = topicDao.getTopicByModId(moduleId);// 取出模块下的所有主题

        Module module = moduleDao.getModule(moduleId);// 取出模块

        Map mapReTopic = new TreeMap();

        for (Topic topic : listTopic) {

            LatestReTopic latestReTopic = new LatestReTopic();

            List listReTopic = reTopicDao.getReTopicsByTopicId(topic

                    .getId());// 取出该主题下的回复

            User topicUser = userDao.getUser(topic.getUserId());// 取出发表主题的用户ID及用户名

            User reTopicUser = new User();

            if (listReTopic != null && !listReTopic.isEmpty()) {

                reTopicUser = userDao.getUser(listReTopic.get(0).getUserId());// 取出最后发表回复的用户ID及用户名

                latestReTopic.setReTopicUserId(reTopicUser.getId());

                latestReTopic.setReTopicUserName(reTopicUser.getName());

                latestReTopic.setPubTime(listReTopic.get(0).getReTime());

                latestReTopic.setReNum(listReTopic.size());

            }

            latestReTopic.setTopicUserName(topicUser.getName());

            mapReTopic.put(topic.getId(), latestReTopic);

        }

        request.setAttribute("module", module);

        request.setAttribute("listTopic", listTopic);

        request.setAttribute("mapReTopic", mapReTopic);

        return mapping.findForward("module");

    }

(6)查看回复:用户在主题显示页面点击主题名时会产生查找主题信息动作,系统将这个动作交给ReTopicAction.java来处理,在ReTopicAction.java中请求交给后台DAO,从DAO中取出数据表中的项,要取的内容有该主题所在的版块信息、该主题信息、该主题下的回复信息,该主题和其回复的作者的部分信息。

ReTopicAction.java的部分代码如下:

public ActionForward selectReTopic(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        WebApplicationContext ctx = WebApplicationContextUtils

                .getWebApplicationContext(this.servlet.getServletContext());

        TopicDao topicDao = (TopicDao) ctx.getBean("topicDao");

        ReTopicDao reTopicDao = (ReTopicDao) ctx.getBean("reTopicDao");

        UserDao userDao = (UserDao) ctx.getBean("userDao");

        GroupDao groupDao = (GroupDao) ctx.getBean("groupDao");

        IntegralDao integralDao = (IntegralDao) ctx.getBean("integralDao");

        ModuleDao moduleDao = (ModuleDao) ctx.getBean("moduleDao");

        int topicId = Integer

                .parseInt((String) request.getParameter("topicId"));

        Topic topic = topicDao.getTopicById(topicId);

        if(request.getSession().isNew()){//如果为新用户则点击数加一

            int hits=topic.getHits()+1;

            topic.setHits(hits);

            topicDao.updateTopics(topic);

        }

        Module module = moduleDao.getModule(topic.getModId());

        User topicUser = userDao.getUser(topic.getUserId());

        List listGroup = groupDao.getGroup();

        List listReTopic = reTopicDao.getReTopicsByTopicId(topicId);

        Map mapReTopicUser = new TreeMap();

        // 对取出的回复进行查找用户

        if (listReTopic != null) {

            for (ReTopic reTopic : listReTopic) {

                ReTopicUser reTopicUser = new ReTopicUser();

                User reTopiocUser = userDao.getUser(reTopic.getUserId());

                if (reTopiocUser != null) {

                    Group group = groupDao.getGroup(reTopiocUser.getGroupId());

                    List listIngegral = integralDao.getIntegral();

                    if (listIngegral != null) {

                        for (Integral integral : listIngegral) {

                            if (integral.getIntegral() > reTopiocUser.getIntegral()) {

                                reTopicUser.setUsergrade(integral.getGrade());

                                break;

                            }

                        }

                    }

                    reTopicUser.setUserId(reTopiocUser.getId());

                    reTopicUser.setUserName(reTopiocUser.getName());

                    reTopicUser.setUserRegTime(reTopiocUser.getRegTime());

                    reTopicUser.setUserTopic(reTopiocUser.getTopic());

                    reTopicUser.setUserIdiograph(reTopiocUser.getIdioGraph());

                    reTopicUser.setGroup_groupId(reTopiocUser.getGroupId());

                    reTopicUser.setGroupName(group.getGroupName());

                    reTopicUser.setUserIntegral(reTopiocUser.getIntegral());

                }

                mapReTopicUser.put(reTopic.getId(), reTopicUser);

            }

        }

        request.setAttribute("listGroup", listGroup);

        request.setAttribute("module", module);

        request.setAttribute("topic", topic);

        request.setAttribute("topicUser", topicUser);

        request.setAttribute("mapReTopicUser", mapReTopicUser);

        request.setAttribute("listReTopic", listReTopic);

        return mapping.findForward("topic");

    }

其它功能由于时间关系没有实现。

4.3 后台管理模块

管理员又可分为版主、管理员、超级管理员。版主的权限最小,只能维护自己版面的主题,包括删除主题、将主题置顶、设置精华帖等。管理员的功能比版主的功能要多,管理员可以删除用户,修改用户权限、增加用户组、删除用户组、增加版块、删除版块、查询版块、删除主题、修改主题属性、新增功能权限、查询功能权限、删除功能权限、新增版块权限、查询版块权限、删除版块权限。管理员不能删除其他的管理员,管理员只有超级管理员才能够设置和删除。超级管理员具有网站的一切功能。

现将部分功能介绍如下:

管理员作为特殊的用户,通过bbs.jsp或entry.jsp页面进行登录到主页,在主页上如果是管理员则显示后台管理超链接,管理员点击后台管理,进入管理界面manage.jsp,在管理页面有版块管理、主题管理、用户管理、用户组管理、用户组权限管理、版块权限管理。

用户点击版块管理,系统将请求提交给ModuleAction.java的manage方法,在manage方法中取出所有的版块,跳转到manageModule.jsp,在这个页面将所有的版块都显示出来,管理员可以在这个页面直接点击删除链接,将所在版块ID提交到后台,在ModuleAction.java的delete方法中将版块及该版块下的主题删除,同时也将该版块下的主题的回复全部删除。

ModuleAction.java 的delete方法的关键代码如下:

public ActionForward delete(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        // TODO Auto-generated method stub

        WebApplicationContext ctx = WebApplicationContextUtils

                .getWebApplicationContext(this.servlet.getServletContext());

        ModuleDao moduleDao = (ModuleDao) ctx.getBean("moduleDao");

        TopicDao topicDao = (TopicDao) ctx.getBean("topicDao");

        ReTopicDao reTopicDao = (ReTopicDao) ctx.getBean("reTopicDao");

        String moduleId = request.getParameter("id");

        String[] check = request.getParameterValues("id");

        if (moduleId != null) {

            List listTopic = topicDao.getTopicByModId(Integer

                    .parseInt(moduleId));

            if (listTopic != null && !listTopic.isEmpty()) {

                for (Topic topic : listTopic) {

                    

                    reTopicDao.deleteReTopicsByTopicId(topic.getId());

                    System.out.println(topic.getId()+"删除回复成功");

                }

                topicDao.deleteTopics(Integer.parseInt(moduleId));

                System.out.println("删除主题成功");

            }

            if (moduleDao.deleteModule(Integer.parseInt(moduleId))) {

                request.setAttribute("returnMessage", "删除模块成功!");

            }

            request.setAttribute("returnMessage", "删除模块失败!");

        } else if (check != null) {

            System.out.println(check.length);

            for (int i = 0; i < check.length; i++) {

                if (check[i] != null) {

                    if (moduleDao.deleteModule(Integer.parseInt(check[i]))) {

                        List listTopic = topicDao

                                .getTopicByModId(Integer.parseInt(check[i]));

                        if (listTopic != null && !listTopic.isEmpty()) {

                            for (Topic topic : listTopic) {

                                if 

(reTopicDao.deleteReTopicsByTopicId(topic

                                        .getId()))

                                    ;

                            }

                        }

                        topicDao.deleteTopics(Integer.parseInt(check[i]));

                        request.setAttribute("returnInfo", "删除模块成功!");

                    } else {

                        request.setAttribute("returnInfo", "删除模块失败!");

                    }

                }

            }

        }

        return mapping.findForward("deleteModuleSuccess");

    }

增加版块页面是insertModule.jsp,用户输入版块类型和版块信息,点击提交,系统将数据交给ModuleAction.java 的insert方法处理,在insert方法中,将版块信息再转交给后台的ModuleDao,在ModuleDao中将版块信息插入到数据库中。如果数据库中没有这个版块的类型且插入成功,则返回1,如果有这个类型的版块则返回-1,其他情况返回0,根据返回值不同,相应的显示不同的提示信息。处理完成后,页面跳转到版块管理页面,显示系统中的所有版块信息。

ModuleAction.java的insert方法的代码如下:

public ActionForward insert(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        WebApplicationContext ctx = WebApplicationContextUtils

                .getWebApplicationContext(this.servlet.getServletContext());

        ModuleDao moduleDao = (ModuleDao) ctx.getBean("moduleDao");

        String modType = request.getParameter("modType");

        String modInfo = request.getParameter("modInfo");

        User user=(User)request.getSession().getAttribute("user");    

        Module module = new Module();

        module.setType(modType);

        module.setInfo(modInfo);

        module.setUserId(user.getId());

        int returnValue = moduleDao.insertModule(module);

        if (returnValue == 1) {

            request.setAttribute("returnInfo", "新增版块成功!");

        } else if (returnValue == -1) {

            request.setAttribute("returnInfo", "新增的版块已经存在!");

        } else {

            request.setAttribute("returnInfo", "新增失败!");

        }

        List listModule = moduleDao.getModule();

        request.setAttribute("listModule", listModule);

        return mapping.findForward("manageModule");

    }

主题管理manageTopic.jsp中有删除主题,置顶,精华帖三种功能。点击删除主题,系统将主题id传给TopicAction.java的delete方法,在delete方法中查询如果该主题下有回复,先删除主题ID为id的回复,然后将id号传给后台TopicDao,调用TopicDao的deleteTopic(int id)方法将该主题删除。

TopicAction.java的delete方法如下:

public ActionForward delete(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        // TODO Auto-generated method stub

        WebApplicationContext ctx = WebApplicationContextUtils

                .getWebApplicationContext(this.servlet.getServletContext());

        TopicDao topicDao = (TopicDao) ctx.getBean("topicDao");

        ReTopicDao reTopicDao = (ReTopicDao) ctx.getBean("reTopicDao");

        int topicId = Integer.parseInt(request.getParameter("id"));

        if (reTopicDao.getReTopicsByTopicId(topicId).size()>0) {

            if(!reTopicDao.deleteReTopicsByTopicId(topicId)){

            request.setAttribute("returnInfo", "删除主题失败!");    

            return mapping.findForward("deleteTopicSuccess");

            }

        } 

        if(topicDao.deleteTopic(topicId)){

            request.setAttribute("returnInfo", "删除主题成功!");

        }else{

            request.setAttribute("returnInfo", "删除主题失败!");            

        }

        return mapping.findForward("deleteTopicSuccess");

    }

置顶和精华帖都是根据主题id值把相应的主题的对应属性修改为1,系统返回主题管理页面。

用户管理页面是manageUser.jsp中有修改用户权限,删除用户其中,修改用户权限就只是修改用户所在的组,新用户注册后默认在普通用户组,可以由管理员修改用记的组。

5 测试与运行环境

5.1 系统测试

软件测试的目的在于在软件投入运行之前,尽可能多地发现软件中的错误,软件测试是对软件规格说明、设计和编码的最后复审,是软件质量的保证的关键步骤[15]。

系统测试一般分为模块测试、组装测试、确认测试。确认测试是软件需求说明书上的功能进行逐项检验,模块测试是查找各模块在功能结构上存在的问题。本系统采用模块测试,对系统的每个功能进行测试。

5.2 系统调试

通过测试后,发现用户注册的功能不能对输入的信息进行校验,JavaScript对输入的数据没有进行校验,通过查找源代码,发现是函数没有写对。

另外还发现了其他一些错误,经过使用打印语句输出数据处理结果的方法,也都找出了错误所在。

5.3 运行环境

(1)软件环境

操作系统必须是Windows 2000 Professional/Server,WindowsXP Professional、Windows.NET Server或以上版本;数据库使用MySql5.0.28或以上版本,JDK1.5或以上版本,Tomcat5.0或以上版本。

(2)硬件环境

内存至少为128MHZ;CPU要求为Intel Pentium 800MHZ或以上更高频率的CPU;硬盘容量要求为40G以上。

(3)安装路径

安装好MySQL数据库后,将MySQL数据库备份文件导入MySQL中,安装JDK后安装Tomcat,将工程文件bbs.jar包放在Tomcat的根目录下的webapp文件夹下,打开Tomcat服务器,在浏览器窗口输入http://localhost:8080/bbs进入系统主页面。

结  论

通过开发一个基本的基于Web的BBS系统,可扩展性很大,科学的开发过程也极有利于系统的扩充与扩展。系统现在采用的是MySQL数据库,视需要可以移植到SQL Server或者其它大中型数据库系统环境下,只需改动Spring的配置文件。系统的分析与定义都结合了现在流行的面向对象方法以及传统的MVC结构分析与设计方法。

通过这次毕业设计,我从中学到了许多新的知识,而且通过这次毕业设计,培养了我综合多门学科中的知识、迅速规划并开发出目标系统的能力,以及编程能力也有了很大的提高。另外也有许多心得体会,所谓系统开发如人生百味,酸甜苦辣皆有之。

严格按工程的方法来设计系统相当重要,不能认为基于Web的数据库管理的BBS系统很小,可以无需花太多的时间来做系统分析,甚至可以无需经过系统定义而直接进入系统编码阶段。系统分析过于简单,系统定义过于抽象,则在系统设计与编码阶段遇到的困难就越多,特别是其中若不得不做一些功能性甚至系统结构性方面的变动,将面对许多重复性的工作。在设计开发BBS论坛过程中重复工作过多,将会极大地影响系统开发的积极性,进而影响整个系统的质量。在这一点上,我体会尤深。我的体会是,系统分析越充分,系统定义越具体,那么后续的系统设计与开发工作就越有效率,且系统的质量也越有保障。

由于时间关系,BBS论坛还有好友与黑名单管理、用户组权限等几个功能没有实现,但其实现思路已经有了,像好友与黑名单管理可以在好友关系表中用不同记号标记。用户组权限只要实现它的增加、删除、查找,修改。

回顾设计开发BBS论坛的开发过程,总结起来那就是,软件的开发是相当辛苦的,但成功以后的喜悦也是非常美妙的,而且我发现,其中投入的心血越多,成功以后你所获得的快乐与充实感也更多更强。

参考文献

1 邓良松,刘海岩,陆丽娜.软件工程[M].西安:电子科技大学出版社.2004,27

2 赵光.JSP+Oracle数据库组建动态网站经典实例[M].北京:电子工业出版社.2005,80

3 程志艳,张亮,马建红.JSP实用简明教程[M].北京:清华大学出版社.2005,70

4 叶达峰.Eclipse编程技术与实例[M].北京:人民邮电出版社.2006,134

5 张桂元,贾燕枫,姜波.征服Ajax Web 2.0快速入门与项目实践(Java)[M].北京:人民邮电出版社.2006,21

6 王晓悦.精通Java-JDK、数据库系统开发、web开发[M].北京:人民邮电出版社.2007,388

7 James Gosling, Bill Joy,Guy Steele et al.The Java Language Specifictation[M]. Addison-Wesley .2006,1

8 Y.Daniel Liang.Introduction to Java programming comprehensive version[M].Upper Saddle River: N.J. Prentice Hall.2006,135

9 葛蒙,程显峰.JavaScript实践与提高[M] .北京:中国电力出版社.2002,1

10 曾春平,王超,张鹏.XML编程从入门到精通[M] .北京:北京希望电子出版社.2002,1

11 Ted Husted.Struts in Action.United States of America[M].Manning Publication Co.2003,14~15

12 王占全,苏玲.Eclipse全程指南[M] .北京:电子工业出版社.2006,297~298

13 刘乃丽.精通JavaEE项目案例[M].北京:人民邮电出版社.2008,239~241

14 王少锋.面向对象技术UML教程[M].北京:清华大学出版社.2004 21~36

15 阎菲.实用软件工程教程[M].北京:中国水利水电出版社.2006,150

致  谢

在本系统从初始设计到最终完成,经历了很长一段时间。在此之间,首先要感谢的是×××老师。在整个系统设计过程中,他在繁忙的工作中抽出时间,从立题到需求分析、总体设计、详细设计、论文的编写等各个方面都给了我耐心细致的指导,对我的帮助很大;其次要感谢周凯老师,之前,我没有实践过如此全面的全新设计流程,周凯老师的富有专业性和建设性的指导,使我很快进入课题,节省了许多宝贵的时间。我对老师崇高敬业的精神,认真负责的工作态度表示最真挚的敬意。

同时,感谢机房老师为我们提供的计算机等各种设施,让我们能够的完成毕业设计。

最后,要感谢我的同学,在我遇到困难的时候,是他们抽出时间帮我解决的。

附录  数据表

(1)  用户基本信息表(User),该表结构如表3-1所示。

表3-1 用户表

字段名类型长度是否为空是否主键备注
userIdint1用户ID

userNamevarchar20用户名
userSextinyint1用户性别0女1男

userPwdvarchar16用户密码
userEmailvarchar50用户E-mail

userQuestionvarchar30密码提示问题
userAnswervarchar30密码问题答案
userIsOpentinyint1是否公开注册信息
userRealNamevarchar20真实姓名
userBirthDayvarchar10出生日期
userFacevarchar20用户头像
userQQvarchar10QQ
userIdiographtext用户签名档
userAddrvarchar20详细地址(省+市)

userRegTimedatetime注册时间
userLoadDegreemediumint6用户登录次数
userTopicint用户发表的帖子数总和
userEliteTopicmediumint用户被推荐的精华帖子总数
userIntegralint用户积分
lastLoadIpvarchar18用户最后登录IP

postalcodevarchar6邮政编码
usertelvarchar13电话号码
group_groupIdint用户组ID

(2)模块表(Module),字段信息如表3-2所示。

表3-2 模块表

字段名类型长度是否为空是否主键备注
modIdint模块ID

modTypevarchar30论坛类型
modInfovarchar200模块介绍
modTodayNumsmallint模块一天的总主题数
modTopicNummediumint模块主题总数
modReNumint模块回复总数
isAuditboolean是否审核(false否true是)

modStatetinyint1模块状态(1 普通模块 2 会员论坛 3 嘉宾论坛 4  加密论坛 5 关闭论坛)

modPwdvarchar16加密论坛的密码
modCreTimedatetime模块创建时间
module_modIdint版块ID

user_userIdint用户ID

(3)主题回复表(retopic),字段信息如表3-3所示。

表3-3 主题回复表

字段名类型长度是否为空是否主键备注
reIdint回复帖子ID

reObjectvarchar50回复对象
reContentvarchar4000回复内容
reTimedatetime回复时间
isScreenboolean是否屏蔽false否true 是

topic_topicIdint回复主题ID

user_userIdint回复者ID

(4)主题表(topic),字段信息如表3-4所示。

表3-4 主题表

字段名类型长度是否为空是否主键备注
topicIdint主题ID

topicTitlevarchar50主题名
topicContentvarchar4000主题内容
topicHitsint主题点击数
topicElitetinyint1是否为精华帖子false 否true 是

topicToptinyint是否置顶false 否true 是

topicCreTimedatetime主题创建时间
topicIPvarchar发表者IP

restrictIntegralint积分
module_modIdint所属模块ID

user_userIdint发表者ID

(5)好友关系表(friends),字段信息如表3-5所示。

表3-5 好友关系表

字段名类型长度是否为空是否主键备注
friendsIdint关系ID

anotherUserIdint被动用户ID

relationSignint好友标记(0黑名单1好友2未确认好友)

user_userIdint主动用户ID

(6)用户组表(group),字段信息如表3-6所示。

表3-6用户组表

字段名类型长度是否为空是否主键备注
groupIdint组ID

groupNamevarchar20组名
groupDescribevarchar40组描述
(7)短信表(note),字段信息如表3-7所示。

表3-7 短信表

字段名类型长度是否为空是否主键备注
noteIdint短信ID

noteTitlevarchar45短信标题
noteContentvarchar45短信内容
noteTimetimestamp短信发送时间
noteSenerSignsmallint6发信标记(0已删除 1已读2草稿)

noteReceiveSignsmallint6收信标记(0已删除 1已读2未读)

user_SenderIdint发信者ID

user_ReceiveIdint收信者ID

(8)功能表(function),字段信息如表3-8所示。

表3-8 功能表

字段名类型长度是否为空是否主键备注
functionIdint功能ID

functionNamevarchar20功能名
functionAddvarchar20功能地址
(9)功能权限表(group_has_function),字段信息如表3-9所示。

表3-9 功能权限表

字段名类型长度是否为空是否主键备注
group_groupIdint用户组ID

function_functionIdint功能ID

(10)模块权限表(modright),字段信息如表3-10所示。

表3-10 模块权限表

字段名类型长度是否为空是否主键备注
modrightIdint权限ID

righttinyint1能否访问
module_modIdint模块ID

group_groupIdint组ID

(11)模块版主表(user_has_module),字段信息如表3-11所示。

表3-11 模块版主表

字段名类型长度是否为空是否主键备注
user_userIdint用户ID

module_modIdint模块ID

(12)积分表(integral),字段信息如表3-12所示。

表3-12 积分表

字段名类型长度是否为空是否主键备注
integralIdint积分ID

integralNumint积分
gradevarchar8积分等级

文档

BBS系统论文

通用论坛BBS系统设计与实现学生姓名×××指导教师×××专业计算机科学与技术学院计算机与信息工程2008年06月16日×××DesignandImplementationofGeneralForumBulletinBoardSystemStudent×××Supervisor×××SpecialtyComputerScienceandTechnologySchoolComputerandInformationEngineering2008-06-16毕业设计(论文)任务书姓名:×××学院:计算
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top