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

2 篇文章 0 订阅

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的个人网上银行系统的性能要求包括以下几个方面:

    1. 响应时间:系统应该能够在用户输入指令后快速响应,不会出现明显的延迟,用户能够及时得到反馈。
    2. 数据处理速度:系统在进行信息的添加、删除、更新和查询等操作时,应该能够高效地处理大量数据,不会因数据量增加而明显降低性能。
    3. 内存占用:系统在运行过程中,应该合理利用内存资源,避免过多的内存占用,以提高系统的性能和稳定性。
    4. 并发性能:如果系统需要支持多用户同时访问和操作,那么系统应该具备一定的并发性能,能够处理多个用户同时的请求,并保证数据的一致性和准确性。
    5. 数据存储和读取速度:如果系统使用数据库来存储信息,那么系统应该能够高效地进行数据的存储和读取操作,以提高系统的性能。
    6. 异常处理性能:系统在遇到错误或异常情况时,应该能够快速准确地处理,给予用户相应的错误提示,并进行相应的错误恢复或处理。
    7. 扩展性和可维护性:系统的设计应该考虑到后续的扩展和维护,保持系统的可扩展性和可维护性,以便在需要时能够进行系统性能的优化和改进。
  • 作品设计

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)

 
 
 
 
 
 
 
 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值