`
WithMemores
  • 浏览: 1089 次
  • 性别: Icon_minigender_1
  • 来自: 河南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

DAO设计问题

阅读更多
最近由于项目限制使用JDK1.4(没有办放使用泛型DAO)所以设计了一个DAO如下

public interface Dao {
	public abstract List getList(int first,int max) throws Exception;
	public abstract int getTotal()throws Exception;
}

public abstract class AbsDao extends HibernateDaoSupport implements Dao {
	
	/**
	 *@return List 以集合形式返回符合HQL语句中实体 
	 *@param int max 最大记录数
	 *@param int first 第一条记录的位置
	 */
	public List getList(final int first,final int max)throws Exception{
		
		return super.getHibernateTemplate().executeFind(
			new HibernateCallback(){
				public Object doInHibernate(Session session) throws HibernateException,SQLException{
					try{
						return session.createQuery("from "+getTableName()).setFirstResult(first).setMaxResults(max).list();
					}
					catch(Exception e){
						throw new HibernateException(e);
					}
				}
			}
		); 
	}
	
	/**
	 * @return int count 返回HQL查询的记录数
	 * @param String HQL 统计的HQL语句
	*/
	public int getTotal() throws Exception {
		return ((Integer)super.getSession().createQuery("select count(*) from "+getTableName()).uniqueResult()).intValue();
	}
	
	/**
	 * @return String TableName
	 * */
	private String getTableName()throws Exception{
		return this.getClass().getName().substring(this.getClass().getName().lastIndexOf(".")+1, this.getClass().getName().length()-3);
	}
}


///这个是工具生成的修改了继承,使得为分页作准备。
public class UserinfoDAO extends AbsDao {}


//这个是伪泛型的DAO
public class DaoImpl extends AbsDao{
	/**
	 *@return List 以集合形式返回符合HQL语句中实体 
	 *@param String HQL  要执行的HQL语句
	 */
	public List getList(String HQL)throws Exception{
		return super.getHibernateTemplate().find(HQL);
	}
	
	/**
	 *将Object写入数据库 
	 *@param Object o  要保存的对象
	 */
	public void save(Object o)throws Exception{
		super.getHibernateTemplate().save(o);
	}
	
	/**
	 *将List(Object)写入数据库 
	 *@param List list(Object)  要保存的对象数组列表
	 */
	public void saveAll(List list)throws Exception{
		super.getHibernateTemplate().save(list);
	}
	
	/**
	 *将Object更新 
	 *@param Object o  要跟新的对象
	 */
	public void update(Object o)throws Exception{
		super.getHibernateTemplate().update(o);
	}
	
	
	/**
	 *将Object更新 
	 *@param List list(Object)  要更新的对象数组列表
	 */
	public void updateAll(List list)throws Exception{
		super.getHibernateTemplate().update(list);
	}
	

	/**通过SQL语句直接操作数据库
	 * @param String HQL;
	*/
	public void excuteSQL(String HQL) throws Exception {
		super.getHibernateTemplate().find(HQL);
	}

}



服务层
public interface PageService{
	public abstract int getPageSize()throws Exception;
	public abstract void setPageSize(int pageSize)throws Exception;

	public abstract int getTotal() throws Exception;
	public abstract int getPageCount()throws Exception;
	public abstract List getFirstPage() throws Exception;
	public abstract List getLastPage() throws Exception;
	public abstract List getPreviousPage(int currentPage)throws Exception;
	public abstract List getNextPage(int currentPage)throws Exception;
	public abstract List getPointPage(int pointPage)throws Exception;

}

public abstract class AbsPageService implements PageService {
	/**
	 * @return int 数据库中记录总数
	 * */
	public int getTotal() throws Exception {
		return getDao().getTotal();
	}
	
	/**
	 *@return int totalpage 返回分页数 
	 *@param int PageSize 页面的记录数
	 */
	public int getPageCount(int PageSize) throws Exception {
		return ((getTotal()+PageSize)-1)/PageSize;
	}

	/**
	 *@return List 返回指定页面的记录  注意这个方法提供给接口方法
	 *@param int PointPage 指定的页面
	 *@param int PageSize 页面的记录数
	 */
	public List getPointPage(int PointPage, int PageSize) throws Exception {
		if(PointPage>=0&&PointPage<=getPageCount(PageSize)){
			return getDao().getList((PointPage-1)*PageSize, PageSize);
		}
		else{
			return null;
		}
	}
	
	//以下是接口方法
	/**
	 *@return List 返回第一页的记录
	 **/
	public List getFirstPage() throws Exception{
		return this.getPointPage(1, PageSize);
	}
	
	/**
	 * @return List 返回最后一页
	 * */
	public List getLastPage() throws Exception{
		return this.getPointPage(this.getPageCount(PageSize), PageSize);
	}
	
	/**
	 * @return List 返回前一页的数据
	 * @param int currentPage 当前页
	 * */
	public List getPreviousPage(int currentPage)throws Exception{
		if(currentPage>1&&this.getTotal()>currentPage){
			return this.getPointPage(currentPage-1, PageSize);
		}
		else{
			return null;
		}
	}
	
	/**
	 * @return List 返回后一页的数据
	 * @param int currentPage 当前页
	 * */
	public List getNextPage(int currentPage)throws Exception{
		if(this.getTotal()>=(currentPage+1)&&(currentPage+1)>0){
			return this.getPointPage(currentPage+1, PageSize);
		}
		else{
			return null;
		}
	}
	
	/**
	 * @return List 返回当前页的数据
	 * @param int currentPage 当前页
	 * */
	public List getPointPage(int pointPage)throws Exception{
		if(this.getTotal()>=(pointPage)&&(pointPage)>0){
			return this.getPointPage(pointPage, PageSize);
		}
		else{
			return null;
		}
	}
	
	/**
	 * @return int 总页面数
	 * */
	public int getPageCount() throws Exception {
		return this.getPageCount(this.getPageSize());
	}
	//注入方法
	public int getPageSize() {
		return PageSize;
	}

	public void setPageSize(int pageSize) {
		PageSize = pageSize;
	}
	
	public Dao getDao() {
		return dao;
	}

	public void setDao(Dao dao) {
		this.dao = dao;
	}
	
	private int PageSize=10;
	private Dao dao;
}

public interface UserinfoService {
	public abstract void regist(Userinfo ui)throws Exception;
	public abstract void delete(Integer userinfoid)throws Exception;
	public abstract void update(Userinfo ui)throws Exception;
	public abstract Map manager(String pointPage,String operator)throws Exception;
	public abstract Userinfo find(Integer userinfoid)throws Exception;
	
}

public class UserinfoServiceImpl extends AbsPageService implements PageService,UserinfoService{
	/**
	 * 用户的删除方法
	 * @param Integer userinfoid
	 * */
	public void delete(Integer userinfoid) throws Exception {
		((UserinfoDAO)super.getDao()).delete(((UserinfoDAO)super.getDao()).findById(userinfoid));
	}
	
	/**
	 * 用户的查找方法
	 * @return Userinfo
	 * @param Integer userinfoid
	 * */
	public Userinfo find(Integer userinfoid) throws Exception {
		return ((UserinfoDAO)super.getDao()).findById(userinfoid);
	}
	
	/**
	 * 用户的管理方法
	 * @param String pointPage 当前页
	 * @param String operator 操作
	 * */
	public Map manager(String pointPage,String operator) throws Exception {
		this.setAph(new PageHold());
		this.getAph().setPs(this);
		return this.getAph().getUpsPage(pointPage, operator);
	}

	/**
	 * 用户的注册方法
	 * @param Userinfo userinfo
	 * */
	public void regist(Userinfo ui) throws Exception {
		((UserinfoDAO)super.getDao()).save(ui);		
	}

	/**
	 * 用户的更新方法
	 * @param Userinfo userinfo
	 * */
	public void update(Userinfo ui) throws Exception {
		((UserinfoDAO)super.getDao()).merge(ui);		
	}
	
	public AbsPageHold getAph() {
		return aph;
	}

	public void setAph(AbsPageHold aph) {
		this.aph = aph;
	}
	
	private AbsPageHold aph;

}



工具类
public abstract class AbsPageHold {
	/**
	 * 获取页面的逻辑
	 * @return Map map
	 * @param String pointPage 当前页
	 * @param String operator 操作符 
	 * */
	public Map getUpsPage(String pointPage,String operator)throws Exception{
		Map map=null;
		try{
			if(operator==null){
				map=this.getFirstPage();
			}
			else if(operator.equals("first")){
				map=this.getFirstPage();
			}
			else if(operator.equals("previous")){
				map=this.getPreviousPage(pointPage);
			}
			else if(operator.equals("next")){
				map=this.getNextPage(pointPage);
			}
			else if(operator.equals("jump")){
				map=this.getJumpPage(pointPage);
			}
			else if(operator.equals("last")){
				map=this.getLastPage();
			}
			else{
				map=this.getFirstPage();
			}
		}
		catch(Exception e){
			System.out.println(e);
		}
		return map;
	}
	
	/**
	 * 分页所需要的帮助类
	 * */
	public Map getMap()throws Exception{
		Map map=new HashMap();
		map.put("totalCount",new Integer(this.getPs().getTotal()));
		map.put("totalPage", new Integer(this.getPs().getPageCount()));
		return map;
	}
	
	//模板方法
	public abstract Map getFirstPage()throws Exception;
	public abstract Map getLastPage()throws Exception;
	public abstract Map getNextPage(String pointPage)throws Exception;
	public abstract Map getPreviousPage(String pointPage)throws Exception;
	public abstract Map getJumpPage(String pointPage)throws Exception;
	
	//注入 
	public PageService getPs() {
		return ps;
	}
	public void setPs(PageService ps) {
		this.ps = ps;
	}
	private PageService ps;
}

public class PageHold extends AbsPageHold{
	
	public Map getFirstPage() throws Exception {
		Map map=super.getMap();
		map.put("pointPage", "1");
		map.put("list", this.getPs().getFirstPage());
		return map;
	}

	public Map getJumpPage(String pointPage) throws Exception {
		Map map=super.getMap();
		int i=Integer.parseInt(pointPage);
		List list=this.getPs().getPointPage(i);
		if(list!=null){
			map.put("pointPage", ""+(i));
			map.put("list", list);
		}
		else{
			map.put("pointPage", "1");
			map.put("list", this.getPs().getFirstPage());
		}
	
		return map;
	}

	public Map getLastPage() throws Exception {
		Map map=super.getMap();
		map.put("pointPage",((Integer)map.get("totalPage")).toString());
		map.put("list",this.getPs().getLastPage());
		return map;
	}


	public Map getNextPage(String pointPage) throws Exception {
		Map map=super.getMap();
		int i=Integer.parseInt(pointPage);
		List list=this.getPs().getNextPage(i);
		if(list!=null){
			map.put("pointPage", ""+(i+1));
			map.put("list", list);
		}
		else{
			map.put("pointPage", ""+this.getPs().getPageCount());
			map.put("list", this.getPs().getLastPage());
		}
	
		return map;
	}

	public Map getPreviousPage(String pointPage) throws Exception {
		Map map=super.getMap();
		int i=Integer.parseInt(pointPage);
		List list=this.getPs().getPreviousPage(i);
		if(list!=null){
			map.put("pointPage", ""+(i-1));
			map.put("list", list);
		}
		else{
			map.put("pointPage", "1");
			map.put("list",this.getPs().getFirstPage());	
		}
		return map;
	}

}
。


现在问题是。我没有办法写一个通用的DAO接口实现CURD。
用伪泛型DAO无法解决注入问题。还有伪泛型DAO怎么处理SQL语句?放在Service层么?
似乎不怎么合适。
还有就是分页的时候PAGEHOLD(分页)和Userinfo相互交叉。
DTO传输应该放在什么地方?
等诸如此类的问题。请指点一下。
分享到:
评论
11 楼 WithMemores 2008-09-01  
tianwill 写道
提个建议,分页器那段,分页器里多个法在多次调用getTotal()方法,而getTotal()需要读取数据库,建议加个属性保存下total的值,就不用多次读数据库。


恩。谢谢.
10 楼 levyliu 2008-08-31  
(main.html)
*************
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="971" height="715"  BORDER=0 align="center" CELLPADDING=0 CELLSPACING=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
   <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
     <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;">
<div id="leftnav">
<div class="nav_heading">
  <input name="button" type="button" value="User Manager"/>
</div>
<div style="">
<a href="#">View Users </a>
<a href="#">Add User </a> </div>
<div class="nav_heading">
<input type="button" value="Test Case Manager"/></div>
<div>
<a href="#">View Test Case </a>
<a href="#">Add Test Case </a>
<a href="#">Search Test Case </a></div>
<div class="nav_heading">
<input type="button" value="Product&Module"/></div>
    <div>
<a href="#">View Products </a>
<a href="#">Add Product </a>
<a href="#">Add Module </a></div>
  </div> </td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809">&nbsp;</td>
</tr>

  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >copyright</th>
  </tr>
</table>
</body>
</html>
********************
********************
(add user.html)
****
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Add User</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="adduser.js"></script>
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->

        <table width="677" height="379" cellspacing="0" id="addusertable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="93%" align="left" >
            <tr>
              <td  width="31%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> ADD USER </td>
              <td width="69%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
       <form action="kk.do" name="bloguserForm">
            <tr>
              <th width="172" height="73" class="nobg" scope="col" abbr="Configurations" style="text-align:right">WORKER num </th>
  <th width="582" class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="usernum" style=" height:16px;width:180px"/></th>

            </tr>
<tr>
               <th height="71" class="nobg" scope="col" abbr="Configurations" style="text-align:right">Worker name </th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:16px;width:180px"/></th>
            </tr>
<tr>
              <th height="67" class="nobg" scope="col" abbr="Configurations" style="text-align:right">e-mail</th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="mailbox" style=" height:16px;width:180px"/></th>
            </tr>
<tr>
               <th height="66"  class="nobg" scope="col" abbr="Configurations" style="text-align:right">department</th>
  <th class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="department" style=" height:16px">
  <option value="" selected>Department one</option>
   <option value="" >Department two</option>
  </select></th>
  
            </tr>
      
          <tr>
              <th height="65" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:90px"><input type="button" value="SUBMIT" onclick="return checkform();"/>
                 &nbsp;
                 <input name="RESET" type="reset" value="CANCEL"/></th>
 
          </tr>
       </form>
    
      </table>
  </td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

*************
************
(login.html)
***********
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Login</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="login.js"></script>
</head>

<body>
      <table width="677" height="148" cellspacing="0" align="center" id="addusertable" style="margin-top:180px">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="100%" align="left" >
            <tr>
              <td  width="100%%" style="font:Arial; font-size:19px;text-align:left;background-color:#C1DAD7;border:0px;text-align:center">Welcome to test case manager system</td>
             
            </tr>
          </table>
          </caption>
       <form action="kk.do" name="loginForm">
            <tr>
              <th width="327" height="30" class="nobg" scope="col" abbr="Configurations" style="text-align:right">Worker Name </th>
  <th width="425" class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="username" style=" height:16px;width:180px"/></th>
            </tr>
<tr>
               <th height="25" class="nobg" scope="col" abbr="Configurations" style="text-align:right">password  </th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="password" name="userpassword"  style=" height:16px;width:180px"/></th>
            </tr>
<tr>
              <th height="26" class="nobg" scope="col" abbr="Configurations" style="text-align:right">e-mail</th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="commission" id="commission" style=" height:16px">
   <option value="" selected></option>
   <option value="1">common user</option>
   <option value="2">Admin</option>
  </select></th>
            </tr>
      
          <tr>
              <th height="65" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:225px"><input type="button" value="SUBMIT" onclick="return checkLoginform();"/>
                 &nbsp;
                 <input name="RESET" type="reset" value="CANCEL"/></th>
          </tr>
       </form>
</table>
</body>
</html>
*****************
*****************
(productlist.html)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Product List</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->
        <table width="714" cellspacing="0" id="mytable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="100%" >
            <tr>
              <td  width="44%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px">Product List </td>
              <td width="56%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px"> TOTAL RECORD: 11 Items </td>
            </tr>
          </table>
          </caption>
          <thead>
            <tr>
              <th width="157" class="nobg" scope="col" abbr="Configurations">Product num </th>
              <th width="225" scope="col" abbr="Dual 1.8">product name </th>
              <th width="142" scope="col" abbr="Dual 2" style="background:#FF5F00;">view modules </th>
              <th width="147" scope="col" abbr="Dual 2.5" style="background:#FF5F00;">view testcase </th>
              <th width="77" scope="col" abbr="Dual 2" style="background:#FF5F00;">EDIT</th>
           
            </tr>
          </thead>
          <thead>
          </thead>
          <tbody>
            <tr>
              <th scope="row" abbr="Model" class="spec">lipeng</th>
              <td>M9454LL/A</td>
              <td id="EDIT"><a href="#">VIEW TESTCASE</a></td>
              <td id="EDIT"><a href="#">VIEW MODULE </a></td>
              <td id="EDIT"><a href="#">EDIT</a></td>
        
            </tr>
            <tr>
              <th scope="row" abbr="G5 Processor" class="specalt">mapabc</th>
              <td class="alt">Dual 1.8GHz PowerPC G5</td>
              <td class="alt" id="EDIT">Dual 2GHz PowerPC G5</td>
              <td class="alt" id="EDIT">Dual 2.5GHz PowerPC G5</td>
              <td class="alt" id="EDIT">EDIT</td>
        
            </tr>
            <tr>
              <th height="30" class="spec" scope="row" abbr="Frontside bus">d</th>
              <td>900MHz per processor</td>
              <td  id="EDIT">1GHz per processor</td>
              <td id="EDIT">1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">512K per processor</td>
              <td class="alt" id="EDIT">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
            
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td id="EDIT">1GHz per processor</td>
              <td id="EDIT">1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
             
            </tr>
        
       
          </tbody>
      </table>
      <!--分页-->
        <div id="pagenation" style=" padding-left:100px; padding-right:100px; margin-top:10px; margin-bottom:20px">
          <table id="pageTable" width="100%" border="0" cellpadding="0px" cellspacing="0px" >
            <tr>
              <th width="40%" scope="row" style="text-align:right"><a href="#">PREVIOUS PAGE</a> </th>
              <td ><a href="#">1</a></td>
              <td ><a href="#">2</a></td>
              <td ><a href="#">3</a></td>
              <td ><a href="#">4</a></td>
              <td ><a href="#">5</a></td>
              <td width="40%" style="text-align:left"><a href="#">NEXT PAGE</a> </td>
            </tr>
          </table>
        </div></td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

*************
**************
(userlist.html)
**********
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>无标题文档</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->
        <table width="760" cellspacing="0" id="mytable" >
          <caption align="left" font-weight:bold" width="700px">
          <table cellpadding="0" cellspacing="0" border="0" width="100%" >
            <tr>
              <td  width="44%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> USER LIST </td>
              <td width="56%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px"> TOTAL RECORD: 11 Items </td>
            </tr>
          </table>
          </caption>
          <thead>
            <tr>
              <th width="114" class="nobg" scope="col" abbr="Configurations">Worker Num </th>
              <th width="147" scope="col" abbr="Dual 1.8">Name</th>
              <th width="187" scope="col" abbr="Dual 2">e-mail</th>
              <th width="153" scope="col" abbr="Dual 2.5">department</th>
              <th width="48" scope="col" abbr="Dual 2" style="background:#FF5F00;">EDIT</th>
              <th width="97" scope="col" abbr="Dual 2.5" style="background:#FF5F00;">Test Case</th>
            </tr>
          </thead>
          <thead>
          </thead>
          <tbody>
            <tr>
              <th scope="row" abbr="Model" class="spec">lipeng</th>
              <td>M9454LL/A</td>
              <td>M9455LL/A</td>
              <td>M9457LL/A</td>
              <td id="EDIT"><a href="#">EDIT</a></td>
              <td id="VIEW"><p><a href="#">VIEW</a></p></td>
            </tr>
            <tr>
              <th scope="row" abbr="G5 Processor" class="specalt">mapabc</th>
              <td class="alt">Dual 1.8GHz PowerPC G5</td>
              <td class="alt">Dual 2GHz PowerPC G5</td>
              <td class="alt">Dual 2.5GHz PowerPC G5</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th height="30" class="spec" scope="row" abbr="Frontside bus">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">Edit</td>
              <td class="alt" id="VIEW">View</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">Edit</td>
              <td id="VIEW">View</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">Edit</td>
              <td class="alt" id="VIEW">View</td>
            </tr>
          </tbody>
        </table>
      <!--分页-->
        <div id="pagenation" style=" padding-left:100px; padding-right:100px; margin-top:10px; margin-bottom:20px">
          <table id="pageTable" width="100%" border="0" cellpadding="0px" cellspacing="0px" >
            <tr>
              <th width="40%" scope="row" style="text-align:right"><a href="#">PREVIOUS PAGE</a> </th>
              <td ><a href="#">1</a></td>
              <td ><a href="#">2</a></td>
              <td ><a href="#">3</a></td>
              <td ><a href="#">4</a></td>
              <td ><a href="#">5</a></td>
              <td width="40%" style="text-align:left"><a href="#">NEXT PAGE</a> </td>
            </tr>
          </table>
        </div></td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

***********
***************
(add product.html)
***
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Add Product</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="adduser.js">
</script>
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->
<form action="main1.html" name="productForm" method="get">
        <table width="677" height="165" cellspacing="0" id="addusertable" style="margin-left:50px" >
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="93%" align="left">
 
            <tr>
              <td  width="31%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> Add Product</td>
              <td width="69%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
     
            <tr>
              <th width="172" height="43" class="nobg" scope="col" abbr="Configurations" style="text-align:right">product num </th>
  <th width="582" class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="num" value="" style=" height:16px;width:180px"/></th>

            </tr>
<tr>
               <th height="41" class="nobg" scope="col" abbr="Configurations" style="text-align:right">product name </th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name" value=""  style=" height:16px;width:180px"/></th>
            </tr>

          <tr>
               <th height="36" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><a href="#" onclick="showAddModuleList()" style="text-decoration:none;color: red;font-weight:bold;">Add module</a>  </th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px">
  
   <div id="addmoduleofProduct">
  <select onchange="bao(this.options[this.options.selectedIndex].value,this.options[this.options.selectedIndex].text)">
               <option value="apple">苹果</option>
               <option value="orange">桔子</option>
               <option value="mango">芒果</option>
               </select>
   </div></th>
          </tr>
 
 
 
   <tr>
               <th height="36" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><a href="#" onclick="showAddModuleList1()" style="text-decoration:none;color: red;font-weight:bold;">Add Test Case</a>  </th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px">
  
   <div id="addmoduleofProduct1">
  <select onchange="bao1(this.options[this.options.selectedIndex].value,this.options[this.options.selectedIndex].text)">
               <option value="apple">苹果</option>
               <option value="orange">桔子</option>
               <option value="mango">芒果</option>
               </select>
   </div></th>
          </tr>
      
          <tr>
              <th height="41" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:90px"><input type="button" value="SUBMIT" onclick="return checkProductform();"/>
                 &nbsp;
            <input name="RESET" type="reset" value="CANCEL"/></th>
 
          </tr>
   
    
      </table>
    <div id="ddd"> <table width="478" cellspacing="0" id="mytable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="100%"style="margin-left:30px"  >
            <tr>
              <td  width="47%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px">Selected Modules </td>
              <td width="53%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
      
            <tr>
              <th width="127" class="nobg" scope="col" abbr="Configurations">Module num </th>
              <th width="177" scope="col" abbr="Dual 1.8">Module name </th>
              <th width="166" scope="col" abbr="Dual 2.5" style="background:#FF5F00;">Choose</th>         
            </tr>
        
         
         
        
       
      </table>
      <hr/>
    </div>
  <hr/>
  <div id="ddd1"> <table width="478" cellspacing="0" id="mytable1">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="100%"style="margin-left:30px"  >
            <tr>
              <td  width="47%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px">Selected TestCase </td>
              <td width="53%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
      
            <tr>
              <th width="127" class="nobg" scope="col" abbr="Configurations">Test Case Num </th>
              <th width="177" scope="col" abbr="Dual 1.8">Test Case Name </th>
              <th width="166" scope="col" abbr="Dual 2.5" style="background:#FF5F00;">Choose</th>         
            </tr>
        
         
         
        
       
      </table></div>
   </form>
  </td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>
******
*********
(moduletoproduct.html)
+***
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Module List</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->
        <table width="478" cellspacing="0" id="mytable" style="margin-left:50px" >
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="100%" >
            <tr>
              <td  width="47%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px">Module List </td>
              <td width="53%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px"> TOTAL RECORD: 11 Items </td>
            </tr>
          </table>
          </caption>
          <thead>
            <tr>
              <th width="127" class="nobg" scope="col" abbr="Configurations">Module num </th>
              <th width="177" scope="col" abbr="Dual 1.8">Module name </th>
              <th width="166" scope="col" abbr="Dual 2.5" style="background:#FF5F00;">DELETE</th>         
            </tr>
          </thead>
          <thead>
          </thead>
          <tbody>
            <tr>
              <th scope="row" abbr="Model" class="spec">lipeng</th>
              <td>M9454LL/A</td>         
              <td id="EDIT"><a href="#">DELETE</a></td>

        
            </tr>
            <tr>
              <th scope="row" abbr="G5 Processor" class="specalt">mapabc</th>
              <td class="alt">Dual 1.8GHz PowerPC G5</td>         
              <td class="alt" id="EDIT">Dual 2.5GHz PowerPC G5</td>

        
            </tr>
            <tr>
              <th height="30" class="spec" scope="row" abbr="Frontside bus">d</th>
              <td>900MHz per processor</td>         
              <td id="EDIT">1.25GHz per processor</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>            
              <td class="alt" id="EDIT">512K per processor</td>
            
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td id="EDIT">1.25GHz per processor</td>
             
            </tr>
        
       
          </tbody>
      </table>
      <!--分页-->
        <div id="pagenation" style=" padding-right:100px; margin-top:10px; margin-bottom:20px">
          <table id="pageTable" width="100%" border="0" cellpadding="0px" cellspacing="0px" style="margin-left:60px">
            <tr>
              <th width="25%" scope="row" style="text-align:right"><a href="#">PREVIOUS PAGE</a> </th>
              <td ><a href="#">1</a></td>
              <td ><a href="#">2</a></td>
              <td ><a href="#">3</a></td>
              <td ><a href="#">4</a></td>
              <td ><a href="#">5</a></td>
              <td width="55%" style="text-align:left"><a href="#">NEXT PAGE</a> </td>
            </tr>
          </table>
        </div></td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>


************
********
testcaselist.html
***
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ALltestCase</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->
        <table width="760" cellspacing="0" id="mytable" >
          <caption align="left" font-weight:bold" width="700px">
          <table cellpadding="0" cellspacing="0" border="0" width="100%" >
            <tr>
              <td  width="44%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> Test Case LIST </td>
              <td width="56%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px"> TOTAL RECORD: 11 Items </td>
            </tr>
          </table>
          </caption>
          <thead>
            <tr>
              <th width="114" class="nobg" scope="col" abbr="Configurations">Worker Num </th>
              <th width="147" scope="col" abbr="Dual 1.8">Summary</th>
              <th width="187" scope="col" abbr="Dual 2">User</th>
              <th width="153" scope="col" abbr="Dual 2.5">date</th>
              <th width="48" scope="col" abbr="Dual 2" style="background:#FF5F00;">EDIT</th>
              <th width="97" scope="col" abbr="Dual 2.5" style="background:#FF5F00;">Detail</th>
            </tr>
          </thead>
          <thead>
          </thead>
          <tbody>
            <tr>
              <th scope="row" abbr="Model" class="spec">lipeng</th>
              <td>M9454LL/A</td>
              <td>M9455LL/A</td>
              <td>M9457LL/A</td>
              <td id="EDIT"><a href="#">EDIT</a></td>
              <td id="VIEW"><p><a href="#">VIEW</a></p></td>
            </tr>
            <tr>
              <th scope="row" abbr="G5 Processor" class="specalt">mapabc</th>
              <td class="alt">Dual 1.8GHz PowerPC G5</td>
              <td class="alt">Dual 2GHz PowerPC G5</td>
              <td class="alt">Dual 2.5GHz PowerPC G5</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th height="30" class="spec" scope="row" abbr="Frontside bus">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">EDIT</td>
              <td class="alt" id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">EDIT</td>
              <td id="VIEW">VIEW</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">Edit</td>
              <td class="alt" id="VIEW">View</td>
            </tr>
            <tr>
              <th scope="row" abbr="Frontside bus" class="spec">&nbsp;</th>
              <td>900MHz per processor</td>
              <td>1GHz per processor</td>
              <td>1.25GHz per processor</td>
              <td id="EDIT">Edit</td>
              <td id="VIEW">View</td>
            </tr>
            <tr>
              <th scope="row" abbr="L2 Cache" class="specalt"></th>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt">512K per processor</td>
              <td class="alt" id="EDIT">Edit</td>
              <td class="alt" id="VIEW">View</td>
            </tr>
          </tbody>
        </table>
      <!--分页-->
        <div id="pagenation" style=" padding-left:100px; padding-right:100px; margin-top:10px; margin-bottom:20px">
          <table id="pageTable" width="100%" border="0" cellpadding="0px" cellspacing="0px" >
            <tr>
              <th width="40%" scope="row" style="text-align:right"><a href="#">PREVIOUS PAGE</a> </th>
              <td ><a href="#">1</a></td>
              <td ><a href="#">2</a></td>
              <td ><a href="#">3</a></td>
              <td ><a href="#">4</a></td>
              <td ><a href="#">5</a></td>
              <td width="40%" style="text-align:left"><a href="#">NEXT PAGE</a> </td>
            </tr>
          </table>
        </div></td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

**************
(addtestcase.html)
*******
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Add Test Case</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="adduser.js"></script>
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->

        <table width="677" height="291" cellspacing="0" id="addusertable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="93%" align="left" >
            <tr>
              <td  width="31%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> ADD TEST CASE</td>
              <td width="69%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
       <form action="kk.do" name="bloguserForm">
            <tr>
              <th width="172" height="52" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">summary</span></th>
  <th width="582" class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="usernum" style=" height:16px;width:180px"/></th>

            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">date</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:16px;width:180px"/></th>
            </tr>
<tr>
              <th height="53" class="nobg" scope="col" abbr="Configurations" style="text-align:right">User</th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="department" style=" height:16px">
  <option value="" selected>Department one</option>
   <option value="" >Department two</option>
  </select></th>
</tr>
<tr>
               <th height="54"  class="nobg" scope="col" abbr="Configurations" style="text-align:right">product</th>
   <th class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="department" style=" height:16px">
  <option value="" selected>Department one</option>
   <option value="" >Department two</option>
  </select></th>
  
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">pRE-REQUEST</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">DESCRIPTION</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
       <tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">STEP</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">RESULT</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
          <tr>
              <th height="65" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:90px"><input type="button" value="SUBMIT" onclick="return checkform();"/>
                 &nbsp;
                 <input name="RESET" type="reset" value="CANCEL"/></th>
 
          </tr>
       </form>
    
      </table>
  </td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

**********
*********
(updatetestcase)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Add User</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="adduser.js"></script>
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->

        <table width="677" height="291" cellspacing="0" id="addusertable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="93%" align="left" >
            <tr>
              <td  width="31%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> ADD TEST CASE</td>
              <td width="69%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
       <form action="kk.do" name="bloguserForm">
            <tr>
              <th width="172" height="52" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">summary</span></th>
  <th width="582" class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="usernum" style=" height:16px;width:180px"/></th>

            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">date</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:16px;width:180px"/></th>
            </tr>
<tr>
              <th height="53" class="nobg" scope="col" abbr="Configurations" style="text-align:right">User</th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="department" style=" height:16px">
  <option value="" selected>Department one</option>
   <option value="" >Department two</option>
  </select></th>
</tr>
<tr>
               <th height="54"  class="nobg" scope="col" abbr="Configurations" style="text-align:right">product</th>
   <th class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="department" style=" height:16px">
  <option value="" selected>Department one</option>
   <option value="" >Department two</option>
  </select></th>
  
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">pRE-REQUEST</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">DESCRIPTION</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
       <tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">STEP</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">RESULT</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
          <tr>
              <th height="65" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:90px"><input type="button" value="SUBMIT" onclick="return checkform();"/>
                 &nbsp;
                 <input name="RESET" type="reset" value="CANCEL"/></th>
 
          </tr>
       </form>
    
      </table>
  </td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

************
************
(update User.htm;l)
**
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Add User</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="adduser.js"></script>
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->

        <table width="677" height="379" cellspacing="0" id="addusertable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="93%" align="left" >
            <tr>
              <td  width="31%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px"> ADD USER </td>
              <td width="69%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
       <form action="kk.do" name="bloguserForm">
            <tr>
              <th width="172" height="73" class="nobg" scope="col" abbr="Configurations" style="text-align:right">WORKER num </th>
  <th width="582" class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="usernum" style=" height:16px;width:180px"/></th>

            </tr>
<tr>
               <th height="71" class="nobg" scope="col" abbr="Configurations" style="text-align:right">Worker name </th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:16px;width:180px"/></th>
            </tr>
<tr>
              <th height="67" class="nobg" scope="col" abbr="Configurations" style="text-align:right">e-mail</th>
  <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="mailbox" style=" height:16px;width:180px"/></th>
            </tr>
<tr>
               <th height="66"  class="nobg" scope="col" abbr="Configurations" style="text-align:right">department</th>
  <th class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><select name="department" style=" height:16px">
  <option value="" selected>Department one</option>
   <option value="" >Department two</option>
  </select></th>
  
            </tr>
      
          <tr>
              <th height="65" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:90px"><input type="button" value="SUBMIT" onclick="return checkform();"/>
                 &nbsp;
                 <input name="RESET" type="reset" value="CANCEL"/></th>
 
          </tr>
       </form>
    
      </table>
  </td>
  </tr>
  <tr>
    <th height="57" colspan="3" scope="row" bgcolor="#C0DCC0" >  Copyright @ 2008 Augmentum, Inc. All Rights Reserved</th>
  </tr>
</table>
</body>
</html>

*************
(detail.html)
***
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Detail</title>
<link href="left_column.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="adduser.js"></script>
</head>

<body>
<table width="971" height="715"  border=0 align="center" cellpadding=0 cellspacing=0>
  <tr>
    <td height="70" colspan="3" scope="row" bgcolor="#C0DCC0"></td>
  </tr>
  <tr>
    <td height="8" colspan="3" scope="row" style="margin:0px; padding:0px; border:0px; background-image:url(images/ll.jpg)"></td>
  </tr>
  <tr>
    <td height="53"  scope="row" style=" background-image:url(images/augmentum.JPG); background-repeat:repeat-x; margin:0px; padding:0px; border:0px; font-size:25px; color:#FFFFFF; text-align:center; font-weight:bold">Augmentum</td>
  </tr>
  <tr>
    <td width="155" height="527" scope="row" style="vertical-align:top;"><div id="leftnav">
      <div class="nav_heading">
        <input name="button" type="button" value="User Manager"/>
      </div>
      <div style=""> <a href="#">View Users </a> <a href="#">Add User </a> </div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Test Case Manager"/>
      </div>
      <div> <a href="#">View Test Case </a> <a href="#">Add Test Case </a> <a href="#">Search Test Case </a></div>
      <div class="nav_heading">
        <input name="button2" type="button" value="Product&Module"/>
      </div>
      <div> <a href="#">View Products </a> <a href="#">Add Product </a> <a href="#">Add Module </a></div>
    </div></td>
    <td width="1px" style="border-left:2px double #000000">&nbsp;</td>
    <td width="809" style="vertical-align:top"><!--user list-->

        <table width="677" height="283" cellspacing="0" id="addusertable">
          <caption align="left" font-weight:bold">
          <table cellpadding="0" cellspacing="0" border="0" width="93%" align="left" >
            <tr>
              <td  width="31%" style="font:Arial; font-size:19px;text-align:left;background-color: #E6EAE9;;border:0px">TEST CASE DETAIL</td>
              <td width="69%" style="text-align:right;font-weight:bold;background-color: #E6EAE9;border:0px">&nbsp;</td>
            </tr>
          </table>
          </caption>
       <form action="kk.do" name="bloguserForm">
<tr>
               <th width="172" height="54" class="nobg" style="text-align:right" scope="col" abbr="Configurations"><span class="nobg" style="text-align:right">pRE-REQUEST</span></th>
   <th width="582"  class="nobg" style="background-color:  #E6EAE9;border:0px" scope="col" abbr="Configurations"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">DESCRIPTION</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
       <tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">STEP</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
<tr>
               <th height="54" class="nobg" scope="col" abbr="Configurations" style="text-align:right"><span class="nobg" style="text-align:right">RESULT</span></th>
   <th  class="nobg" scope="col" abbr="Configurations" style="background-color:  #E6EAE9;border:0px"><input type="text" name="name"  style=" height:45px;width:250px"/></th>
            </tr>
          <tr>
              <th height="65" colspan="2"  class="nobg" scope="col" abbr="Configurations" style="background-color:#E6EAE9;border:0px;padding-left:90px"><input type="button" value="SUBMIT" onclick="return checkform();"/>
                 &nbsp;
                 <input name="RESET" type="reset" value="CANCEL"/></th>
          </tr>
       </form>
      </table>
  </td>
  </tr>
  <tr>
  
9 楼 levyliu 2008-08-31  
ll.jpg
8 楼 tianwill 2008-08-31  
提个建议,分页器那段,分页器里多个法在多次调用getTotal()方法,而getTotal()需要读取数据库,建议加个属性保存下total的值,就不用多次读数据库。
7 楼 WithMemores 2008-08-20  
结构如下
public interface Dao {
	public List getList(String HQL) throws Exception;
	public List getList(String TableName,int first,int max) throws Exception;
	public void saveupdate(String HQL) throws Exception;
	public void save(Object o) throws Exception;
	public void saveAll(List list) throws Exception;
	public void update(Object o) throws Exception;
	public void updateAll(List list) throws Exception;
	public int getTotal(String HQL)throws Exception;
}

public abstract class AbsDao implements Dao {

	/**
	 *@return Object 以Object形式返回符合HQL语句的实体 
	 *@param Class K 要查找的类
	 *@param Integer id 查找的实体ID
	 */
	public Object getObject(Class k,Integer id)throws Exception{
		Session session=null;
		Transaction tx=null;
		Object o;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			o=session.get(k,id);
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
		return o;
	}

}

public class DaoImpl extends AbsDao implements Dao {
	/**
	 *@return List 以集合形式返回符合HQL语句中实体 
	 *@param String HQL  要执行的HQL语句
	 */
	public List getList(String HQL)throws Exception{
		Session session=null;
		Transaction tx=null;
		List list;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			list=session.createQuery(HQL).list();
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
		return list;
	}
	
	/**
	 *将Object写入数据库 
	 *@param Object o  要保存的对象
	 */
	public void save(Object o)throws Exception{
		Session session=null;
		Transaction tx=null;
		List list;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			session.save(o);
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
	}
	
	/**
	 *将List(Object)写入数据库 
	 *@param List list(Object)  要保存的对象数组列表
	 */
	public void saveAll(List list)throws Exception{
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			Iterator it=list.iterator();
			while(it.hasNext()){
				session.save(it.next());	
			}
			session.flush();
			session.clear();
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
	}
	
	/**
	 *将Object更新 
	 *@param Object o  要跟新的对象
	 */
	public void update(Object o)throws Exception{
		Session session=null;
		Transaction tx=null;
		List list;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			session.update(o);
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
	}
	
	
	/**
	 *将Object更新 
	 *@param List list(Object)  要更新的对象数组列表
	 */
	public void updateAll(List list)throws Exception{
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			Iterator it=list.iterator();
			while(it.hasNext()){
				session.update(it.next());	
			}
			session.flush();
			session.clear();
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
	}
	
	/**
	 *@return List 以集合形式返回符合HQL语句中实体 
	 *@param String HQL  要执行的HQL语句
	 *@param int first 第一条记录的位置
	 */
	public List getList(String HQL,int first,int max)throws Exception{
		Session session=null;
		Transaction tx=null;
		List list;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			list=session.createQuery(HQL).setFirstResult(first).setMaxResults(max).list();
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
		return list;
	}

	/**
	 *@return int 返回统计符合SQL语句的条数 
	 *@param String HQL 执行的统计语句
	 */
	public int getCount(String HQL)throws Exception{
		Session session=null;
		Transaction tx=null;
		Integer i=new Integer(0);
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			i=(Integer)session.createQuery(HQL).uniqueResult();
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
		return i.intValue();
	}
	/**通过SQL语句直接操作数据库
	 * @param String HQL;
	 * */
	public void saveupdate(String HQL) throws Exception {
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			session.createQuery(HQL);
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
		
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
	}
	
	/**
	 * @return int count 返回HQL查询的记录数
	 * @param String HQL 统计的HQL语句
	 * */
	public int getTotal(String HQL)throws Exception{
		Session session=null;
		Transaction tx=null;
		int i;
		try{
			session=HibernateSessionFactory.getSession();
			tx=session.beginTransaction();
			i=((Integer)session.createQuery(HQL).uniqueResult()).intValue();
			tx.commit();
		}
		catch(Exception ex){
			if(tx!=null){
				tx.rollback();
				tx=null;
			}
			throw new Exception("出错了 "+ex);  
		}
		finally{
			try{
				if(session!=null){
					session.close(); 
				}
			}
			catch(Exception e){
				System.out.println("出错了e "+e);
			}
		}
		return i;
	}
}



然后利用注入如(Spring)管理SQL?
一个Service持有多个SQL时候SQL混乱~
似乎感觉还不如封装的方便。

当然多表多条件的情况除外。
我是不是走入误区了?
6 楼 WithMemores 2008-08-20  
litianyi520 写道
建议在dao层 不要写死sql 除非是经常用到的sql 例如 from Table ,实现 Don't repeat
servive层才是你要书写sql 的合理地方,因为service是业务层 ,因为业务是不断变化的,而dao仅仅实现一个与数据库交互的一个接口


我理解你意思了,可是如果 这么做的话会造成Hibernate入侵Service。不便于解耦,
我曾考虑利用面向接口的思想 把SQL注入到一个DAO的辅助类,该类有个MAP 储存各种SQL。运行时根据注入来调整SQL。不过造成的问题是。一个DAO要有个辅助的类,过于臃肿。SQL数量多的话不便于管理。

如果按照Service层持有SQL的话,只需要一个DAO,矛盾主要集中在SQL语句上。
5 楼 litianyi520 2008-08-19  
建议在dao层 不要写死sql 除非是经常用到的sql 例如 from Table ,实现 Don't repeat
servive层才是你要书写sql 的合理地方,因为service是业务层 ,因为业务是不断变化的,而dao仅仅实现一个与数据库交互的一个接口
4 楼 WithMemores 2008-08-19  
laiseeme 写道
无非多传一个参数  Table...


真的合适吗?我不很明白你意思,多传Table ?


最重要的   
不会每个表都建立一个接口继承DAO 接口 
然后再写DAOimpl  最后用模式管理?

还有就是 ServiceImpl里面 根PageHold 交叉。是否意味着
设计不当?
3 楼 laiseeme 2008-08-19  
无非多传一个参数  Table...
2 楼 WithMemores 2008-08-18  
citysir 写道
把 DAO 和 Service 合并更符合 Don't repeat your self. 的原则。

能否解释下?不很明白。
1 楼 citysir 2008-08-18  
把 DAO 和 Service 合并更符合 Don't repeat your self. 的原则。

相关推荐

    HIS内核设计之道:医院信息系统规划设计系统思维.docx

    HIS内核设计之道:医院信息系统规划设计系统思维 HIS(Hospital Information System,医院信息系统)内核设计是医院信息系统的核心组件之一,对医院信息系统的性能、可维护性和可扩展性产生直接影响。本文旨在探讨 ...

    华容道java课程设计

    在IT教育领域,以Java编程语言进行华容道的课程设计,不仅可以提升学生的编程技能,还能锻炼他们的逻辑思维和问题解决能力。下面,我们将详细探讨如何利用Java实现华容道游戏的设计。 首先,我们需要理解华容道游戏...

    华容道Java课程设计

    在本“华容道Java课程设计”项目中,我们将探讨如何使用Java编程语言来实现一个经典的游戏——华容道。华容道,源于中国古代的棋盘游戏,是一种智力挑战,玩家需要通过移动棋子,帮助曹操从起点移动到终点。在这个...

    python毕业设计-航天器轨道转移Lambert问题的快速求解方法的研究全部资料.zip

    python毕业设计_航天器轨道转移Lambert问题的快速求解方法的研究全部资料.zip python毕业设计_航天器轨道转移Lambert问题的快速求解方法的研究全部资料.zippython毕业设计_航天器轨道转移Lambert问题的快速求解...

    设计之道.pdf

    ### 设计之道——探索软件设计的核心理念与模式应用 #### 引言 在软件开发领域,“设计之道”不仅是关于如何创建高效、灵活的系统结构,更关乎如何在不断变化的需求和技术环境中保持竞争力。本书《设计之道》深入...

    如何正确运用8D思路解析问题.pptx

    此阶段涉及对数据的深入挖掘和对相关事实的全面收集,如案例中的电话分心和下水道设计问题。分析工具如鱼骨图和5W2H方法可以在此过程中提供帮助。 一旦找到了问题的根本原因,团队就需要制定和选择永久对策(D5)。...

    设计之道 PDF

    这些模式为解决特定设计问题提供了标准化的解决方案,是.NET开发中的常用工具。 3.NET框架:.NET设计框架是微软开发的一种统一的、跨平台的开发环境,包括.NET Core和.NET Framework。书中可能详细解析了如何利用...

    设计之道(pdf)

    ### 设计之道——探索软件设计的核心理念与模式应用 #### 引言 “设计之道”是一本深入浅出地探讨软件设计原则与模式应用的专业书籍。作者张逸通过对设计的本质进行剖析,结合丰富的实例和实践经验,帮助读者理解...

    大三下复杂软件的设计之道:领域驱动设计.pdf

    MDE使用领域特定语言(DSL)来描述问题域,这种方式可以为DDD提供强大的支持。MDE可以看作是一种框架,它提供了一种方法,将DDD在实践中的技术要求付诸行动。 实施DDD面临的挑战主要集中在沟通和培训领域专家与开发...

    java华容道课程设计

    【Java华容道课程设计】是一项利用编程技术重现古老中国智力游戏的教学实践,旨在让学生通过实际操作理解并掌握Java编程中的布局管理器、事件监听器等核心概念。在这个项目中,开发者将设计一个基于Java的华容道游戏...

    java华容道拼图课程设计

    通过这个课程设计,你不仅可以深入理解和应用Java编程,还能锻炼逻辑思维能力和问题解决能力。同时,这也是一个很好的机会去学习如何用代码实现一个复杂的游戏机制,以及如何优化用户体验。完成这个项目后,你将对...

    为你设计:腾讯的用户体验设计之道(全彩)

    《为你设计:腾讯的用户体验设计之道(全彩)》是一本深入探讨腾讯公司在用户体验设计领域的实践与理论的著作。这本书全面展示了腾讯如何通过创新的设计理念和技术,为用户提供优质、便捷且富有情感化的交互体验。在...

    8和9解决问题教学设计.doc

    - 比较两道题,让学生理解数学问题的结构,增强解题策略的理解。 整个教学过程中,教师注重学生的主动参与和问题生成,通过互动游戏和生动的场景设计,让数学知识与实际生活紧密结合,提升学生的问题解决能力和...

    基于三菱PLC的城市主干车道按钮式人行道交通灯控制系统设计.pdf

    本篇文档主要讨论了利用三菱PLC(可编程逻辑控制器)来设计一个适用于车流量大、人流量相对较小的城市主干车道按钮式人行道交通灯控制系统。以下是根据文档内容提炼出的知识点: 1. 交通信号灯的背景与挑战 城市...

    高可用分布式系统的设计之道.pdf

    高可用分布式系统的设计之道 高可用分布式系统是指一种能够在出现故障或宕机的情况下继续提供服务的系统。为了实现高可用性,分布式系统需要解决许多挑战,包括无状态分布式系统和有状态分布式系统的高可用问题。 ...

    C++程序设计题库(182道含答案)

    C++程序设计题库(182道含答案)是一份经典的C++编程题库,旨在帮助程序员提高编程能力和面试准备。本题库涵盖了大量的C++编程题目,涉及到结构体、链表、数组、字符串、算法等多个方面。 本题库共有182道题目,每...

Global site tag (gtag.js) - Google Analytics