新闻发布系统

新闻发布管理系统设计与实现
访问:https://www.aiwave.site/ 可以免费领取这篇论文对应的原文和代码
摘 要

本新闻发布管理系统是针对目前新闻发布的实际需求,从实际工作出发,对过去的新闻发布管理系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前最流行的B/S结构和java中流行的MVC三层设计模式和myeclipse编辑器、MySQL数据库设计并实现的 。本新闻发布管理系统主要包括系统用户管理模块、校内新闻管理模块、校外新闻管理模块、体育新闻管理模块、用户菜单模块、退出模块和后台管理系统等多个模块。它帮助新闻发布管理实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了新闻发布管理数据资源,有效的减少了新闻发布管理的经济投入,大大提高了新闻发布管理的效率。

关键词:新闻发布管理;MVC模式;MySQL数据库

ABSTRACT

This news release management system is aimed at the actual needs of the current news release, starting from the actual work, the past news release management system problems are analyzed, combined with the structure, concept, model, principle, method of the computer system, in the case of various advantages of the computer, the use of the most popular B/S structure and Java in the popular MVC three-layer design mode and myeclipse editor, MySQL database design and implementation. This news release management system mainly includes multiple modules such as system user management module, on-campus news management module, off-campus news management module, sports news management module, user menu module, exit module and background management system. It helps the news release management to achieve informationization, networking, through testing, to achieve the system design goals, compared to the traditional management mode, the system reasonable use of news release management data resources, effectively reduce the economic investment of news release management, greatly improve the efficiency of news release management.

key words:news release management system; The MVC pattern; Essentially a database

[]{#_Toc6289 .anchor}目 录

ABSTRACT II

目 录 IV

第1章 绪论 1

1.1开发背景意义 1

1.2研究内容 1

第2章 主要技术和工具 1

2.1 JSP语言 1

2.2 MySQL数据库 1

2.3 jsp技术 2

2.4MVC模式 3

第3章 系统分析 1

3.1可行性分析 1

3.1.1经济可行性 1

3.1.2技术可行性 1

3.1.3操作可行性 1

3.2需求分析 1

3.3业务流程分析 2

3.4数据流程分析 2

第4章 系统设计 4

4.1系统结构设计 4

4.2功能模块设计 5

4.3数据库设计 6

4.3.1数据库设计概述 6

4.3.2概念设计 6

4.3.3表设计 6

第5章 系统实现 10

5.1基本任务 10

5.2登录模块的实现 10

5.2.1首页实现 10

5.2.2管理员后台登录 11

5.3用户模块的实现 12

5.3.1需求管理模块的实现 12

5.4管理员模块的实现 13

5.4.1用户管理模块的实现 13

5.5.2工作人员模块的实现 14

第6章 系统测试 16

6.1测试目的 16

6.2测试概述 16

6.3单元测试 16

6.3.1注册测试 16

6.3.2登录测试 17

6.4集成测试 18

第7章 总结 19

致 谢 20

参考文献 20

第1章 绪论

1.1开发背景意义

随着信息化技术开始逐渐发展,计算机应用技术逐渐体现出优势来。接着,大量的电脑进入了千家万户,企事业单位、高校、机关等部门。信息化时代逐渐来临,新闻发布管理成为互联网时代下媒体管理的核心内容。随着现代新闻发布的快速发展,可以说新闻发布管理已经逐渐成为现代新闻发布管理过程中最为重要的部分之一。但是一直以来我国传统的新闻发布并没有建立一套完善的行之有效的新闻发布管理系统,传统的新闻发布管理已经无法适应高速发展,无论是从效率还是从效果来看都远远的和预计相差甚多,可以断言,传统的新闻发布管理模式已经不再适应,甚至已经拖累了发展。因此,需要一个操作方便,高效的管理体系。本次系统开发,主要以新闻发布管理为对象,根据需求来完成功能设计[1][2]

1.2研究内容

  1. 不同用户的登录问题:根据用户的类别(超级管理员、普通用户)实现用户操作权限的区分并显示不同的操作界面。

  2. 数据库的连接问题:数据库连接为系统中的关键技术。

  3. 数据的一致性和安全问题:本系统必须保证数据的一致性和安全,才能实现有效的管理。不能让没有权限的用户对数据进行操作并且定期对数据库进行备份。

  4. 界面开发:系统界面的设计很重要,要使界面具有亲和力。

  5. 分析新闻发布管理化现状;

  6. 研究新闻发布管理系统的现状及存在的问题;

  7. 研究系统平台的总体架构、总体设计、数据库设计、数据库安全设计及功能设计;

  8. 研究平台各个子系统的功能及实现的方法、信息技术的融合、信息安全技术的维护;

  9. 进行新闻发布管理系统的功能设计。

第2章 主要技术和工具

2.1 JSP语言

本系统的开发主要用JSP(Hypertext Preprocessor,超文本预处理器)这一门开发语言。作为开发语言,这是一种通用的开源脚本语言。这种语法主要是将C语言、Java和Perl等语言的相关特点进行总结吸收形成自身特点,使得更加方便学习,当前广泛在Web领域进行使用。此语法的独特之处在于将C、Java、Perl这三种语言进行了归纳,并创新出JSP具有自己特点的语法。它在执行动态网页方面相对于CGI和Perl语言更加高效。用动态页面如果是使用JSP语言,那么相对于其它的编程语言,JSP的执行主要是体现在将程序嵌入到HTML文档中,相对于其它语言,其执行的效率一般都领先于其它的语言。此外,JSP编译后代码方面也是做得比较好的,一般其编译能够使代码的运行速度比一般语言都要快[7][8]。

其主要特性有以下几个方面:

1)免费性

