基于MVC的个人网上银行系统,Javaweb项目

2024-01-05 19:40

本文主要是介绍基于MVC的个人网上银行系统,Javaweb项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GitHub - 2064693012/PersonalBank: 基于MVC的个人网上银行系统,Javaweb项目基于MVC的个人网上银行系统,Javaweb项目. Contribute to 2064693012/PersonalBank development by creating an account on GitHub.https://github.com/2064693012/PersonalBank.git

资源已经分享到github上面,有需要的,自取

目    录

一、 设计背景.... 2

1.1 选题背景.... 2

1.2选题意义.... 2

二、 设计思路.... 2

2.1开发环境与工具.... 2

2.2 技术架构.... 3

三、 需求分析.... 3

3.1 设计目标.... 3

3.2 功能需求.... 3

3.3性能要求.... 4

四、 作品设计.... 4

4.1 总体设计.... 4

4.2 详细设计.... 5

4.3 数据库设计.... 5

五、 功能实现.... 8

5.1. 用户登录功能:.... 8

5.2. 存款:.... 9

5.2.1       存款(存钱).... 9

5.2.2       删除信息.... 10

5.2.3       修改信息.... 10

5.2.4       查询信息.... 11

5.3. 信息的展示功能:.... 12

5.4. 转账功能:.... 12

5.5. 定期存款功能:.... 13

5.6. 查看日志功能:.... 14

5.7. 活期转定期功能:.... 15

六、 作品测试.... 17

6.1 测试概述.... 17

6.2 测试过程.... 17

6.3测试结果.... 18

七、 设计总结.... 20

八、 参考文献(10个,近5年).... 20

1.1 选题背景

在现代社会中,资金流动十分频繁。不单单是企业、厂商。个人也不例外。一行作为一个金融机构,在现在人们的生活中扮演这极其重要的角色。为生活节奏飞快的现代人提供快速、便捷、高效的理财服务,随着互联网的快速发展,人们对于网上银行的需求日益增多。各大银行的储蓄管理系统也随之出现在这一舞台之上。同时网上银行为用户提供了便捷的金融服务,使得用户无需到银行柜台,即可进行账户查询、转账、理财等操作。在这一背景下,结合实际的操作和设计进行设计。开发一个功能完善、安全可靠的个人网上银行系统具有重要意义

1.2选题意义

开发个人网上银行系统可以实现以下重要意义:

(1)方便用户:用户无需出门,即可进行各种银行业务操作,节省了时间和精力;

(2)提高效率:银行的业务处理流程变得更加高效,减少了人工操作的时间和错误率;

(3)提升用户体验:用户可以自主管理自己的账户,随时随地查看账户信息,提高了用户对银行的满意度;

(4)加强金融安全:采用先进的加密技术和身份验证,保护用户的隐私和资金安全;

(5)促进经济发展:个人网上银行的普及和使用可以促进电子商务和经济发展。

2.1开发环境与工具

IntelliJ IDEA 2022.3.1

MYSQL8.0

Tomcat:10.1.7

Jdk:8

2.2 技术架构

个人网上银行系统的技术架构如下:

前端:使用HTML、CSS、JavaScript、jsp进行网页设计和交互操作;

后端:使用Java Servlet技术处理端请求和服务器响应;

数据库:使用MySQL进行数据存储和管理;

系统架构:遵循MVC(模型-视图-控制器)设计模式,实现系统的解耦和可扩展性。

3.1 设计目标

本个人网上银行系统的设计目标如下:

实现用户登录、注册和身份验证功能;

实现账户管理功能,包括账户查询、交易记录查询、转账操作等;

实现安全保护机制,包括加密传输、用户身份验证和授权;

实现系统性能要求,保证系统稳定、高效运行。

3.2 功能需求

本系统有二个角色,一个普通用户,一个是管理员用户。

基于 Java Web 做一个个人网上银行系统,该系统的功能如下

