创建一个账户实体类:用于封装账户信息的。

数据类型尽量不要使用基本数据类型,使用引用数据类型;

创建一个持久层:用于对数据进行处理

创建一个服务层:用户处理业务

创建一个视图层:用户页面的展示

创建一个控制层:用于调用,以及页面之间的流转

实现用户的登录、转账成功、转账失败、余额不足等页面

<%@page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>模拟转账</title>
</head>
<body><form action="${pageContext.request.contextPath}/transfer" method="post">转出账户:<input type="text" name="fromcard" ><br>转入账户:<input type="text" name="tocard" ><br>转出金额:<input type="text" name="outmoney" ><br><input type="submit" value="提交"></form>
</body>
</html>
<%@page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>转账失败</title>
</head>
<body><h1>转账失败</h1>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>转账失败</title>
</head>
<body>
<h1>余额不足</h1>
</body>
</html>
<%@page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>成功页面</title>
</head>
<body><h1>转账成功</h1>
</body>
</html>

编写持久层

该层主要用于对数据进行处理,在该业务中只有对数据的查询和更新功能

package com.zhoujun.c2002.Dao;import com.zhoujun.c2002.bean.Account;
import com.zhoujun.c2002.utils.JDBC;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;public class AccountDao {/***更新账户* @param account* @return count 执行次数,用于判断sql语句是否执行了*/public int update(Account account){Connection conn = null;PreparedStatement ps = null;int count = 0;try {conn = JDBC.getConnection();String sql = "update bank set cardId = ? ,money = ? where id = ?";ps = conn.prepareStatement(sql);ps.setString(1,account.getCardId());ps.setDouble(2,account.getMoney());ps.setLong(3,account.getId());count = ps.executeUpdate();} catch (SQLException throwables) {throwables.printStackTrace();} finally {JDBC.close(conn,ps,null);}return count;}/*** 查询根据账号查询账户* @param cardId* @return*/public Account selectbycardId(String cardId){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;Account account = null;try {conn = JDBC.getConnection();String sql = "select id,money from bank where cardId = ?";ps = conn.prepareStatement(sql);ps.setString(1,cardId);rs = ps.executeQuery();if (rs.next()) {Long id = rs.getLong("id");Double money = rs.getDouble("money");account = new Account();account.setCardId(cardId);account.setId(id);account.setMoney(money);}} catch (SQLException throwables) {throwables.printStackTrace();} finally {JDBC.close(conn,ps,rs);}return  account;}
}

编写业务层

package com.zhoujun.c2002.service;import com.zhoujun.c2002.Dao.AccountDao;
import com.zhoujun.c2002.Exception.AppException;
import com.zhoujun.c2002.Exception.MoneyNotEnoughException;
import com.zhoujun.c2002.bean.Account;
import com.zhoujun.c2002.utils.JDBC;import java.sql.Connection;
import java.sql.SQLException;public class TransferService {private  AccountDao accountDao = new AccountDao();public void transfer(String fromcardId,String tocardId,Double money) throws MoneyNotEnoughException, AppException {Account account = accountDao.selectbycardId(fromcardId);if (account.getMoney() < money){throw new MoneyNotEnoughException("对不起,余额不足");}Account account1 = accountDao.selectbycardId(tocardId);account.setMoney(account.getMoney() - money);account1.setMoney(account1.getMoney() + money);int count = accountDao.update(account);count += accountDao.update(account1);if (count != 2) {throw new AppException("账户转账异常!!!");}}
}

首先调用持久层对数据进行查询操作,调用实体类中的getMoney()方法与浏览器上用户输入的数据进行比较,如果结果是小于,则抛出一个异常。如果结果是大于,则进行数据的更新。在调用持久层对数据进行处理(更新,这里暂时没有使用事务)

编写控制层