和其它技术相比,JSP本身免费且是开源代码。

2)快捷性

使用JSP编程的程序一般开发比较快,而且系统运行也比较快,也易于学习[2]。嵌入于HTML的这种方式,使其相对于其它开发语言编辑起来相对简单,实用性也更加强,对初学者是比较适用的。

3)跨平台性强

由于JSP是运行在服务器的脚本,可以运行在UNIX、LINUX、WINDOWS、MacOS、Android等平台

4)效率高

JSP占用相当少的系统资源。

JSP是面向对象且独立于架构的动态脚本语言,使用JSP和HTML编写WEB页面,JSP服务器先对页面的JSP代码进行解析,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器。JSP是一种源代码开放程序,拥有很好的跨平台兼容性。JSP代码可以在Window系统以及许多版本的linux系统上完美运行。

JSP语言是不需要任何特殊的开发环境的,所以用户可以直接在WEB页面中输入JSP命令代码。在WEB页面中,所有的JSP代码都被放置在"<?JSP"和"?>"中。

2.2 MySQL数据库

目前在国际上比较流行的数据库管理系统当中,主要有ORACLE、MySQL、SYBASE、MySQL、DB2等。MySQL2008版本具有MySQL Server 7.0版本的所有优点,并在此基础上添加很多更先进的功能,从而更加方便使用、更好的伸缩性,集成度高。由于是微软的产品,因此MySQL Server 2008在兼容性可以与微软的其他相关产品进行很好的适应和结合,可以跨越Microsoft Windows 2008到Microsoft Windows 98等多种平台。

MySQL的T-MySQL支持ANSI MySQL-92标准,是结构化查询语言MySQL的一种。MySQL Server在身份验证上主要采用以下方式:登录验证、数据库用户帐号许可验证、二级安全验证等等。且在同一时间支持MySQL Server验证和Windows NT验证两种模式。

微软的MySQL Server是较为完善的C/S系统。MySQL Server需要Windows NT平台,而Windows NT可以支持Intel 386,Power PC,MIPS,Alpha PC和RISC等平台,它使MySQL Server具备非常完美的功能。

MySQL Server 2008中具有失败转移集群和数据库镜像技术,失败转移集群和数据库镜像技术可以确保企业向员工、客户和合作伙伴提交的应用系统高度可靠和可用。微软的MySQL Server 2008在设计的时候引入了一套集成管理工具和管理应用编程接口(APIs),对企业提供易用性、可管理性和对大型MySQL Server配置的支持。由于采用了数据库加密、相比以前版本更加安全的默认设置、对密码政策和安全模型进行了加强以及实行了许可化控制的细化,使得企业在运用MySQL Server 2008对数据进行管理时能提供安全级别非常高的功能。

2.3 jsp技术

web 的服务平台jsp是由Microsoft创建的。这个平台最主要的功能就是可以把信息、人和设备用一种规范的,具有个性化的方法连接起来。

对于微软来说,jsp技术是它的一个终极梦想,可以用这个技术实现以前完全完成不了的功能,这是一次跃进。今后,无论什么时刻,任意地点我们都可以在任何设备上进行互联信息交互网。在以后会在世界形成一个巨大的全球互联网的终端设备和服务中心,将会随时成为每个人的智能型助手。到那时哪怕你没有闲暇的时间去处理信息分析访问,或者说不需要访问的信息分析,一旦它得到指令,就会自主的查找相关知识智能化集成处理,更高效的处理我们交代的"使命"[9][10]。

(1)JSP Framework的两个组件

JSP框架具有两个不同的元素:包以及框架的软件开发包(SDK)。

当然若是要单纯的要运行jsp程序,我们完全没必要开发jsp应用程序。我们只要在安装发型包组件这里下功夫。因为jsp Framework在发行包上没有进行过编译,所以最后它只能编译JSP应用程序。

(2)框架的特点

JSP框架的两个主要特点:跨平台和语言。

(a)跨平台

JSP框架程序能够随意跨越操作系统平台和硬件环境,不管在哪台电脑上只会编写一遍。

(b)跨语言

. JSP框架里面一种共同的语言系统(CommonLanguageSystem ,称为CLS)。规定了许多标准化的jsp Framework数据种类。

Web应用程序可以用JSP研发出来。现在已然变成了互联网全新一代Web应用程序开发工具之一,一般的编程代码的人员已经慢慢的开始接受、使用它了。

(3)JSP概述

JSP由微软于1996年11月推出的Web应用技术的发展。不单单可以看作是一个全新的框架,并且我们在工作当中能采纳任何产品的制备和应用程序代码,生成高效、动态、交互的vbscript、javascript应用镶嵌到HTML当中。

(4)JSP的特点

(a)代码逻辑和显示页面分离

JSP包含程序和美工两个部分,文件从头到尾html标签和<%%>代码交错。通常,编程员按照以前所计划的开始编写代码,接着是美工按照设计页面和编程员讨论该用哪种布局页面最为合适,最后编程员把设计镶嵌进程序。

(b)编译运行

我们采用了一种虚构的编程框架,把VBScript和JavaScript作为编程语言,如果发现操作系统挪用了JSP源代码一次,那么我们肯定正在访问某个页面。

(c)缓存

由于JSP的缓存基本上没有,通常只能修改数据库来提高性能。并介绍了缓存的概念,一个高速缓存页的一页当中,对一些参数的控制和缓存的页缓存,缓存里的数据可以在最大水平上,帮助我们克服这个难题。

(d)代码隐藏

编码后生成的代码更易于编写,具有更直观的布局,大大削减了开发和维护系统的困难性以及制作成本 。

(5)JSP的关键技术

(a)WebForm

