联系方式: 微信:biyebang QQ: 629001810
系统设计 新闻网是一个功能完善的新闻类网站,由客户前台新闻浏览和后台新闻管理两大部分组成。 l 前台功能模块 前台主要包括新闻分类、显示新闻详细信息、新闻信息查询、新闻人物投票、友情链接、提供后台登录口。 l 后台管理模块 后台主要包括后台总管理员设置及密码修改、添加管理员、管理员信息设置、新闻类型管理、新闻详细类型管理、新闻信息管理、链接管理、新闻人物管理、退出后台。 l 新闻发布系统前台功能结构,如图所示。 3.1.1需求分析 1.通过相关调查,要求网站具有以下功能; 2.通过网络,展示各行业新闻及相关信息。 3.提供新闻搜索功能。 4.设置新闻人物投票功能,并统计投票数量。 5.支持其他网站的友情链接。 6.为后台管理提供管理入口。 3.1.2可行性分析 新闻发布系统后台对新闻作了详细的分类,前台以分类形式显示新闻的详细信息,满足了人们浏览新闻网时分类查看新闻信息的要求,同时提供新闻信息查询功能,方便浏览者查找相关的新闻信息。新闻网后台则通过对总管理员设置和管理员添加等模块对网站管理员进行管理,保证了网站的安全性。 3.1.3业务用例 1.系统管理员 系统管理员拥有最高权限,负责新闻发布系统的日常运行和维护,该系统给管理员提供的主要功能有:用户管理,新闻管理,新闻栏目管理,评论管理等。系统管理员角色用例图如图所示。 已登录的用户 已登录的用户是新闻发布系统的使用者。新闻发布系统为他们提供了以下主要功能:用户登录,浏览新闻,发布评论等等。已登录的用户用例图如图所示。 3.2.1.总体业务流程图 系统的总业务流程图为:打开页面,对于每一个能够登录到本系统的人都称之为游客,游客可以浏览新闻,但是不能对其进行评论,如果需要得到更多的权限的话,游客必须先登录,如果还未注册,就要先注册,注册成功后,再进行登录。登录成功后系统会自动判断用户是否是系统管理员,如果不是管理员,就只能浏览新闻,发表评论和注销的功能,如果是管理员,就可以对新闻,新闻栏目,用户以及评论进行管理,本系统的业务流程图如图所示。 3.2.4.删除管理员时序图 系统实现 网站前台首页的运行结果如下图所示。 网站框架图说明: 区域 名称 说明 对应文件 1 网站导航 主要展示网站的旗帜广告和站内导航条 typeNewWatch.do 2 功能模块 主要用于显示导航模块中的功能 linkSelect.do 3 内容显示 主要用于显示功能模块中的内容 dateNews.do?type=今日新闻 网站后台首页的运行结果如下图所示: 网站后台首页中的各部分说明 区域 名称 说明 对应文件 1 网站导航 主要展示网站的旗帜广告和站内导航条 typeTopAction.do 2 功能模块 主要用于显示导航模块中的功能 left_main.jsp 3 内容显示 主要用于显示功能模块中的内容 right_main.jsp 新闻发布系统是利用Struts框架实现的,新闻发布系统中类的分布如下图所示。 类存放的文件夹功能如下表所示。 名称 功能 持久层(dao文件夹) 各种方法(增加、删除、修改和查询)的实现 样式层(domain文件夹) 所存放的类是Actionform类,在类中必须要继承ActionForm(也就是entends ActionForm) 服务层(server文件夹) 存放的dao层功能的业务的类 控制层(webtier文件夹) 存放在jsp页面中存在的方法实现的类 工具层(tool文件夹) 类名为JDBConnection.java(连接数据库的功能)、类名为Chinese.java(字符级转换的类)、类名为SessionLib(用来存在session变量) 5.1.1后台登陆模块设计 在新闻发布系统中,后台管理员分为两种:一个是普通管理员,他可以对新闻类型进行定义,也可以发布新闻、设置投票人数及网站链接;另一个是总管理员,他除了可操作以上功能外,还可以对普通管理员进行设置,总管理员和普通管理员都能通过后台登录页面登录后台。 在前台单击“进入后台”超链接,即可进入到后台登录页面,如下图所示。 l 管理员登陆控制层的方法: /***********ManagerCheckAction.java****************/ packagecom.victor.webtier.managerAction; //核对帐号和密码 public classManagerCheckAction extends Action { private ManagerFacade managerFacade; public ManagerCheckAction() { this.managerFacade = newManagerFacadeImpl(); } public ActionForward perform(ActionMappingactionMapping, ActionForm actionForm, HttpServletRequesthttpServletRequest,HttpServletResponse httpServletResponse) { Chinese chinese = new Chinese(); ManagerActionForm managerActionForm =(ManagerActionForm) actionForm; managerActionForm.setManagerName(chinese.str(httpServletRequest.getParameter("managerName"))); ManagerActionForm manager= this.managerFacade.managerCheck(managerActionForm); //通过对象调用方法 if (manager == null) { returnactionMapping.findForward("managerWrong"); //通过manager是空值的话,返回错误页面。 } else if(!manager.getManagerPassword().equals(httpServletRequest.getParameter("managerPassWord"))) { returnactionMapping.findForward("managerWrong");//查找的值与在jsp页面中的值不一致,返回错误页面。 } returnactionMapping.findForward("managerRight"); //查找的值与在jsp页面中的值一致,返回正确页面。 }} 5.1.2总管理员设置模块设计 总管理员在数据库中是惟一的,总管理员的信息在页面中不会显示出来,在此页面中只能修改自己的密码及对普通管理员进行设置。 用户单击“总管理员设置”超链接,进入总管理员设置页面。系统首先对用户输入的账户和密码进行核对。因为并不是所有的管理员都能够有这个权利,所以在SQL语句中应体现惟一性的条件,样式层所要调用的类是ActionForm,跟用户登录时调用的actionForm是同一个类,在这里就不做介绍了。 l 总管理员的登录操作 登录方法主要用于系统管理员进行系统维护时,作为登录后台时密码验证之用。在用户输入用户账号和密码之后,调用该方法即可验证该用户是否合法。单击“总管理员设置”超链接,进入到总管理员设置页面,实现此超链接的jsp代码如下: /******left_main.jsp******************/ <!--把超链接的jsp页面,指向框架显示出来,框架名称为mainFrame。--> <ahref="aManager/adminPassword.jsp" target="mainFrame">总管理员设置</a> 总管理员页面的运行结果如图所示。 总管理员页面所对应的jsp页面代码如下: /*********************************adminPassword.jsp******************************/ <formname="form" method="post"action="../../../adminAction.do" "> <table width="382"border="2" cellspacing="3" cellpadding="3"> <tr> <td width="110">请输入帐户:</td> <tdwidth="243"><input type="text"name="Name"></td> </tr> <tr> <td width="110">请输入密码:</td> <tdwidth="243"><input type="password"name="adminPassWord"></td> </tr> </table> <input type="submit"name="Submit" value="提交"> <input type="reset" name="Submit2"value="重置"> </form> 在上面的jsp页面代码中,action触发的是adminAction.do的方法,它与后台登录的方法相似,只是调用的SQL语句不同。 l 对管理员的查询功能 总管理员登录成功后,系统将对除了总管理员以外的所有普通管理员进行查询操作。此时页面运行结果如图10所示。 核心代码如下 public ListmanagerSelect(ManagerActionForm managerActionForm) { JDBConnection connection = newJDBConnection(); //调用连接数据库的方法 List list = new ArrayList(); //定义一个List容器的对象,去实现ArrayList()中的方法 String sql = "select * from tb_managerwhere mark='" + managerActionForm.getManagerMark() +"'"; //有条件的查询语句 try { ResultSet rs =connection.executeQuery(sql); //调用JDBConnection查询的方法 while (rs.next()) { ManagerActionForm manager = newManagerActionForm(); manager.setManagerID(Integer.valueOf(rs.getString(1))); manager.setManagerName(rs.getString(2)); manager.setManagerPassword(rs.getString(3)); manager.setManagerRealName(rs.getString(4)); manager.setManagerIssueDate(rs.getString(5)); manager.setManagerMark(rs.getString(6)); list.add(manager); //l利用对象list的add()方法把查出来的数据放在List容器中 } connection.close(); //关闭数据库 } catch (SQLException ex) { } l 修改之前的条件查询功能 在执行修改之前首先是对要修改的数据进行查询。样式层所要调用的类是ActionForm,与用户登录调用的actionForm是同一个类,在这里就不做介绍了, 结果如下图: 总管理员在修改信息之前,可以查看以前的信息,这样可以方便用户进行信息修改。 l 总结 对新闻信息管理的操作,主要应用到添加、删除、修改和查询的功能,在本小节反复的应用到这四种sql语句,只是条件上的不同,只要读者能够正确的写出sql语句,在类中的实现过程就简单了。 5.2.1今日新闻的显示模块 这个功能就是当天的新闻的查看,主要用到了sql语句中的select语句,查询的条件是以时间为主,所用到的actionForm是后台新闻中的样式层的代码。这里就不做介绍了。 l 持久层的新闻显示方法 取系统时间的方法很多,可以通过类中的java.util.Date的对象取系统时间,也可以通过sql语句中的getDate()方法取时间。具体的代码如下: 接口类: /************************ NewsDao .java****************************/ public interface NewsDao { public List dateNews(); } 实现接口类的方法: /******DeleteNewsAction.java****************************/ public class NewsDaoImpl implements NewsDao { //当天新闻的查找 public List dateNews() { JDBConnectionconnection = new JDBConnection(); NewsActionFormnewsForm = null; List list = newArrayList(); java.util.Datedatetime = new java.util.Date(); intyear=datetime.getYear()+1900; intmonth=datetime.getMonth() +1; Stringdate = "" + year + "-" + month+ "-" + datetime.getDate() + ""+00+":"+00+":"+00+""; String sql = "select * from tb_news whereIssDate between '"+date+"' and getDate()"; ResultSet rs =connection.executeQuery(sql); //执行查询的sql语句,返回到结果集中 try { while(rs.next()) { newsForm =new NewsActionForm(); newsForm.setNewID(Integer.valueOf(rs.getString(1))); newsForm.setNewTitle(rs.getString(2)); newsForm.setNewContent(rs.getString(3)); newsForm.setNewsType(rs.getString(4)); newsForm.setNewsStyle(rs.getString(5)); newsForm.setNewIssueDate(rs.getString(6)); //按顺序取字段中的数据 list.add(newsForm); } } catch(NumberFormatException ex) { } catch(SQLException ex) { } return list; } } 在查询分析器中取系统时间的方法如图19所示 l 服务层的新闻显示方法 接口类: /************************ NewsFacade.java****************************/ public interface NewsFacade { public ListdateNews(); } 实现接口类: /************************ NewsFacade.java****************************/ public class NewsFacadeImpl implements NewsFacade { private NewsDaonewsDao; publicNewsFacadeImpl() { this.newsDao =new NewsDaoImpl(); //实现的方法 } public List dateNews() { returnthis.newsDao.dateNews(); //调用持久层的方法 }} l 控制层的新闻显示方法 /************************ NewsFacade.java****************************/ package com.victor.frontStage.newsAction; import org.apache.struts.action.*; import javax.servlet.http.*; import com.victor.service.NewsFacadeImpl; import com.victor.service.NewsFacade; import java.util.List; public class DateNews extends Action { private NewsFacade newsFacade; publicDateNews() { this.newsFacade = new NewsFacadeImpl(); } publicActionForward perform(ActionMapping actionMapping,ActionForm actionForm, HttpServletRequesthttpServletRequest,HttpServletResponse httpServletResponse) { Listlist=this.newsFacade.dateNews(); //调用服务层的方法 httpServletRequest.setAttribute("listNew",list); //创建sql值对象 returnactionMapping.findForward("dateNews"); }} 通过上述的方法,在jsp页面利用<%Listlist=(List)request.getAttribute("listNew");%> 取得对象的名称,在页面中使用即可。 5.2.2输入新闻的关键字查找新闻模块 关键字查找新闻就是在文本框中输入新闻的相关内容,执行SQL语句,查找相关新闻信息,其中的下拉列表框是一个查询的动作,实现过程与前面的后台新闻相似,这里就不做介绍了。新闻查找运行结果如图20所示。 关键字查找新闻控制层代码实现如下: /****************************struts-config.xml**************/ package com.victor.frontStage.newsAction; importorg.apache.struts.action.*; importjavax.servlet.http.*; importcom.victor.domain.NewsActionForm; importcom.victor.service.NewsFacade; importcom.victor.service.NewsFacadeImpl; importcom.victor.tool.Chinese; import java.util.List; //以新闻类型和新闻题目的模糊查询进行的前台操作 public class KeyNewsWatch extendsAction { private NewsFacade newsFacade; public KeyNewsWatch() { this.newsFacade = new NewsFacadeImpl(); } public ActionForward perform(ActionMappingactionMapping,ActionForm actionForm, HttpServletRequesthttpServletRequest,HttpServletResponse httpServletResponse) { Chinese chinese = new Chinese(); NewsActionForm newsActionForm =(NewsActionForm) actionForm; String key =chinese.str(httpServletRequest.getParameter("key")); //取得新闻的关键字 newsActionForm.setNewsType(chinese.str(httpServletRequest.getParameter( "type"))); //取得新闻的类型 List list= this.newsFacade.keyNewsWatch(key, newsActionForm); httpServletRequest.setAttribute("listContent",list); returnactionMapping.findForward("keyNewsWatch"); } } 通过上述的方法,在jsp页面利用<%Listlist=(List)request.getAttribute("listContent ");%> 取得对象的名称,在页面中使用即可。 源文件
系统规划
系统功能结构图
系统分析与设计
3.1系统分析
系统设计
系统首页运行结果
4.2类的分布
系统后台主要功能模块实现
5.2 系统前台主要功能模块实现
版权所有© 帮我毕业网 并保留所有权利