JDBCUtils工具类实现ATM简易系统

该博客介绍了如何利用JDBCUtils工具类来构建一个简单的ATM系统。首先,需要导入必要的jar包并配置c3p0数据源。接着,创建对应的数据库表。最后,展示了ATM系统中涉及的Client类和JDBCUtil类的部分代码,表明通过这些设置,转账等功能可以方便地实现。
摘要由CSDN通过智能技术生成

JDBCUtils工具类实现ATM简易系统

1.先导入相应jar包
2.再进行配置文件
c3p0配置文件 https://blog.csdn.net/qq_36760873/article/details/100084638
其他配置文件都可按照正常jdbc的内容,不写的内容系统会自动进行分配

在这里插入图片描述
3.建好相应的数据库如图所示:

ATM数据库下的表client
在这里插入图片描述

package com.sram.demo01;

import com.sram.demo01.JDBCUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import java.util.Scanner;

public class ATM {
private static Scanner scanner = new Scanner(System.in);
private static Client client;

public static void main(String[] args) {
    boolean flag = true;
    do{
        System.out.println("1.登录");
        System.out.println("2.注册");

        String choose = scanner.next();

        //登录
        if("1".equals(choose)){
            flag = !ATMlogin();
            while(!flag){//登录成功
                ATMmenu();
            }
        }
        //注册
        if("2".equals(choose)){
            ATMregister();
        }
    }while(flag);

}

private static void ATMmenu() {

    System.out.println("1.查询余额");
    System.out.println("2.取钱");
    System.out.println("3.存钱");
    System.out.println("4.转账");
    System.out.println("5.修改密码");
    System.out.println("6.退卡");

    int choose = scanner.nextInt();

    switch(choose){
        case 1:
            double balance = queryBalance();
            System.out.println("您的余额为:"+balance);
            break;
        case 2:getMoney();break;
        case 3:saveMoney();break;
        case 4:transfer();break;
        case 5:editPassword();break;
        case 6:exit();break;
    }

}

private static void editPassword() {

    System.out.println("请输入账号:");
    String id = scanner.next();
    System.out.println("请输入旧密码");
   String password=scanner.next();
    System.out.println("请核对信息:(Y/N)");

    //没有查到人
    Map map = queryByID(id);
    if(map == null){
        System.out.println("没有该账户!");
        return;
    }

    String name = map.get("name").toString();
    System.out.println(name);

    String answer = scanner.next();
    if("y".equalsIgnoreCase(answer)){

        System.out.println("请输入新密码:");
        String password01=scanner.next();

        Connection connection = JDBCUtil.getConnecion();
        QueryRunner queryRunner = new QueryRunner();


        String sql1 = "update client set password=? where id=?";
     //   String sql2 = "update client set password=? where id=?";

        try {
            JDBCUtil.startTransaction();

            queryRunner.update(connection,sql1,password01,client.getId());
         //   queryRunner.update(connection,sql1,password01,id);

            JDBCUtil.commit();
            System.out.println("密码已更改");

        } catch (SQLException e) {
            e.printStackTrace();
            JDBCUtil.rollback();
        }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }


        }

    }else{
        System.out.println("密码修改有误,请重新输入!");
    }


}





private static  void exit(){

    System.out.println("业务已完成,是否还要继续办理业务:");
    System.out.println("01.继续办理");
    System.out.println("02.退出办理");
    int choose=scanner.nextInt();

   if ("01".equals(choose)){

       ATMmenu();

   }

   if ("02".equals(choose)){

       System.out.println("退卡");


       JDBCUtil.closeConnction();
      // ATM.exit();
   }


}
private static void transfer() {

    System.out.println("请输入转账对方的账号:");
    String id = scanner.next();
    System.out.println("请输入转账的金额:");
    double money=  scanner.nextDouble();

    if(money > queryBalance()){
        System.out.println("当前余额不足。");
        return;
    }

    System.out.println("请核对对方信息:(Y/N)");

    //没有查到人
    Map map = queryByID(id);
    if(map == null){
        System.out.println("没有该账户!");
        return;
    }
    String name = map.get("name").toString();
    System.out.println(name);

    String answer = scanner.next();
    if("y".equalsIgnoreCase(answer)){

      Connection connection = JDBCUtil.getConnecion();
        QueryRunner queryRunner = new QueryRunner();


        String sql1 = "update client set balance=balance-? where id=?";
        String sql2 = "update client set balance=balance+? where id=?";

        try {
            JDBCUtil.startTransaction();

            queryRunner.update(connection,sql1,money,client.getId());
            queryRunner.update(connection,sql2,money,id);

            JDBCUtil.commit();
            System.out.println("转账成功");


        } catch (SQLException e) {
            e.printStackTrace();
            JDBCUtil.rollback();
        }

    }else{
        System.out.println("信息有误,重新输入!");
    }

}