Form(表单)是一个包含不同类型和种类的容器控件,控件必需直接或间接地连接。

(b)Web Service

Web Service是Web服务调用其他Web服务方法。简而言之,是你的网站可以利用其他网站的资源[11][12]。

2.4MVC模式

MVC是一个框架模式,有三个核心部件,即模型(Model)、视图(View)和控制器(Controller)。模型表示应用程序核心,视图表示显示数据,控制器表示处理输入。它们各自处理自己的任务,将业务逻辑和数据显示分离,便于代码的重用。

第3章 系统分析

3.1可行性分析

本文系统将会分别从经济的可行性,技术的可行性以及操作的可行性等方面进行全面的可行性的分析。

3.1.1经济可行性

由于系统开发的工具和软件都是可以免费使用的,因此系统开发的费用很少,甚至只需要少许的费用就可以开发出本系统,也可以忽略不计;再加上通过系统的实施可以提高用户文件的私密性,最大程度的保护用户的信息安全,因此,从这些方面就可以说经济上是可行的 [14][15]

2.测试的方法

测试方法主要有人工测试和机器测试。

(1)人工测试

人工测试又称代码复审,包括个人复查、走查、会审三种方法[7]

(2)机器测试

机器测试主要是由黑盒测试和白盒测试两种方法。

在最后的测试阶段,系统采用后黑盒测试和白盒测试想结合的方法。黑盒测试主要用于对系统的输入和输出特性进行测试,检测功能方面存在的错误与可能存在的缺陷。白盒测试主要用于对软件的过程及逻辑路径进行测试,发现性能方面的错误。具体采用的测试方法为系统测试和单元测试。

3.1.2技术可行性

技术的可行性是指在当今所拥有的技术条件之下,计算机软件和硬件的发展能否够满足发展的要求。由于本系统开发基于java语言,在一般的计算机上就能够满足开发本系统所需要的软硬件条件;因为它占用的内存本来就相对较少,我们用MySQL Server数据对软件的开发以及设计在理论上没有问题的原因是:它占用的内存实在是太少了。

系统设计的主要意义在于,一方面,对于新闻发布来讲,系统上线后可以带来很大的便利性,新闻发布管理属于非常细致的管理模式,要求数据量大,计算机管理可以提高精确性,更为便利的就是信息的查询,大大的提高了工作效率,改善了管理质量;另一方面,通过系统的设计,自己对软件设计有了更加深入的了解,并且产生了浓厚的学习兴趣,在对问题分析方面有了独特的方式,是进入社会之前一次很好的锻炼机会

3.1.3操作可行性

作为当今大部分用户来讲,都是受过良好教育,具有高素质的人才,都能十分容易的使用电脑进行各种操作,是以本文在开发设计上使用java技术进行设计的新闻发布管理系统,其操作是完全可行的。

通过上述分析,可以确定该系统具有实际开发的价值和可能性。

3.2需求分析

针对现存的问题和需要,通过功能需求的分析,特建立了数字化、信息化的新闻发布管理系统。

本系统主要包含了用户管理、系统管理多个功能模块。下面分别简单阐述一下这几个功能模块需求。

管理员的登录模块:管理员登录系统对本系统其他管理模块进行管理。

用户的登录模块:用户登录本系统,对个人的信息等进行查询,操作可使用的功能。

用户注册模块:游客用户可以进行用户注册,系统会反馈是否注册成功。

添加管理员模块:向本系统中添加更多的管理人员,管理员包括普通管理员和超级管理员。

系统管理列表:将数据库的商品表以列表的形式呈现给管理员。

添加系统管理:实现管理员添加需求服务,应该包括需求服务。

修改系统管理:实现管理员修改需求服务,包括修改需求服务。

工作人员管理模块:

工作人员列表:将数据库的商品表以列表的形式呈现给管理员。

添加工作人员:实现管理员添加工作人员,应该包括工作人员。

修改工作人员:实现管理员修改工作人员,包括修改工作人员。

用户模块:

资料管理:用户登录本系统。可以对自己的个人主页进行查看。

系统信息:用户可以查看自己的系统提示信息。

修改资料:用户可以修改自己的账号密码。

信息搜索:用户可以通过关键字搜索站内信息。

密码修改:用户可以修改个人登录密码。

系统管理模块:包括数据备份。

退出模块:

管理员退出:管理员用来退出系统。

用户退出:用户用来退出系统。

3.3业务流程分析

总体业务流程:以用户的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,根据不同角色的用户,使用系统时,判断不同的菜单,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用系统,管理系统等功能操作。

3.4数据流程分析

数据流图的简称为DFD,是通过使用图形的方法对系统所具备的逻辑功能进行阐述,描述系统数据的流向和逻辑变换。由于该方法能将难以阐述的问题进行表述,因此被开发者广泛应用,是当前应用范围较为广泛的结构化系统分析方法。

零层数据流程是流程中最抽象的一层,它包括了用户注册与登录管理、用户功能管理和检索维护管理等功能模块,在登录注册模块使用到的数据存储有用户账户信息文档、用户信息文档,用户功能管理模块需要的存储是用户动态信息文档、图片信息文档,检索维护是通过以上这些文档信息通过关键词进行搜索。

1层数据流图中,数据实体包括普通用户和管理员,普通用户数据流程包括功能选择、日常费用管理、变幻图管理、;管理员用户数据流程包括需求服务管理、日常费用管理、系统管理;普通用户数据流包括操作信息、添加信息、浏览信息;管理员数据流包括添加信息、删除信息、修改信息、查询信息、浏览信息、提示信息等。

2层为管理员操作后台数据流图,管理员可以分别通过添加、修改和删除来对系统进行管理,如下图所示。

