资源描述
西 安 邮 电 大 学
(计算机学院)
综合应用软件课程设计报告
题 目:易贷宝-企业-银行-农民贷款系统
专业名称: 计算机科学与技术
班 级: 计科1201
学生姓名:
学号(8位):
指导教师: 乔平安
起止时间: 2014年11月17日—2014年11月28日
一、 课程设计目的
①在数据库原理课程基础上,培养综合运用数据库知识的能力。
②学会数据库的设计、规划以及应用程序的开发和调试,掌握客户机/服务器体系结构,学会大型数据库的工作模式。
③大型数据库管理系统存放于服务器,数据库放在服务器上,学生在客户机上开发应用程序访问服务器上的数据库,并完成应用系统所要求的各项功能,应用程序的开发需要采用当前流行的新软件。
二、课程设计内容
数据库的设计
根据所选的题目,经过调查研究,构建合理的数据库。首先构建基本表以及表和表之间的联系,在此基础上构建视图和索引表。
此次选题共建立11张表,各表之间外键关联极强。
① 服务器的组织
根据建立的基本表、视图和索引表搭建服务器。
前端开发工具:采用JAVA进行编写
② 服务器端:JDK 1.7 , mysql 5.6
③ 开发应用程序
利用所学的新软件开发工具进行应用程序的开发。
④ 连接、调试。
三、软硬件环境及系统所采用的体系结构
系统的体系结构为C/S结构
1.前台——
开发工具Eclipse+ADT 22.0.3+GenyMotion
开发语言为:Java(使用JDK1.6)
开发环境:Android4+Windows8 x64
2. 后台——
开发工具:MyEclipse2014+Tomcat7.0+MySQL5.6+SQLYog
开发语言为:Java(使用JDK1.7),SQL
开发环境为:Windows7 x64
四、需求分析
易贷宝是一款为面向农户贷款的贷款应用,实行“公司+农户+信贷”的产业链模式进行申贷。
所谓“公司+农户+信贷”,就是实行农户贷款,企业担保方式。利用企业市场洞察力、信息敏感度和资金实力相对较强的优势,由企业为关联农户贷款提供担保,既把企业与农户的利益紧密地联系在一起,又能增强单个农户抗风险能力创新担保形式,实现风险共担。这样利用农户现成生产设备减少了生产成本,公司和周围农民都有了经济效益。通过对农业龙头企业进行支持,以及对形成农业产业链的前提——农户种植、收购、加工等上下游提供相应的信贷支持、提供信息服务、发放惠农卡等,不仅满足企业发展的资金需求还对上下游客户提供延伸的金融服务,这样银行也能降低风险,形成农户、企业、银行等多赢局面。
“易贷宝”是一款集贷款服务、供需资讯于一体的金融类应用程序。很好的运用了“公司+农户+信贷”这一模式。具体流程如下:农产品收购企业向银行申请贷款,并按照企业和银行协议,棉花收购企业需将这笔款项中的一定比例借给有需求的农户,用于农户的扩大再生产,并负责向农户提供生产技术指导和产品收购。这笔借款以农户在企业中的订单做抵押。农户将其现在或将来生产的农场品销售给企业,作为获得贷款的对价和偿还贷款的方式,最后由企业向银行偿还贷款本息。“易贷宝” 创新了信贷管理方式,依托产业化龙头企业,把银行贷款发放和农业产业化有机地结合在一起。
“易贷宝”贷款的设计理念是通过产业链贷款资金封闭运行化解信贷资金的风险,从而解决农户贷款难、担保难的问题。同时立足于简化企业贷款流程,减少企业款项下达时间,为企业提供优惠利率。同时利用银行做资金融通,以“公司+农户+信贷”的模式实现三方共赢。
具体的需求分析:
1. 农户注册登陆:用户名、用户密码、用户密码确认、手机号。注册之后出现用户信息,可以暂不填写,但是在申请贷款之前必须得填写
2. 用户信息:身份认证:中文姓名、身份证号、出生年月、现居地址
经营状况:种植行业、种植规模、种植年限、年投入成本、年收入、贷款用途
银行卡号: 卡号、余额 (贷款对象须从事种养殖业,并且有过种植经历,即年限不可为0。规模、年限、成本收入、贷款用途作为银行放贷金额的考量)
3. 担保企业信息:企业名称、企业注册号、企业地址、企业电话、申请进度
(银行线上电话核实,符合后根据企业地址线下审核,审查交易来往记录等内容)
4.贷款申请:申请农户、贷款金额、贷款期限、申请企业、状态、申请日期、用途、应还日期(必须完善用户信息之后才能在线申请,提交申请后根据用户信息进行审核)
5.进度查询:查询用户款项审核进度。有未审核,正在审核,审核未通过三种情况。未通过审核列有未审核通过的原因。
6.在线寻找担保企业:可以通过定位寻找附近的农企,也可搜索企业,并实现线上沟通。发送担保申请。
7.申请记录:申请记录中有农户贷款的申请记录,记录农户贷款的金额,贷款日期,款项状态(已还款,未还款)显示到期偿还金额,应还款的日期
8.还款:产品申请 数量 单价 合计金额 提交还款申请 等待企业线上核实(农户提交申请后,在线下交易的同时企业完成线上核实)
9.邀请好友:邀请通讯录中的好友。方式为短信。
10.平台介绍:介绍易贷宝,语言通俗易懂
关于:简单介绍开发团队
意见反馈:提交文字信息
客服电话:一键拨打客服电话
11.企业注册:用户名、密码、密码确认、企业名称、注册号(注册号必须输入完整信息,名称可以模糊匹配)
成立日期、登记机关、地址、经营范围、企业电话
12.我的消息:查看农户的消息,并在线沟通。
13.查看申请:查看向自己申请的农户的所有信息,线下核实之后线上通过担保申请。通过或拒绝担保申请的农户。通过的农户保存在我的担保农户中。
查看农户的还款申请,在交易的同时通过还款验证,农户的申请记录中款项更新为已还款。
14.我的担保农户:查看所担保农户的所有信息、审核进度、并实现交流。
五、系统设计
1.系统结构图(功能模块图)
见附件一
2.后台接口:
1.农民注册
servlet/FarmerRegistServlet
String name
农民姓名
String password
密码
String phone
农民电话
返回值
name_has_registed
有信息姓名,注册失败
phone_has_registed
有重复电话,注册失败
regist_success
注册成功
regist_failed
注册失败
2.农民资料完善
http://localhost:8080/ servlet/FarmerDetialServlet
Integer fid
农民id
String plantIndestury
种植行业
String plantScale
种植规模
Integer plantYear
种植年限
Float annualInvestment
年投入
Float annualEarning
年收入
String loanUse
贷款用途
返回值
message_save_success
信息保存成功
message_has_certained
信息已确认过
save_failed
保存失败
3.农民个人信息完善
http://localhost:8080/ servlet/FarmerIdentityServlet
Integer fid
农民id
cnNAME
中文姓名
identityNumber
农民身份证号
birthday
生日
address
住址
返回值
message_save_success
信息保存成功
message_has_certained
信息已确认过
save_failed
保存失败
4.农民持有银行卡情况
http://localhost:8080/ servlet/ servlet/FBankCardServlet
Integer fid
农民id
String bankName
银行名称
String cardNumber
银行卡号
返回值
cardNumber_has_certained
银行卡已存在
message_save_success
信息保存成功
message_has_save
信息保存(超过一张卡)
save_failed
保存失败
5.企业注册
http://localhost:8080/ servlet/ servlet/ EnterpriseServlet
String name
企业登录名
String password
登录密码
String enterpriseName
企业名称
String registNumber
企业注册号
返回结果
name_has_registed
存在相同注册名,注册失败
enterpriseName_has_registed
存在相同企业名,注册失败
registNumber_has_registed
存在相同注册号,注册失败
regist_success
注册成功
regist_failed
注册失败
6.企业信息完善
/servlet/EnterpriseDetialServlet
Integer eid
企业id
String establishDate
成立日期
String registAuthorith
登记机关
String businessScope
经营范围
String phoneNumber
企业电话
返回结果
message_save_success
信息插入成功
message_has_certained
信息已插入
save_failed
插入失败
7.企业持有银行卡情况
http://localhost:8080/ servlet/ servlet/EBankServlet
Integer eid
企业id
String bankName
银行名称
String cardNumber
银行卡号
返回值
number_has_certained
银行卡已存在
message_save_success
信息保存成功
message_has_save
信息保存(超过一张卡)
message_save_failed
保存失败
8.农民登陆
http://localhost:8080/ servlet/FarmerLoginServlet
String name
农民姓名
String password
密码
返回结果
login_failed
登陆失败
{"farmer":{"id":1,"name":"zc","password":"123","hasIdentity":1,"hasDetial":1,"hasBankCard":1},"farmerDetial":{"fid":1,"plantIndestury":"123","plantScale":"123","plantYear":123,"annualInvestment":123,"annualEarning":123,"loanUse":"123"},"farmerIdentity":{"fid":1,"cnName":"qwe","identityNumber":"123","birthday":"123","address":"123"},"bankCards":[{"fid":1,"bankName":"123","cardNumber":"123","money":10000}]}
9.企业登陆
http://localhost:8080/servlet/EnterpriseLoginServlet
String name
企业登录名
String password
登录密码
返回结果
login_failed
登陆失败
{"enterprise":{"id":1,"name":"haha","password":"123","enterpriseName":"123","registNumber":
"123","hasDetial":1,"hasBankCard":1},"enterprisedetial":{"eid":1,"establishDate":"123","registAuthorith":
"123","businessScope":"123","phoneNumber":"123"},"bankCards":[{"eid":1,"bankName":
"123","cardNumber":"123","money":6000000}]}
10.更新农民银行卡金额
/servlet/FarmerUpdateMoneyServlet
Integer id
银行卡id
Float money
钱数
返回结果
money_less_failed
所要取出的钱大于已有的钱,取钱失败
get_money_success
取钱成功
save_money_success
存钱成功
update_money_failed
更新失败
11.更新企业银行卡金额
/servlet/EnterpriseUpdateMoneyServlet
Integer id
银行卡id
Float money
钱数
返回结果
money_less_failed
所要取出的钱大于已有的钱,取钱失败
get_money_success
取钱成功
save_money_success
存钱成功
update_money_failed
更新失败
12.查询企业银行卡信息
/servlet/EBankCardDetialServlet
Integer eid
企业id
返回结果
no_bankcard
无银行卡信息
[{"id":1,"eid":1,"bankName":"123","cardNumber":"123","money":5930000},
{"id":2,"eid":2,"bankName":"234","cardNumber":"23456","money":8000000}]
13.查询农民银行卡信息
/servlet/FBankCardDetialServlet
Integer fid
农民id
返回结果
no_bankcard
无银行卡信息
[{"id":1,"fid":1,"bankName":"123","cardNumber":"123","money":110000}]
14.模拟在线查找企业(产生10个eid随机数,返回enterprise,enterprisedetial中的全部内容)
/servlet/FindEnterpriseServlet
返回结果
[{"id":1,"name":"haha","enterpriseName":"123","registNumber":"123","businessScope":"123","phoneNumber":"123","establishDate":"123"},….]
随机返回10个企业及其信息
15. 用户提出担保申请
/servlet/GurantEnterpriseServlet
Integer fid
农民id
Integer eid
企业id
返回结果
gurant_success
申请提出成功
gurant_failed
申请提出失败
16.企业接受农户担保申请
/servlet/UpdateGurantDateSuccessServlet
Integer id
担保信息id
返回结果
update_success
更新申请信息为接受成功
update_failed
更新申请信息为接受失败
17.企业不接受农户担保申请
/servlet/UpdateGurantDateFailedServlet
Integer id
担保信息id
返回结果
update_success
更新申请信息为不接受成功
update_failed
更新申请信息为不接受失败
18.用户向企业贷款
/servlet/LoanServlet
fid
农民id
eid
企业id
fbid
农民存入的银行卡id
money
贷款金额
remoney
应还金额
loanDays
贷款期限
useOfLoan
贷款用途
返回结果
loan_success
申请贷款成功
loan_failed
申请贷款失败
19.企业正在审理贷款
/servlet/LoanPendingServlet
id
贷款id
返回参数
loan_update_pending_success
更改状态为企业正在审理贷款成功
loan_update_pending_failed
更改状态为企业正在审理贷款失败
20.企业决定不放贷
/servlet/LoanFailedServlet
id
贷款id
返回结果
loan_update_failed_success
更改状态为企业不放贷成功
loan_update_failed_failed
更改状态为企业不放贷失败
21.企业决定放贷
/servlet/LoanSuccessServlet
id
贷款id
ebid
企业所用的银行卡id
返回结果
loan_update_success_success
更改状态为企业决定放贷成功
loan_update_success_success
更改状态为企业决定放贷失败
22.农户查看我的所有贷款情况
/servlet/FarmerAllLoanServlet
Integer fid
返回结果
[{"eid":1,"establishDate":"123","registAuthorith":"123","businessScope":"123","phoneNumber":"123","fid":1,"fbid":1,"money":123,"remoney":234,"loanDays":12,"loanSuccessDate":"2014-11-17","repaymentDate":"2014-11-17","useOfLoan":"12","status":7}]
23.农户提出还款
/servlet/FarmerRepaymentServlet
Integer fid
农民id
Integer eid
企业id
Integer fbid
农户选择还款的银行卡id
Integer lid
借款项id
String repaymentContent
还款内容
返回结果
reapply_success
更改状态为农民提出还款成功
reapply_failed
更改状态为农民提出还款失败
24.企业正在审核还款
/servlet/LoanRependingServlet
Integer id
还款id
返回结果
update_loan_repending_success
更改状态为企业正在审核还款成功
update_loan_repending_failed
更改状态为企业正在审核还款失败
25.企业决定还款成功
/servlet/RepaySuccessServlet
Integer id
还款id
Integer ebid
企业银行卡id
返回结果
update_loan_success_success
更改状态为企业决定还款成功成功
update_loan_success_failed
更改状态为企业决定还款成功失败
26.农户查看所有还款信息
27.农户查询全部担保信息
/servlet/FarmerGetAllGurantInfoServlet
Integer fid
农户id
返回结果
no_data
没有数据
JSON:
[{"id":1,"askDate":"2014-11-17","status":1,"enterprise":{"enterpriseName":"dell"}}]
担保进度数据
28.企业查询所有担保信息
/servlet/EnterpriseGetAllGurantApplyServlet
Integer eid
企业id
返回结果(
no_data
没有数据
JSON:
[{"id":3,"askDate":"2014-11-17","cnName":"zzzc","identityNumber":"140109199307230519","address":"xian changan"}]
此处返回status=1的信息,表示我要处理的担保申请
3.数据库设计
ER图
1.农户表
farmer
id
INT
农民id(主键)
name
VARCHAR(255)
农民姓名
password
VARCHAR(255)
登陆密码
phone
VARCHAR(20)
农民电话
hasIdentity
TINYINT
是否确认身份信息,1确认
hasDetial
TINYINT
是否确认经营信息,1确认
hasBankCard
TINYINT
是否拥有银行卡
2.农户细节表
farmerdetial
fid
INT
农民id(主键+外键)
plantIndestury
VARCHAR(255)
种植行业
plantScale
VARCHAR(255)
种植规模
plantYear
INT
种植年限
annualInvestment
FLOAT
年投入
annualEarning
FLOAT
年收入
loanUse
VARCHAR(255)
贷款用途
3.农户确认信息表
farmeridentity
fid
INT
农民id(主键+外键)
cnName
VARCHAR(255)
中文姓名
identityNumber
VARCHAR(255)
身份证号
birthday
VARCHAR(255)
出生年月
address
VARCHAR(255)
现居地址
4.农民银行卡表
fbankcard
id
INT
银行卡id(主键)
fid
INT
农民id(外键)
bankName
VARCHAR(255)
银行名称
cardNumber
VARCHAR(255)
银行卡号
money
FLOAT
金额
5.企业表
enterprise
id
INT
企业id(主键)
name
VARCHAR(255)
企业登陆名称
password
VARCHAR(255)
密码
enterpriseName
VARCHAR(255)
企业名称
registNumber
VARCHAR(255)
注册号
hasDetial
TINYINT
是否填写企业信息
hasBankCard
TINYINT
是否填写银行卡
6.企业细节表
enterprisedetial
eid
INT
企业id(主键+外键)
establishDate
VARCHAR(255)
成立日期
registAuthorith
VARCHAR(255)
登记机关
businessScope
VARCHAR(255)
经营范围
phoneNumber
VARCHAR(255)
企业电话
7.企业银行卡表
ebankcard
id
INT
银行卡id(主键)
eid
INT
企业id(外键)
bankName
VARCHAR(255)
银行名称
cardNumber
VARCHAR(255)
银行卡号
money
FLOAT
金额
8.担保表
gurant
id
INT
担保信息id(主键)
fid
INT
农民id(外键)
eid
INT
企业id(外键)
askDate
VARCHAR(255)
申请日期
gurantDate
VARCHAR(255)
申请成功日期
status
INT
申请状态
9.信息表
message
id
INT
信息id
type
INT
信息类型
content
VARCHAR(255)
信息内容
fid
INT
农民id
eid
INT
企业id
date
VARCHAR(255)
发送日期
hasRead
TINYINT
是否阅读,1已读
10. 贷款表
loan
Id
INT
贷款id(主键)
fid
INT
农民id(外键)
eid
INT
企业id(外键)
fbid
INT
农民存入的银行卡id(外键)
ebid
INT
企业存入的银行卡id(外键)
money
FLOAT
贷款金额
remoney
FLOAT
应还金额
loanDays
INT
贷款期限
loanSuccessDate
VARCHAR(255)
成功贷款日期
repaymentDate
VARCHAR(255)
还款日期
useOfLoan
VARCHAR(255)
贷款用途
status
INT
状态
11. 还款表
repayment
Id
INT
还款id(主键)
fid
INT
农民id(外键)
eid
INT
企业id(外键)
fbid
INT
农民存入的银行卡id(外键)
ebid
INT
企业存入的银行卡id(外键)
lid
INT
借款id(外键)
repaymentContent
VARCHAR(255)
还款项目
六、系统的实施
系统的实现方法,应用程序的编制方法,重要代码的说明。
(可以给出流程图)
1. 系统的实现方法
Server端使用JDBC+Apache的开源接口进行数据库操作,同时使用了传统的Servlet+Service+Dao设计,实现了事务管理,Servlet层实现参数接收和信息发送接收,Service实现业务逻辑的处理,Dao层直接操纵数据库
2. 数据库的设计
软件的设计采用面向对象的实现方式,所以数据库要遵循这一思想,先不编写数据库SQL脚本,先设计实体类(对应服务器代码的com.xiyou.ydb.model层下的Entity)
3. Server端对请求参数的处理
关键代码如下:
public class EncodingFilter implements Filter {
private String charset = "UTF-8";
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if(req.getMethod().equalsIgnoreCase("GET")) {
if(!(req instanceof GetRequest)) {
req = new GetRequest(req, charset);//处理get请求编码
}
} else {
req.setCharacterEncoding(charset);//处理post请求编码
}
chain.doFilter(req, response);
}
@Override
public void init(FilterConfig fConfig) throws ServletException {
String charset = fConfig.getInitParameter("charset");
if(charset != null && !charset.isEmpty()) {
this.charset = charset;
}
}
}
使用一个过滤器,实现全站请求码转码,方便中文数据的发送和接受
4. Server端数据库连接方式
为了提高Server的系统吞吐量,采用C3P0数据库连接池,C3P0依赖的jar包有c3p0-0.9.2-pre1.jar和mchange-commons-0.2.jar,并且需要在classpath下添加c3p0数据库的连接信息c3p0-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<!-- 数据库连接池 -->
<default-config>
<property name="jdbcUrl">
<![CDATA[
jdbc:mysql://localhost:3306/ydb?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true
]]>
</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>
5. Android网络请求实现方式:
原则上手写,不使用GitHub上的开源项目,不使用别人的jar包。
关键代码:Http请求
/**
* 用于POST请求生成字符串的方法
*
* @param url
* (请求的地址)
* @param params
* (POST请求参数)
* @return 请求结果
*/
public static String queryStringForPost(String url,
Map<String, String> rawParams) {
HttpPost request = new HttpPost(url);
List<NameValuePair> params = null;
if (rawParams != null) {
params = new ArrayList<NameValuePair>();
for (String key : rawParams.keySet()) {
params.add(new BasicNameValuePair(key, rawParams.get(key)));
}
}
try {
if (params != null) {
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String result = null;
try {
HttpResponse response = new DefaultHttpClient().execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
System.out.println("requese successful");
result = EntityUtils.toString(response.getEntity(), "utf-8");
System.out.println("result----->" + result);
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = HttpUtils.NETWORK_ERROR;
return result;
} catch (IOException e) {
e.printStackTrace();
result = HttpUtils.NETWORK_ERROR;
return result;
}
return null;
}
该方法返回的字符串即为Server返回的数据,可以是JSON数据,之后通过客户端对JSON数据进行解析,从而得到View上的数据
6. Android端的MVC设计方式:
Model即和服务器同步,使用实体类封装数据库中的数据;
View层即使用xml文件完成静态布局,节省代码;
Controller即使用Activity控制Android程序的执行
7. Android实现的类似WEB(B/S)的应用的Cookie保存
在Android平台下,有一个特殊的类android.app.Application,作用范围类似WEB应用的ApplicationScope,使用它来保存应用程序的当前状态
public class AppStatus extends Application {
public final static String TAG = "AppStatus";
private F
展开阅读全文