(车辆管理系统)2018-07-25实训第八天笔记

今天做了一个用户管理的功能

网页效果图如下:

其实套路都是差不多的,但是有些地方需要特殊处理一下

先附上数据库的用户表吧:


id,username,realname,password,showorder都直接显示就可以了

但是显示deptno(部门id)和rank(群组id)感觉会很怪很怪吧,而且看我上面网页上所显示是其所属的部门名称和群组名称

这时候就需要多表查询了

再附上部门表和群组表:

1.部门表

2.群组表

下面是我多表查询的代码:

SELECT u.id,u.username,u.realname,u.password,d.deptname,u.sex,r.name,u.showorder
FROM t_user u,t_dept d,t_rank r
WHERE u.deptno=d.id AND u.rank=r.id 

查询结果如下截图:

发现查询出来的sex为1(男)或0(女),这里还需要做一个小小的处理

在UserDao中此方法判断一下就行

下面讲一下下面的分页:

先附上的已经写好的分页通用的java代码:

package tool;

public class PageUtil {
	private int total;//一共多少条
	private int pageSize=2;//一页的条数
	private int totalPage = 1;//一共多少页	
	private int currPage = 1;//当前页
	private int firstCurrTnum = 0;//当前第一条 条数
	private String uri="";
	
	
	public String getUri() {
		return uri;
	}