系统的2层数据流图如下图所示。

[图片上传失败...(image-8a48fe-1757488492417)]

图3-4系统数据流图(2层)

第4章 系统设计

4.1系统结构设计

系统流程图如下所示:

C:/Users/yuanxin/AppData/Local/Temp/wps.noQsZEwps

系统主要是分为管理员端设计与用户端设计。用户端模块主要是系统中普通用户在注册、登录系统可以看到自己的基本信息,维护自己的信息;管理员端模块主要是管理员登录后对整个系统相关操作进行处理,可进行管理员的添加和删除,可对系统中的用户进行管理。

用户登录流程图如下所示:

[图片上传失败...(image-a851cc-1757488492418)]

4.2功能模块设计

  1. 注册模块:游客用户可以系统进行账号注册,账号注册需要输入的数据,有用户名、密码、确认密码、邮箱、qq等,提交注册信息后,系统通过js代码判断用户输入的注册数据是否符合规格,如果符合规格后,在系统数据库中新增一个用户记录,为了安全性,使用md5加密算法完成密码的加密,然后存储数据库。

  2. 登录模块:在用户登录过程中,包含用户名、密码和验证码,系统需要先对验证码进行正错判断,若用户登录使用了验证码,则用户登录时除了需要输入用户名和密码外,还要输入验证码。在判断验证码为正确后,判断用户名及密码,由于用户密码是用MD5加密过的,所以在对用户密码判断时应先对密码进行MD5转换后再进行判断,当用户名或密码不正确时,返回登录页面显示错误信息。

  3. 系统管理模块:用户发布需求服务,需求服务存储在需求服务表中,用户点击需求服务发布,进入需求服务页面,提交需求服务后,管理员审核用户添加的需求服务,并管理。

3工作人员信息管理模块:网站用户信息管理、新闻分类信息管理、新闻内容信息管理、用户评论信息管理、提示问题信息管理、意见反馈信息管理。

4.3数据库设计

4.3.1数据库设计概述

数据库的设计在这一套开发系统中扮演者非常重要的角色,完善的数据库建立可以让其更快的完成项目。整个数据库的创建是库存管理系统开发和创立的核心技术,概括的说,就是根据用户的需求创立起满足用户的需要的数据库。数据库的整体设计是在软件开发是其最主要的问题。

再考虑到数据库设计的时候,我们首先应该想到把这个系统的数据设计和处理设计密切结合起来,从而使得把整个库存信息管理系统相结合起来。

以前采用手工整理的方法来对信息结构复杂,应用环境多样的数据进行整理。使用这种过时方法与整个数据整理人员的水平是紧密相关的,经验多的人则失误少,反之,则出现的错误会多。数据库设计是被认为是一项技巧而不是他人眼中工程项目,缺少正确的理论知识和合适的解决方法的支持。因为在交付运行了一段时间之后总有些莫名其妙的问题发生,使这个软件系统的质量很难得到保障从而导致出现了很多的损失。以是只有采取新的数据库管理方式才能更好的解决这些根本性的问题。近些年来,人们不断的探索和挖掘数据库其中的奥妙,以便更快更好地运行整个系统。

4.3.2概念设计

一个完整的数据分析过程与这个数据库的逻辑结构和物理结构有十分密切的联系,我们需要一系列操作来完成对应用数据库所使用的信息进行确认、编纂、组织、挑选。我们可以采用特定的方法来获取有关用户的所有的有效信息,从而使这些有用信息可以直接成为数据库的重要数据。

我们在数据库分析中采用E-R图来建立相对应的关系,它有实体、关系、属性三种概念。实体可以说是一个用来维持和不断利用数据的大集合;属性可以说是这个物体的所具有的特点;关系很明显指的就是每个数据实体之间的种种联系,关系给各个实体之间建立起了相对应的模型。

4.3.3表设计

1. 建立最符合客户需求的数据库计划。

2. 对数据库进行规范化处理,避免一些不必要的错误。

3. 数据库完整性。

4. 每个用户权限的要求。

5. 应用程序的性能需求,设计数据库时必须利用MySQL中的各个功能来维持运行。

6. 数据库定期的维护。

在服务器上建立名为jspmygjjxthsg4242AEY3的数据库,其中包括以下表:

admin表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 adminid varchar 4 自增编号 10
2 username VarChar 50 255
3 password VarChar 50 255
4 realname VarChar 50 255
5 contact VarChar 8 23
6 addtime VarChar 8 23

article表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 articleid VarChar 4 自增编号 10
2 title VarChar 50 255
3 bannerid VarChar 300 255
4 image VarChar 8 23
5 istop VarChar 300 255
6 isflv VarChar 300 255
7 contents VarChar 300 255
8 addtime VarChar 300 255
9 hits int 300 255

asks表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 asksid VarChar 4 自增编号 10
2 question VarChar 50 255
3 addtime VarChar 16 255
4 memo VarChar 50 255

banner表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 bannerid VarChar 4 自增编号 10
2 bannername VarChar 50 255
3 addtime VarChar 2 255
4 memo VarChar 50 255

complains表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 complainsid VarChar 50 255
2 usersid VarChar 300 255
3 title VarChar 50 255
4 contents VarChar 50 255
5 addtime VarChar 50 255
6 status VarChar 8 23
7 reps VarChar 50 255

fav表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 favid VarChar 50 255
2 usersid VarChar 50 255
3 articleid VarChar 50 255
4 addtime VarChar 50 255

topic表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 topicid VarChar 300 255
2 usersid VarChar 50 255
3 articleid Text 16 255
4 contents VarChar 50 255
5 addtime VarChar 50 255

users表:

