目录
第一章 绪论 1
1.1 背景 1
1.2 系统实现的目的与意义 1
1.3 本论文的组织结构 1
第二章 开发技术简介 2
2.1 Spring Cloud 微服务框架 2
2.2 SSH框架 2
2.3 Spring Security安全框架 2
2.4 WebSocket协议 2
2.5 ELK日志框架 2
2.6 开发工具 3
第三章 系统需求分析 4
3.1 功能需求分析 4
3.2 非功能需求分析 22
第四章 系统设计 24
4.1 系统架构设计 24
4.2 系统功能详细设计 31
4.3 数据库设计 34
第五章 实现与测试 42
5.1 系统实现 42
5.2 系统测试 56
第六章 结论 61
6.1 工作总结 61
6.2 展望 61
致谢 62
参考文献 63

第三章 系统需求分析
3.1 功能需求分析
开发一个外汇业务管理系统,首先需要明确本系统应该实现哪些功能,即用户在本系统能进行的操作。因此,根据前期调研和分析,将本系统从功能上拆分成登录注册模块、银行卡模块、资讯服务模块、外汇业务模块和查询模块。这里采用UML中的用例图来描述客户的需求,即客户所期望的一个外汇业务管理系统所应当具有的功能,如下图3-1所示。

图3-1 外汇业务管理系统-用例图

本外汇业务管理系统中用户角色有游客(visitor)、用户(user)、系统管理员(admin)、数据库管理员(DBA)这4种。其中,游客角色指的是用户在本系统完成注册生成账户后所具有的权限,比如说访问登录注册模块、进行银行卡模块操作和浏览资讯服务模块。而用户角色指的是用户在本系统办理了银行卡并完成激活后所具有的权限,它除了具有游客角色所有的权限外,还能进行外汇业务操作,比如外汇存款、外汇转账、外汇兑换等。然后系统管理员角色和数据库管理员角色是分别负责管理和监控系统和数据库的。
3.1.1 登录注册模块需求分析
⑴ 注册功能
用户在注册界面输入用户名、密码、确认密码、验证码后提交到服务器,服务器首先进行数据校验,判断两次密码是否一致、验证码是否正确、该用户名是否已经被注册等。当以上校验成功后,系统会创建该账户并跳转到登录界面,让用户进行登录操作。如图3-2所示。

图3-2 注册功能-流程图
⑵ 登录功能
在传统的登录流程中,用户在客户端输入用户名和密码提交到服务器时,服务器需要去数据库查询该用户名是否存在,密码是否正确等操作。在高并发的情况下,频繁的数据库查询操作会导致系统响应超时甚至暂停服务等。因此,本外汇业务管理系统需要采用一种新机制——Token来进行登录流程中的认证。当用户第一次登录时,系统获取用户输入的用户名和密码进行认证。当认证成功后,系统将会为该用户生成一个唯一的Token并返回给客户端,客户端一般将其存放在Cookie里。这样,当用户再次请求服务时,会自动携带上这个Cookie来发送请求,服务器这时只需要解析这个Token,就可以判断出这个用户是谁。在这个过程中,用户是不用进行任何操作的,直接就能访问系统的服务的。如图3-3所示。

图3-3 登录功能-流程图
3.1.2 银行卡模块需求分析
⑴ 办理银行卡功能
用户在办理银行卡界面,输入用户的中文名、英文名、身份证号码、性别、出生省份、城市、区县、邮箱地址和手机号码信息,然后提交到服务器。服务器此时会先进行数据校验,比如身份证号码格式位数是否正确、邮箱地址格式是否正确、手机号码格式位数是否正确等。然后通过调用外部API认证该身份证号码信息和用户的个人信息是否匹配,若匹配,则为该用户办理银行卡,同时将该银行卡的状态设置为未激活,并将该银行卡的初始密码发送到该用户预留的邮箱中,等待用户后续激活操作。如图3-4所示。