1:登录功能。用户名和密码错误提示“错误的账号或密码”。

2:退出功能。

3:个人首页。显示当前的登录账号。

4:财富总揽。显示当前账户金额。包括定期和活期余额。

5:交易查询。可以分类查询出转账(转入、转出)信息、定转活、活转定的信息。

6:行内转账。实现单笔转账。

7:存款功能。活转定,定转活的功能。

8:收款人名册。可建立收款人的名册。

9:日志功能:登录人做的每一步操作均要有日志。

10:权限功能:实现管理员和用户权限象对应权限。

3.3性能要求

基于MVC的个人网上银行系统的性能要求包括以下几个方面:

4.1 总体设计

界面设计

➢ 登录首页

图 4.11 登录首页


➢ 主界面

图 4.12 主界面

4.2 详细设计

基于MVC的个人网上银行系统的作品设计可以包括以下方面:

      1. 用户登录功能:实现用户登录验证,确保只有授权用户能够访问系统。
        1. 管理权限功能:区分普通用户和管理员,管理员权限大于普通用户,能对普通用户的账号进行修正;
        2. 网银支付:用户输入支付金额和收款方信息后,系统进行相应支付操作,并记录在交易记录中;
        3. 实时存款/取款:用户能进行资金的存入,根据开始和结束时间计算利息。并且可通过电子取款的方式取出资金。
        4. 信息查询:能查看个人账户信息以及财富总览(资金流动);
        5. 日志功能:在个人网上银行进行的每一个操作都有相对应的日志记录;
      2. 个人信息修改:根据现实生活所需可修改对应的个人账户信息。

4.3 数据库设计

表1-1 account账户表

字段名称

数据类型

中文说明

其他

卡号 (cardID)

varchar

卡号

不能为空

状态 (status)

Varchar(32)

状态

默认值为"正常"

信用额度 (credit)

int

信用额度

默认值为100

余额 (balance)

double

余额

不能为空

表1-2存款人表

字段名称

数据类型

中文说明

其他

 ID (id)

int

 ID

自增长

  用户名 (username) -

Varchar(30)

登录账号

非空

  密码 (password) -

varchar(20)

登录密码

非空

  姓名 (name) -

varchar(10)

不能为空

  电话号码 (tel) -

varchar(11)

不能为空

  身份证号 (cardid) -

varchar(255)

不能为空

  PID (pid)

varchar(255)

不能为空

  性别 (gender)

varchar(11)

不能为空

  地址 (address) -

varchar(45)

表1-3 trade交易记录表

字段名称

数据类型

中文说明

其他

 卡号 (cardId) -

varchar

卡号

不能为空

  转账金额 (AmountTransferred)  

double

不能为空

  收款方 (payee) -

varchar

可为空

  收款方卡号 (cardIdOfPayee)

varchar

可为空

  备注 (remarks)

varchar

可为空

  转账时间 (transferTime)

datetime

可为空

表1-4 bankAdmin银行管理员表

字段名称

数据类型

中文说明

其他

管理员ID (AdminId) -

varchar

不能为空

  管理员密码 (AdminPassword)

Varchar(32)

不能为空

表1-5定期存款表

字段名称

数据类型

中文说明

其他

 ID (id)

int

 ID

自增长

  ID (id) - int类型,自增主键

Varchar(30)

登录账号

非空

  账户号 (account_number)

varchar(20)

登录密码

非空

  开始日期 (start_date)

DATE

不能为空

  结束日期 (end_date)

DATE

不能为空

  存款金额 (deposit_amount)

double

不能为空

  存款类型 (deposit_type)

varchar(255)

不能为空

  年利率 (interest_rate)

double

不能为空

  到期金额 (maturity_amount)

double

不能为空

表1-6 log日志记录表

字段名称

数据类型

中文说明

其他

日志ID (log_id)

int

卡号

自增主键

  账户ID (cardID)

Varchar(32)