序号 字段名称 字段类型 大小 允许为空 最大长度 备注
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 usersid VarChar 50 255
2 username VarChar 50 255
3 password VarChar 8 23
4 realname VarChar 50 255
5 sex VarChar 50 255
6 birthday VarChar 50 255
7 contact VarChar 50 255
8 asksid VarChar 50 255
9 answer VarChar 50 255
10 regdate VarChar 50 255

第5章 系统实现

5.1基本任务

系统实现阶段的根本目标在这个阶段的设计工作中精确地描述出目标系统,从而在编码阶段可以直接根据这个描述翻译成用程序语言编写的系统。

系统结构可分为src的java源代码,database文件夹为系统的数据库文件,webroot为系统的界面代码文件。Src文件夹里面包含control包、dao包、util包,dao包为逻辑层,是系统方法的底层包,包括各种数据增删改查的方法,control包是控制层,用来连接逻辑层和视图层,在逻辑层调用逻辑层,完成视图层需要的功能,视图层为系统的界面代码,完成界面的设计和数据的显示。

代码结构如下图所示。

图5-1系统结

5.2登录模块的实现

5.2.1首页实现

在系统的前台首页,主要有用户登录,在首页的导航栏中可看出,该系统有校内新闻系统、校外新闻系统、体育新闻系统、娱乐新闻系统、用户菜单系统和退出登录等主要模块。

首页

图5.1 首页页面图

首页主要代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title></title></head><body><%response.sendRedirect(basePath + "index/index.action");%></body></html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title></title></head><body><%response.sendRedirect(basePath + "index/index.action");%></body></html>

5.2.2管理员后台登录

为了确保系统安全性,系统操作员只有在后台登录界面输入正确的用户名、密码、权限以及验证码,单击"登录"按钮后才能够进入本系统的后台管理界面。

登录界面如下图所示。

新闻分类信息查询

图5-3登录界面

用户登录的逻辑代码如下:

// 管理员登录 1 验证用户名是否存在 2 验证密码是否正确@RequestMapping("login.action")public String login() {String username = this.getRequest().getParameter("username");String password = this.getRequest().getParameter("password");Admin adminEntity = new Admin();adminEntity.setUsername(username);List<Admin> adminlist = this.adminService.getAdminByCond(adminEntity);if (adminlist.size() == 0) {this.getRequest().setAttribute("message", "用户名不存在");return "redirect:/admin/index.action";} else {Admin admin = adminlist.get(0);if (password.equals(admin.getPassword())) {this.getSession().setAttribute("adminid", admin.getAdminid());this.getSession().setAttribute("adminname", admin.getUsername());this.getSession().setAttribute("realname", admin.getRealname());this.getSession().setAttribute("role", "管理员");} else {this.getRequest().setAttribute("message", "密码错误");return "redirect:/admin/index.action";}}return "admin/main";}
// 管理员登录 1 验证用户名是否存在 2 验证密码是否正确@RequestMapping("login.action")public String login() {String username = this.getRequest().getParameter("username");String password = this.getRequest().getParameter("password");Admin adminEntity = new Admin();adminEntity.setUsername(username);List<Admin> adminlist = this.adminService.getAdminByCond(adminEntity);if (adminlist.size() == 0) {this.getRequest().setAttribute("message", "用户名不存在");return "redirect:/admin/index.action";} else {Admin admin = adminlist.get(0);if (password.equals(admin.getPassword())) {this.getSession().setAttribute("adminid", admin.getAdminid());this.getSession().setAttribute("adminname", admin.getUsername());this.getSession().setAttribute("realname", admin.getRealname());this.getSession().setAttribute("role", "管理员");} else {this.getRequest().setAttribute("message", "密码错误");return "redirect:/admin/index.action";}}return "admin/main";}

5.3用户模块的实现

5.3.1需求管理模块的实现

系统管理用户添加

需求生成界面如图所示。

新增管理员

图5-8需求页面

5.4管理员模块的实现

5.4.1用户管理模块的实现

系统用户管理主要是对新用户的添加和旧用户的删除。新用户的添加主要是指添加用户名称并确定其密码;旧用户的删除也是从下拉菜单中找到对应的用户名称将其删除。不论是新用户添加还是旧用户的删除,这个权限只有管理员具有。

用户管理流程图如下所示。

用户管理界面如下图所示。

新增管理员

图5-11用户管理

系统用户管理关键代码为:

