JDBC银行案例(实现ATM机开户、存款、取款、转账、修改密码、注销对数据库的操作)

数据库要求:

创建数据库、表
创建数据库 account

  • 创建一张表 t_ccount。有以下列
    • cardId: 字符串,主键
    • password: 字符串,非空
    • username: 字符串,非空
    • balance: 小数,非空
    • phone: 字符串,非空

功能实现要求:

创建项目通过JDBC实现功能
创建AccountSystem类,完成下列功能

  • 开户: 控制台输入所有的账户信息,使用PreparedStatement添加至t_account表
  • 存款: 输入卡号、密码、存储金额进行修改
  • 取款: 输入卡号、密码、取款金额
  • 转账: 输入卡号、密码、对方卡号、转账金额进行修改
  • 修改密码: 输入卡号、密码,再输入新密码进行修改
  • 查看余额: 输入卡号、密码,查询余额
  • 注销: 输入卡号、密码,删除对应的账户信息

数据库操作

#创建数据库
create database account character set utf8;
#使用account数据库
use account;
#创建表
create table t_account
(
    card_id  character(20) primary key,
    password character(50) not null,
    username character(20) not null,
    balance  double(10, 2) not null,
    phone    character(11) not null
) character set utf8;

在这里插入图片描述


功能实现

import java.util.Scanner;

/**
 * 菜单
 */
public class TestAccount {
    public static void main(String[] args) {
        AccountSystem accountSystem = new AccountSystem();
        Scanner scanner = new Scanner(System.in);
        System.out.println("欢迎使用中国银行ATM机");
        int choice = 0;
        do {
            System.out.println("1.开户 2.存款 3.取款 4.转账 5.修改密码 6.查看账户余额 7.注销 0.退出");
            System.out.print("请选择你的操作:");
            choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    accountSystem.register();
                    break;
                case 2:
                    accountSystem.saveMoney();
                    break;
                case 3:
                    accountSystem.takeMoney();
                case 4:
                    accountSystem.transfers();
                    break;
                case 5:
                    accountSystem.updatePassword();
                    break;
                case 6:
                    accountSystem.getBalance();
                    break;
                case 7:
                    accountSystem.logout();
                    break;
                case 0:
                    accountSystem.closeConnection();
                    return;
                default:
                    break;
            }
        } while (choice != 0);
    }
}
import java.sql.*;
import java.util.Scanner;

/**
 * 要求:
 * <p>
 * 开户:输入所有的账户信息,使用PreparedStatement添加至t_account表中
 * 存款:输入卡号、密码、存储金额进行修改
 * 取款:输入卡号、密码、取款金额
 * 转账:输入卡号、密码、需要对其转账的卡号、转账金额进行修改
 * 修改密码:输入卡号、密码,再输入新密码进行修改
 * 查询余额:输入卡号、密码,查询出对应的卡内余额
 * 注销:输入卡号、密码,删除对应的账户信息
 */
public class AccountSystem {
    Scanner scanner = new Scanner(System.in);
    private static Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;

