(内部管理)企业内部管
理信息系统的分析与设计
如图 1-2所示是员工浏览信息的一个部分页面,从图 1-2可以看出,员工可
以浏览各该部门所发布的热点信息和最新信息。
图 1-2员工浏览界面
如图 1-3所示是某个部门的信息录入界面
图 1-3部门信息录入界面
根据其账号权限可以在左边导航栏选取所允许操作的功能模块。这种以功能模块
来划分的编程思想,大大地增加了开发的独立性和可维护性,是现今系统开发的
主流思想。
3、系统特点
●分层结构设计:本系统采用界面—中间件—数据库三层结构,将不同的复杂的
数据库操作或是业务逻辑计算划分为独立的模块封装于 Bean中,作为用户界面
和数据库之间的中间件,所有的数据库操作由用户界面调用 Bean来完成,提高
了系统的安全性和可移植性。
●分层信息管理:系统采用双层信息分类进行信息的组织管理,使信息的分类归
属更为清晰明确,不仅提高了信息的利用效率,而且方便了用户的查看、搜索等。
二、系统设计和功能说明
(一)系统设计
1、系统设计思想
系统设计思想在一定程度上决定了一个系统设计的成败,也从某种角度反映了
一个系统的生命力。下面来介绍本系统的设计思想。
功能的独立化、模块化
JSP是嵌入了 Java代码的 HTML,两种标记混杂在一定程度上使开发更为方便,
但也存在问题,比如复杂的代码易出错,且出错时不方便使用开发工具来设置断
点排查。使用 JavaBean专注开发逻辑层,JSP页面专注于开发表达层,最大限度
地提高了开发效率。
同时,系统将涉及复杂操作的不同功能独立出来,最为一个模块化来设计,在需
要用到特定功能的程序中,仅仅作出调用即可。这样做不仅避免了程序代码中一
些不必要的重复,更重要的是使整个系统层次结构更为清晰,大大方便了以后系
统功能的增加,在一定程度上也缩减了开发成本。
三层结构设计思想
系统主体架构采用界面—中间件—数据库这样的三层结构,使系统业务逻辑和数
据库基础操作与用户界面分开,能够使业务逻辑程序员更专注于 Java程序的开
发,而界面设计者专注于用户界面的开发,在一定程度上明确了系统开发的分工,
如图 2-1所示
数据
2、系统功能模块和结构设计
在本系统中,主要有两种角色的用户,即普通员工用户和管理员用户,管理
员又可以分为总管理员和中心管理员。
系统中普通员工用户仅具有信息浏览、检索全县。功能模块化分如图 2-2所
示
图:2-2普通员工角色功能模块图
系统中管理员具有记录管理、信息类别管理、管理员工管理和上传附件管理
Web 服务器
普通员工
普通员工浏览
主页面
等功能,具体功能模块化分如图 2-3所示
密码验证?
具有权限?
(二)数据库设计
1、数据库需求分析
作为一个具有一定应用价值的管理信息系统,从本质上说其操作的对象为数据库
中存储的具体记录。因此不仅要求所有的数据库系统具有比较高的稳定性、安全
性及高负载下保持足够响应能力,还要求设计者清楚需求,做出科学的数据库逻
辑结构设计,以提高数据库的利用率和减少数据冗余。
以这种思想作为设计策略,分析出系统的以下几项需求
● 系统用户主要包括员工用户和管理员用户
● 系统的信息需要由两级分类
● 附件上传及管理功能
● 不同权限管理员的权限认证
2、数据库实体关系设计
通过以上简单的需求分析,我们可以设计出数据库的逻辑结构—E-R图,即实体-
关系图,从而建立数据库的物理结构即表结构。所谓实体,反映到数据库中即为
数据表,它存储着具体的记录信息;所谓关系,即表与表的联系,这种联系大多
是通过外键(FK:ForeignKey)实现的。在本例中,因为信息和所属类别之间存
密码验证模块
记录管理
清除 Session
在逻辑关系,news表中的 classid列与 class表中的 id主键相对应。也即 news
表中的 classid列是到 class表的外键,其取值范围为 class表中的 id值的集
合。
根据需求,我们设计四个数据库表,管理员用户表(admin),类别表(class),
信息表(news)和管理员权限表(adminclass),其结构及关系如图 2-1所示。
3、系统数据字典
确定了数据库的逻辑关系和数据结构之后,接下来就是将这些概念性的、逻辑性
的东西转换为数据库中能够存放信息的数据表。
数据库系统的选用是根据系统的需求而定,本系统以 Oracle9i作为系统使用的
数据库系统平台。(在此本人因避免重复写作,省去数据字典的描写,另附实例
数据字典。)
依照以上的分析和拒此建立的数据库字典,我们可建立系统的数据库。若是使用
Erwin设计 E-R图,我们可以通过它生成建立数据库的 SQL脚本。(具体在
Oracle9i中创建数据库的过程比较简单,客户端工具需要安装,操作起来不是很
顺手,在这推荐一款 SQLDevelopment的绿色版 Oracle客户端工具,很容易上手,
操作起来就像 SQLserver。我会把本系统的 mytest数据库生成 sql脚本,这样可
以把脚本导入到数据库直接运行)
(三)中间件的编写
本系统的组件开发使用的开发工具为 Eclipse,它是一个开放源代码的软件开发
项目,最初由 OTI和 IBM两家公司的 IDE产品开发组建,起始于 1999年 4月。IBM
提供了最初的 Eclipse代码基础,包括 Platform、JDT和 PDE。目前由 IBM牵头,
围绕着 Eclipse项目已经发展成为了一个庞大的 Eclipse联盟,有 150多家软件
Id
Adminuser
Adminpass
Authority
I asttime
I astip
公司参与到 Eclipse项目中,其中包括 Borland、RationalSoftware、RedHat及
Sybase。(介绍下工具)
1、数据库连接与操作 Bean的编写
数据库操作类在本系统中具有举足轻重的作用,所有与数据库相关的操作都需要
调用其方法来完成。以 executeQuery方法为例,其输入参数为 SQL语句,返回
值为一个 ResultSet对象,这样做增强了安全性,因为 Bean类文件是.class的
二进制文件,即使泄露,数据库连接密码这样的敏感数据也可受到保护,不至于
造成不必要的损失。
具体代码请参见实例,为节省篇幅,所有代码不予列出,在此仅做介绍。
2、字符串格式化 Bean的编写
当把文本信息从数据库中读出来至 HTML页面中时,就要涉及文本格式转换问题。
假如我们的文本中有“>”和“<”这些超文本语言控制符号,那么当直接输出至
客户端时,客户端浏览器将无法分辨这是文本内容信息还是 HTML控制字符,将
会输出我们不希望的结果。用此方法将所要输出的数据处理之后再输出就能避免
出现此种问题。
我们需要完成的字符串格式化的 Bean主要实现三个方法。
●字符串自定义替换。即输入一个字符串 source,用指定的新字符串 newString
替换 source中的旧字符串 oldString.
●将字符串格式转换成 HTML代码并在表单中输出。即如上文所说,将一些特殊
字符转换为可在 HTML中输出的字符。
●将字符串格式转换成 HTML代码并在页面中输出。这要求不仅仅对特殊字符处
理,还要对空格、制表符和换行进行转换,以格式化输出至浏览器。
3、用户登录验证 Bean的编写
系统的各级管理员用户需要登录系统以完成管理操作,因此系统需要具有处理验
证用户登录的功能。用户登录验证 Bean接收到页面登录框中传递的值,与数据
库中存储的用户账户和密码核对,若能成功匹配,则验证其为合法用户,否则视
为非法用户,可拒绝其进入系统。
4、字符编码转换 Bean的编写
JSP以 Java为基础,自然也继承了 Java所遇到的中文乱码问题。
/*Tochangethetemplateforthisgeneratedfilegotowindow>preferences>
;jaca>codegeneration>codeandments*/
Packageutil;
Import.*;
PublicclasssTransFormat{
PublicstaticStringunicode2GB(StringstrIn)
Byteb[];
StringstrOut=null;
If(srtIn==null||((()).equals(“”))
ReturnstrIn;
Try{
b=(“GBK”);
strOut=newString(b,”ISO8859-1”)
}
Catch(UnsupportedEncodingExceptione){
}
ReturnstrOut;
}
PublicstaticStringGB2unicode(StringstrIn)
{
StringstrOut=null;
If(strIn==null||((()).equals(“”)))returnsrtIn;
Try{
Byteb[]=(“ISO8859-1”);
strOut=newString(b,”GBK”);}
catch(exceptione){
}
ReturnstrOut;
}
}
5、分页功能模块 Bean的编写
作为管理信息系统,必然会涉及大量数据在前台页面上的列表显示,这就要求系
统具有分页显示数据信息的功能。在这介绍两种完成分页功能的方法,即在 Bean
中实现分页功能和在 JSP页面中实现分页功能。其实现原理都是在数据库中检索
出要显示的记录,根据所设定的每页记录数算出总页数,在页面上时,根据传回
的页码值决定当前要显示的页的记录。
另一种分页的思路是将查询结果缓存在 HttpSession或有状态 Bean中,翻页的
时候从缓存中取出一页数据来显示,这种方法有两个主要的缺点:一是用户可能
看到的是过期数据;二是如果数据量非常大,则第一次查询便历结果集会耗费很
长时间,并且缓存的数据也会占用大量内存,效率明显下降。
还有一种思路是每次翻页的时候只从数据库里检索页面大小的块区的数据。这样
虽然每次翻页都需要查询数据库,但查询出的记录数很少,网络传输数据量不大。
在 Oracle中,这个思路用一句 SQL语句可以大致表示清楚,
Sql=”selecttoppagesize*fromtablewhereid>pagesize*previous_page;”
Bean的一些重要属性代码中有详细注释,这里分析其三个重要方法
setQuerysql,querySql和 Pagefooter的设计
(Stringstr_table,Stringstr_where,Stringhttpfile,Stringp
ages)方法
●功能:接收参数组织 SQL语句,并返回 ResultSet检索结果集。
●传入参数:str_table,分页显示的表名;str_where,分页的 where条件;
httpfile,具体的 JSP文件;pages,获取地址栏传过来的 pages参数。
●返回值:ResuleSet类型,存放检索结果集。
●设计思路:接收输入的四个参数根据输入参数生成检索 SQL语句调用 querySql
方法在数据库中检索将检索结果放入结果集并返回。
(StringCountsql,StringPagisql)方法
●功能:通过接收参数进行页面首尾页判断。
● 传 入 参 数 : Countsql, 总 记 录 的 Query字 符 串 ( 形 式 如
selectcount(*)fromtablename) ;Pagisql,要分页的 Query字符串(形式为
select*fromtablenamewhere…);request,参数传递过程中的变量(用来控制翻
页时的 pages变量)。
●返回值:ResuleSet类型,存放检索结果集。
●设计思路:接收输入参数根据输入 SQL语句调用 sql_bean的 executeQuery方
法检索数据库将检索结果放入结果集并返回。
()方法
●功能:在 HTML页面中输出分页栏。
●返回值:字符串类型。
●设计思路:使用本类中的其他方法得到分页信息将分页信息以 HTML形式存入
字符串返回字符串给调用者
JSP页面中实现分页功能可以根据不同的需求,方便灵活地作出改动,但去不再
具备 Bean的封装、安全、和重用等优势,在这里就不在举例说明了。
(四)界面设计
1、界面头、尾设计
为了节省代码的编写量,我们要考虑将一些常用的、重复性的代码单独提取出来,
然后将其包含到需要的文件中。
JSP的文件包含有两种方法。其一,使用编译指令 Include,例如:
<%@includefile=””%>
Include指令的作用是在 JSP中包含一个静态文件,同时解析这个文件中的 JSP
语句,include指令将会在 JSP编译时插入一个包含命令文本或代码的文件.当使
用 include指令时,这个包含的过程就当是静态的。静态的包含就是只将插入这
个被包含的文件到 JSP文件中去,这个包含的文件可以是 JSP文件、HTML文件或
者文本文件。如果包含的是 JSP文件,将会执行这个包含的 JSP文件中的代码。
使用 JSP的操作指令<JSP:includepage=””>
它也允许包含静态或是动态文件.包含这种文件的结果是不同的,若是静态文
本,那么这种包含仅仅是将包含文件的内容加到 JSP文件中去,如果这个文件是动
态的,那么这个被包含文件先会被 JSP编译器执行,然后将执行结果给引用者.
前者属于 JSP编译指令,它在 JSP文件编译期间将被包含的文件内容插入调用
的位置,作为自己的一部分进行编译;而后者为操作指令,在 JSP文件被客户端访
问时,执行编译后的.class文件时被包含进来。另一个不同之处是,后者可以用
<jsp:paramname=”paraName”value=”paraValue|<%=jspexpression%>”/>子
句给被包含文件传送一个或多个参数。
2、分类查看信息模块设计
作为员工用户,要求能快捷方便地浏览管理员发布的信息。这就要求系统具备逻
辑清晰明确的分类管理和浏览功能。
员工用户访问的页面左侧自上而下依次为系统统计信息、热点信息及最新信
息,这三个栏目方便用户一目了然地了解管理信息系统的大致状况,以便决定是
否继续访问系统。
部门信息查看页面布局左侧为下属部门列表,若用户访问的为一级部门的信息,
则列出当前部门下属的二级部门,用户可单击某个链接,访问属于本二级部门的
信息,此时所选中的二级部门名称会突出显示。
本功能实现的思路主要为参数判断,根据对 request的参数进行判断。
3、信息记录管理模块设计
管理员对信息的管理主要有三个操作:信息的添加、删除和修改。添加操作的界
面效果如图 3-1所示。
图 3-1添加页面效果图
4、管理员管理模块设计
用户管理需要有总管理员添加、删除和修改分类管理员用户等操作。
5、上传附件模块设计
本系统提供附件上传功能,上传至服务器的附件存入程序指定的目录中。如图 3-2所示
图 3-2附件上传页面
(五)程序测试及运行
1、难点与技巧
页面异常处理
JSP程序运行出现错误,将会自动抛出 exception异常,默认情况下,JSP程序
没有设置 errorpage属性时,会将出错跟踪结果输出至客户端。JSP程序中若有
<%@pageerrorpage=”manager/”%>则遇到出错时,将显示中的内容,要注意的是,
在文件中,需要将其 page编译指令的 iserrorpage属性值设为 true,否则将会出
错.
中文乱码问题的解决分析
Java的 javac和 java这两个命令在编译和运行 java程序是会检测系统字符
集,然后按照系统字符集来对字符集进行转换.例如,当在英文系统中运行 javac
时,它所选用的 encode的编码字符集就是 ISO8859-1,也就是说,它在编译时会将
所有的 ISO8859-1的字符创转换成 Unicode,此时如果程序中存在其他字符集,比
如GBK,则不做任何转换,仍然按照GBK字符正常输出.因此,在英文环境下,中文可
以正常输出.在使用 JDBC时,有些 Driver会将从数据库中读出的中文自动地转换
成 Unicode,而有些不会,如果 Driver做过转换而系统又再做一次,就会出现问题,
也就是常见的”??”。
在 JSP中,我们通过在 HTML的 head标签中加入以下 meta信息解决这个问题
<metaHTTP-EQUIV=”content-type”CONTENT=”text/;charset=GBK”>
其作用是告诉客户端浏览器,这个 HTML为 GBK编码文件。在 JSP中加入以下
的一句编译指令,定义 JSP程序使用字符集为 GBK:
<%@pagecontentType=”text/;charset=GBK”%>
在 JSP和 Bean中加载数据库驱动
使用 JDBC与数据库的连接可以使用连接池,也可以在 JSP程序中或是在 Bean中
加载数据库驱动,后者常用的又有 JDBC-ODBCBridge和直接连接数据库的纯 java
驱动两种途径,JDBC-ODBCBridge技术可以实现 JDBC到 ODBC的转化,这样 java程
序就可以访问带 ODBC专用驱动程序的数据库,直接连接数据库的纯 java驱动将
JDBC调用转换为数据库系统直接使用的网络协议,允许从客户机直接调用数据库
系统的服务。
………
<body>
<%(“.”).newInstance();
Stringurl=”jdbc:oracle:thin:@localhost:1521:databaseName”;
Stringuser=”userName”;
Stringpassword=”password”;
Connectionconn=(url,use,password);
Statement………
………
%>
注意事项
●建立 Bean类的时候要注意,java的类名必须和类的文件名称相同,否则编译将
会出错。
● JSP应用系统的文件结构。在 Weblogic的配置文件中加入如下标签:
<weblogic-web-app>
<container-descriptor>
<index-directory-enabled>true</index-directory-enabled>
</container-descriptor>
<context-root>/</context-root>
</weblogic-web-app>
三、结论
通过以上的开发流程和一些重要步骤分析,这样一个基本上满足需求的管理信息
系统已经初步完成,如前所述,程序中更多使用的是 JSP的基本方法和技巧。
本系统具备较完善的信息管理功能,通过使用本系统,企业内部员工用户和
高层管理用户实现直达式交流,是沟通更具备实时性和准确性,能够有效地提高
工作效率。它更大的优点是在于它具有高可靠性和方便的移植性,以及优秀的平
台开发解决方案。
参考文献
[1]JSP数据库开发汪孝宜刘中兵等编著电子工业出版社出版
[2]:Metadatabase,Ne
,1996,10(1):65~84
[3],199
8,43(2):89~91[4]Eclipse入门开发与实践张桂元贾燕枫编著人民邮电出版社
出版
河北工业职业技术学院
毕业设计
设计题目:密云县农业信息管理决策系统
系别 计算机技术系
专业年级 计算机软件
学生姓名 赵锐 学号 33
指导教师 职称
设计地点 北京金网汇科技发展有限公司
日期 2006年 5月 14日
感谢阅读