不能为空

  日志内容 (log_content)

text

不能为空

  日志时间 (log_time)

datetime

不能为空,默认值为当前时间

图1:个人网上银行系统ER图

图2:个人网上银行系统模块图

基于MVC的个人网上银行系统可以实现以下功能:

5.1. 用户登录功能:

   - 提供登录界面,要求用户输入用户名和密码。

   - 验证用户输入的用户名和密码是否正确,如果正确则登录成功,否则显示登录失败提示。

                    

用户登录功能实现代码:

String sql = "select password from depositor where tel = ?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,tel);resultSet = preparedStatement.executeQuery();while (resultSet.next()) {String checkpassword = resultSet.getString(1);System.out.println("Correct password:" + checkpassword);if(checkpassword.equals(password)){flag = true;}else{System.out.println("Your Password is wrong!!!");}

5.2. 存款:

      1. 存款(存钱)


要求用户输入金额等信息,将信息保存到系统中。

图5.21 添加存款信息界面

添加信息功能实现代码:

String sql = "SELECT balance FROM account WHERE cardID = ?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, cardId);resultSet = preparedStatement.executeQuery();double balance = 0;if (resultSet.next()) {balance = resultSet.getDouble("balance");System.out.println("当前余额:" + balance);}if (amount > 0) {double newBalance = balance + amount;sql = "UPDATE account SET balance = ? WHERE cardID = ?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setDouble(1, newBalance);preparedStatement.setString(2, cardId);int rowsAffected = preparedStatement.executeUpdate();if (rowsAffected > 0) {success = true;System.out.println("存款成功!");transfer(cardId,amount,"存款", cardId, "存款");}} else {System.out.println("存款金额必须大于0!");}
 

      1. 删除信息


要求用户选择要删除的的,从系统中删除该信息。

图5.22 删除信息界面

删除信息功能实现代码:

String sql = "DELETE FROM FixedDeposit WHERE account_number=? and id=?";try (Connection connection = JDBCTools.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setString(1, cardID);preparedStatement.setInt(2, id);int rowsAffected = preparedStatement.executeUpdate();if (rowsAffected > 0) {success = true;}
}

      1. 修改信息:要求用户输入要修改的的(如姓名、联系方式、地址),用户选择要修改的项并输入新值,更新信息。


图 5.23 修改信息功能界面

修改信息功能实现代码:

public boolean changeCustomerBaseInfo(int id, String name, String gender, int age, String phone, String email) {String sql = "update t_customer set name = ?, gender = ?, age = ?, phone= ?, email= ? where id = ?";Customer customer = findCustomer(id, name);if () {XXXX = customer.getXXXX();}boolean flag = JdbcUtil.executeUpdate(sql,name,gender,age,phone,email,id);return flag;}

      1. 查询信息:提供查询选项(如姓名、联系方式),用户输入查询条件,系统返回符合条件的信息列表。

查询信息功能实现代码:

public Customer findCustomerById(int id) {String sql = "select * from t_customer where id = ?";Customer customer = null;List<Map<String, Object>> list = JdbcUtil.executeQuery(sql, id);for (Map<String, Object> map : list) {customer =  new Customer((int) map.get("id"), (String) map.get("name"),(String) map.get("gender"), (int) map.get("age"), (String) map.get("phone"),(String) map.get("email"));}return customer;}

5.3. 信息的展示功能:

   - 显示信息列表:将系统中的信息以表格或列表的形式展示给用户,包括姓名、联系方式、地址等信息。


 

图 5.31 显示信息列表界面

信息的展示功能实现代码:

public List<Customer> findCustomerList() {String sql="select *from t_customer";List<Customer> listcustomer=new ArrayList<>();List<Map<String,Object>>list=JdbcUtil.executeQuery(sql);for (Map<String, Object> map : list) {Customer customer= new Customer((int) map.get("id"), (String) map.get("name"),(String) map.get("gender"), (int) map.get("age"), (String) map.get("phone"),(String) map.get("email"));listcustomer.add(customer);}return listcustomer;}

