1、 西 安 邮 电 大 学 (计算机学院) 综合应用软件课程设计报告 题 目:易贷宝-企业-银行-农民贷款系统 专业名称: 计算机科学与技术 班 级: 计科1201 学生姓名: 学号(8位): 指导教师: 乔平安 起止时间: 2014年11月17日—2014年11月28日 一、 课程设计目的 ①在数据库原理课程基础上,培养综合运用数据库知识的能力。 ②学
2、会数据库的设计、规划以及应用程序的开发和调试,掌握客户机/服务器体系结构,学会大型数据库的工作模式。 ③大型数据库管理系统存放于服务器,数据库放在服务器上,学生在客户机上开发应用程序访问服务器上的数据库,并完成应用系统所要求的各项功能,应用程序的开发需要采用当前流行的新软件。 二、课程设计内容 数据库的设计 根据所选的题目,经过调查研究,构建合理的数据库。首先构建基本表以及表和表之间的联系,在此基础上构建视图和索引表。 此次选题共建立11张表,各表之间外键关联极强。 ① 服务器的组织 根据建立的基本表、视图和索引表搭建服务器。 前端开发工具:采用JAVA进行编写 ② 服
3、务器端: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
4、 四、需求分析 易贷宝是一款为面向农户贷款的贷款应用,实行“公司+农户+信贷”的产业链模式进行申贷。 所谓“公司+农户+信贷”,就是实行农户贷款,企业担保方式。利用企业市场洞察力、信息敏感度和资金实力相对较强的优势,由企业为关联农户贷款提供担保,既把企业与农户的利益紧密地联系在一起,又能增强单个农户抗风险能力创新担保形式,实现风险共担。这样利用农户现成生产设备减少了生产成本,公司和周围农民都有了经济效益。通过对农业龙头企业进行支持,以及对形成农业产业链的前提——农户种植、收购、加工等上下游提供相应的信贷支持、提供信息服务、发放惠农卡等,不仅满足企业发展的资金需求还对上下游客户提供延伸的金
5、融服务,这样银行也能降低风险,形成农户、企业、银行等多赢局面。 “易贷宝”是一款集贷款服务、供需资讯于一体的金融类应用程序。很好的运用了“公司+农户+信贷”这一模式。具体流程如下:农产品收购企业向银行申请贷款,并按照企业和银行协议,棉花收购企业需将这笔款项中的一定比例借给有需求的农户,用于农户的扩大再生产,并负责向农户提供生产技术指导和产品收购。这笔借款以农户在企业中的订单做抵押。农户将其现在或将来生产的农场品销售给企业,作为获得贷款的对价和偿还贷款的方式,最后由企业向银行偿还贷款本息。“易贷宝” 创新了信贷管理方式,依托产业化龙头企业,把银行贷款发放和农业产业化有机地结合在一起。
6、易贷宝”贷款的设计理念是通过产业链贷款资金封闭运行化解信贷资金的风险,从而解决农户贷款难、担保难的问题。同时立足于简化企业贷款流程,减少企业款项下达时间,为企业提供优惠利率。同时利用银行做资金融通,以“公司+农户+信贷”的模式实现三方共赢。 具体的需求分析: 1. 农户注册登陆:用户名、用户密码、用户密码确认、手机号。注册之后出现用户信息,可以暂不填写,但是在申请贷款之前必须得填写 2. 用户信息:身份认证:中文姓名、身份证号、出生年月、现居地址 经营状况:种植行业、种植规模、种植年限、年投入成本、年收入、贷款用途 银行卡号: 卡号、余额 (贷款对象须从事种养殖
7、业,并且有过种植经历,即年限不可为0。规模、年限、成本收入、贷款用途作为银行放贷金额的考量) 3. 担保企业信息:企业名称、企业注册号、企业地址、企业电话、申请进度 (银行线上电话核实,符合后根据企业地址线下审核,审查交易来往记录等内容) 4.贷款申请:申请农户、贷款金额、贷款期限、申请企业、状态、申请日期、用途、应还日期(必须完善用户信息之后才能在线申请,提交申请后根据用户信息进行审核) 5.进度查询:查询用户款项审核进度。有未审核,正在审核,审核未通过三种情况。未通过审核列有未审核通过的原因。 6.在线寻找担保企业:可以通过定位寻找附近的农企,也可搜索企业,并实现线上沟通。发送担
8、保申请。 7.申请记录:申请记录中有农户贷款的申请记录,记录农户贷款的金额,贷款日期,款项状态(已还款,未还款)显示到期偿还金额,应还款的日期 8.还款:产品申请 数量 单价 合计金额 提交还款申请 等待企业线上核实(农户提交申请后,在线下交易的同时企业完成线上核实) 9.邀请好友:邀请通讯录中的好友。方式为短信。 10.平台介绍:介绍易贷宝,语言通俗易懂 关于:简单介绍开发团队 意见反馈:提交文字信息 客服电话:一键拨打客服电话 11.企业注册:用户名、密码、密码确认、企业名称、注册号(注册号必须输入完整信息,名称可以模糊匹配) 成立日期、登记机关、地址、经营范围、企业电
9、话 12.我的消息:查看农户的消息,并在线沟通。 13.查看申请:查看向自己申请的农户的所有信息,线下核实之后线上通过担保申请。通过或拒绝担保申请的农户。通过的农户保存在我的担保农户中。 查看农户的还款申请,在交易的同时通过还款验证,农户的申请记录中款项更新为已还款。 14.我的担保农户:查看所担保农户的所有信息、审核进度、并实现交流。 五、系统设计 1.系统结构图(功能模块图) 见附件一 2.后台接口: 1.农民注册 servlet/FarmerRegistServlet String name 农民姓名 String password 密码 St
10、ring 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 ann
11、ualInvestment 年投入 Float annualEarning 年收入 String loanUse 贷款用途 返回值 message_save_success 信息保存成功 message_has_certained 信息已确认过 save_failed 保存失败 3.农民个人信息完善 http://localhost:8080/ servlet/FarmerIdentityServlet Integer fid 农民id cnNAME 中文姓名 identityNumber 农民身份证号 birthday 生日 addres
12、s 住址 返回值 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 信息保存成
13、功 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 存在相同企业名,注
14、册失败 registNumber_has_registed 存在相同注册号,注册失败 regist_success 注册成功 regist_failed 注册失败 6.企业信息完善 /servlet/EnterpriseDetialServlet Integer eid 企业id String establishDate 成立日期 String registAuthorith 登记机关 String businessScope 经营范围 String phoneNumber 企业电话 返回结果 message_save_success 信息插入成功
15、 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_fail
16、ed 保存失败 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","pl
17、antYear":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/EnterpriseLogin
18、Servlet 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
19、":"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_mo
20、ney_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 返回结
21、果 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",
22、"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. 用户提出担
23、保申请 /servlet/GurantEnterpriseServlet Integer fid 农民id Integer eid 企业id 返回结果 gurant_success 申请提出成功 gurant_failed 申请提出失败 16.企业接受农户担保申请 /servlet/UpdateGurantDateSuccessServlet Integer id 担保信息id 返回结果 update_success 更新申请信息为接受成功 update_failed 更新申请信息为接受失败 17.企业不接受农户担保申请 /servlet/Up
24、dateGurantDateFailedServlet Integer id 担保信息id 返回结果 update_success 更新申请信息为不接受成功 update_failed 更新申请信息为不接受失败 18.用户向企业贷款 /servlet/LoanServlet fid 农民id eid 企业id fbid 农民存入的银行卡id money 贷款金额 remoney 应还金额 loanDays 贷款期限 useOfLoan 贷款用途 返回结果 loan_success 申请贷款成功 loan_failed 申请贷款失败
25、 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.企业决
26、定放贷 /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"
27、"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 借款
28、项id String repaymentContent 还款内容 返回结果 reapply_success 更改状态为农民提出还款成功 reapply_failed 更改状态为农民提出还款失败 24.企业正在审核还款 /servlet/LoanRependingServlet Integer id 还款id 返回结果 update_loan_repending_success 更改状态为企业正在审核还款成功 update_loan_repending_failed 更改状态为企业正在审核还款失败 25.企业决定还款成功 /servlet/RepayS
29、uccessServlet 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-1
30、1-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"}] 此处返回statu
31、s=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(主键+外键) p
32、lantIndestury 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 V
33、ARCHAR(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 V
34、ARCHAR(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) 企业电
35、话 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 申请状态
36、 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
37、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 企业存入的
38、银行卡id(外键) lid INT 借款id(外键) repaymentContent VARCHAR(255) 还款项目 六、系统的实施 系统的实现方法,应用程序的编制方法,重要代码的说明。 (可以给出流程图) 1. 系统的实现方法 Server端使用JDBC+Apache的开源接口进行数据库操作,同时使用了传统的Servlet+Service+Dao设计,实现了事务管理,Servlet层实现参数接收和信息发送接收,Service实现业务逻辑的处理,Dao层直接操纵数据库 2. 数据库的设计 软件的设计采用面向对象的实现方式,所以数据库要遵循这一思想,先不编写数据库
39、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, FilterC
40、hain 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(char
41、set);//处理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; } } } 使用一个过滤器,实现全站请
42、求码转码,方便中文数据的发送和接受
4. Server端数据库连接方式
为了提高Server的系统吞吐量,采用C3P0数据库连接池,C3P0依赖的jar包有c3p0-0.9.2-pre1.jar和mchange-commons-0.2.jar,并且需要在classpath下添加c3p0数据库的连接信息c3p0-config.xml:
43、CDATA[
jdbc:mysql://localhost:3306/ydb?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true
]]>
44、perty name="user">root
45、0-config>
5. Android网络请求实现方式:
原则上手写,不使用GitHub上的开源项目,不使用别人的jar包。
关键代码:Http请求
/**
* 用于POST请求生成字符串的方法
*
* @param url
* (请求的地址)
* @param params
* (POST请求参数)
* @return 请求结果
*/
public static String queryStringForPost(String url,
Map 46、rawParams) {
HttpPost request = new HttpPost(url);
List 47、f (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.getS 48、tatusLine().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();
re 49、sult = 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即和服务器同步,使用实体类封装数据库中 50、的数据;
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