图3-4 办理银行卡功能-流程图
⑵ 激活银行卡功能
当用户办理银行卡后,系统会发送一封邮件至用户预留的邮箱中。用户首先需要查看邮件,找到系统发放的初始密码,然后在激活银行卡界面填写初始密码、新密码、确认密码信息。此时,服务器会校验两次密码是否一致,然后比较用户提交的初始密码是否正确。如果错误的话,系统此时会重置初始密码,并将新的初始密码发送到用户邮箱,用户需要重新激活银行卡。如果正确的话,系统会将该银行卡状态设置成已激活,并跳转到绑定银行卡界面。如图3-5所示。

图3-5 激活银行卡功能-流程图

⑶ 绑定银行卡功能
当用户激活银行卡后,即可在绑定银行卡界面将该银行卡绑定到当前账户。用户需要在绑定银行卡界面填写之前办理的银行卡号码和预留的邮箱。如果正确,则将该银行卡绑定到当前账户;如果失败,则显示错误信息,并让用户重新进行绑定。如图3-6所示。

图3-6 绑定银行卡功能-流程图

⑷ 我的银行卡功能
用户进入我的银行卡界面,可以查看当前银行卡信息,比如银行卡号码、银行卡状态、银行卡创建时间、银行卡创建地点。用户在此界面还能查询个人信息,比如说姓名、性别、身份证号码、出生地、用户邮箱、手机号码。点击“修改银行卡密码”按钮,用户能够直接修改当前银行卡的支付密码。如图3-7所示。

图3-7 我的银行卡功能-流程图

3.1.3 资讯服务模块需求分析
⑴ 外汇牌价
外汇牌价API接口地址:http://web.juhe.cn:8080/finance/exchange/frate
返回数据格式:JSON
请求方式:Get
用户登录后在首页可以直接查看外汇牌价信息。服务器通过HttpClient从外部API去获取外汇牌价信息,并使用FastJson解析数据封装成对象,并传输到客户端进行渲染展示。如图3-8所示。

图3-8 查看外汇牌价功能-流程图

⑵ 人民币牌价
人民币牌价API接口地址:
http://web.juhe.cn:8080/finance/exchange/rmbquot
返回数据格式:JSON
请求方式:Get
请求参数说明:key是一串表明是否可以访问服务的“令牌”字符串。type可取值为0或1,表示数据返回格式。Bank表示需要请求哪个银行的人民币牌价信息,0表示工商银行、1表示招商银行、2表示建设银行、3表示中国银行、4表示交通银行、5表示农业银行,默认情况下是请求中国银行的人民币牌价信息。
当用户登录成功后,本文转载自http://www.biyezuopin.vip/onews.asp?id=14784可以在首页中直接查看人民币牌价信息。服务器通过HttpClient从外部API去获取人民币牌价信息,并使用FastJson解析数据封装成对象,并传输到客户端进行渲染展示。如图3-9所示。

图3-9 查看人民币牌价功能-流程图

⑶ 新闻头条资讯
新闻头条API接口地址:
http://toutiao-ali.juheapi.com:8080/toutiao/index
返回数据格式:JSON
请求方式:Get
请求参数说明:key是一串表明是否可以访问服务的“令牌”字符串。Type表明需要请求哪种类型的新闻资讯,top表示头条新闻、society表示社会新闻、domestic表示国内新闻、international表示国际新闻、recreation表示娱乐新闻、sports表示体育新闻、military表示军事新闻、science表示科技新闻、finance表示财经新闻、fashion表示时尚新闻,默认情况下请求的是头条新闻。
当用户登录成功后,可以在新闻资讯界面选择新闻类型,进行查看各种新闻资讯。服务器会通过HttpClient从外部API去获取新闻资讯信息,并使用FastJson解析数据封装成对象,然后传输到客户端进行渲染展示。如图3-10所示。

图3-10 新闻头条资讯功能-流程图

3.1.4 外汇业务模块需求分析
⑴ 外汇存款
用户登录并成功办理激活银行卡后,才能进行外汇存款操作。首先,用户在外汇存款界面输入银行卡号码、操作币种、存款金额、银行卡支付密码,然后提交到服务端。服务端此时会判断该银行卡号码是否正确、银行卡支付密码是否正确等,若正确则用户存款操作成功,若错误则返回失败信息至用户界面。如图3-11所示。