private static Map queryByID(String id) {
    Map map = null;
    QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
    String sql = "select name from client where id=?";
    try {
        map = queryRunner.query(sql,new MapHandler(),id);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return map;
}

private static void saveMoney() {
    System.out.println("请放入少于100张钞票:");
    int money = scanner.nextInt();
    if(money != 0 && money % 100 == 0){
        System.out.println("收到"+money);

        QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
        String sql = "update client set balance = balance+? where id=?";
        try {
            int rows = queryRunner.update(sql,money,client.getId());
            if(rows>0){
                System.out.println("正在处理。。。。处理成功!");
                //登录用户的余额没有更新
                System.out.println("您的余额为:"+queryBalance());
            }else{
                System.out.println("系统错误。请到柜台处理。");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("系统错误。请到柜台处理。");
        }
    }else{
        System.out.println("不能识别小于面值100的钞票");
    }
}

private static void getMoney() {
    System.out.println("请输入要取的金额:");
    int money = scanner.nextInt();
    if(money <= queryBalance()){

        QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
        String sql = "update client set balance = balance-? where id=?";
        try {
            int rows = queryRunner.update(sql,money,client.getId());
            if(rows>0){
                System.out.println("正在出钞。。。。请拿好");
                System.out.println("您的余额为:"+queryBalance());
            }else{
                System.out.println("系统错误。请到柜台处理。");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("系统错误。请到柜台处理。");
        }
    }else{
        System.out.println("余额不足!");
    }
}

private static double queryBalance() {
    double balance = 0;
    QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
    String sql = "select balance from client where id=?";
    try {
        balance = queryRunner.query(sql,new BeanHandler<Client>(Client.class),client.getId()).getBalance();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return balance;
}

private static boolean ATMlogin() {

    System.out.println("请插入卡:");
    String id = scanner.next();
    System.out.println("请输入密码:");
    String password = scanner.next();

    QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
    String sql = "select * from client where id=? and password=?";
    try {
        client = queryRunner.query(sql,new BeanHandler<Client>(Client.class),id,password);
        if(client == null){
            System.out.println("用户名或密码不正确!");
        }else{
            System.out.println("登录成功!欢迎"+client.getName());
            return true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return false;
}

private static void ATMregister() {

    System.out.println("请输入真实姓名:");
    String name = scanner.next();
    System.out.println("请输入身份证号:");
    String idcard = scanner.next();
    System.out.println("请输入手机号:");
    String phone = scanner.next();
    System.out.println("请输入密码:");
    String password = scanner.next();

    QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
    String sql = "insert into client(name,idcard,phone,password) value(?,?,?,?)";
    try {//          
      int rows =
        //返回 插入后的 主键自增的 id 值queryRunner.update(sql,name,idcard,phone,password);
        long id = queryRunner.insert(sql,new ScalarHandler<Long>(),name,idcard,phone,password);
        if(id>0){
            System.out.println("注册成功!您的卡号为"+id);
        }else{
            System.out.println("注册失败!");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }


}
}

JDBCUtil 类的编译

package com.sram.demo01;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class JDBCUtil {

public static DataSource dataSource;
public static  Connection connection;


static {

    dataSource=new ComboPooledDataSource("myconfig");

}

public static DataSource getDateSource(){

    return dataSource;

}

public static Connection getConnecion(){


  //  Connection connection=null;
    try {
        if (connection==null){

         connection=dataSource.getConnection();
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }

    return connection;
}


public static  void startTransaction(){

    try {
        if (connection.getAutoCommit()){

            connection.setAutoCommit(false);
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }
}



//TODO  事务相关的方法

public static  void commit(){

    try {
        if (!getConnecion().getAutoCommit()){
            getConnecion().commit();
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }


}

public static void rollback(){


    try {
        if (!getConnecion().getAutoCommit()){
            getConnecion().rollback();
        }


    } catch (SQLException e) {
        e.printStackTrace();
    }

}


public static  void closeConnction(){


    try {
        if (connection!=null){
            connection.close();
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}

全部配置完成
即可运行,转账等都可轻松实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值