// 管理员准备修改密码@RequestMapping("prePwd.action")public String prePwd() {return "admin/editpwd";}// 修改密码@RequestMapping("editpwd.action")public String editpwd() {String adminid = (String) this.getSession().getAttribute("adminid");String password = this.getRequest().getParameter("password");String repassword = this.getRequest().getParameter("repassword");Admin admin = this.adminService.getAdminById(adminid);if (password.equals(admin.getPassword())) {admin.setPassword(repassword);this.adminService.updateAdmin(admin);} else {this.getRequest().setAttribute("message", "旧密码错误");}return "redirect:/admin/prePwd.action";}// 管理员退出登录@RequestMapping("exit.action")public String exit() {this.getSession().removeAttribute("adminid");this.getSession().removeAttribute("adminname");this.getSession().removeAttribute("realname");return "redirect:/admin/index.action";}// 准备添加数据@RequestMapping("createAdmin.action")public String createAdmin() {return "admin/addadmin";}// 添加数据@RequestMapping("addAdmin.action")public String addAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());this.adminService.insertAdmin(admin);return "redirect:/admin/createAdmin.action";}// AJAX添加数据@RequestMapping("xaddAdmin.action")@ResponseBody //将java对象转为json格式的数据public String xaddAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());int x = this.adminService.insertAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 通过主键删除数据@RequestMapping("deleteAdmin.action")public String deleteAdmin(String id) {this.adminService.deleteAdmin(id);return "redirect:/admin/getAllAdmin.action";}// AJAX通过主键删除数据@RequestMapping("xdeleteAdmin.action")@ResponseBody //将java对象转为json格式的数据public String xdeleteAdmin(String id) {int x = this.adminService.deleteAdmin(id);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 批量删除数据@RequestMapping("deleteAdminByIds.action")public String deleteAdminByIds() {String[] ids = this.getRequest().getParameterValues("adminid");if (ids != null) {for (String adminid : ids) {this.adminService.deleteAdmin(adminid);}}return "redirect:/admin/getAllAdmin.action";}// 更新数据@RequestMapping("updateAdmin.action")public String updateAdmin(Admin admin) {this.adminService.updateAdmin(admin);return "redirect:/admin/getAllAdmin.action";}// AJAX更新数据@RequestMapping("xupdateAdmin.action")@ResponseBody //将java对象转为json格式的数据public String xupdateAdmin(Admin admin) {int x = this.adminService.updateAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 显示全部数据@RequestMapping("getAllAdmin.action")public String getAllAdmin(String number) {List<Admin> adminList = this.adminService.getAllAdmin();PageHelper.getUserPage(adminList, "admin", "getAllAdmin", 10, number, this.getRequest());return "admin/listadmin";}// AJAX显示全部数据@RequestMapping(value = "getDataList.action", produces = "application/json; charset=utf-8")@ResponseBody //将java对象转为json格式的数据public Map<String, Object> getDataList(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit) {// 定义一个Map对象 用来返回数据Map<String, Object> map = new HashMap<String, Object>();Page<Admin> pager = com.github.pagehelper.PageHelper.startPage(page, limit);// 定义当前页和分页条数List<Admin> list = this.adminService.getAllAdmin();// 返回的map中定义Layui的数据格式map.put("count", pager.getTotal());map.put("data", list);map.put("code", 0);map.put("msg", "");return map;}// 按条件查询数据 (模糊查询)@RequestMapping("queryAdminByCond.action")public String queryAdminByCond(String cond, String name, String number) {Admin admin = new Admin();if(cond != null){if ("username".equals(cond)) {admin.setUsername(name);}if ("password".equals(cond)) {admin.setPassword(name);}if ("realname".equals(cond)) {admin.setRealname(name);}if ("contact".equals(cond)) {admin.setContact(name);}if ("addtime".equals(cond)) {admin.setAddtime(name);}}List<String> nameList = new ArrayList<String>();List<String> valueList = new ArrayList<String>();nameList.add(cond);valueList.add(name);PageHelper.getPage(this.adminService.getAdminByLike(admin), "admin", nameList, valueList, 10, number, this.getRequest(), "query");name = null;cond = null;return "admin/queryadmin";}// 按主键查询数据@RequestMapping("getAdminById.action")public String getAdminById(String id) {Admin admin = this.adminService.getAdminById(id);this.getRequest().setAttribute("admin", admin);return "admin/editadmin";}
// 管理员准备修改密码@RequestMapping("prePwd.action")public String prePwd() {return "admin/editpwd";}// 修改密码@RequestMapping("editpwd.action")public String editpwd() {String adminid = (String) this.getSession().getAttribute("adminid");String password = this.getRequest().getParameter("password");String repassword = this.getRequest().getParameter("repassword");Admin admin = this.adminService.getAdminById(adminid);if (password.equals(admin.getPassword())) {admin.setPassword(repassword);this.adminService.updateAdmin(admin);} else {this.getRequest().setAttribute("message", "旧密码错误");}return "redirect:/admin/prePwd.action";}// 管理员退出登录@RequestMapping("exit.action")public String exit() {this.getSession().removeAttribute("adminid");this.getSession().removeAttribute("adminname");this.getSession().removeAttribute("realname");return "redirect:/admin/index.action";}// 准备添加数据@RequestMapping("createAdmin.action")public String createAdmin() {return "admin/addadmin";}// 添加数据@RequestMapping("addAdmin.action")public String addAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());this.adminService.insertAdmin(admin);return "redirect:/admin/createAdmin.action";}// AJAX添加数据@RequestMapping("xaddAdmin.action")@ResponseBody //将java对象转为json格式的数据public String xaddAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());int x = this.adminService.insertAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 通过主键删除数据@RequestMapping("deleteAdmin.action")public String deleteAdmin(String id) {this.adminService.deleteAdmin(id);return "redirect:/admin/getAllAdmin.action";}// AJAX通过主键删除数据@RequestMapping("xdeleteAdmin.action")@ResponseBody //将java对象转为json格式的数据public String xdeleteAdmin(String id) {int x = this.adminService.deleteAdmin(id);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 批量删除数据@RequestMapping("deleteAdminByIds.action")public String deleteAdminByIds() {String[] ids = this.getRequest().getParameterValues("adminid");if (ids != null) {for (String adminid : ids) {this.adminService.deleteAdmin(adminid);}}return "redirect:/admin/getAllAdmin.action";}// 更新数据@RequestMapping("updateAdmin.action")public String updateAdmin(Admin admin) {this.adminService.updateAdmin(admin);return "redirect:/admin/getAllAdmin.action";}// AJAX更新数据@RequestMapping("xupdateAdmin.action")@ResponseBody //将java对象转为json格式的数据public String xupdateAdmin(Admin admin) {int x = this.adminService.updateAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 显示全部数据@RequestMapping("getAllAdmin.action")public String getAllAdmin(String number) {List<Admin> adminList = this.adminService.getAllAdmin();PageHelper.getUserPage(adminList, "admin", "getAllAdmin", 10, number, this.getRequest());return "admin/listadmin";}// AJAX显示全部数据@RequestMapping(value = "getDataList.action", produces = "application/json; charset=utf-8")@ResponseBody //将java对象转为json格式的数据public Map<String, Object> getDataList(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit) {// 定义一个Map对象 用来返回数据Map<String, Object> map = new HashMap<String, Object>();Page<Admin> pager = com.github.pagehelper.PageHelper.startPage(page, limit);// 定义当前页和分页条数List<Admin> list = this.adminService.getAllAdmin();// 返回的map中定义Layui的数据格式map.put("count", pager.getTotal());map.put("data", list);map.put("code", 0);map.put("msg", "");return map;}// 按条件查询数据 (模糊查询)@RequestMapping("queryAdminByCond.action")public String queryAdminByCond(String cond, String name, String number) {Admin admin = new Admin();if(cond != null){if ("username".equals(cond)) {admin.setUsername(name);}if ("password".equals(cond)) {admin.setPassword(name);}if ("realname".equals(cond)) {admin.setRealname(name);}if ("contact".equals(cond)) {admin.setContact(name);}if ("addtime".equals(cond)) {admin.setAddtime(name);}}List<String> nameList = new ArrayList<String>();List<String> valueList = new ArrayList<String>();nameList.add(cond);valueList.add(name);PageHelper.getPage(this.adminService.getAdminByLike(admin), "admin", nameList, valueList, 10, number, this.getRequest(), "query");name = null;cond = null;return "admin/queryadmin";}// 按主键查询数据@RequestMapping("getAdminById.action")public String getAdminById(String id) {Admin admin = this.adminService.getAdminById(id);this.getRequest().setAttribute("admin", admin);return "admin/editadmin";}