	public void setUri(String uri) {
		this.uri = uri;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalPage() {
		if(total%pageSize==0){
			totalPage = total/pageSize;
		}else{
			totalPage = total/pageSize+1;
		}
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public int getFirstCurrTnum() {
		firstCurrTnum = (currPage-1)*pageSize;
		return firstCurrTnum;
	}

	public void setFirstCurrTnum(int firstCurrTnum) {
		this.firstCurrTnum = firstCurrTnum;
	}
	/**
	 * 得到分页的Html
	 * @return
	 */
	public String getHtml(){
		StringBuffer buffer = new StringBuffer();
		buffer.append("<table width=\"90%\" align=\"center\" style=\"padding-right:40px;\">");
		buffer.append("<tr><td align=\"right\">共"+getTotal()+"条,"+getTotalPage()+"页,当前第"+getCurrPage()+"页  ");
		buffer.append("<a href=\""+getUri()+"&currPage=1\">首页   </a>");  
		if(getCurrPage()==1){
		   buffer.append("<a href='"+getUri()+"&currPage=1'> 上一页</a>");
		}else{
		    buffer.append("<a href='"+getUri()+"&currPage="+(getCurrPage()-1)+"'> 上一页</a>");
		}
		if(currPage==totalPage){
		   buffer.append("<a href='"+getUri()+"&currPage="+getTotalPage()+"'> 下一页</a>");
		}else{
		   buffer.append("<a href='"+getUri()+"&currPage="+(getCurrPage()+1)+"'> 下一页</a>");
		}  	
		 buffer.append("<a href=\""+getUri()+"&currPage="+getTotalPage()+"\">尾页</a> </td></tr></table>");
		return buffer.toString();
	}

}

不难发现传入总条数和当前页还有uri就行了

总条数直接通过数据库查就行了,当前页的话通过JSP来返就行,刚进去的时候显示是第一页的因为PageUtil中的currPage一开始的默认值为1,Uri在serlet设置一个static字符串就行,因为调用的都是UserSerlet中的list方法

可以会发现我们一页只显示两条信息,这时候就需要改变一下之前的sql语句了,改变代码如下:

SELECT u.id,u.username,u.realname,u.password,d.deptname,u.sex,r.name,u.showorder
FROM t_user u,t_dept d,t_rank r
WHERE u.deptno=d.id AND u.rank=r.id 
limit ?,?
 /**
前面一个需要设置的参数应该是第几条信息开始(通过传入当前是第几页通过(currPage-1)*pageSize来计算出来),后面的一个需要设置的参数应该是一页应该显示多少条(pageUtil中写了固定了2条)
**/

这样就把用户信息都列出来了

下面来说说新建

用户的新建和其他有些许不同

先发新建页面的效果图吧

点击新建后要把所有的部门和群组都查出来,然后通过request.setAttribute()方法来给JSP页面

点击保存后把所有的值取出来就行了

由于我html学了都快忘光了,下面是一个下拉框命名的操作。。。。。

<select name="">
<option value="">部门或群组的名字<option>
</select>
<!--value中填的是部门或群组的id,因为用户表中里都是deptno和rank都是int类型--!>
<!--name当然是java代码中去取其中值所设置的名字,随意我设置的是deptno和rank--!>

单选框做一个简单的判断之后插入数据库就行

修改这个功能跟之前做的也有些许不同

先附上页面截图(我选中的是第三条记录):

 其他处理应该都是差不多的,就是一个复选框的问题

遍历的过程中如果用户的部门名称和部门表中的名称对应的话,在<option>标签中多加上一个selected='selected'表示选上

同理群组名称也是一样的道理

贴一段jsp中的脚本代码好了:

<select name="rankid">
<% 
	List<Rank> ranks = (List<Rank>)request.getAttribute("ranks");
	for(Rank rank: ranks){
		String select = "";
		if(rank.getName().equals(vuer.getRankname())){
			select = " selected='selected'";
		}
		out.println("<option value='"+rank.getId()+"'"+select+">"+rank.getName()+"</option>");
	}
%>
</select>

男女单选框也是差不多的道理

 <% 
  	if(vuer.getSex().equals("1")){
  		out.println("<input type=\"radio\" name=\"sex\"  checked=\"checked\" value=\"男\"/>男<input type=\"radio\" name=\"sex\"   value=\"女\"/>女");
  	}else{
  		out.println("<input type=\"radio\" name=\"sex\"   value=\"男\"/>男<input type=\"radio\" name=\"sex\" checked=\"checked\"  value=\"女\"/>女");
  	}
  %>

JSP中一个隐藏的标签来存用户id就行了

还有一个小功能是可以不输入修改的密码,这时候就需要在更新数据库的时候做点小手脚了,不是很难,直接贴代码就行了

通过id和User对象来修改

/**
	 * 通过id来更新该用户
	 * @param id
	 */
	public void updateUserById(int id,Vuer vuer) {
		// TODO Auto-generated method stub
		try {
			conn = getConn();
			String sql = null;
			if(vuer.getPassword()!=""){
				sql = "update t_user set username=?,realname=?,password=?,deptno=?,sex=?,rank=?,showorder=? where id =?";
			}else{
				sql = "update t_user set username=?,realname=?,deptno=?,sex=?,rank=?,showorder=? where id =?";
			}
			ps = conn.prepareStatement(sql);
			if(vuer.getPassword()!=""){
				ps.setString(1,vuer.getUsername());
				ps.setString(2,vuer.getRealname());
				ps.setString(3,vuer.getPassword());
				ps.setInt(4,vuer.getDeptno());
				ps.setInt(5,Integer.valueOf(vuer.getSex()));
				ps.setInt(6,vuer.getRank());
				ps.setInt(7,vuer.getShoworder());
				ps.setInt(8, id);
			}else{
				ps.setString(1,vuer.getUsername());
				ps.setString(2,vuer.getRealname());
				ps.setInt(3,vuer.getDeptno());
				ps.setInt(4,Integer.valueOf(vuer.getSex()));
				ps.setInt(5,vuer.getRank());
				ps.setInt(6,vuer.getShoworder());
				ps.setInt(7, id);
			}
			ps.executeUpdate();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			closeConn(conn, ps, rs);
		}
		
	}

这样就实现了用户管理界面的功能,删除功能不太难就不讲了

今天是第八天啦,明天孤军奋战啦,还会继续更新哒

猜你喜欢

转载自blog.csdn.net/acDream_/article/details/81208619