上面对环境配置完毕。在开始编码之前,先来设计新闻发布系统,包括设计页面、设计业务逻辑和设计数据库。
为了示例方便,这里的页面都没有使用图片。
从前面的实例说明可以知道,这个实例需要如下一些页面:新闻发布的展示页面show.html、发布新闻页面release.html、用户注册页面regedit.html、管理员登录页面login.html和错误处理页面error.html。
(1)新闻发布的展示页面show.html,如图14.12所示。
图14.12 新闻发布的展示页面
该页面主要用来显示用户发布的新闻,并按照新闻类别来显示。每个新闻类别下显示5条新闻,其他新闻使用“更多内容”来进行查看。其中新闻类别分为新闻中心、公司文件、规章制度和会议纪要。
show.html的源代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新闻发布的展示页面</title>
<style type="text/css">
<!--
.style1 {font-family: "隶书"}
-->
</style>
</head>
<body>
<table width="100%" height="100%" border="1" cellpadding="0" cellspacing="0" >
<tr height="100%">
<td height="20"><strong>新闻中心</strong></td>
<td><strong>公司文件</strong></td>
</tr>
<tr height="100%">
<td height="150"><ol>
<li>中共××公司支部委员会胜利召开</li>
<li>××公司自主管理活动显成效</li>
<li>普及法律合同知识,增强规避风险能力</li>
<li>自主管理活动工作介绍</li>
<li>自主管理活动遍地开花</li>
</ol></td>
<td><ol>
<li>关于改变中午午休的通知</li>
<li>关于任命××为厂长的通知</li>
<li>关于开展自主管理活动的通知</li>
<li>关于对上半年工作进行总结的通知</li>
<li>召开人力资源专题会议的通知</li>
</ol></td>
</tr>
<tr height="100%" style=" border-top-width:0">
<td height="15" style=" border-top-width:0"><div align="right" class="style1" >》更多内容</div></td>
<td style=" border-top-width:0"><div align="right" class="style1" >》更多内容</div></td>
</tr>
<tr height="100%">
<td height="20"><strong>规章制度</strong></td>
<td><strong>会议纪要</strong></td>
</tr>
<tr height="100%">
<td height="150"><ol>
<li>设备维修管理制度</li>
<li>计算机管理制度</li>
<li>办公用品发放管理制度</li>
<li>工程项目审计实施办法</li>
<li>会计档案管理制度</li>
</ol></td>
<td><ol>
<li>××公司部长例会会议纪要</li>
<li>××公司双周例会会议纪要</li>
<li>2006年5月人力资源专业例会会议纪要</li>
<li>2006年一季度财务专业例会会议纪要</li>
<li>××公司2005年品种开发会议纪要</li>
</ol></td>
</tr>
<tr height="100%">
<td height="15" style=" border-top-width:0"><div align="right" class="style1" >》更多内容</div></td>
<td style=" border-top-width:0"><div align="right" class="style1" >》更多内容</div></td>
</tr>
</table>
</body>
</html>
(2)发布新闻页面release.html,如图14.13所示。
图14.13 发布新闻页面
该页面主要用来发布新闻,用户填写新闻标题、新闻内容和选择新闻类别,系统自动输出发布时间和发布人。
release.html的源代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>发布新闻页面</title>
<style type="text/css">
<!--
.style1 {
font-size: large;
font-weight: bold;
}
-->
</style>
</head>
<body>
<form name="form1" method="post" action="">
<table width="100%" height="160" border="1" cellpadding="0" cellspacing="0">
<tr>
<td height="17" colspan="2"><div align="center" class="style1">发布新闻</div></td>
</tr>
<tr>
<td width="126" height="19"><strong>新闻标题</strong></td>
<td width="560">计算机管理制度</td>
</tr>
<tr>
<td height="73"><strong>新闻内容</strong></td>
<td><p><strong>1</strong><strong>、总则</strong></p>
<p align="left">1.1为规范计算机及相关设备管理,促进计算机的有效合理使用,提高工作效率,特制定本管理办法。</p>
<p>1.2 本办法适用于×××机械制造有限公司(以下简称公司)及公司本部(以下简称本部)。</p>
<p>1.3 计算机及相关设备是公司配给员工的办公工具,属于公司固定资产,由公司人力资源处与本部综合室统一管理,公司经营处统一采购。</p>
<p><strong>2</strong><strong>、设备的定义与分类</strong></p>
<p>2.1 计算机包括:台式计算机、笔记本电脑、服务器、掌上电脑(PDA)等。</p>
<p>2.2 计算机相关设备包括:数码照相机、数码摄像机、扫描仪、投影仪、打印机、传真机、复印机、网络设备、计算机软件,以及可以与计算机相连的办公设备及其支持软件等。</p>
<p>2.3计算机按照性能分为:普通型机型和增强型机型两类,二者主要在配置上有差异。<strong> </strong></p>
<p><strong>3</strong><strong>、计算机及相关设备的配置标准</strong></p>
<p>3.1为加强公司内部计算机的可管理性,逐步实现公司内部统一品牌和统一售后服务,配合公司的集团化采购思想,由公司人力资源处信息化室确定品牌和机型。(计算机的配置标准见附件一)</p>
<p> </p>
</td>
</tr>
<tr>
<td height="19" colspan="2"><strong>发布时间:</strong>2006-06-05 <strong>发布人</strong>:gd <strong>新闻类别</strong>:
<select name="select">
<option>新闻中心</option>
<option selected>规章制度</option>
<option>会议纪要</option>
<option>公司文件</option>
</select></td>
</tr>
<tr>
<td height="18"> </td>
<td><input type="submit" name="Submit" value="提交">
<input type="submit" name="Submit" value="修改">
<input type="submit" name="Submit" value="删除"></td>
</tr>
</table>
</form>
</body>
</html>
(3)用户注册页面regedit.html,如图14.14所示。
图14.14 用户注册页面
该页面主要用来注册用户,包括注册用户名和密码。
regedit.html的源代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用户注册画面</title>
</head>
<body>
<form name="form1" method="post" action="">
<table width="100%" height="251" border="1" cellpadding="0" cellspacing="0">
<tr>
<td height="17" colspan="2"><div align="center"><strong>注册用户</strong></div></td>
</tr>
<tr>
<td width="18%"><strong>用户名:</strong></td>
<td width="82%"><input type="text" name="textfield"></td>
</tr>
<tr>
<td><strong>密码:</strong></td>
<td><input type="password" name="textfield"></td>
</tr>
<tr>
<td><strong>确认密码:</strong></td>
<td><input type="password" name="textfield"></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="注册">
<input type="reset" name="Submit" value="重置">
</div></td>
</tr>
</table>
</form>
</body>
</html>
(4)管理员登录页面login.html,如图14.15所示。
图14.15 管理员登录页面
该页面主要用来进行新闻发布前的登录,如果管理员登录成功,则直接跳转至发布新闻的页面。
login.html的源代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>管理员登录页面</title>
</head>
<body>
<form name="form1" method="post" action="">
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2"><div align="center"><strong>管理员登录</strong></div></td>
</tr>
<tr>
<td height="41"><strong>用户名:</strong></td>
<td><input type="text" name="textfield"></td>
</tr>
<tr>
<td height="40"><strong>密码:</strong></td>
<td><input type="password" name="textfield"></td>
</tr>
<tr>
<td height="49"><strong>确认密码:</strong></td>
<td><input type="password" name="textfield"></td>
</tr>
<tr>
<td height="83" colspan="2"><div align="center">
<input type="submit" name="Submit" value="登录">
<input type="reset" name="Submit" value="重置">
</div></td>
</tr>
</table>
</form>
</body>
</html>
(5)错误处理页面error.html,如图14.16所示。
图14.16 错误处理页面
该页面主要用来显示在示例运行过程中的错误信息。
error.html的源代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>错误处理页面</title>
<style type="text/css">
<!--
.style1 {
color: #000000;
font-weight: bold;
}
.style2 {color: #FF0000}
-->
</style>
</head>
<body>
<table width="100%" border="1">
<tr>
<td colspan="2"><div align="center"><strong>错误信息显示</strong></div></td>
</tr>
<tr>
<td width="22%" height="141"><span class="style1">错误信息是:</span></td>
<td width="78%"><span class="style2">SQL出错,请查看SQL语句是否符合语法规范。</span></td>
</tr>
</table>
</body>
</html>
通过上面的介绍和分析,可以知道,在该应用程序中,至少需要以下一些持久化类:负责用户基本信息的类User.java、负责用户权限的类UsersAuthor.java、负责新闻类别的类NewsType.java和负责新闻的类News.java。
这里使用Together来画UML图。对于Together的使用方法这里不再进行讲解,读者可以使用其他的工具,方法基本类似。这里首先画一个整体包结构图,如图14.17所示。
(1)负责用户基本信息的类User.java,主要用来存储用户的基本信息以及对用户的信息进行验证。用户类的UML图如图14.18所示。
图14.17 整体包结构图 图14.18 用户类的UML图
由Together自动生成的用户类的源代码如下:
//******* User.java**************
package com.gd.vo;
public class User {
public String getMsg(){
return msg;
}
public void setMsg(String msg){
this.msg = msg;
}
public String getPassword2(){
return password2;
}
public void setPassword2(String password2){
this.password2 = password2;
}
public String getPassword1(){
return password1;
}
public void setPassword1(String password1){
this.password1 = password1;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public boolean validate() {
}
private String msg;
private String password2;
private String password1;
private String username;
}
代码说明:
● msg,用来存储该用户类的消息。
● password1,用来存储用户第一次输入的密码。
● password2,用来存储用户第二次输入的密码。
● username,用来存储用户名。
(2)负责用户权限的类UsersAuthor.java,主要用来存储用户的权限信息。用户权限类的UML图如图14.19所示。
因为UsersAuthor类依赖于User类,所以这里给出用户类和用户权限类之间的关联图,如图14.20所示。
图14.19 用户权限类的UML图 图14.20 用户类和用户权限类之间的关联图
由Together自动生成的用户权限类的源代码如下:
//******* UsersAuthor.java**************
package com.gd.vo;
public class UsersAuthor {
public void setUsersAuthor(User lnkUser, int power) {
lnkUser = lnkUser;
power = power;
}
public int getAuthorByUser(User lnkUser) {
return power;
}
public UsersAuthor(User lnkUser, int power) {
lnkUser = lnkUser;
power = power;
}
private int power;
/**
* @clientCardinality 1
* @supplierCardinality 0.n
*/
private User lnkUser;
}
代码说明:power,表示用户拥有的权限,如果power为0表示普通用户,如果power为1表示超级用户。
(3)负责新闻类别的类NewsType.java,主要用来存储新闻类别的信息。新闻类别类的UML图如图14.21所示。
图14.21 新闻类别类的UML图
由Together自动生成的新闻类别类的源代码如下:
//******* NewsType.java**************
package com.gd.vo;
public class NewsType {
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getTypename(){
return typename;
}
public void setTypename(String typename){
this.typename = typename;
}
public String getTypeById (int id) {
return typename;
}
private int id;
private String typename;
}
(4)负责新闻的类News.java,主要用来存储新闻的信息。新闻类的UML图如图14.22所示。
因为News类依赖于User类和新闻类别类,所以这里给出用户类、新闻类和新闻类别类之间的关联图,如图14.23所示。
图14.22 新闻类的UML图 图14.23 用户类、新闻类和新闻类别类之间的关联图
由Together自动生成的新闻类的源代码如下:
//******* News.java**************
package com.gd.vo;
public class News {
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getMsg(){
return msg;
}
public void setMsg(String msg){
this.msg = msg;
}
public String getHead(){
return head;
}
public void setHead(String head){
this.head = head;
}
public String getContent(){
return content;
}
public void setContent(String content){
this.content = content;
}
public Date getDate(){
return date;
}
public void setDate(Date date){
this.date = date;
}
//根据新闻类别的id获取新闻
public List getNewsByType(int id) {
}
//保存新闻
public void saveNews(New new) {
}
private int id;
private String msg;
private String head;
private String content;
private Date date;
/**
* @clientCardinality n
* @supplierCardinality 1
*/
private NewsType lnkNewsType;
/**
* @clientCardinality n
* @supplierCardinality 1
*/
private User lnkUser;
}
经过分析可以知道,在该应用中,主要有用户信息、用户的授权信息、新闻类别和新闻等内容需要存储,所以对数据库表的设计也主要从这几个方面来考虑。
(1)存储用户信息的表,表名为user,主要字段有username和password,主键为username。
(2)存储用户授权信息的表,表名为userAuthor,主要字段有username和power,主键为username和power。
(3)存储新闻类别的表,表名为newsType,主要字段有id和type,主键为id。
(4)存储新闻的表,表名为news,主要字段有id、head、content、issuedate、issueuser和newstype,主键为id。
%注意:上面设计的数据库表是为了演示使用。如果是在实际的应用中,笔者建议每个表都加上id,然后表之间的关联用id来实现。这样就把表之间的管理和业务逻辑的变化分离开了,降低了业务逻辑和表之间的耦合性。
经过上面对页面、持久类和数据库的设计,最终可以得到一个新闻发布系统在持久层的整体UML图,如图14.24所示。
图14.24 新闻发布系统在持久层的整体UML图