5.5.2工作人员模块的实现

工作人员添加如下图所示:

新增管理员

图5-24工作人员添加

管理员信息添加关键代码为:

protected void Button1_Click(object sender, EventArgs e)

{

string MySQL;

MySQL="insert into liuyanban(cheng,biaoqing,biaoti,neirong,huifu) values('"+cheng.Text.ToString().Trim()+"','"+biaoqing.Text.ToString().Trim()+"','"+biaoti.Text.ToString().Trim()+"','"+neirong.Text.ToString().Trim()+"','"+huifu.Text.ToString().Trim()+"') ";

int result;

result = new Class1().hsgexucute(MySQL);

if (result == 1)

{

Response.Write("<script>javascript:alert('添加成功');</script>");

}

else

{

Response.Write("<script>javascript:alert('系统错误,请检查数据库设置问题');</script>");

}

第6章 系统测试

6.1测试目的

软件测试的目的主要是发现软件缺陷和漏洞,其次,软件测试能够识别项目风险。为开发人员和程序经理提供软件测试的反馈结果,为风险评估提供必要的信息。再者,软件测试确保在上线日前达到上线标准。包括持续追踪项目进度和严格把控各个开发阶段的产品质量。

基于jsp的新闻发布管理系统,主要测试客户端的使用和后台服务器的使用。客户端主要是测试用户注册、用户登录、用户完善信息、页面是否进行跳转等功能是否实现。管理员的使用主要是测试系统管理、需求服务管理、日常费用管理、变幻图管理以及注册用户管理功能是否实现。

6.2测试概述

1.测试的原则

(1)系统测试应该避免测试自己的程序,以免发现不了细小的问题。

(2)系统测试用例应有两部分组成,分别为输入测试和输出测试。

(3)系统测试数据应当引用不合理的数据进行测试,选取不同情况的进行逐一测试。

(4)不仅要检查程序是否达到预期的效果,还要检查程序是否执行了规定以外的操作。

(5)对出现错误多的模块进行集中测试。

(6)已发现错误的模块修改后,应及时进行重新测试。

6.3单元测试

6.3.1注册测试

游客用户得先注册账号才能登录系统,用户输入符合规则的用户名后,填写2次一样的密码,点击注册按钮,系统提示"注册成功"。当用户2次密码不一致时,系统提示两次密码不一致。

注册测试用例如下表所示。

表6-1注册测试用例

测试模块 用户注册模块测试
测试模块 用户注册模块测试
测试目的 测试当注册信息输入不符合要求时,系统是否能进行相应处理并给出提示。
测试方法 黑盒测试
测试数据 1不输入用户名和密码,直接点击注册。2输入未注册过的用户名。例如:abcd3输入正确用户名,两次密码不一样。例如:用户名abcdefg、密码 000,确认密码111
预期结果 1 界面不跳转,弹出对话框,提示用户输入必填项。2界面跳转,弹出对话框,提示用户注册成功。3界面不跳转,弹出对话框,提示两次密码不一致。
实际结果 与预想一致。
结论 注册模块实现了基本的异常输入应对。

6.3.2登录测试

登录模块需要测试的功能有:输入登录名和密码,点击"登录"按钮是否正常进入系统首页。

登录测试用例如下表所示。

表6-2登录测试用例

测试模块 用户登录模块测试
测试模块 用户登录模块测试
测试目的 测试当登陆信息输入不符合要求时,系统是否能进行相应处理并给出提示。
测试方法 黑盒测试
测试数据 1不输入用户名和密码,直接点击登陆。2输入未注册过的用户名。例如:abcdefg3输入正确用户名,错误密码。例如:用户名abcdefg、密码 0004输入正确用户名,正确匹配密码。例如:用户名abcdefg、密码 111
预期结果 1 界面不跳转,弹出对话框,提示用户输入必填项。2界面不跳转,弹出对话框,提示用户当前用户名尚未注册。3界面不跳转,弹出对话框,提示用户密码错误。4界面实现跳转,登陆功能正常进行。
实际结果 与预想一致。
结论 登陆模块实现了基本的异常输入应对。

6.4集成测试

集成测试的方案主要如下所述:

  1. 将系统移植到另一台计算机上,运行出错。修改配置信息后运行成功。

  2. 用户信息管理模块综合测试,添加新用户roess,为其分配一般管理员角色,查看一般管理员角色权限,保存设置,以roess身份登录,查看所拥有权限。

  3. 最后按照新闻发布管理系统的设计与实现,以不同角色的身份进入系统,对系统各模块功能进行测试,测试模块间逻辑功是否有误。

经过测试,发现此开发系统可以满足新闻发布管理系统流程的基本工作流程和基本要求。

第7章 总结

经过几个月的努力还坚持,新闻发布管理系统终于完成了,程序功能模块能按照需求来运行,能实现多用户的迸发使用,但是系统由于设计经验以及专业知识的局限性,在本系统的开发过程中,在一些功能方面和业务逻辑方面做得不是很完善,系统还存在一些缺陷。界面的设计从布局到外观,受限于自身的设计功底较低,没能达到自己所要设计的界面要求,另一方面,系统存在一些没有考虑的问题和模块。

在学习的过程中首次进行独立设计工作,编码过程出现了许多问题和困难,原以为正确无误的程序运行过程中不会遇到问题,但是在运行过程中也总会出现各种各样的问题,在调试过程中找不出运行出错的原因。而这些基本问题却都是一些简单的问题,例如标点符号应该是英文状态下的,却因为不好的编程习惯造成了一些中文的符号输入,经过仔细观察和老师的帮组下,还是将问题解决了。

目前系统的功能比较简单,还存在许多瑕疵,这是一份遗憾,也是促进我不断进步的动力。

致 谢

经历了近三个多月的动手实践及老师辛勤的指导和同学朋友热心的帮助下,本人的毕业设计新闻发布管理系统的基本功能也基本完成。

此次设计中,通过不断的探讨与学习使我熟悉、使我初步了解了JAVA相关技术。做的是一个B/S结构的新闻发布管理系统,使我对做网站所需要,及运行的环境有了初步的了解,在此次设计中我翻阅了较多的书籍,在有限的时间了丰富了对新闻发布管理系统技术的知识也积累了少许的经验。起初对JSP的初步认识,通过这次设计更进一步的了解了其工作原理,懂得了配置服务器环境,连接数据库源,在设计过程中,也学会了用dreamweaver设计一个简单的页面,增强了动手的能力,激发了在此方面的兴趣。

但是由于时间、基础及缺乏实践等多方面的问题,还有诸多需要解决的问题依然存在,设计中很多方面考虑不够周全或者考虑不到。

非常感谢我的老师,我的同学,我的朋友并希望在今后的学习生活中不断陪养多方面的兴趣,不断学习进步从而能够实现独立完成。设计中存在的诸多缺点诚肯老师的原谅。

参考文献

[1]刘晓华,周慧贞.JSP应用开发详解[M].北京:电子工业出版社,2013:35-126

[2]阿斯利森,舒塔,金灵等译.Ajax基础教程[M].北京:人民邮电出版社,2014:15-26

[3]孙鑫.Struts2深入详解[M].北京:电子工业出版社,2012:8-16

[4]王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社出版社,2010:7-15

[5]王毅,周峰,孙更新.J2EE经典案例设计与实现[M].北京:电子工业出版,2013:6-18

[6]孙鑫.Struts2深入详解(Java技术大系)[M].北京:电子工业出版社,2012:5-14

[7]郑阿奇.MySQL实用教程[M].北京:电子工业出版社,2013:26-42

[8]谭庆平,毛新军编著.软件工程实践[M].北京:高等教育出版社,2014:34-87

[9]林邦杰.Java程序设计入门教程[M].北京:中国青年出版社,2011:63-99

[10]谢希仁.计算机网络[M].北京:电子工业出版社,2012:89-125

[11]布朗,戴维斯,斯坦利克,马召等译.Struts2实战[M].北京:人民邮电出版社,2012:85-136

[12]王行言.Java语言与面向对象程序设计[M].北京:清华大学出版社,2013:36-85

[13]拉夫利,李进华等译.精通Struts2:Web2.0开发实战[M].北京:人民邮电出版社,2012:253-276

[14]陈云芳.精通Struts2基于MVC的Web应用开发实战[M].北京:人民邮电出版社,2012:136-187

[15]DavidHopkins.ImprovingtheQualityofTeachingandLearning[J].SupportforLearning,2014(12):162-165.

[16]EdWoychowsky.IntroducingAjax[EB/OL].http://www.webreference.com/programming/ajax_creating_asynchronous_web_pages/index.html,2015-1-13.

[17]RobertoLatorre,FranciscoLopez,AntonioE.Martinez.SharingofprocompileddatabasestatementsinJ2EEapplication[J].Software:PracticeandExperience,2015(35):301-311.

[18]Huang,M.Y,Lin,Y.J,Xu,H.Aframeworkforweb-basedproductdatamanagementusingJ2EE.InternationalJournalofAdvancedManufacturingTechnology,2014:825-847.

[19]AleassanndroMarchetto,FilippoRicca,PaoloTonella.Acasestudy-basedcomparisonofwebtestingtechniquesappliedtoajaxwebapplications[J].InternationalJournalonsoftwareToolsforTechnologyTransfer(STTT),2015,10(12):477-492.

[20]D.F.Elliott,andK.Rao.FastTransforms:Algorothms,Analysas,Applications.NewYork:AcademkicPrdss.2014

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容