package com.zhoujun.c2002.servlet;import com.zhoujun.c2002.Exception.AppException;
import com.zhoujun.c2002.Exception.MoneyNotEnoughException;
import com.zhoujun.c2002.service.TransferService;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/transfer")
public class TransferServlet extends HttpServlet {private TransferService transferService = new TransferService();@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//收集前端发送的数据String fromcard = request.getParameter("fromcard");String tocard = request.getParameter("tocard");Double outmoney =  Double.parseDouble(request.getParameter("outmoney"));try {transferService.transfer(fromcard,tocard,outmoney);response.sendRedirect(request.getContextPath() + "/success.jsp");} catch (MoneyNotEnoughException e) {response.sendRedirect(request.getContextPath() + "/moneynotenough.jsp");} catch (Exception e){response.sendRedirect(request.getContextPath() + "/fail.jsp");}}
}

获取用户输入的值,调用服务层中的transfer()方法,将获取到的值传入,如果成功了就重定向到登录成功的页面,如果失败就重定向到失败页面

这是本人用于学习的记录,如果有缺陷希望各位大佬们能够指点,来自一个正在进步中的编程小白

使用mvc架构模式实现账户之间的转账(没有涉及事务处理)相关推荐

  1. Java学习-MVC架构模式

    目录 1 传统方式处理业务的缺点 2 MVC架构模式理论基础 4 MVC架构模式如何设计 4.1 设计JDBC工具类的封装 4.2 创建封装数据的对象 4.3 设计Dao模式 4.4 业务逻辑编写 4 ...

  2. data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解

    本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...

  3. spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  4. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  5. .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  6. 理解MVC架构模式,SpringMVC原理、执行流程图解

    1.MVC架构模式 说起SpringMVC就不得不说MVC,MVC是一种经典架构模式.MVC架构模式的重点是为了解耦,将软件用户界面和业务逻辑分离以使代码可扩展性.可复用性.可维护性.灵活性加强,很多 ...

  7. MVC架构模式详细说明

    一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...

  8. java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...

    [实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...

  9. MVC架构模式(2)

    简介: MVC最初是在Smaltalk_80中被用来构建用户界面的.M代表模型Model,V代表视图View,C代表控制器Controller. Model模型层,可以简单理解就是数据层,用于提供数据 ...

最新文章

  1. 不要把OKR用成 KPI,OKR和KPI有什么区别?
  2. 【LorMe云讲堂】梁玉婷:农田土壤微生物共存与功能识别调控
  3. c++ set有序性
  4. 基于Java的全文索引
  5. spark sql读取hive底层_scala – 从一个hive表中读取并使用spark sql写回来
  6. C++_类和对象_C++多态_多态的基本语法_静态多态_动态多态_虚函数---C++语言工作笔记069
  7. matlab oj,Matlab习题(1)
  8. 我对架构的理解-概念篇
  9. 从零开始搭二维激光SLAM --- Karto的后端优化与回环检测功能对比测试与分析
  10. springboot集成webservice接口及调用
  11. ipad可以安装python的编辑器_ipad配置python步骤
  12. 电力电子pwm控制技术
  13. 华为手机照片如何出现时间地点天气,教你30秒,一学就会
  14. 校园网路由器有线中继(针对802.1X)
  15. VoIP通话-基于SIP协议的Asterisk(一)-实现流程
  16. Oracle 行转列 动态出转换的列
  17. 若xn>0,且x(n+1)/xn>1-1/n(n=1,2,...),证明级数∑xn发散
  18. visita 无法连接到打印机。 内存不足,无法完成这个操作。请关闭一些程序,再试一次
  19. 背诵日语单词的手机软件有哪些
  20. 国产芯片----瑞盟MS258低功耗通用型运放,兼容替代LM258

热门文章

  1. 创造新的行业需要经历四个时期
  2. Redis数据库密码设置和查看密码
  3. [Pytorch系列-69]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - test.py代码详解
  4. python经典的猜数字游戏
  5. swift之网络下载图片sdwebImage、Kingfisher、Nuke
  6. 单片机c语言NTC温度查表程序,求助 NTC热敏电阻怎么通过AD值查表显示温度
  7. 6.1函数的定义和作用
  8. 6-3 定义并实现Book类及其__del__函数(高教社,《Python编程基础及应用》习题9-4)
  9. 小说阅读Autojs源码学习
  10. 工作5周的总结--学会做PPT