文章首发地址
第一章 绪论
1.1课题背景与意义
Java语言是定位于网络应用的程序设计语言。Java 是一种简单的、面向对象的、强壮的、安全的、可移植的、高性能的、体系结构中立的、解释型的、多线索的、动态的语言。一个Java类文件中,所有对方法及实例变量的参照均按名进行,并在第一次执行代码时加以分辨。这使得代码更通用,更不易受修改的影响,而仍具高效。
此摄影爱好者交流网站为用户提供的个人作品展示、存放的平台。在此平台中,用户可以上传作品图片,建立分类作品,也可以观看、评论其他人的作品与照片,有些图库也支持照片外链,方便用户在其他网站、社区、讨论区分享他们的作品,促进相互交流。
1.2开发工具及技术
1.2.1开发工具
此次设计主要采用MyEclipse加Tomcat后台服务器进行,设计过程中页面主要使用JSP技术完成,下面对MyEclipse、Tomcat进行简要介绍。
1.2.1.1 MyEclipse
MyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSP, CSS, Javascript, SQL, Hibernate。
1.2.1.2 Tomcat
Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apahce服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
1.2.2 JSP技术
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端就是一个HTML文本,因此客户端只要有浏览器能浏览。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。JSP技术的优点:
(1)一次编写,到处运行。除了系统之外,代码不用做任何更改。
(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/.net的局限性是显而易见的。
(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。
(4)多样化和功能强大的开发工具支持。Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下
(5)支持服务器端组件。web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用,以增强系统性能。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能。
内部对象说明:request 客户端请求,此请求会包含来自GET/POST请求的参数; response 网页传回客户端的响应;pageContext 网页的属性是在这里管理; session 与请求有关的会话; application servlet正在执行的内容;out 用来传送响应的输出流; config 代码片段配置对象;page JSP网页本身; exception 针对错误网页,未捕捉的例外
1.2.3 JavaScript
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。在HTML基础上,使用Javascript可以开发交互式Web网页。Javascript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。在本系统中很多地方使用了javascript技术,比如说,检验用户输入数据的有效性,是否重复,是否为空等等。
1.3软硬件需求
硬件需求:
CPU:Pentium以上计算机
内存: 512M以上
软件需求:
操作系统版本:Windows XP /vista/Win7
开发工具:MyEclipse 6.0.1
后台服务器:Apache Tomcat 6.0
开发语言:Java
浏览器:IE6.0
第二章 系统分析
系统分析就是对系统从技术可行性、经济可行性和操作可行性进行分析。对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排,明确开发目标。本系统采用的架构是mvc模式。
2.1可行性分析
开发任何一个系统,都会受到时间和资源上的限制。因此,在每一个项目开发之前,都要进行可行性分析,可以减少项目的开发风险,避免人力、物力和财力的浪费。下面就技术、经济、操作和法律四个方面来介绍。
2.1.1技术可行性
本系统开发工具是MyEclipse和MySQL数据库,开发语言是Java,主要使用了J2EE的技术,java是一种面向对象编程语言,简单易学而且灵活方便。大三时就学习了java课程,大四期间也系统的了解了J2EE的知识,基于Web的在线图库网站总体上开发难度不高,数据库的设计和操作是本系统设计的核心。在大学期间学习过软件工程,软件测试,UML统一建模语言等课程,每个学期也会完成对应的课程设计,具备一定的系统分析、设计和测试能力。因此,完成系统实现在技术上完全具有可行性。
2.1.2经济可行性
如今是信息化时代,信息化管理可以使管理工作更加系统化、快速化、全面化。这样可以为企业带来较高的工作效益和经济效益,本系统对计算机配置的要求不高,企业机房更换下来的低配置电脑都可以完全满足需要,再者,企业在管理工作上的高效率和便捷性远远超过了开发本系统的成本,所以在经济上具有完全的可行性。
2.1.3操作可行性
本系统操作简单,输入信息页面大多数都是下拉框的选择形式,在某些页面,信息可以自动生成,无需输入,时间的输入也是用的日历控件,操作简便,对操作人员的要求很低,只需对WINDOWS操作熟练,加之对本系统的操作稍加培训即可工作,而且本系统可视性非常好,所以在技术上不会有很大难度。
2.1.4法律可行性
本系统是自行开发的管理系统,是很有实际意义的系统,开发环境软件和使用的数据库都是开源代码,开发这个系统不同于开发普通的系统软件,不存在侵权等问题,即法律上是可行的。
2.2功能模块分析
根据需求分析确定该系统划分为以下几个功能模块:
(1)类别信息管理
该模块主要完成对图库类别信息的的管理,包括类别信息的查看、添加、删除操作。该功能的用例图如图2-1所示:
图2-1类别信息管理功能用例图
(2)新闻管理功能
该管理功能主要完成对新闻信息的管理,包括新闻信息的查看、添加、删除操作。该功能的用例图如图2-2所示:
图2-2新闻管理功能用例图
(3)用户信息管理功能
该管理功能主要完成对用户信息的管理,包括用户信息的查看与删除操作。该功能的用例图如图2-3所示:
图2-3用户信息管理功能用例图
(4)作品信息管理功能
该管理功能主要完成对作品信息的管理,包括作品信息的查看与删除操作。该功能的用例图如图2-4所示:
图2-4作品信息管理功能用例图
(5)用户作品信息管理功能
该管理功能主要完成用户对作品信息的管理,包括作品信息的查看、上传、删除操作。该功能的用例图如图2-5所示:
图2-5作品信息管理功能用例图
系统的功能模块图如图2-6所示:
图2.6系统功能模块图
2.3设计的基本思想
设计思想遵循以下几点:
1. 采用B/S模式进行开发,其优点是后台与前台处理层次分明,而且符合众多已经习惯网页方式的用户。
2. 采用面向对象的开发与设计理念。运用面向对象技术的前提是对整体系统的高度和准确抽象,通过它可以保证系统良好的框架,进而带来产品较强的稳定性和运行效率。
3. 采用模块化设计。模块化设计要求将整个系统划分成基于小的模块,有利于代码的重载,简化设计和实现过程。
4. 简单方便的系统界面。设计简单友好的系统界面,方便用户较快的适应系统的操作。
5.速度优先原则。由于此工具最重要的评测标准就是速度,因此在设计过程中,具体过程尽量做到资源占用少,速度快。
6.设计既要突出重点,又要细致周到。要符合设计需求,在有可能改进的地方进行扩充,使系统更适应用户的需要。
2.4性能需求
2.4.1系统的安全性
本系统在管理权限上要严格进行控制,具体要求如下:
想登录本系统系统进行操作,必须有操作权限,没有权限的用户不能通过任何方式登录系统查看系统的任何信息和数据,以确保系统的严密性和安全性。
2.4.2数据的完整性
1.各种记录信息的完整性,信息记录内容不能为空
2.各种数据间相互联系的正确性
3.相同数据在不同记录中的一致性
2.5界面需求
界面设计目前已经成为评价软件质量的一条重要指标,一个好的用户界面可以增加用户使用系统的信心和兴趣,提高工作效率,JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。 创建动态页面非常方便。用户界面是指软件系统与用户交互的接口,通常包括输出、输入、人-机对话的界面格式等。
1.输出设计
输出是由计算机对输入的原始信息进行加工处理,形成高质量的有效信息,并使之具有一定的格式,提供管理者使用,这是输出设计的主要职责和目标。
系统设计的过程正好和实施过程相反,并不是从输入设计到输出设计,而是从输出设计到输入设计,这是因为输出表格直接与使用者相联系,设计的出发点应当是保证输出表格方便地为使用者服务,正确及时反映和组成用于各部门的有用信息。输出设计的原则是考虑既要全面反映不同管理层的各项需要,又要言简意赅,不要将用户需要和不需要的都提供给用户。
2.输入设计
输入数据的收集和录入是比较费事的,需要大量的人力和一定设备,并且容易出错。如果输入系统的数据有错误,则处理后的输出将扩大这些错误,因此输入数据的正确性对于整个系统质量的好坏是具有决定性意义的。
输入设计的原则有如下几点:
1)输入量应保持在能满足处理要求的最低限度。设计中可采用设置字段初值,下拉式数据窗口等方式尽量减少用户键盘输入量。输入量越少,错误率就越少,数据准备时间也减少。
2)输入的准备及输入过程应尽量容易进行,从而减少错误的发生。
3)应尽量早对输入数据进行检查(尽量接近原数据发生点),以便使错误及时得到更正。
4)输入数据尽早地用其处理所需的形式被记录,以避免数据由一种介质转移到另一种介质时需要转录而可能发生的错误。
第三章 数据库设计
3.1数据库的分析与设计
计算机信息系统以数据库为核心,在数据库管理系统的支持下,进行信息的收集、整理、存储、检索、更新、加工、统计和传播等操作。数据库已经成为现在信息系统等计算机系统的基础与核心部分。数据库设计的好坏直接影响到整个系统的质量和效率。
数据库的设计一般经过规划。需求分析、概念设计、逻辑设计、物理设计5个步骤。
3.1.1数据库的概念结构设计
概念设计是指在数据分析的基础上自底向上的建立整个系统的数据库概念结构,从用户的角度进行视图设计,然后将视图集成,最后对集成的结构分析优化得到最后结果。
数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示用户工作环境中所涉及的事物,属性则是对实体特性的描述。
概念设计的目标是产生反映企业组织信息要求的数据库概念结构,即概念模式。概念模式是独立于数据库逻辑结构,独立于支持数据库的DBMS,不依赖于计算机系统的,
根据以上对数据库的需求分析,并结合系统概念模型的特点及建立方法,建立E-R模型图。
实体间关系
属性
实体
(1)管理员信息实体E-R图:
图3.1管理员E-R图
(2)用户信息实体E-R图
图3.2 用户信息实体E-R图
(3)类别信息E-R图
图3.3 类别信息实体E-R图
(4)作品信息实体E-R图
图3.4 作品信息实体E-R图
(5)评论信息E-R图
图3.5评论信息实体E-R图
(6)新闻资讯信息实体E-R图
图3.6新闻资讯信息实体E-R图
3.1.2数据库的逻辑结构设计
我们知道,数据库概念模型独立于任何特定的数据库管理系统,因此,需要根据具体使用的数据库管理系统的特点进行转换。即转化为按计算机观点处理的逻辑关系模型,E-R模型向关系数据库模型转换应遵循下列原则:
*每一个实体要转换成一个关系
*所有的主键必须定义非空(NOT NULL)
*对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键。
(1)管理员信息表(t_admin)
管理员信息表主要用于保存系统管理员的信息,主要字段包括:管理员ID、登陆账号、登陆密码。
表3.1 管理员信息表(t_admin)
列名 | 数据类型 | 长度 | 允许空 | 是否主键 | 说明 |
userId | int | 10 | 否 | 是 | 管理员ID |
userName | varchar | 50 | 否 | 否 | 登陆账号 |
userPw | varchar | 50 | 否 | 否 | 登陆密码 |
(2)注册用户信息表(t_user)
注册用户信息表主要保存注册用户的相关信息。
表3.2 注册用户信息表(t_ user)
列名 | 数据类型 | 长度 | 允许空 | 是否主键 | 说明 |
user_id | int | 10 | 否 | 是 | 用户ID |
user_name | varchar | 50 | 否 | 否 | 姓名 |
user_pw | varchar | 50 | 否 | 否 | 密码 |
user_realname | varchar | 50 | 否 | 否 | 帐号 |
user_address | int | 10 | 否 | 否 | 地址 |
user_sex | varchar | 50 | 否 | 否 | 性别 |
user_tel | varchar | 50 | 否 | 否 | 电话 |
user_email | varchar | 50 | 否 | 否 | 邮箱 |
(3)作品类别信息表主要是记录了作品类别的基本信息,其中ID是主键,表结构如图3.3所示。
表3.3类别信息表(t_catelog)
列名 | 数据类型 | 长度 | 允许空 | 是否主键 | 说明 |
catalog_id | int | 4 | 否 | 是 | 类别ID |
catalog_name | varchar | 50 | 否 | 否 | 名称 |
(4)作品信息表主要记录了作品的基本信息,表结构如表3.4所示。
表3.4作品信息表(t_zuopin)
列名 | 数据类型 | 长度 | 允许空 | 是否主键 | 说明 |
id | int | 4 | 否 | 是 | 作品ID |
userId | int | 50 | 否 | 否 | 用户ID |
catelogId | int | 50 | 否 | 否 | 类别ID |
mingcheng | varchar | 50 | 否 | 否 | 名称 |
jieshao | varchar | 50 | 否 | 否 | 介绍 |
fujian | varchar | 50 | 否 | 否 | 附件 |
fabushi | varchar | 50 | 否 | 否 | 发布时间 |
(5)评论信息表主要记录了评论的相关信息,表结构如表3.5所示。
表3.5评论信息表(t_pinglun)
列名 | 数据类型 | 长度 | 允许空 | 是否主键 | 说明 |
id | int | 10 | 否 | 是 | 评论ID |
neirong | varchar | 50 | 否 | 否 | 内容 |
shijian | varchar | 50 | 否 | 否 | 评论时间 |
zuopinId | int | 10 | 否 | 否 | 作品ID |
userId | int | 10 | 否 | 否 | 用户ID |
(6)新闻资讯信息表主要记录了新闻资讯的相关信息,表结构如表3.6所示。
表3.6新闻资讯信息表(t_news)
列名 | 数据类型 | 长度 | 允许空 | 是否主键 | 说明 |
news_id | int | 10 | 否 | 是 | 新闻资讯ID |
news_title | varchar | 50 | 否 | 否 | 标题 |
news_content | varchar | 50 | 否 | 否 | 内容 |
news_date | varchar | 50 | 否 | 否 | 发布时间 |
3.1.3数据库的连接原理
采用JDBC连接数据库的方式,只需在工程中导入对应数据库的jar包,就可以方便的对数据库进行连接,在程序中,用Class.forName()方法来加载驱动程序,在用DriverManager的getConnection()方法就可以创建一个数据库连接。程序采用的是DAO模式来操作数据库,DAO(Data Access Object,数据访问对象),是Java编程中的一种经典模式,已被广泛应用,也是J2EE架构中持久层框架的基础知识,基于分层次式的软件架构来实现对数据库的访问操作。DAO模式的主要思想就是从抽象数据源获取与操纵数据的方法。抽象数据的含义就是编写应用程序的程序员不必关心数据库的物理位置,已经是何种数据库,只需使用封装数据库中表示记录的数据对象即可。其思想如图3.10所示:
封装
使用
DataSource
DataAccessObject
BusinessObject
创建/使用
获取/修改
DataTransferObject
图3.10 DAO模式类图
图中BussinessObject是业务对象,是使用DAO模式的客户端;DataTransferObject数据传输对象,在应用程序不同层次之间传输对象,在一个分布式应用程序中,通常可以提高整理的性能;DataObjectAcces数据输入/输出对象封装了对数据源的一些基本操作;DataSource指的是数据源。可以从图中看出,DAO模式分离了业务逻辑和数据罗即将,是的编写的软件具有良好的层次式体系结构。本系统为了方便数据库的操作,主要使用DBContent的对象来接一个数据库(建立一个类DBContent),代码如下:
public DBContent(){
String CLASSFORNAME=” com.mysql.jdbc.Driver “;
//连接数据库的驱动
String url=” jdbc:mysql://localhost:3306/db_sywz?Unicode=true&haracterEncoding=utf-8″;//连接数据库的用户名
String password=” root”;//连接数据库的密码
try{
Class.forName(CLASSFORNAME);
con= DriverManager.getConnection(url,user,password);//加载数据库的驱动
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(Exception ex){
ex.printStackTrace();
}
}
在程序需要连接数据库的地方,只需要生成一个DBConnet的对象,就可以对数据库进行连接并操作。
第四章 系统功能实现
在管理信息系统的生命周期中,仅过了需求分析、系统设计等阶段之后,便开始了系统实施阶段。在系统分析和设计阶段,系统开发工作主要是集中在逻辑、功能和技术设计上,系统实施阶段要继承此前面各个阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶。
4.1用户注册功能
1.描述:系统的普通用户通过自行注册生成,在系统首页点击用户注册菜单,系统跳转到对应的注册页面。在用户注册页面中,用户需要填写或选择帐号、密码、姓名、性别、年龄、住址、邮箱以及电话等信息。其中密码默认为000000,密码和年龄只能输入数字格式,在这里是通过正则表达式对输入类型进行约束,性别默认为男。点击重置按钮,清空所填数据,点击注册按钮完成注册。是否为空是通过form表单中的onsubmit=”return checkForm()来检查。
4.2登陆页面设计
1.描述:为了保证系统的安全性,系统管理员用户要使用本系统必须先登陆到系统中,普通用户在进行留言等操作也需要登录系统。用户登录采用AJAX方式进行验证,先是在前台获取用户输入的登录账号、密码以及登录类型,点击登录后,通过AJAX方式,后台异步进行验证,实现页面无刷新的用户登录。
}
4.3管理员首页
1.描述:管理员主页面:左方页面展示了管理员可操作的功能菜单,进入相关的管理页面可以链接到子菜单,每个管理模块下面都有相应的子菜单。
4.4修改登录密码
管理员修改登录密码:管理员成功登录系统之后,点击左侧菜单“修改登录密码”,系统跳转到修改登录密码子界面,在这里需要输入正确的原密码和设置新密码,才能实现修改操作
第五章 系统测试
5.1系统测试目的与意义
系统测试是管理信息系统开发周期中一个十分重要而漫长的的阶段。其重要性体现在他是保证系统质量与可靠性的最后关口,是对整个系统开发过程包括系统分析、系统设计和系统实现的最终审查。
系统测试的任务是尽可能彻底的检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统“做得怎样”。这这阶段又可以分为三个步骤:模块测试,测试每个模块的程序是否正确;组装测试,测试模块之间的接口是否正确;确认测试,测试整个软件系统是否满足用户功能和性能的要求。测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒测试,应覆盖系统随偶联合的部件,系统测试是正对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出需求规格不符合或与之矛盾的地方。
5.2测试过程
在测试之初,由于将数据库中的数据是随便输入,没有实用性,为了使系统更加完善,在系统测试的过程中,本系统将一开始编程随便输入的数据全部清理后,输入了一些有效的测试数据,这样可以更真实的反映系统的功能实现情况。
这样不断发现问题,经过反复的测试、调试,把问题一个个的解决,最终系统可以正常运行。
5.2.1主页面的登录模块测试
测试流程: 1.打开系统首页,输入错误的登录信息
2.登录
3.输入正确的登录信息
4.登录
5.测试结果
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
登录模块 | 用户名:null 密码:null | 弹出错误提示,请输入用户名 | 登陆失败,提示请输入用户名 | 通过 |
登录模块 | 用户名:m1
密码:null |
弹出错误提示,请输入密码 | 失败,提示输入密码 | 通过 |
登录模块 | 用户名:m1
密码:1 |
弹出错误提示,用户名或者密码错误 | 登陆失败,提示用户名或者密码错误 | 通过 |