5.4. 转账功能:

   - 输入金额,收款人,账户,进行行内转账。


图 5.41 行内转账界面

行内转账实现代码:

String sql = "select balance from account where cardID = ?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,cardId);resultSet = preparedStatement.executeQuery();while(resultSet.next()){balance = resultSet.getDouble(1);System.out.println("转账人余额:"+ balance);}if(money <= balance && money > 0){double sum = balance - money;sql = " update account set balance = ? where cardID = ?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setDouble(1,sum);preparedStatement.setString(2,cardId);preparedStatement.executeUpdate();flag = true;System.out.println("转账成功!");}else{System.out.println("转账失败!");}

5.5. 定期存款功能:


   - 对用户输入的金额,开始时间,还有选择的存款时间,自动计算年利率,本金和利息

图5.51 定期存款界面

定期存款实现代码:

String sql = "INSERT INTO FixedDeposit (account_number, start_date, end_date, deposit_amount, deposit_type, interest_rate, maturity_amount) VALUES (?, ?, ?, ?, ?, ?, ?)";try (Connection connection = JDBCTools.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setString(1, fixedDeposit.getcardID());preparedStatement.setDate(2, new java.sql.Date(fixedDeposit.getStartDate().getTime()));preparedStatement.setDate(3, new java.sql.Date(fixedDeposit.getEndDate().getTime()));preparedStatement.setDouble(4, fixedDeposit.getDepositAmount());preparedStatement.setString(5, fixedDeposit.getDepositType());preparedStatement.setDouble(6, fixedDeposit.getInterestRate());preparedStatement.setDouble(7, fixedDeposit.getMaturityAmount());

5.6. 查看日志功能:


   - 提供菜单选项供用户选择不同的功能模块,用户通过输入对应的菜单编号或操作符来进行导航。

图5.61 查看日志界面

查看日志实现代码:

List<Log> logs = new ArrayList<>();String sql = "SELECT * FROM log WHERE cardID = ? ORDER BY log_time DESC";try (Connection connection = JDBCTools.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setString(1, cardID);ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()) {int log_id = resultSet.getInt("log_id");String log_content = resultSet.getString("log_content");Timestamp log_time = resultSet.getTimestamp("log_time");Log log = new Log(log_id, cardID, log_content, new Timestamp(log_time.getTime()));logs.add(log);}

5.7. 活期转定期功能:


   - 用户可以查看活期与定期的记录,取款,删除记录,还能进行活期与定期的转换

图5.61 活期转定期界面

活期转定期实现代码:

private void updateFixedDeposit(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {int id = Integer.parseInt(request.getParameter("id"));String cardID = request.getParameter("cardID");double depositAmount = Double.parseDouble(request.getParameter("depositAmount"));double interestRate = Double.parseDouble(request.getParameter("interestRate"));// 计算时间差(单位为天数)// 获取请求参数中的开始日期LocalDate startDate = LocalDate.parse(request.getParameter("startDate"));// 获取当前日期LocalDate endDate = LocalDate.now();// 计算时间差(单位为天数)long timeDiff = ChronoUnit.DAYS.between(startDate, endDate);// 计算本息+利息的值double maturityAmount = depositAmount + depositAmount * interestRate * timeDiff;transferDepository.deposit(cardID,maturityAmount);if fixedDepositService.deleteFixedDeposit(id,cardID)) {diaryDao.insertDiary(cardID,"定期或活期存款转出成功");request.getRequestDispatcher("/WEB-INF/Pages/transfersuccess.jsp").forward(request,response);} else {// Add error handling code here}}

以上是基于MVC的个人网上银行系统的功能实现的基本设计。

6.1 测试概述     

该个人网上银行系统是基于MVC的应用程序,用于管理信息。测试的目的是验证系统的功能是否符合预期,包括登录、注册、添加、修改、删除、查询等操作。

6.2 测试过程

  1. 登录测试:
    • 输入正确的用户名和密码进行登录,验证登录成功。
    • 输入错误的用户名和密码进行登录,验证登录失败并显示错误提示。
    • 尝试多次登录失败,验证登录尝试次数限制的功能。
  2. 注册测试:
    • 输入合法的用户名、密码和其他信息进行注册,验证注册成功。
    • 输入空数据或非法数据进行注册,验证注册失败并显示错误提示。
    • 注册重复的用户名,验证注册失败并显示错误提示。
  3. 添加测试:
    • 输入有效的信息进行添加,验证添加成功。
    • 输入无效或不完整的信息进行添加,验证添加失败并显示错误提示。
  4. 修改测试:
    • 显示列表,选择一个进行修改。
    • 输入新的信息,验证修改成功。
    • 输入无效或不完整的信息进行修改,验证修改失败并显示错误提示。
  5. 删除测试:
    • 显示列表,选择一个进行删除。
    • 验证删除该后,该不再显示在列表中。
    • 删除不存在的,验证删除失败并显示错误提示。
  6. 查询测试:
    • 根据ID和姓名进行精确查找,验证查找结果正确。
    • 根据地址或姓名进行模糊查找,验证查找结果正确。
    • 查看全部列表,验证列表显示正确。
  7. 管理个人信息测试:
    • 查看个人信息,验证显示个人信息正确。
    • 修改密码,输入正确的旧密码和新密码进行修改,验证修改成功。
    • 修改个人信息,输入有效的个人信息进行修改,验证修改成功。
    • 输入无效或不完整的个人信息进行修改,验证修改失败并显示错误提示。
  8. 禁用与启用用户测试:
    • 显示用户列表,选择一个普通用户进行禁用或启用。
    • 验证禁用或启用成功后,用户状态正确更新。

6.3测试结果

登录测试结果:登录成功、登录失败等。

图6.31 登录测试结果

  • 注册测试结果:注册成功、注册失败(因重复电话等)。

图6.32 注册测试结果

  • 添加测试结果:添加成功、添加失败等。

  • 修改测试结果:修改成功、修改失败(因无效或不完整数据等)。
  • 删除测试结果:删除成功、删除失败等。

图6.35 删除测试结果

  • 查询测试结果:查找结果正确、列表显示正确等。

图6.36 查询列表

  • 管理个人信息测试结果:个人信息显示正确、修改成功、修改失败等。

图6.38 管理个人信息测试结果

基于MVC的个人网上银行系统是一个简单而实用的系统,可以帮助用户管理信息。通过在MVC上提供各种功能,用户可以方便地进行信息的增删改查操作。系统具有良好的用户界面和交互体验,能够满足用户对信息管理的基本需求。同时,系统还具备数据持久化和数据校验等功能,确保数据的安全性和准确性。通过系统的设计和实现,可以提高信息管理的效率和便捷性。

1. "Java编程思想"(第4版) - Bruce Eckel (2021)

2. "Java核心技术 卷I"(第10版) - Cay S. Horstmann (2021)

3. "数据结构与算法分析Java语言描述"(第2版) - Mark Allen Weiss (2019)

4. "Java程序设计(基础篇)" - 清华大学计算机系列教材 (2018)

5. "Java编程精解" - Robert Sedgewick、Kevin Wayne (2018)

6. "Java编程实战"(第2版) - Joshua Bloch (2018)

7. "Java并发编程实战" - Brian Goetz等 (2017)

8. "Effective Java"(第3版) - Joshua Bloch (2017)

9. "Java网络编程"(第4版) - Elliotte Rusty Harold (2017)

10. "Java 9编程入门" - Peter Verhas (2016)

 
 
 
 
 
 
 
 

这篇关于基于MVC的个人网上银行系统,Javaweb项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573954

相关文章

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步