图3-11 外汇存款功能-流程图

⑵ 外汇转账
用户登录并成功办理激活银行卡后,才能进行外汇转账操作。首先,用户在外汇转账界面输入要转入的银行卡号码、操作币种、转账金额和银行卡支付密码,然后提交到服务器。服务器需要判断要转入的银行卡号码是否存在,银行卡支付密码是否正确,目前转账金额是否足够等。若判断成功则进行转账操作,若判断失败则封装错误信息并在客户端界面进行渲染显示。
除了以上业务要求外,在电子商务领域往往还要求计算结果准确,并且满足ACID①规范能够在高并发情况下保证数据不会出错。因此,金额的数据类型不能采用float或double类型。因为计算机是采用二进制存储数据的,而浮点数在计算机中是由两个部分组成的:指数和尾数。而采用这种表示方法存储数据通常将会导致失去一定的精确度,进行运算时也会产生一定的误差。因此,金额的数据类型应该采用BigDecimal。
注:①ACID,是指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
因为本外汇业务管理系统采用的是B/S架构模式,即Browser/Server,浏览器/服务器模式。因此会时刻面临着一个高并发的环境,比如用户进行存款、转账等操作,都是在修改资产金额,资产金额信息时刻都是多个线程共享的。在这种多线程访问的情况下,可能就会造成丢失更新、脏读、不可重复读、幻读等问题。因此,我们就需要采用事务机制和锁机制来解决这个问题。

package com.shiep.fxbankcard.model;import lombok.Getter;@Getter
public enum CurrencyEnum {/*** description: 银行目前可支持的13种货币*/CNY("CNY", "人民币"),AUD("AUD", "澳大利亚元"),USD("USD", "美元"),EUR("EUR", "欧元"),GBP("GBP", "英镑"),NZD("NZD", "新西兰元"),CAD("CAD", "加拿大元"),HKD("HKD", "港币"),JPY("JPY", "日元"),MYR("MYR", "林吉特"),SGD("SGD", "新加坡元"),TWD("TWD", "新台币"),SEK("SEK", "瑞典克朗");/*** description: 标准货币符号*/private String code;/*** description: 货币中文名称*/private String name;/*** description: 构造方法** @param code 标准货币符号* @param name 货币中文名称* @return CurrencyEnum*/CurrencyEnum(String code, String name) {this.code = code;this.name = name;}/*** description: 通过code返回CurrencyEnum** @param code 标准货币符号* @return com.shiep.fxbankcard.model.CurrencyEnum*/public static CurrencyEnum parse(String code) {CurrencyEnum[] values = values();for (CurrencyEnum value : values) {if (value.getCode().equals(code)) {return value;}}throw new RuntimeException("Unknown code of CurrencyEnum");}/*** description: 通过code返回name** @param code 标准货币符号* @return java.lang.String*/public static String getNameByCode(String code) {return parse(code).getName();}/*** description: 通过name返回code** @param name* @return java.lang.String*/public static String getCodeByName(String name) {CurrencyEnum[] values = values();for (CurrencyEnum value : values) {if (value.getName().equals(name)) {return value.getCode();}}throw new RuntimeException("Unknown name of CurrencyEnum");}
}





















