基于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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境