    static {
        //重复的操作,就出发一次加载即可!
        try {
            //1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.连接数据库
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/account?useUnicode=true&characterEncoding=utf8", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭数据库连接对象Connection
     * <p>
     * 注意:在程序结束时关闭,如果过早关闭的话,将与数据库断开连接
     * 所以我们放在退出ATM机系统时调用关闭
     */
    public void closeConnection() {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    //开户
    public void register() {
        System.out.print("请输入卡号:");
        String card_id = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        System.out.print("请输入用户名:");
        String username = scanner.next();
        System.out.print("请输入存储金额:");
        double balance = scanner.nextDouble();
        System.out.print("请输入预留手机号:");
        String phone = scanner.next();


        //3.创建PreparedStatement,预编译
        String sql = "insert into t_account(card_id, password, username, balance, phone) values (?, ?, ?, ?, ?)";
        try {
            preparedStatement = connection.prepareStatement(sql);
            //4.为占位符赋值
            preparedStatement.setString(1, card_id);
            preparedStatement.setString(2, password);
            preparedStatement.setString(3, username);
            preparedStatement.setDouble(4, balance);
            preparedStatement.setString(5, phone);
            //5.执行SQL语句
            int result = preparedStatement.executeUpdate();
            //6.处理结果
            if (result > 0) {
                System.out.println("开户成功!");
            } else {
                System.out.println("开户失败!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //存款
    public void saveMoney() {
        System.out.print("请输入卡号:");
        String card_id = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        System.out.print("请输入存储金额:");
        double money = scanner.nextDouble();
        if (money > 0) {
            String sql = "update t_account set balance = balance + ? where card_id = ? and password = ?";
            //预编译
            try {
                preparedStatement = connection.prepareStatement(sql);
                //为占位符赋值
                preparedStatement.setDouble(1, money);
                preparedStatement.setString(2, card_id);
                preparedStatement.setString(3, password);
                //执行SQL语句
                int result = preparedStatement.executeUpdate();
                //处理结果
                if (result > 0) {
                    System.out.println("存款成功!");
                } else {
                    System.out.println("卡号或密码错误!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (preparedStatement != null) {
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        } else {
            System.out.println("输入存储金额错误!");
        }
    }

    //取款
    public void takeMoney() {
        System.out.print("请输入卡号:");
        String card_id = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        System.out.print("请输入取出金额:");
        double money = scanner.nextDouble();
        if (money > 0) {
            String sql = "update t_account set balance = balance - ? where card_id = ? and password = ?";
            //预编译
            try {
                preparedStatement = connection.prepareStatement(sql);
                //为占位符赋值
                preparedStatement.setDouble(1, money);
                preparedStatement.setString(2, card_id);
                preparedStatement.setString(3, password);
                //执行SQL语句
                int result = preparedStatement.executeUpdate();
                //处理结果
                if (result > 0) {
                    System.out.println("取款成功!");
                } else {
                    System.out.println("卡号或密码错误!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
    }

    //查看余额
    public void getBalance() {
        System.out.print("请输入卡号:");
        String card_id = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        String sql = "select balance from t_account where card_id = ? and password = ?";
        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, card_id);
            preparedStatement.setString(2, password);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                double balance = resultSet.getDouble("balance");
                System.out.println("卡内余额为:" + balance);
            } else {
                System.out.println("卡号或密码错误!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } else if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //修改密码
    public void updatePassword() {
        System.out.print("请输入卡号:");
        String card_id = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        System.out.print("请输入新密码:");
        String newPassword = scanner.next();
        String sql = "update t_account set password = ? where card_id = ? and password = ?";
        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, newPassword);
            preparedStatement.setString(2, card_id);
            preparedStatement.setString(3, password);
            int result = preparedStatement.executeUpdate();
            if (result > 0) {
                System.out.println("密码修改成功!");
            } else {
                System.out.println("卡号或密码错误!请核对后再修改!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //注销
    public void logout() {
        System.out.print("请输入卡号:");
        String card_id = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        String sql = "delete from t_account where card_id = ? and password = ?";
        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, card_id);
            preparedStatement.setString(2, password);
            int result = preparedStatement.executeUpdate();
            if (result > 0) {
                System.out.println("注销成功!");
            } else {
                System.out.println("卡号或密码错误!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //转账
    public void transfers() {
        System.out.print("请输入付款卡号:");
        String card_id = scanner.next();
        System.out.print("请输入付款密码:");
        String password = scanner.next();
        System.out.print("请输入转账金额:");
        double money = scanner.nextDouble();
        if (money > 0) {
            String sql1 = "select balance from t_account where card_id = ? and password = ?";
            try {
                preparedStatement = connection.prepareStatement(sql1);
                preparedStatement.setString(1, card_id);
                preparedStatement.setString(2, password);
                ResultSet resultSet = preparedStatement.executeQuery();
                if (resultSet.next()) {
                    double balance = resultSet.getDouble("balance");
                    if (money <= balance) {
                        System.out.print("请输入收款卡号:");
                        String toCard_id = scanner.next();
                        String sql2 = "select balance from t_account where card_id = ?";
                        preparedStatement = connection.prepareStatement(sql2);
                        preparedStatement.setString(1, toCard_id);
                        resultSet = preparedStatement.executeQuery();
                        if (resultSet.next()) {
                            String sql3 = "update t_account set balance = balance - ? where card_id = ?";
                            preparedStatement = connection.prepareStatement(sql3);
                            preparedStatement.setDouble(1, money);
                            preparedStatement.setString(2, card_id);
                            preparedStatement.executeUpdate();
                            String sql4 = "update t_account set balance = balance + ? where card_id = ?";
                            preparedStatement = connection.prepareStatement(sql4);
                            preparedStatement.setDouble(1, money);
                            preparedStatement.setString(2, toCard_id);
                            preparedStatement.executeUpdate();
                            System.out.println("转账成功!");
                        } else {
                            System.out.println("收款卡号不存在!");
                        }
                    } else {
                        System.out.println("卡内余额不足!");
                    }
                } else {
                    System.out.println("卡号或密码错误!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (resultSet != null) {
                        resultSet.close();
                    }
                    if (preparedStatement != null) {
                        preparedStatement.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        } else {
            System.out.println("请重新验证,输入正确的转账金额!");
            this.transfers();
        }
    }
发布了136 篇原创文章 · 获赞 300 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_44170221/article/details/105220613