实训报告最终版.docx
《实训报告最终版.docx》由会员分享,可在线阅读,更多相关《实训报告最终版.docx(23页珍藏版)》请在冰豆网上搜索。
实训报告最终版
项目组名称
班级
代码总行数
项目名称
住房公积金管理系统
1.项目来源及目的
住房公积金为中国内地的一种用于住房的社会福利。
它属于职工基本福利“五险一金”中的“一金”,是指国家机关、国有企业、城镇集体企业、外商投资企业、城镇私营企业及其他城镇企业、事业单位、民办非企业单位、社会团体(以下统称单位)及其在职职工缴存的长期住房储金;用于职工购买、建造、翻建、大修以及装修自住住房。
缴存分为两部分,即职工个人缴存部分和所在单位缴存部分,两部分数额相等,均汇入个人帐户;缴存之后全部归属于职工个人所有,并设有个人住房公积金专门个人帐户。
个人缴存比例不低于职工本人上一年度月平均工资的5%。
缴存公积金的职工可以向公积金中心申请公积金贷款,公积金贷款利率较商业贷款利率低。
但职工在缴存公积金期间,非《公积金管理条例》中所明示的原因外,不得提取公积金。
为了加强对住房公积金的管理,维护住房公积金所有者的合法权益,促进城镇住房建设,提高城镇居民的居住水平,制定本条例。
同时也是国务院为了加强对住房公积金的管理,维护住房公积金所有者的合法权益,促进城镇住房建设,提高城镇居民的居住水平而制定的条例,适用于中华人民共和国境内住房公积金的缴存、提取、使用、管理和监督。
2.项目内容
图2.1住房公积金用例图
3类图
3.1住房公积金数据逻辑bean设计类图
图3.1住房公积金数据逻辑类图
3.2住房公积金管理系统数据表设计
表一表示的是数据库系统表,在本张表当中有5个字段,分别是键值信息字段表示主键值信息数据类型为char型,第二个字段名是seq表示当前序列号用于表示单位账户或者个人账户的字段,第三个字段表示的最大序号的字段表示的是单位账户最大不能超过这个值,第四和第五个字段分别表示对数据的描述字符类型是char型。
表一系统信息表
列名
中文名
列类型
列注释
可否为空
默认值
SEQNAME
键值信息
CHARACTER(20)
可自定义序号键值信息,按此产生序号。
不可以
SEQ
当前序号
INTEGER
从1开始,每次取完递增
不可以
MAXSEQ
最大序号
INTEGER
不可以
9999999
DESC
描述
CHARACTER(40)
不可以
FREEUSE1
备用1
CHARACTER(20)
可以
表3-1住房公积金系统参数表
表二表示的单位信息表,在这张表当中有23个字段分别表示如下。
单位公积金账户:
自动生成,取系统参数表中键为【UNITACCNUM】对应记录的【当前序号】,帐号长度12位字符,不足12位前面补0。
公积金余额:
等于单位下所有个人的【公积金余额】之和,开户时默认为0。
缴存基数:
等于单位下所有个人的【缴存基数】之和,开户时默认为0。
单位比例:
页面录入。
个人比例:
页面录入。
单位月应缴额:
等于单位下所有非销户个人的【单位月应缴额】之和,开户时默认为0。
个人月应缴额:
等于单位下所有非销户个人的【个人月应缴额】之和,开户时默认为0。
单位人数:
等于单位下所有非销户个人的人数,开户时默认为0。
最后汇缴月:
开户时默认为1899-12-01,待汇缴时改为实际汇缴年月,格式为:
汇缴年份-月份-01。
如:
最后汇缴月实际为2010年10月,则该字段存储【2010-10-01】。
公积金中心机构代码:
默认为0110。
柜员:
默认为111111。
建立日期:
开户时插入当前系统日期,格式为yyyy-mm-dd。
表二单位账户信息表
列名
中文名
列类型
列注释
可否为空
默认值
UNITACCNUM
单位公积金账号
CHARACTER(12)
UNITACCNAME
单位名称
CHARACTER(100)
不可以
UNITADDR
单位地址
CHARACTER(60)
不可以
ORGCODE
组织机构代码
CHARACTER(20)
不可以
UNITCHAR
单位类别
CHARACTER
(1)
1-企业
2-事业
3-机关
4-团体
5-其他
不可以
UNITKIND
企业类型
CHARACTER(3)
110-国有经济
120-集体经济
130-股份合作企业
140-联营企业
150-有限责任公司
160-股份有限公司
170-私营企业
190-其他企业
200-港、澳、台商投资企业
300-外商投资企业
900-其他
不可以
SALARYDATE
发薪日期
CHARACTER
(2)
可以
UNITPHONE
联系电话
CHARACTER(20)
不可以
UNITLINKMAN
单位联系人
CHARACTER(24)
不可以
UNITAGENTPAPNO
经办人身份证号码
CHARACTER(20)
可以
ACCSTATE
账户状态
CHARACTER
(1)
0-正常
9-销户
不可以
BALANCE
公积金余额
DECIMAL(16,2)
不可以
BASENUMBER
缴存基数
DECIMAL(16,2)
不可以
UNITPROP
单位比例
DECIMAL(6,3)
不可以
PERPROP
个人比例
DECIMAL(6,3)
不可以
UNITPAYSUM
单位月应缴额
DECIMAL(16,2)
不可以
PERPAYSUM
个人月应缴额
DECIMAL(16,2)
不可以
PERSNUM
单位人数
INTEGER
非销户人数
不可以
LASTPAYDATE
最后汇缴月
DATE
不可以
1899-12-01
INSTCODE
机构代码
CHARACTER(8)
不可以
默认为0110
OP
柜员
CHARACTER(4)
不可以
默认为
111111
CREATDATE
建立日期
DATE
不可以
REMARK
备注
CHARACTER(64)
可以
表3-2住房公积金单位信息表
个人公积金帐号:
自动生成,取系统参数表中键值为【PERACCNUM】对应记录的【当前序号】,帐号长度12位字符,不足12位前面补0。
单位公积金帐号:
页面录入。
开户日期:
个人开户时的系统日期。
公积金余额:
开户时为0,当进行汇缴或提取等资金类业务时修改此余额及其单位的公积金余额。
个人账户状态:
开户时默认为0。
缴存基数:
页面录入。
单位比例:
取单位信息的单位比例,在0.05-0.12范围之内,否则报错。
个人比例:
取单位信息的个人比例,在0.05-0.12范围之内,否则报错。
最后汇缴月:
开户时默认为1899-12-01,待汇缴时改为实际汇缴年月,格式为:
汇缴年份-月份-01。
如:
最后汇缴月实际为2010年10月,则该字段存储【2010-10-01】。
表三个人开户信息表
列名
中文名
列类型
列注释
可否为空
默认值
ACCNUM
个人公积金账号
CHARACTER(12)
0
不可以
UNITACCNUM
单位公积金账号
CHARACTER(12)
0
不可以
OPENDATE
开户日期
DATE
BALANCE
公积金余额
DECIMAL(16,2)
PERACCSTATE
个人账户状态
CHARACTER
(1)
BASENUMBER
缴存基数
DECIMAL(16,2)
UNITPROP
单位比例
DECIMAL(6,3)
INDIPROP
个人比例
DECIMAL(6,3)
LASTPAYDATE
最后汇缴月
DATE
1899-12-01
UNITMONPAYSUM
单位月应缴额
DECIMAL(16,2)
PERMONPAYSUM
个人月应缴额
YPAYAMT
本年汇补缴额
DECIMAL(16,2)
自然年度
YDRAWAMT
年提取额
DECIMAL(16,2)
自然年度
YINTERESTBAL
年度结息
DECIMAL(16,2)
INSTCODE
机构代码
CHARACTER(8)
不可以
默认为0110
OP
柜员
CHARACTER(4)
不可以
默认为111111
REMARK
备注
CHARACTER(64)
可以
表3-3住房发奖金个人信息
4算法设计
4.1住房公积金管理系统活动图
图4.1住房公积金活动图
5.项目运行界面
5.1本图片是住房公积金登录窗口。
图5-1管理员登录窗口界面
5.2住房公积金管理系统的主界面。
图5-2住房公积金主界面
5.3住房公积金管理系统企业开户界面。
图5-3住房公积金企业开户界面
5.4住房公积金管理系统查询企业资料的界面。
图5-4住房公积金企业信息显示界面
5.5住房公积金管理系统按账号查询的结果。
图5-5住房公积金按账号查询界面
5.6住房公积金管理系统显示个人信息资料。
图5-6住房公积金显示个人信息资料
6.关键代码(要求在类的定义以及方法定义的前面给出相关描述信息)
6.1添加单位信息的关键代码。
publicintadd(TB002tb,Connectioncon)throwsException{
Stringsql="insertintotb002values(?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
)";
PreparedStatementpstmt=con.prepareStatement(sql);
pstmt.setString(1,tb.getUNITACCNUM());
pstmt.setString(2,tb.getUNITACCNAME());
pstmt.setString(3,tb.getUNITADDR());
pstmt.setString(4,tb.getORGCODE());
pstmt.setString(5,tb.getUNITCHAR());
pstmt.setString(6,tb.getUNITKIND());
pstmt.setString(7,tb.getSALARYDATE());
pstmt.setString(8,tb.getUNITPHONE());
pstmt.setString(9,tb.getUNITLINKMAN());
pstmt.setString(10,tb.getUNITAGENTPAPNO());
pstmt.setString(11,tb.getACCSTATE());
pstmt.setBigDecimal(12,tb.getBALANCE());
pstmt.setBigDecimal(13,tb.getBASENUMBER());
pstmt.setBigDecimal(14,tb.getUNITPROP());
pstmt.setBigDecimal(15,tb.getPERPROP());
pstmt.setBigDecimal(16,tb.getUNITPAYSUM());
pstmt.setBigDecimal(17,tb.getPERPAYSUM());
pstmt.setLong(18,tb.getPERSNUM());
pstmt.setDate(19,tb.getLASTPAYDATE());
pstmt.setString(20,tb.getINSTCODE());
pstmt.setString(21,tb.getOP());
pstmt.setDate(22,tb.getCREATDATE());
pstmt.setString(23,tb.getREMARK());
returnpstmt.executeUpdate();
}
6.2查询单位总记录数的关键代码。
publicintUnitCount(Connectioncon)throwsException{
Stringsql="selectcount(*)astotalfromtb002";
PreparedStatementpstmt=con.prepareStatement(sql);
ResultSetrs=pstmt.executeQuery();
if(rs.next()){
returnrs.getInt("total");
}else{
return0;
}
}
6.3查询单位指定条数的关键代码。
publicResultSetunitList(Connectioncon,PageBeanpageBean)throwsException{
StringBuffersb=newStringBuffer("select*fromtb002");
if(pageBean!
=null){
sb.append("limit"+pageBean.getStart()+","+pageBean.getRows());
}
PreparedStatementpstmt=con.prepareStatement(sb.toString());
returnpstmt.executeQuery();
}
6.4按单位名称模糊匹配查询的关键代码。
publicResultSetUnitSearchByName(Connectioncon,StringUNITACCNAME)throwsException{
StringBuffersql=newStringBuffer("select*fromtb002");
if(StringUtil.isNotEmpty(UNITACCNAME)){
sql.append("andUNITACCNAMElike'%"+UNITACCNAME+"%'");
}
PreparedStatementpstmt=con.prepareStatement(sql.toString().replaceFirst("and","where"));
returnpstmt.executeQuery();
}
}
6.5个人开户的关键代码。
publicintadd(Connectioncon,TB003tb)throwsException{
Stringsql="insertintotb003values(?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
)";
PreparedStatementpstmt=con.prepareStatement(sql);
pstmt.setString(1,tb.getACCNUM());
pstmt.setString(2,tb.getUNITACCNUM());
pstmt.setDate(3,tb.getOPENDATE());
pstmt.setBigDecimal(4,tb.getBALANCE());
pstmt.setString(5,tb.getPERACCSTATE());
pstmt.setBigDecimal(6,tb.getBASENUMBER());
pstmt.setBigDecimal(7,tb.getUNITPROP());
pstmt.setBigDecimal(8,tb.getINDIPROP());
pstmt.setDate(9,tb.getLASTPAYDATE());
pstmt.setBigDecimal(10,tb.getUNITMONPAYSUM());
pstmt.setBigDecimal(11,tb.getPERMONPAYSUM());
pstmt.setBigDecimal(12,tb.getYPAYAMT());
pstmt.setBigDecimal(13,tb.getYDRAWAMT());
pstmt.setBigDecimal(14,tb.getYINTERESTBAL());
pstmt.setString(15,tb.getINSTCODE());
pstmt.setString(16,tb.getOP());
pstmt.setString(17,tb.getREMARK());
pstmt.setString(18,tb.getUNITNAME());
pstmt.setString(19,tb.getIDCARD());
pstmt.setString(20,tb.getPERSONNAME());
returnpstmt.executeUpdate();
}
6.6个人开户的所有信息显示关键代码。
publicintUnitCount(Connectioncon)throwsException{
Stringsql="selectcount(*)astotalfromtb003";
PreparedStatementpstmt=con.prepareStatement(sql);
ResultSetrs=pstmt.executeQuery();
if(rs.next()){
returnrs.getInt("total");
}else{
return0;
}
}
6.7查询个人信息条数的关键代码。
publicintUnitCount(Connectioncon)throwsException{
Stringsql="selectcount(*)astotalfromtb003";
PreparedStatementpstmt=con.prepareStatement(sql);
ResultSetrs=pstmt.executeQuery();
if(rs.next()){
returnrs.getInt("total");
}else{
return0;
}
}
6.8查询个人公积金账号的关键代码。
publicResultSetcount(Connectioncon)throwsException{
Stringsql="select*fromtb004orderbyPERACCNUMDESClimit1";
PreparedStatementpstmt=con.prepareStatement(sql);
returnpstmt.executeQuery();
}
6.9增加账号到表中的关键代码。
publicintadd(Connectioncon,StringPERACCNUM)throwsException{
Stringsql="insertintotb004(PERACCNUM)values(?
)";
PreparedStatementpstmt=con.prepareStatement(sql);
pstmt.setString(1,PERACCNUM);
returnpstmt.executeUpdate();
}
6.10按照个人账号实现模糊匹配的关键代码。
publicResultSetPersonSearchById(Connectioncon,StringACCNUM)throwsException{
StringBuffersql=newStringBuffer("select*fromtb003");
if(StringUtil.isNotEmpty(ACCNUM)){
sql.append("andACCNUMlike'%"+ACCNUM+"%'");
}
PreparedStatementpstmt=con.prepareStatement(sql.toString().replaceFirst("and","where"));
returnpstmt.executeQuery();
}
6.11按单位账户查询信息关键代码。
publicResultSetexecuteQuery(Connectioncon)throwsException{
PreparedStatementpstmt=con.prepareStatement("selectUNITACCNUMfromtb002");
returnpstmt.executeQuery();
}
6.12处理页面中文乱码的关键代码。
publicclassEncondingFilterimplementsFilter{
privateStringtargetEncoding="gb2312";
privateFilterConfigfilterConfig;
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,
FilterChainchain)throwsIOException,ServletException{
//System.out.println("filterrun.");
HttpServletRequestrequest=(HttpServletRequest)arg0;
HttpServletResponseresponse=(HttpServletResponse)arg1;
request.setCharacterEncoding(targetEncoding);//把请求用指定的方式编码
response.setCharacterEncoding(targetEncoding);
chain.doFilter(arg0,arg1);
}
publicvoidinit(FilterConfigconfig)throwsServletException{
this.filterConfig=config;
this.ta