新闻发布系统规格需求说明书.docx
《新闻发布系统规格需求说明书.docx》由会员分享,可在线阅读,更多相关《新闻发布系统规格需求说明书.docx(34页珍藏版)》请在冰豆网上搜索。
新闻发布系统规格需求说明书
课程设计
(数据库系统原理)
题目
新闻发布系统
学号、姓名
Xxxxxxxxxxxxxxxx
Xxxxxxxxxxxxxxxx
二〇一〇年六月二十日
目录
第一章引言3
第二章需求分析4
2.1需求分析的任务4
2.2数据字典6
2.3数据项7
第三章概念结构设计8
3.1数据流图8
3.2前台功能图9
3.3后台功能图10
3.4E_R图11
第四章逻辑结构设计14
4.1实体所对应的表及其函数依赖14
第五章数据库的实施和维护17
5.1后台操作17
5.2前台操作20
第六章结论与体会21
参考文献22
附录22
第一章引言
现在的世界蕴含着相当大的信息量,每天的信息搜集、发布、更新都需要投入大量的人力物力。
在网络发展的新时代,越来越多的信息在网上发布,新闻作为信息的一个重要主题也不例外。
Internet的蓬勃发展,使新闻的传播方式发生了巨大的变化,传统的信息传播媒体电视、广播、报纸已经不再是人们茶余饭后的主要精神甜点,人们更多的开始关注网络新闻。
由于互联网所容纳的信息量大、内容丰富、信息及时、准确,更有相关信息的全面的介绍与比较,大大地方便了人们的阅读,因此在短短几年的时间里,互联网便济身于众多媒体之间,并具有相当一部分媒体人群。
借此东风,新闻网也迅速发展起来,它内容丰富,涉及到商业、工业、农业、银行、财政、教育、娱乐、信息等各个产业,信息量大,不仅有实事新闻,还有相关的行业信息,同时新闻网具有互联网所具备的一切特性。
在全球网络化、信息化的今天,新闻网迅速发展,大大地丰富了人们的生活,不知不觉中,它已经成为人们生活中不可或缺的重要组成部分。
这么大的信息量,如果单纯用静态网页一个一个地制作,不仅耗费人力物力,而且新闻本身的时效性也很难发挥出来。
所以动态新闻发布及管理系统的产生顺应当前形势的发展,不仅节省人力物力,也更加体现了新闻本身的时效性。
第二章需求分析
2.1需求分析的任务
新闻发布系统是一个功能完善的新闻类网站,由客户前台新闻浏览和后台新闻管理两大部分组成。
前台功能模块
前台主要包括新闻分类、显示新闻详细信息、新闻信息查询、新闻人物投票、友情链接、提供后台登录口、浏览新闻的人可对新闻进行评论。
后台管理模块
后台主要包括后台总管理员设置、管理员登陆、管理员密码修改、添加管理员、管理员信息设置、新闻类型管理、新闻详细类型管理、新闻信息管理、链接管理、新闻人物管理、增加新闻、删除新闻、退出后台。
本系统面向的对象有两个,用户和新闻发布人员。
对于用户来说,他们关心的就是新闻的浏览、新闻的搜索和新闻的评论,同时还得兼顾栏目路径信息,新闻图片信息,推荐新闻信息,新闻单击信息和新闻审核信息。
通过系统的功能分析,针对一般的新闻系统用户的需求,总结如下需求信息:
●每个新闻对应一个JSP文件;
●每个新闻只能对应一个标题包含于一个一级新闻标题中;
●每个一级新闻标题中可以包含多个二级新闻标题;
●不同的一级新闻标题下的二级新闻标题对应的关键字可以相同;
●通过网络,展示各行业新闻及相关信息。
●提供新闻搜索功能。
●设置新闻人物投票功能,并统计投票数量。
●支持其他网站的友情链接。
对于新闻发布人员来说,他们所关心的是如何对新闻分类和新闻进行添加、修改、删除。
通过以上分析针对管理员,总结处如下需求信息:
●为后台管理提供管理入口。
●新闻发布人员可以对不同新闻类型进行增、删、改;
●新闻发布人员可以对不同的新闻进行增、删、改;
●新闻发布人员发布的新闻必须审核通过后才能对用户开放;
●管理员可以对新闻进行审核;
●管理员可以对一般的新闻发布人员进行管理;
●新闻发布人员要登陆该系统必须要有合法的用户名和密码;
●新加入的新闻发布人员可以提交注册信息来进行注册;
●新闻发布人员可以修改自己的登陆密码;
●当新闻发布人员辞职后要进行用户注销;
新闻发布系统后台对新闻作了详细的分类,前台以分类形式显示新闻的详细信息,满足了人们浏览新闻网时分类查看新闻信息的要求,同时提供新闻信息查询功能,方便浏览者查找相关的新闻信息。
新闻发布系统后台则通过对总管理员设置和管理员添加等模块对网站管理员进行管理,保证了网站的安全性。
2.2数据字典
表1.1数据字典
编号
表名
代码
内容
101
User
UserInfo
记录新闻发布人员的基本信息
主要字段:
loginName,password
102
FirstLevelTitle
FirstInfo
记录新闻类别信息即一级新闻标题信息
主要字段:
Id,titleName,creator,createTime
103
SecondLevelTitle
SecondInfo
记录不同新闻信息
主要字段:
Id,titleName,creato,createTime,filePath,parentId
2.3数据项
表1.2数据项
编号
名称
属于的表
数据类型
长度
201
Id
FirstLevelTitle
SecondLevelTitle
int
3
202
titleName
FirstLevelTitle
SecondLevelTitle
nchar
100
203
creator
FirstLevelTitle
SecondLevelTitle
nchar
15
204
createTime
FirstLevelTitle
SecondLevelTitle
nchar
20
205
filePath
SecondLevelTitle
nchar
100
206
parentId
SecondLevelTitle
int
3
207
loginName
User
nchar
15
208
password
User
nchar
20
第三章概念结构设计
得到上面的数据后,就可以设计出满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。
这些实体包含各种信息,通过相互之间的作用形成数据的流动。
根据上面的设计规划的实体有:
管理员实体、新闻一级标题实体、新闻二级标题实体等。
3.1数据流图
新闻发布系统的数据流图如下:
图2_1数据流图
3.2前台功能图
新闻发布系统前台功能结构,如下图所示。
图2_2新闻发布系统前台功能图
在新闻发布系统中,后台管理员分为两种:
一个是普通管理员,他可以对新闻类型进行定义,也可以发布新闻、设置投票人数及网站链接;另一个是总管理员,他除了可操作以上功能外,还可以对普通管理员进行设置,总管理员和普通管理员都能通过后台登录页面登录后台。
3.3后台功能图
新闻发布系统后台功能结构,如下图所示:
图2_3新闻发布系统后台功能
3.4E_R图
实体之间的E_R图如下:
图2_4实体关系的E_R图
下面是不同单个实体的E_R图,
管理员实体的E_R图如下:
图2_5管理员实体E_R图
一级新闻标题实体E_R图如下:
图2_6一级新闻标题实体E_R图
二级新闻标题实体E_R图如下:
图2_7二级新闻标题实体E_R图
第四章逻辑结构设计
数据库的概念结构设计完毕后,现在可以将上面的数据库概念结构转换为SQLServer2005所支持的实际数据模型,也就是数据的逻辑结构。
系统数据库名称为news。
数据库news中包含如下几张表。
4.1实体所对应的表及其函数依赖
管理员所对应的表如下:
表3_1管理员表
字段名
类型
长度
Null
注释
默认值
loginName
nchar
15
否
主键,
用户名
无
password
nchar
20
否
密码
无
根据此表得出的函数依赖如下图所示:
图3_1管理员表中的函数依赖
由图3_1可知,此关系模式属于4NF。
该关系模式非常简单并且不存在:
部分函数依赖、传递函数依赖、多值依赖等。
在此关系模式中常做的操作主要有:
用户的注册、用户的注销、用户修改密码等,
并不涉及连接运算,故此规范化程度很适合此关系模式。
新闻一级标题所对应的表如下:
表3_2新闻一级标题表
字段名
类型
长度
Null
注释
默认值
ID
int
3
否
主键,一级新闻标识
无
TitleName
nchar
100
否
唯一,一级新闻标题
无
Creator
nchar
15
否
发布人姓名
管理员
CreateTime
datetime
20
否
发布时间
getDate()
由一级新闻标题表得出的函数依赖关系图如下:
图3_2新闻一级标题表中的函数依赖
由图3_2可知,新闻一级标题关系模式中的依赖关系有:
完全函数依赖,存在传递函数依赖,消除了部分函数依赖,故此关系模式属于2NF。
在此关系模式中常做的操作主要有:
一级新闻标题的发布、一级新闻标题的删除、一级新闻标题的修改等,2NF有效的控制了插入异常、删除异常和修改的复杂性。
故此规范化程度很适合此关系模式。
新闻二级标题所对应的表如下:
表3_3二级新闻标题表
字段名
类型
长度
Null
注释
默认值
id
int
3
否
主键,
二级新闻标识
无
titleName
nchar
100
否
唯一,
二级新闻标题
无
creator
nchar
15
否
发布人姓名
管理员
createTime
datetime
20
否
发布时间
getDate()
filePath
nchar
100
否
新闻位置
无
parentId
Int
3
否
外键,所属一级新闻标题的Id
无
由二级新闻标题表得出的函数依赖关系图如下:
图3_3新闻二级标题表中的函数依赖
由图3_3可知,新闻二级标题关系模式中的依赖关系有:
完全函数依赖,存在传递函数依赖,消除了部分函数依赖,故此关系模式属于2NF。
在此关系模式中常做的操作主要有:
二级新闻标题的发布、二级新闻标题的删除、二级新闻标题的修改等,2NF有效的控制了插入异常、删除异常和修改的复杂性。
故此规范化程度很适合此关系模式。
第五章数据库的实施和维护
数据库的实施阶段包括两项重要工作,一项是数据的载入,另一项是应用程序的编码和调试。
5.1后台操作
当管理员用户注册时,向数据库中载入数据,其过程如下:
图5_1注册界面图
当输入了正确的用户名和密码后,点击提交按钮,弹出下图所示的提示信息,即可将数据写入相应的管理员表中。
图5_2提示信息图
用户如果想要进入后台的管理系统对新闻进行管理,还必须要通过登陆页面进行登陆,已经注册过的用户可以直接通过如下图页面进行登陆:
图5_3登陆页面图
当输入了用户名和密码后,系统就会在后台的数据库中进行查询该用户是否为合法的用户,如果不是经过注册的合法用户,那么就无法进入后台管理系统,仍然显示该页面,如果是注册过的合法用户就可以进入后台的管理系统,进行新闻发布,发布页面如下图所示:
图5_4新闻发布系统后台页面图
当用户感觉自己的密码不安全时可以进行修改密码,用户填完了新的密码信息后,点击提交按钮,系统就会在后台的数据库中进行更新该用户的密码,修改密码的页面如下图所示:
图5_5用户修改密码的页面图
当用户不再使用该用户名时,可以通过用户注销页面进行用户注销,注销时,系统会执行SQL语句:
deletefromUserwhereloginName=?
,之后该用户就被从数据库中删除。
5.2前台操作
新闻发布系统的前台界面如下:
图5_6前台界面图
当用户点击左边分类的新闻后,在右边会列出相应的二级标题,再点击二级标题后,就会弹出管理员发布的相应的新闻网页。
第六章结论与体会
通过这次设计,我们受益非浅,亲身体验了数据库设计的全过程,在实践中了解了数据库系统设计的步骤、流程以及思路,增长了在数据库设计方面的见识,我们深刻认识到以前所学的基础课程的重要性,也使我们掌握了很多新知识,特别是一些课本之外的知识,体会到了理论知识和实践相结合的重要性。
经过一个多月的设计和开发,数据库系统设计基本上完成。
其功能基本符合要求,此系统尚未实现课程设计任务书中所要求的部分功能,并在一定程度上按照自己的思路进行了补充。
课程设计中有很多不尽如人意的地方还没来得急解决,比如,逻辑结构设计部分做得还不是很好,只能说是完成了这个部分,这是因为自己对逻辑结构设计部分的真正了解还不够,很多问题要在以后的系统维护中,来慢慢发现,并将其解决。
最后,感谢老师在课程设计的过程中对我们的帮助。
在整个课程设计过程中,我们得到了申老师的悉心指导和大力支持,使我们的专业知识有了很大的提高。
老师在工作中认真负责对学生的关心爱护,都是我们在以后的学习和工作中的榜样。
参考文献
数据库系统概论(第四版)王珊萨师煊高等教育出版社
SQLServer数据库开发精粹徐国智汪孝宜电子工业出版社
JSP&ServletWeb2.0应用开发彭一明张丽伟刘子乾机械工业出版社
附录
新闻一级标题类:
packageentity;
importjava.util.Date;
publicclassFirstLevelTitle{
privateintid;//新闻Id
privateStringtitleName;//新闻一级标题名
privateStringcreator;//新闻一级标题创建者
privateDatecreateTime;//新闻一级标题创建时间
publicFirstLevelTitle(){
}
publicFirstLevelTitle(intid,StringtitleName,Stringcreator,
DatecreateTime){
this.id=id;
this.titleName=titleName;
this.creator=creator;
this.createTime=createTime;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetTitleName(){
returntitleName;
}
publicvoidsetTitleName(StringtitleName){
this.titleName=titleName;
}
publicStringgetCreator(){
returncreator;
}
publicvoidsetCreator(Stringcreator){
this.creator=creator;
}
publicDategetCreateTime(){
returncreateTime;
}
publicvoidsetCreateTime(DatecreateTime){
this.createTime=createTime;
}
}
新闻二级标题类:
packageentity;
importjava.util.Date;
publicclassSecondLevelTitle{
privateintid;//新闻Id
privateStringtitleName;//新闻一级标题名
privateStringcreator;//新闻一级标题创建者
privateDatecreateTime;//新闻一级标题创建时间
privateStringfilePath;//文件路径
privateintparentId;//二级新闻标题所属的一级新闻标题的Id号
publicSecondLevelTitle(){}
publicSecondLevelTitle(intid,StringtitleName,Stringcreator,DatecreateTime,StringfilePath,intparentId){
this.id=id;
this.titleName=titleName;
this.creator=creator;
this.createTime=createTime;
this.filePath=filePath;
this.parentId=parentId;
}
/**
*@returntheid
*/
publicintgetId(){
returnid;
}
/**
*@paramidtheidtoset
*/
publicvoidsetId(intid){
this.id=id;
}
/**
*@returnthetitleName
*/
publicStringgetTitleName(){
returntitleName;
}
/**
*@paramtitleNamethetitleNametoset
*/
publicvoidsetTitleName(StringtitleName){
this.titleName=titleName;
}
/**
*@returnthecreator
*/
publicStringgetCreator(){
returncreator;
}
/**
*@paramcreatorthecreatortoset
*/
publicvoidsetCreator(Stringcreator){
this.creator=creator;
}
/**
*@returnthecreateTime
*/
publicDategetCreateTime(){
returncreateTime;
}
/**
*@paramcreateTimethecreateTimetoset
*/
publicvoidsetCreateTime(DatecreateTime){
this.createTime=createTime;
}
/**
*@returnthefilePath
*/
publicStringgetFilePath(){
returnfilePath;
}
/**
*@paramfilePaththefilePathtoset
*/
publicvoidsetFilePath(StringfilePath){
this.filePath=filePath;
}
/**
*@returntheparentId
*/
publicintgetParentId(){
returnparentId;
}
/**
*@paramparentIdtheparentIdtoset
*/
publicvoidsetParentId(intparentId){
this.parentId=parentId;
}
}
管理员类:
packageentity;
publicclassUser{
privateStringloginName;//用户名
privateStringpassword;//密码
/**
*@paramloginName
*@parampassword
*/
publicUser(StringloginName,Stringpassword){
this.loginName=loginName;
this.password=password;
}
publicUser(){
}
/**
*@returntheloginName
*/
publicStringgetLoginName(){
returnloginName;
}
/**
*@paramloginNametheloginNametoset
*/
publicvoidsetLoginName(StringloginName){
this.loginName=loginName;
}
/**
*@returnthepassword
*/
publicStringgetPassword(){
returnpassword;
}
/**
*@parampasswordthepasswordtoset
*/
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
数据处理的相关类:
连接管理类:
packagedao;
importjava.sql.*;
publicclassConnectionManager{
//建立连接
publicstaticConnectiongetConnection(){
Connectioncon=null;
try{
//加载驱动类
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
try{
//建立连接数据库
con=DriverManager.getConnection("jdbc:
odbc:
news","","");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock