jdbcService层

jdbc Service 层 转账业务 事务

service 层对应接口
package com.service;
import com.entity.T_Account;
public interface T_AccountService {
    //注册
    public void registerService(T_Account t_account);
    //登录
    public boolean loginService(T_Account t_account);
    //转账  传入参数为?:本人卡号,本人密码,(其中本人卡号和密码 封装为对象);对方卡号,转账金额
    public void transfer_accounts(T_Account t_account,String toCardNum,Double money );
}

service 层对应接口 的 实现类
package com.service;
import com.dao.T_AccountDao;
import com.dao.T_AccoutDaoImpl;
import com.entity.T_Account;
import com.util.JDBCUtil;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Scanner;

public class T_AccountServiceImpl implements T_AccountService {
    T_AccountDao t_accountDao = new T_AccoutDaoImpl ();
    //注册
    @Override
    public void registerService(T_Account t_account) {
        // System.out.println ("ggggggggg"+t_account);
        //注册之前查询数据库中是否有该用户
        T_Account byCardNum = t_accountDao.findByCardNum (t_account.getCardNum ());
        if (byCardNum == null) {
            //添加一条数据
            t_accountDao.insert (t_account);
        } else {
            System.out.println ("该用户已经注册,请直接登录!!!!");
        }
    }
    //登录
    @Override
    public boolean loginService(T_Account t_account) {
        T_Account byCardNumAndPass = t_accountDao.findByCardNumAndPass (t_account);
        if (byCardNumAndPass != null) {
            System.out.println ("欢迎使用本银行操作系统!!!");
            return true;
        } else {
            System.out.println ("用户名和密码不正确,请核实后重新登录!!!");
            return false;
        }
    }
    //转账
    @Override
    public void transfer_accounts(T_Account t_account, String toCardNum,double money) {
        //连接数据库
        Connection conn = JDBCUtil.getConnection ();
        try {
            //设置手动提交事务
            conn.setAutoCommit (false);
            //获得转账方对象
            T_Account user = t_accountDao.findByCardNumAndPass (t_account);
            //判断登录是否成功
            if (user != null) {
                //查询对方用户是否存在
                T_Account touser = t_accountDao.findByCardNum (toCardNum);
                if (touser != null) {
                    //检验转账方的余额是否充足
                   double balabce1 = user.getBalabce ();
                    System.out.println ("账户余额="+balabce1);
                    //z转账方账户余额与转账的金额比较
                    if (balabce1 > money) {
                        //计算转账金额的手续费
                        double poundageMoney = money * 0.05;
                        //修改本人转账后账户余额
                       double changeBalabcel = balabce1 - money - poundageMoney;
                        //将本人的新的账户余额存入到对象中
                        user.setBalabce (changeBalabcel);
                        //调用修改余额的方法
                        t_accountDao.updateBalance (user.getCardNum (), user.getBalabce ());
                        //获取对方账户余额
                        double tobalabce = touser.getBalabce ();
                        //修改收款方账户余额
                        double changeToBalabce = tobalabce + money;
                        touser.setBalabce (changeToBalabce);
                        //调用修改余额方法
                        t_accountDao.updateBalance (touser.getCardNum (),touser.getBalabce ());
                    } else if (balabce1 == money) {
                /* 包装类不能用双等于进行比较  因此 账户余额 的数据类型 应设置为 基本数据类型 double.
                      如果数据类型是包装类,需要比较时 则应该用 eques 方法 进行比较
                 */
                        Scanner scanner = new Scanner (System.in);
                        System.out.println ("您的转账金额等于您的账户余额,手续费将在转账金额中扣除,是否同意转账?");
                        System.out.println ("同意选1,不同意选2");
                       int i = scanner.nextInt ();
                        System.out.println ("接收到的参数i="+i);
                        //同意
                        if(i==1) {
                            //计算转账金额的手续费
                            double poundageMoney = money * 0.05;
                            double changeBalabcel = balabce1 - money;
                            //将本人的新的账户余额存入到对象中
                            user.setBalabce (changeBalabcel);
                            //调用修改余额的方法
                            t_accountDao.updateBalance (user.getCardNum (), user.getBalabce ());
                            //获取对方账户余额
                            double tobalabce = touser.getBalabce ();
                            //修改收款方账户余额
                            double changeToBalabce = tobalabce + money - poundageMoney;
                            touser.setBalabce (changeToBalabce);
                            //调用修改余额方法
                            t_accountDao.updateBalance (touser.getCardNum (), touser.getBalabce ());
                        }else {
                            System.out.println ("请更改转账金额之后,在操作!!!");
                        }
                    } else {
                        //手动抛出异常
                        throw new RuntimeException ("您的余额不足,请更改转账金额");
                    }
                } else {
                    throw new RuntimeException ("收款用户不存在,请核实后在操作 ");
                }
            } else {
                throw new RuntimeException ("用户名或密码不正确");
            }
            //手动提交
            conn.commit ();
        } catch (Exception e) {
            e.printStackTrace ();
            try {
                //设置回滚
                conn.rollback ();
            } catch (SQLException e1) {
                e1.printStackTrace ();
            }
        } finally {
            System.out.println ("感谢您的使用,欢迎下次光临!!!!");
            JDBCUtil.close (conn, null);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值