毕业设计(论文)基于Web的学校新闻发布系统.doc
§1 新闻发布系统概述1. 1 基于web的新闻发布系统设计的提出伴随着网络的出现,网页逐渐融入人们的生活。快速及时的新闻浏览,五彩缤纷的网上信息,使网络与人们的生活息息相关,于是世界上又出现了第三媒体Internet。它打破了地域限制,真正使信息得以共享,改变了人们的工作和生活方式。制作网页是企业和个人的宣传自己的重要手段,同时也是学习者获取学习信息的重要手段。尤其是在教育领域,在素质教育与终身教育成为必然的今天,人们对信息的需求有了更新,更高的要求,而网页由于本身所具有的信息量大,传递快速,没有时空限制等特点恰好满足这种要求。所以网页也逐渐成为一种新兴的教育资源。也正是由于网络实现网站的数据信息能够进行实时交互,保证网站数据的实时性。随着Internet的进一步发展,静态Web站点的开发与维护变得越来越困难,一方面信息的不断增加和变化,使站点维护人员不得不经常修改他们的网页,特别是基于数据库驱动的Web站点更是如此,随着Internet上信息量的增多和交互性的加强使HTML显得越来越难以胜任。另一方面静态网页由于不能与浏览者进行有效交互,使人们感到越来越乏味,而不愿意再一次地进入同一站点。所以开发动态网页或动态内容成了越来越多的站点所追求目标。所谓动态内容是由每一个用户按照自己的需求发出请求而特殊制作的Web网页。网络发展前景无限,及早与网络结合,与信息时代同步,与高科技汇合,定会给社会各行各业的发展注入新鲜的活力。站在网络时代的前夜,我们清晰地听到了网络时代的宣言:谁掌握了网络,谁就掌握了未来。随着计算机技术的发展,网络技术对我们生活和工作显得越来越重要,特别是现在信息高度发达的今天,人们对最新信息的需求和发布迫切的需要及时性。而动态交互式网页刚好提供了这些功能,本系统就是一个能够在网上实现新闻的网上多用户发布,多栏目管理,实时的进行行为统计和记录的网上交互系统。1. 2 新闻发布系统的需求分析从经济可行性角度考虑,这时所说的经济,并不专指物质经济,当然也包括效益经济。要运行基于WEB的校园新闻发布系统,当然是必须添加一些网络及硬件设备,这也就必然比传统信息传播在物资设备方面要投入更多财力。从效益经济来看,运行这套在线新闻发布系统,不光可以省去许多信息传递时间,甚至在信息化的今天为信息及时更新,信息及时传达等带来不小的便利。综合上面论述,在线新闻发布系统的开发与设计在经济角度来说是利大于弊,是非常值得实施的。从技术可行性角度考虑,随着网络技术的深入发展,一些网络办公系统,政府服务软件,在线聊天娱乐软件等等网络应用软件也成功开发并投入运营了,在社会中产生了不小的社会与经济效益。HTML作为一种样式语言,随着Internet上信息量的增多和交互性的加强使HTML显得越来越难以胜任的情况之下,在ASP编程语言高度发展的形式下,我们开始了对新闻发布系统的开发。运用现在软件业流行的技术成熟的ASP、JSP等开发语言,以及高效率,易操作Visual InterDev等开发工具,再借鉴别人成功开发的宝贵经验,在线新闻发布系统是完全可以开发出来的。1. 3 新闻发布系统的开发环境1.3.1 硬件条件服务器两台,一台为数据库服务器,一台为Web服务器;客户端计算机若干;网络通讯设备,主要包括网卡、集线器、MODEM 等。1.3.2 系统平台采用Browser/Server体系结构,服务器端采用Microsoft Windows NT4.0作为网络操作系统,Web服务器软件采用IIS3.0(Internet Information Server)。客户端软件,包括单机操作系统和浏览器软件,分别选用Windows 2000和Internet Explorer,数据库系统采用Microsoft Access有利于方便操作。1.3.3 开发工具基于Web的系统开发工具应使开发者使用各种各样的技术来创建动态的Web应用程序,并且应是一个可视化的工具。我们采用了DreamweaverMX进行开发,它是用来快速创建数据驱动Web应用程序的基于团队的开发环境,支持ASP,以ODBC连接数据库,脚本语言为简单易学的javascript或VBScript。1.3.4 运行需求正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据完好无损,对数据的精确度、时间特性、适应性等都有一定要求,要求系统运行时能够保证正确性、可靠性、高效性、完整性、易使用性、可维护性、可测试性、复用性、安全保密性、可移植性、互联性。§2 系统总体设计2. 1 新闻发布系统功能分析2.1.1 前台新闻显示 可以根据网站的需要,进行各种方式的插入,自动更新.如显示栏目导航,显示某栏目的最新N条新闻等. 使用新闻文章管理系统制作动态网页时,可在需要的地方插入相应的代码,即可以多种形式显示新闻 文章的栏目或内容。例如:一级栏目列表、二级栏目列表、栏目导航列表、某一栏目的最新新闻(文章)显示条数、某一栏目的热门文章可任意调整。该系统也可经后继开发,使之生成JS代码,在一个主机上维护新闻文章,在其他静态网页中插入代码后显示相应的新闻文章。2.1.2 后台管理1. 新闻栏目管理:增加,修改,删除一级,二级新闻文章栏目。2新闻文章添加:按不同栏目添加新闻文章、支持文本、HTM格式或源代码显示。3新闻文章删除:删除旧的文章。4新闻文章删除:在后台管理系统中上传一些文章、 。5管理员管理:新闻管理系统的管理员设置。2. 2 新闻发布系统数据库的设计2.2.1数据库的搭建数据只有用数据库来管理才能有自动化管理的可能。数据的结构将影响整个管理机制的应用,而且一但建立以后要修改常会出现麻烦。所以一开始就要仔细慎重地搭建一个完整而合理的结构。Microsoft Access数据库相对其它的数据库来说要简单容易操作些,本新闻发布系统中的数据库文件就是Access类型的数据库,数据库中共有五张表如下图: 2.2.2新闻发布系统数据库的连接以下是本系统与数据库建立连接的ASP源代码<%On Error Resume Nextset rs=server.createobject("adodb.recordset")set conn=server.createobject("adodb.connection")DBPath = Server.MapPath("nxnews.mdb")conn.Open "driver=Microsoft Access Driver (*.mdb);dbq=" & DBPath %>2.2.3数据类型本系统的数据字典如下图表一:字段类型含义Id数值型序号Admin文本型用户名Password 文本型密码Aleave 逻辑型权限表二:字段类型含义Bigclassid 数值型一级新闻序号Bigclassname 文本型一级新闻标题Admin 文本型发布者表三:字段类型含义Id 数值型新闻序号title 文本型新闻标题Content 文本型新闻内容User文本型发布者Infotime 日期型发布时间表四:字段类型含义Pinglun Id 数值型评论序号pinglunname 文本型评论标题Pinglun data 日期型评论发表日期pingluncontent文本型评论内容表五:字段类型含义smalllclassid 数值型二级新闻序号smallclassname 文本型二级新闻标题Admin 文本型发布者2. 3功能模块图2.3.1 新闻发布系统前台模块设计图:前台系统新闻首页一级分类管理员登陆二级分类评论管理数据库访问层数据库 2.3.2 新闻发布系统后台模块设计图:后台管理 文章管理 留言管理 栏目分类管理一级栏分类管理二级栏分类管理添加.删除.修改文章删除文章修改文章添加评论修改评论查看数据库访问层数据库§3 新闻发布系统各模块功能设计3. 1前台新闻显示 可以根据网站的需要,进行各种方式的插入,自动更新.如显示栏目导航,显示某栏目的最新N条新闻等. 使用新闻文章管理系统制作动态网页时,可在需要的地方插入相应的代码,即可以多种形式显示新闻 文章的栏目或内容。例如:一级栏目列表、二级栏目列表、栏目导航列表、某一栏目的最新新闻(文章)显示条数、某一栏目的热门文章可任意调整。该系统也可经后继开发,使之生成JS代码,在一个主机上维护新闻文章,在其他静态网页中插入代码后显示相应的新闻文章。3. 2后台管理1. 新闻栏目管理:增加,修改,删除一级,二级新闻文章栏目。2新闻文章添加:按不同栏目添加新闻文章、支持文本、HTM格式或源代码显示、支持图片上传和附件上传。3新闻文章删除:删除旧的文章。4新闻文章删除:在后台管理系统中上传一些文章、上传图片等、在前台查询这些文章。5管理员管理:新闻管理系统的管理员设置。6. 基本项目管理:统计数据管理、系统初始化、网站资料管理、服务器信息等。3. 3 功能说明3.3.1前台显示说明如图所示 1. 首页的最顶部排列显示大类新闻,用户可以直接点击查看各项大类新闻里面的各项小类新闻,直到阅读每条详细信息。2. 今日导读,焦点新闻,推荐新闻,热点新闻等各个栏目,后台可以控制是否显示,或显示条数设置。3. 专题显示可以任意排序,而且可以直接点击查看相关专题新闻。4. 可以按不同条件进行新闻搜索。5. 公告栏显示最新发布的各项新闻信息,进入二级目录还可以阅读更多信息。6. 具有新闻评论功能,从首页、大小类、专题、到每条新闻,都可以有自己的评论。3.3.2管理员的管理管理员可以通过后台登陆界面登陆到系统的后台并进行管理,后台登陆页面为adminlogin.asp打开页面以后输入用户名和密码通过验证后即可进入系统,管理员进入系统后可以对已经发表的新闻进行修改,删除,和发表新的新闻等权利,除此之外管理员还可以修改管理员密码和添加新管理员。管理界面如下图:3.3.3 一级新闻管理3.3.3.1 从管理首页的大类管理进入,可以进入大类的一级目录管理界面。3.3.3.2 管理员可以任意的添加、修改、删除一级新闻,可以对一级新闻进行初始化上拉下拉等操作以及对新闻属性的各种设置。3.3.3.3 通过对一级新闻属性的设置可以使新闻在首页显示或不显示,是否以列表的形式显示在首页等。3.3.3.4一级新闻管理界面以下是一级新闻添加的部分源代码sql="select * from BigClass"rs.open sql,conn,3,3do while not rs.eofif rs("BigClassname")=typename Set rs = Server.CreateObject("ADODB.Recordset")sql="select * from BigClass"rs.open sql,conn,3,3rs.addnewrs("BigClassname")=typenamers("BigClassType")=BigClassTypeif BigClassType=0 thenrs("BigClassView")=0elsers("BigClassView")=1end ifrs("BigClassID")=howmany+1rs("BigClassmaster")="无"rs.updaters.closeset rs=nothingconn.closeset conn=nothingresponse.redirect "admin_BigClassMana.asp"%>3.3.4 二级新闻管理3.3.4.1 二级新闻管理也类似于一级新闻管理,从管理首页的二级新闻管理进入,可以进入二级新闻的一级目录管理界面。3.3.4.2 管理员可以任意的添加、修改、删除小类新闻,可以对二级新闻进行初始化上拉下拉等操作以及对新闻属性的各种设置。3.3.4.3 通过对二级新闻属性的设置可以使新闻是否以列表的形式显示在新 闻列表中。3.3.4.4 在添加二级新闻目录时,必须选种一项一级新闻目录下才能添加二级新闻目录。 3.3.4.5二级新闻管理界面3.3.5 用户管理以下是实现管理员添加的源代码:<form method=post action="admin_AdminSave.asp"> /这个form对象是指当提交添加资料时就会调用admin_AdminSave.asp这个文件把信息添加到数据库。<!-#include file="adminconn.inc" -><% if session("aleave")="" then response.redirect "adminlogin.asp" response.end end if%><html><head><title>校园新闻发布管理系统</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="./css.css" type="text/css"></head><body text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"><table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="50" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr> </table> <table width="90%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000"> <tr align="center" bgcolor="#CCCCCC"> <td width="15%" height="24"> ID</td> <td width="15%">用户</td> <td width="20%">密码(<font color="#666666">加密</font>)</td> <td width="20%">权限</td> <td width="15%">修改</td> <td width="15%">删除</td> </tr> <%Set rs=Server.CreateObject("ADODB.RecordSet") sql="select * from admin order by id" rs.Open sql,conn,1,1 while not rs.eofif rs("aleave")="super" then aleave="超级管理员" end ifif rs("aleave")="check" then aleave="普通管理员" end if%> <tr align="center" bgcolor="#FFFFFF"> <td height="22"><%=rs("id")%></td> <td><%=rs("admin")%></td> <td><%=rs("password")%></td> <td><%=aleave%></td> <td><a href="admin_AdminModify.asp?id=<%=rs("id")%>">修改</a></td> <td><a href="admin_AdminDel.asp?id=<%=rs("id")%>">删除</a></td> </tr> <%rs.movenextwendrs.closeset rs=nothing%> </table> <br><table width="300" border="0" align="center" cellpadding="4" cellspacing="1" bgcolor="#000000"> <tr bgcolor="#CCCCCC"> <td colspan="2">添加管理员:</td> </tr> <form name="add" method="post" action="admin_adminsave.asp"> <tr bgcolor="#FFFFFF"> <td align="right" height="22">管理帐号:</td> <td> <input type="text" name="admin" class="form"> </td> </tr> <tr bgcolor="#FFFFFF"> <td align="right">管理权限:</td> <td> <select name="aleave" class="input"><option value=super selected>超级管理员</option> <option value=check>普通管理员</option> </select></td></tr> <tr bgcolor="#FFFFFF"> <td align="right" height="22">管理密码:</td> <td> <input type="password" name="password" class="form"> </td> </tr> <tr bgcolor="#CCCCCC"> <td colspan="2" align="center"> <input type="submit" name="Submit" value="确 定"> <input type="hidden" name="act" value="add"> </td> </tr> </form> </table> <br> </td> </tr></table></body></html>3.3.6新闻录入管理点击管理首页的新闻添加进入新闻所属大类栏目,和小类栏目的选择,确定进入新闻内容添加界面如下图:1. 新闻添加界面设有一系列添加新闻时需要选择和填写的属性:在界面的开头显示新闻添加的位置,主要是新闻所属的大类和小类名称。2. 添加的新闻可以选择属于哪个专题,也可不属于任何专题。3. 可以注明所添加新闻的来源和作者。4. 还设有新闻编辑框,可进行可视化新闻添加,可以粘贴网页任意图片、表格、文字,就象WORD一样方便,可以选择HTML语法书写。5. 可以设定相关新闻,以及添加新闻的性质,如可以选择此新闻在焦点新闻、推荐新闻、热点新闻等首页栏目显示,并且可以使此条新闻固定的显示于最新新闻列表中。6. 添加新闻的同时可根据你的需要上传你的一个或多个图片,可以上传新闻附件。3.3.7 整体新闻管理此版快可以对所有发表过的文章进行编辑和删除其中编辑的代码为:<% if session("aleave")="" then response.redirect "adminlogin.asp" response.end end if%><%if request("no")="modi" thennewsid=request("newsid")title=request("title")BigClassName=request("BigClassName")SmallClassName=request("SmallClassName")mContent = trim(Request.form("cnWords") mContent = Replace(mContent,"<script","<sscript") mContent = Replace(mContent,"/script>","/scripts>")mContent = Replace(mContent,"/script >","/scripts>")mimageNum = Request.form("imageNum")firstImageName = trim(Request.form("editFirstImageName")user=request("user")ok=request("ok")set rs=server.createobject("adodb.recordset")sql="select * from NEWS where id="&newsidrs.open sql,conn,1,3rs("title")=titlers("content")=mcontentrs("user")=userrs("BigClassName")=BigClassNamers("SmallClassName")=SmallClassNameif ok<>"" then rs("ok") = okif mimageNum<>"" then rs("imageNum") = mimageNum if firstImageName<>"" then rs("firstImageName") = firstImageNamers.updaters.closeset rs=nothingresponse.write "<script language='javascript'>" & chr(13)response.write "alert('新闻修改成功!');" & Chr(13)response.write "window.document.location.href='admin_info.asp'"&Chr(13)response.write "</script>" & Chr(13)Response.Endend if%><%dim rsdim sqldim countset rs=server.createobject("adodb.recordset")sql = "select * from SmallClass order by SmallClassID asc"rs.open sql,conn,1,1%><script language = "JavaScript">var onecount;subcat = new Array(); <% count = 0 do while not rs.eof %>subcat<%=count%> = new Array("<%= trim(rs("SmallClassName")%>","<%= trim(rs("BigClassName")%>","<%= trim(rs("SmallClassName")%>"); <% count = count + 1 rs.movenext loop rs.close %>onecount=<%=count%>function changelocation(locationid) document.addNEWS.SmallClassName.length = 1; var locationid=locationid; var i; for (i=0;i < onecount; i+) if (subcati1 = locationid) document.addNEWS.SmallClassName.optionsdocument.addNEWS.SmallClassName.length = new Option(subcati0, subcati2); function CheckForm() document.addNEWS.cnWords.value = EditBox.getHTML(true); document.addNEWS.imageNum.value = EditBox.document.all("editImageNum").value; document.addNEWS.editFirstImageName.value = EditBox.document.all("editFirstImageName").value;if (document.addNEWS.title.value.length = 0) alert("新闻标题没有填写.");document.addNEWS.title.focus();return false;if (document.addNEWS.user.value.length = 0) alert("新闻发布人没有填写");document.addNEWS.user.focus();return false;return true;</script><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link href="./css.css" rel="stylesheet" type="text/css"><title>添加新闻</title></head><body leftmargin="0" topmargin="0" bgcolor="#FFFFEE"><% newsid=request("id")Set rso=Server.CreateObject("ADODB.RecordSet") sql="select * from NEWS where id="&newsidrso.Open sql,conn,1,1if rso.eof and rso.bof thenresponse.Write("没有记录")else%><table width="90%" border="0" align="center" cellpadding="0" cellspacing="2"> <form name="addNEWS" method="post" action="admin_infomodi.asp?no=modi" onSubmit="return CheckForm();"> <tr align="center" bgcolor="#FFFFEE"> <td height="30" colspan="2"><font color="#0000FF"><strong>修改新闻</strong></font></td> </tr> <tr> <td width="20%" height="24" align="right" bgcolor="#FFFFEE"><font color="#FF0000">*</font>新闻标题:</td> <td width="80%" valign="top" bgcolor="#FFFFEE"> <input name="title" type="text" class="input" value="<%=rso("title")%>" size="30"></td> </tr> <tr> <td height="24" align="right" bgcolor="#FFFFEE"><font color="#FF0000">*</font>新闻类别:</td> <td valign="top" bgcolor="#FFFFEE"> <%if session("aleave")="check" thenresponse.write rso("BigClassName") & "<input name='BigClassName' type='hidden' value='" & rso("BigClassName") & "'>>>"else sql = "select * from BigClass" rs.open sql,conn,1,1if rs.eof and rs.bof thenresponse.write "请先添加栏目。"else%> <select name="BigClassName" onChange="changelocation(document.addNEWS.BigClassName.optionsdocument.addNEWS.BigClassName.selectedIndex.value)" size="1"> <% do while not rs.eof%> <option <% if rs("BigClassName")=rso("BigClassName") then response.Write("selected") end if%> value="<%=trim(rs("BigClassName")%>"><%=trim(rs("BigClassName")%></option> <% rs.movenext loopend if rs.close%> </select> <%end ifif session("aleave")="check" thenresponse.write rso("SmallClassName") & "<input name='SmallClassName' type='hidden' value='" & rso("SmallClassName") & "'>"else%> <select name="SmallClassName"> <option value="" <%if rso("SmallClassName")="" then response.write "selected"%>>不指定小类</option> <%sql="select * from SmallClass where BigClassName='" & rso("BigClassName") & "'" rs.open sql,conn,1,1 if not(rs.eof and rs.bof) then do while not rs.eof %> <option <% if rs("SmallClassName")=rso("SmallClassName") then response.Write("selected") end if%> value="<%=rs("SmallClassName")%>"><%=rs("SmallClassName")%></option>