目录
0、效果展示
1、概述
花园小区物业运用现代化的计算机管理手段,使物业的硬件管理结合软件管理,为物业管理走向现代化,制度化与规范化创造条件。系统的主要功能包括:系统管理、管理员维护、修改密码、车型管理、添加车型、车位管理、添加车位、业主房产管理、添加业主房产、车辆登记、缴费登记、车位缴费信息查询、车费缴纳年报告表、车费缴纳月报表。
本系统最大的特点是使用操作简单、友好的提示信息。本系统将实现以下基本功能:
(1)系统具有简洁大方的页面,使用简便,友好的错误操作提示
(2)管理员用户具有系统管理、车位管理、业主房产管理、缴费管理、财务报表统计
(3)具有较强的安全性,避免用户的恶意操作
管理员功能模块图说明:
(1) 注册用户管理模块:在该模块中定义了注册用户信息的管理,其功能包括注册用户信息查询、删除等操作。
(2) 车位管理模块:该模块实现了系统属性、管理员维护、修改密码。
(3) 业主房产管理模块:该模块实现的功能有业主房产管理、添加业主房产。
(4) 缴费信息管理模块:该模块实现了车辆登记、缴费登记、缴费信息查询。
(5) 财务管理:该模块主要实现了车费缴费年报表、车费缴费月报表等。
2、搭建环境
本文以实现一个小区物业管理系统为目标,从环境搭建到编码实现全过程讲述
我们使用javaweb、J2EE来构建小区物业管理系统,环境使用最新版jdk和tomcat,配合mysql数据库
开发工具使用idea(也可以使用eclipse),数据库管理工具使用Navicat Premium
开发框架使用JavaBean Servlet MVC结构;
没有使用SSH(Struts+Spring+Hibernate)或SSM(Spring+SpringMVC+MyBatis),这两个框架我们在别的项目中再介绍开发过程
在项目中会引入My97DatePicker作为前端日期时间选择工具,使用fckeditor作为富媒体编辑器(也可以使用百度的ueditor)
使用DWR(Direct Web Remoting)用于改善web页面与Java类交互,实现远程服务器端AJAX读取登录数据。
使用JSTL(Java server pages standarded tag library,即JSP标准标签库),此库是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
3、数据表结构
表3 t_chewei 车位管理
字段名称 |
字段大小 |
字段类型 |
说明 |
id |
4 |
int |
编号 |
catelog_id |
4 |
int |
分类编号 |
name |
150 |
varchar |
车位号 |
weizhi |
150 |
varchar |
位置 |
fuzheren |
150 |
varchar |
负责人 |
isuse |
150 |
varchar |
是否使用 |
beizhu |
150 |
varchar |
备注 |
del |
150 |
varchar |
图片 |
photo |
536870910 |
varchar |
- |
表4 t_churu 收费管理
字段名称 |
字段大小 |
字段类型 |
说明 |
id |
4 |
int |
编号 |
danjuhao |
150 |
varchar |
单据号 |
shijian |
8 |
datetime |
登记时间 |
lkshijian |
8 |
datetime |
到期时间 |
zongjiage |
4 |
int |
价格 |
jingshouren |
150 |
varchar |
经手人 |
beizhu |
150 |
varchar |
备注 |
del |
150 |
varchar |
是否删除 |
chewei_id |
4 |
int |
车位ID |
xingming |
536870910 |
varchar |
姓名 |
dianhua |
536870910 |
varchar |
联系方式 |
表5 t_kehu 业主管理
字段名称 |
字段大小 |
字段类型 |
说明 |
id |
4 |
int |
编号 |
name |
150 |
varchar |
名称 |
sex |
150 |
varchar |
性别 |
age |
150 |
varchar |
年龄 |
tel |
150 |
varchar |
电话 |
address |
150 |
varchar |
地址 |
4、后端代码示例
package com.action;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import com.dao.DB;
import com.orm.TAdmin;
import com.orm.Tchewei;
import com.orm.Tchuru;
import com.service.liuService;
public class churu_servlet extends HttpServlet
{
public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException
{
String type=req.getParameter("type");
if(type.endsWith("churuAdd"))
{
churuAdd(req, res);
}
if(type.endsWith("churuEdit"))
{
churuEdit(req, res);
}
if(type.endsWith("churuMana"))
{
churuMana(req, res);
}
if(type.endsWith("churuDel"))
{
churuDel(req, res);
}
}
public void churuAdd(HttpServletRequest req,HttpServletResponse res)
{
String danjuhao="";
String shijian=req.getParameter("shijian");
String chewei_id=req.getParameter("chewei_id");
String lkshijian="";
int zongjiage=0;
String jingshouren=req.getParameter("jingshouren");
String xingming=req.getParameter("xingming");
String dianhua=req.getParameter("dianhua");
String beizhu=req.getParameter("beizhu");
String del="no";
String sql="INSERT INTO t_churu ( danjuhao, shijian, lkshijian, zongjiage, jingshouren, beizhu, del, chewei_id, xingming, dianhua) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
Object[] params={danjuhao,shijian,null,zongjiage,jingshouren,beizhu,del,chewei_id,xingming,dianhua};
DB mydb=new DB();
mydb.doPstm(sql, params);
String sql1="update t_chewei set isuse='未缴费' where id="+Integer.parseInt(chewei_id);
Object[] params1={};
mydb=new DB();
mydb.doPstm(sql1, params1);
mydb.closed();
req.setAttribute("message", "操作成功");
req.setAttribute("path", "churu?type=churuMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL, req, res);
}
public void churuEdit(HttpServletRequest req,HttpServletResponse res)
{
String lkshijian=req.getParameter("lkshijian");
int zongjiage=Integer.parseInt(req.getParameter("zongjiage"));
String sql="update t_churu set lkshijian='"+lkshijian+"',zongjiage='"+zongjiage+"' where id="+Integer.parseInt(req.getParameter("id"));
Object[] params={};
DB mydb=new DB();
mydb.doPstm(sql, params);
String sql1="update t_chewei set isuse='已缴费' where id="+Integer.parseInt(req.getParameter("chewei_id"));
Object[] params1={};
mydb=new DB();
mydb.doPstm(sql1, params1);
mydb.closed();
req.setAttribute("message", "操作成功");
req.setAttribute("path", "churu?type=churuMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL, req, res);
}
public void churuDel(HttpServletRequest req,HttpServletResponse res)
{
int id=Integer.parseInt(req.getParameter("id"));
String sql="update t_churu set del='yes' where id=?";
Object[] params={id};
DB mydb=new DB();
mydb.doPstm(sql, params);
mydb.closed();
req.setAttribute("message", "操作成功");
req.setAttribute("path", "churu?type=churuMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL, req, res);
}
public void churuMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
{
String page1=req.getParameter("page");
if(page1==null){
page1="1";
}
//分页设置
int EVERYPAGENUM=10;//每页条数
int page=Integer.parseInt(page1); //传递过来的当前页
int cou = 1;//得到信息总数
int pagecount=1; //总页数
String sql1="select count(*) as cou from t_churu where del='no'";
Object[] params1={};
DB mydb1=new DB();
try
{
mydb1.doPstm(sql1, params1);
ResultSet rs=mydb1.getRs();
while(rs.next())
{
cou= rs.getInt("cou");
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb1.closed();
if (cou % EVERYPAGENUM == 0) {
pagecount= cou / EVERYPAGENUM;
} else {
pagecount=cou / EVERYPAGENUM + 1;
}
req.setAttribute("EVERYPAGENUM", EVERYPAGENUM);
req.setAttribute("page", page);
req.setAttribute("cou", cou);
req.setAttribute("pagecount", pagecount);
List churuList=new ArrayList();
String sql="select * from t_churu where del='no'";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
for (int i = 0; i < (page - 1) * EVERYPAGENUM; i++) {
rs.next();
}
for (int t = 0; t < EVERYPAGENUM; t++) {
if (rs.next()) {
Tchuru churu=new Tchuru();
churu.setId(rs.getInt("id"));
churu.setChewei_id(rs.getInt("chewei_id"));
churu.setDanjuhao(rs.getString("danjuhao"));
churu.setChewei_name(liuService.getCheweiName(rs.getInt("chewei_id")));
churu.setShijian(rs.getTimestamp("shijian"));
churu.setLkshijian(rs.getTimestamp("lkshijian"));
churu.setZongjiage(rs.getInt("zongjiage"));
churu.setJingshouren(rs.getString("jingshouren"));
churu.setXingming(rs.getString("xingming"));
churu.setDianhua(rs.getString("dianhua"));
churu.setBeizhu(rs.getString("beizhu"));
if(rs.getTimestamp("lkshijian")!=null){
/* SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date now = df.parse(rs.getTimestamp("lkshijian").toString());
java.util.Date date=df.parse(rs.getTimestamp("shijian").toString());
long l=now.getTime()-date.getTime();
long day=l/(24*60*60*1000);
long hour=(l/(60*60*1000)-day*24);
long min=((l/(60*1000))-day*24*60-hour*60);
long s=(l/1000-day*24*60*60-hour*60*60-min*60);
System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");
*/
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date end = dfs.parse(rs.getTimestamp("lkshijian").toString());
java.util.Date begin=dfs.parse(rs.getTimestamp("shijian").toString());
//java.util.Date begin=dfs.parse("2004-01-02 11:30:24");
//java.util.Date end = dfs.parse("2004-03-26 13:31:40");
long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒
long day1=between/(24*3600);
long hour1=between%(24*3600)/3600;
long minute1=between%3600/60;
long second1=between%60/60;
System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
churu.setFenshu(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
}
churuList.add(churu);
} else {
break; //减少空循环的时间
}
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("churuList", churuList);
req.getRequestDispatcher("admin/churu/churuMana.jsp").forward(req, res);
}
public void dispatch(String targetURI,HttpServletRequest request,HttpServletResponse response)
{
RequestDispatcher dispatch = getServletContext().getRequestDispatcher(targetURI);
try
{
dispatch.forward(request, response);
return;
}
catch (ServletException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void destroy()
{
}
}
5、前端代码示例
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page isELIgnored="false" %>
<%
String path = request.getContextPath();
%>
<!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>
<link rel="stylesheet" type="text/css" href="<%=path %>/css/base.css" />
<script type="text/javascript" src="<%=path %>/js/public.js"></script>
<script type="text/javascript" src="<%=path %>/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="<%=path %>/js/popup.js"></script>
<script language="javascript">
function churuDel(id)
{
if(confirm('您确定删除吗?'))
{
window.location.href="<%=path %>/churu?type=churuDel&id="+id;
}
}
</script>
</head>
<body leftmargin="2" topmargin="2" background='<%=path %>/images/allbg.gif'>
<table width='98%' border='0'style="margin-top:8px;margin-left: 5px;">
<tr>
<td>
</td>
</tr>
</table>
<table width="98%" border="0" cellpadding="1" cellspacing="1" bgcolor="#D1DDAA" align="center" style="margin-top:8px">
<tr bgcolor="#E7E7E7">
<td height="14" colspan="10" class='title'>缴费管理</td>
</tr>
<tr align="center" bgcolor="#FAFAF1" height="22">
<td width="15%">登记时间</td>
<td width="15%">到期时间</td>
<td >缴费期限</td>
<td >车位号</td>
<td >车主姓名</td>
<td >联系方式</td>
<td >总金额</td>
<td >经手人</td>
<td >备注</td>
<td >选项</td>
</tr>
<c:forEach items="${requestScope.churuList}" var="churu">
<tr align='center' bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='red';" onMouseOut="javascript:this.bgColor='#FFFFFF';" height="22">
<td bgcolor="#FFFFFF" align="center">
${churu.shijian}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.lkshijian}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.fenshu}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.chewei_name}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.xingming}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.dianhua}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.zongjiage}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.jingshouren}
</td>
<td bgcolor="#FFFFFF" align="center">
${churu.beizhu}
</td>
<td bgcolor="#FFFFFF" align="center">
<form action="<%=path %>/admin/churu/churuEdit.jsp" name="" method="post">
<input type="button" value="删除" onclick="churuDel(${churu.id})"/>
<input type="hidden" name="id" value="${churu.id}"/>
<input type="hidden" name="shijian" value="${churu.shijian}"/>
<input type="hidden" name="chewei_id" value="${churu.chewei_id}"/>
<input type="submit" value="缴费"/>
</form>
</td>
</tr>
</c:forEach>
</table>
<table width='98%' border='0'style="margin-top:8px;margin-left: 5px;">
<TR align="right">
<TD ><form action="" method="post" name="formpage">
<input type="hidden" name="pageCount" value="${requestScope.pagecount}" />
<!--//用于给上面javascript传值-->
<input type="hidden" name="page" value="${requestScope.page}" />
<!--//用于给上面javascript传值-->
<input type="hidden" name="jumpurl" value="<%=path%>/xubao?type=xubaoMana&" />
<!--//用于给上面javascript传值-->
<a href="#" onClick="PageTop()"><strong>首页</strong></a>
<a href="#" onClick='PagePre()'><strong>上一页</strong></a>
共${requestScope.cou}条记录,
共计${requestScope.pagecount}页,
当前第${requestScope.page}页
<a href="#" onClick="PageNext()"><strong>下一页</strong></a>
<a href="#" onClick="PageLast()"><strong>尾页</strong></a> 第
<input name="busjump" type="text" size="3" value="${requestScope.page}" style=" width:15px"/>
页<a href="#" onClick="bjump()"><strong>跳转</strong></a>
</form>
<script type="text/javascript" src="<%=path%>/js/page.js"></script></TD>
</TR>
</table>
</body>
</html>