基于SSH+Html的外汇资产业务交易管理系统设计与实现相关推荐

  1. 基于微信小程序的二手车交易管理系统设计与实现

    基于微信小程序的二手车交易管理系统设计与实现 源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 随着科学技术和信息通讯的飞速发展,互联网的丰富内容改变 ...

  2. 【java毕业设计】基于javaEE+SSH+mysql+strust2的超市积分管理系统设计与实现(毕业论文+程序源码)——超市积分管理系统

    基于javaEE+SSH+mysql+strust2的超市积分管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+SSH+mysql+strust2的超市积分管理系统设计 ...

  3. asp毕业设计——基于asp+access的学生排课管理系统设计与实现(毕业论文+程序源码)——学生排课管理系统

    基于asp+access的学生排课管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的学生排课管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需 ...

  4. 【php毕业设计】基于php+mysql+mvc的网上留言管理系统设计与实现(毕业论文+程序源码)——网上留言管理系统

    基于php+mysql+mvc的网上留言管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于php+mysql+mvc的网上留言管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  5. asp毕业设计——基于asp+access的电子政务档案管理系统设计与实现(毕业论文+程序源码)——电子政务档案管理系统

    基于asp+access的电子政务档案管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的电子政务档案管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  6. 【php毕业设计】基于php+mysql+apache的课程网站管理系统设计与实现(毕业论文+程序源码)——课程网站管理系统

    基于php+mysql+apache的课程网站管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于php+mysql+apache的课程网站管理系统设计与实现,文章末尾附有本毕业设计的 ...

  7. 【java毕业设计】基于javaEE+Spring的新闻发布及管理系统设计与实现(毕业论文+程序源码)——新闻发布及管理系统

    基于javaEE+Spring的新闻发布及管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+Spring的新闻发布及管理系统设计与实现,文章末尾附有本毕业设计的论文和源 ...

  8. 文献综述十九:基于会员通用积分的客户关系管理系统设计与实现

    一.基本信息 标题:基于会员通用积分的客户关系管理系统设计与实现 时间:2017 出版源:河北科技大学 文件分类:关系管理系统的研究 二.研究背景 构建一个 CRM(Customer Relation ...

  9. asp毕业设计——基于asp+access的校园新闻发布管理系统设计与实现(毕业论文+程序源码)——新闻发布管理系统

    基于asp+access的校园新闻发布管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的校园新闻发布管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

最新文章

  1. 编程字典keras.layers API方法
  2. mysql查询操作及正则表达式小结
  3. 老男孩教育50期左婷婷-day03-xhell连接服务器-远程连接排错-基础命令
  4. python大气校正_Sentinel-2卫星影像的大气校正方法
  5. P6805-[CEOI2020]春季大扫除【贪心,树链剖分,线段树】
  6. 用计算机解题 算法理科,求解数独算法求用计算机可以实现的算法不要人工解题思路 爱问知识人...
  7. wireshark 抓包分析 TCPIP协议的握手
  8. python三层设计_推荐3个Python实现算法和设计模式的工具
  9. Teamcenter(Enterprise 2007) 开发之- 快速搭建开发环境(windows)
  10. Linux下静态库.a与.so库文件的生成与使用
  11. “error LNK2019: 无法解析的外部符号”之分析
  12. c语言输入身高计算标准体重_体质测试 | 身高 / 体重测试评分标准及方法
  13. Visio| Visio简易使用指南
  14. linux ls-la/boot,CentOS系统启动/boot/vmlinuz修复(实验)
  15. Java加密的几种方式
  16. AI安全 - 华为白皮书《AI Security White Paper》
  17. ORACLE认证考试之ocjp 考试题之五
  18. ES6模板字符串中使用循环并取值
  19. css 上中下三行布局 4种方式
  20. 【方法】树莓派开机使用教程(看这个就够了)

热门文章

  1. 输入方向的流量控制 --ifb
  2. 「罗马人的故事 III 胜者的迷思」读后感 Part1,格拉古兄弟
  3. 数组排序之冒泡法和选择法
  4. 华为mate9安装Fiddler证书
  5. 墨尔本python培训班_墨的解释|墨的意思|汉典“墨”字的基本解释
  6. download failed: assets/main/import/09/09f53264-cd95-4751-99ad-d516c164dd80._cconb.dbbin, status: 40
  7. PS轻松打造低多边形风格图像
  8. 基于 Ubuntu 玩转 Hudi Docker Demo (2)—— 测试数据写入 Kafka
  9. 2018年博客之星评选,No 138号“铭毅天下”需要您宝贵的一票,万分感谢!
  10. pci规划的三个原则_LTE小区PCI规划原则