本文主要是介绍基于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)方便用户:用户无需出门,即可进行各种银行业务操作,节省了时间和精力;
(2)提高效率:银行的业务处理流程变得更加高效,减少了人工操作的时间和错误率;
(3)提升用户体验:用户可以自主管理自己的账户,随时随地查看账户信息,提高了用户对银行的满意度;
(4)加强金融安全:采用先进的加密技术和身份验证,保护用户的隐私和资金安全;
(5)促进经济发展:个人网上银行的普及和使用可以促进电子商务和经济发展。
IntelliJ IDEA 2022.3.1
MYSQL8.0
Tomcat:10.1.7
Jdk:8
个人网上银行系统的技术架构如下:
前端:使用HTML、CSS、JavaScript、jsp进行网页设计和交互操作;
后端:使用Java Servlet技术处理端请求和服务器响应;
数据库:使用MySQL进行数据存储和管理;
系统架构:遵循MVC(模型-视图-控制器)设计模式,实现系统的解耦和可扩展性。
本个人网上银行系统的设计目标如下:
实现用户登录、注册和身份验证功能;
实现账户管理功能,包括账户查询、交易记录查询、转账操作等;
实现安全保护机制,包括加密传输、用户身份验证和授权;
实现系统性能要求,保证系统稳定、高效运行。
本系统有二个角色,一个普通用户,一个是管理员用户。
基于 Java Web 做一个个人网上银行系统,该系统的功能如下
1:登录功能。用户名和密码错误提示“错误的账号或密码”。
2:退出功能。
3:个人首页。显示当前的登录账号。
4:财富总揽。显示当前账户金额。包括定期和活期余额。
5:交易查询。可以分类查询出转账(转入、转出)信息、定转活、活转定的信息。
6:行内转账。实现单笔转账。
7:存款功能。活转定,定转活的功能。
8:收款人名册。可建立收款人的名册。
9:日志功能:登录人做的每一步操作均要有日志。
10:权限功能:实现管理员和用户权限象对应权限。
基于MVC的个人网上银行系统的性能要求包括以下几个方面:
-
- 响应时间:系统应该能够在用户输入指令后快速响应,不会出现明显的延迟,用户能够及时得到反馈。
- 数据处理速度:系统在进行信息的添加、删除、更新和查询等操作时,应该能够高效地处理大量数据,不会因数据量增加而明显降低性能。
- 内存占用:系统在运行过程中,应该合理利用内存资源,避免过多的内存占用,以提高系统的性能和稳定性。
- 并发性能:如果系统需要支持多用户同时访问和操作,那么系统应该具备一定的并发性能,能够处理多个用户同时的请求,并保证数据的一致性和准确性。
- 数据存储和读取速度:如果系统使用数据库来存储信息,那么系统应该能够高效地进行数据的存储和读取操作,以提高系统的性能。
- 异常处理性能:系统在遇到错误或异常情况时,应该能够快速准确地处理,给予用户相应的错误提示,并进行相应的错误恢复或处理。
- 扩展性和可维护性:系统的设计应该考虑到后续的扩展和维护,保持系统的可扩展性和可维护性,以便在需要时能够进行系统性能的优化和改进。
- 作品设计
界面设计
➢ 登录首页
图 4.11 登录首页
➢ 主界面
图 4.12 主界面
基于MVC的个人网上银行系统的作品设计可以包括以下方面:
-
-
- 用户登录功能:实现用户登录验证,确保只有授权用户能够访问系统。
- 管理权限功能:区分普通用户和管理员,管理员权限大于普通用户,能对普通用户的账号进行修正;
- 网银支付:用户输入支付金额和收款方信息后,系统进行相应支付操作,并记录在交易记录中;
- 实时存款/取款:用户能进行资金的存入,根据开始和结束时间计算利息。并且可通过电子取款的方式取出资金。
- 信息查询:能查看个人账户信息以及财富总览(资金流动);
- 日志功能:在个人网上银行进行的每一个操作都有相对应的日志记录;
- 个人信息修改:根据现实生活所需可修改对应的个人账户信息。
- 用户登录功能:实现用户登录验证,确保只有授权用户能够访问系统。
-
表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的个人网上银行系统可以实现以下功能:
- 提供登录界面,要求用户输入用户名和密码。
- 验证用户输入的用户名和密码是否正确,如果正确则登录成功,否则显示登录失败提示。
用户登录功能实现代码:
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.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!");}
要求用户选择要删除的的,从系统中删除该信息。
图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;}
}
图 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;}
查询信息功能实现代码:
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.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.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.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.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.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的个人网上银行系统的功能实现的基本设计。
该个人网上银行系统是基于MVC的应用程序,用于管理信息。测试的目的是验证系统的功能是否符合预期,包括登录、注册、添加、修改、删除、查询等操作。
- 登录测试:
- 输入正确的用户名和密码进行登录,验证登录成功。
- 输入错误的用户名和密码进行登录,验证登录失败并显示错误提示。
- 尝试多次登录失败,验证登录尝试次数限制的功能。
- 注册测试:
- 输入合法的用户名、密码和其他信息进行注册,验证注册成功。
- 输入空数据或非法数据进行注册,验证注册失败并显示错误提示。
- 注册重复的用户名,验证注册失败并显示错误提示。
- 添加测试:
- 输入有效的信息进行添加,验证添加成功。
- 输入无效或不完整的信息进行添加,验证添加失败并显示错误提示。
- 修改测试:
- 显示列表,选择一个进行修改。
- 输入新的信息,验证修改成功。
- 输入无效或不完整的信息进行修改,验证修改失败并显示错误提示。
- 删除测试:
- 显示列表,选择一个进行删除。
- 验证删除该后,该不再显示在列表中。
- 删除不存在的,验证删除失败并显示错误提示。
- 查询测试:
- 根据ID和姓名进行精确查找,验证查找结果正确。
- 根据地址或姓名进行模糊查找,验证查找结果正确。
- 查看全部列表,验证列表显示正确。
- 管理个人信息测试:
- 查看个人信息,验证显示个人信息正确。
- 修改密码,输入正确的旧密码和新密码进行修改,验证修改成功。
- 修改个人信息,输入有效的个人信息进行修改,验证修改成功。
- 输入无效或不完整的个人信息进行修改,验证修改失败并显示错误提示。
- 禁用与启用用户测试:
- 显示用户列表,选择一个普通用户进行禁用或启用。
- 验证禁用或启用成功后,用户状态正确更新。
登录测试结果:登录成功、登录失败等。
图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项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!