栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用java和JDBC实现一个ATM机系统(2.1版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用java和JDBC实现一个ATM机系统(2.1版)

文章目录
  • 用java和JDBC实现一个ATM机系统(2.1版)
    • 设计思路
    • 源代码
      • 需要一个配置文件
      • ATM 类
      • Data类
      • JDBC工具类
      • Bank类
      • User类
      • Demo测试类
      • mysql代码

用java和JDBC实现一个ATM机系统(2.1版)

java和数据库实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。

设计思路

设计六个类包括测试类:
1,ATM类也是主要的类,负责实现用户一系列的操作;
2,Data类,操作数据库的类,作为ATM类的一个属性,主要实现从数据库获取用户信息,并完成数据的更新;
3、JDBCUtil类,JDBC工具类,注册mysql驱动、获取连接对象及释放资源;
4,Bank类,有ATM机(has-a),欢迎用户来使用ATM机;
5,User类,使用ATM机(use-a);
6,Demo类,测试类,创建一个环境,让类产生关系。

源代码 需要一个配置文件
//需要导入mysql驱动的jar包
//jdbc.properties配置文件
url=jdbc:mysql://localhost:3306/atm
user=你的mysql的用户名
password=你的mysql用户密码
driver=com.mysql.jdbc.Driver
ATM 类
package atm;

import java.util.Scanner;

//ATM类
public class ATM {
    //有一个类操作数据的类
    private Data data = new Data();
    //ATM机里的数据
    private double userMoney;//用户账户里的钱
    private double money;//变量,存,取,转账的钱

    //ATM界面
    public void show(){
        System.out.println("欢迎使用ATM机");
        //使用登录方法,输入账号和密码
        int number = login();
        //如果登录成功
        if(number == 4)
            working();//ATM机办理业务

    }
    //登录方法
    private int login(){
        int number = 3;//用户输入次数
        while(number > 0) {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入账号:");
            //输入账号
            String inUserName = input.nextLine();
            //输入密码
            System.out.println("请输入密码:");
            String inUserPassword = input.nextLine();
            //验证
            if(data.isTrue(inUserName,inUserPassword)){
                userMoney = data.getMoney();
                System.out.println("登录成功");
                number = 4;//次数变为4
                break;
            }
            number --;//次数减一
            System.out.println("账号或密码输入错误。。。");
            System.out.println("您还有" + number + "次机会");
        }
        return number;//是否登录成功
    }

    //功能界面
    private void functionShow(){
        System.out.println("**********************");
        System.out.println("t欢迎使用ATM");
        System.out.println("1,账户余额查询n2,存钱n3,取钱n4,转账n5,修改用户密码n6,退出系统n");
        System.out.println("**********************");
    }

    //用户要进行的操作
    private void working(){
        String index;//业务序号
        do{
            functionShow();//调用功能界面
            System.out.println("请输入要办理的业务序号:");
            Scanner input = new Scanner(System.in);
            index = input.nextLine();
            switch(index){
                case "1":
                    look();
                    break;
                case "2":
                    saveMoney();
                    break;
                case "3":
                    getMoney();
                    break;
                case "4":
                    giveMoney();
                    break;
                case "5":
                    changePassword();
                    break;
                case "6":
                    System.out.println("欢迎下次光临!");
                    data.close();
                    break;
                default:
                    System.out.println("您输入有误,请重新输入。。。。");
            }
        }while(!index.equals("6"));
    }

    //是否继续某项操作
    private boolean isContinue(){
        System.out.println("继续办理该项业务:请输入Y/y");
        System.out.println("返回上一级:请输入N/n");
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        if(str.equalsIgnoreCase("Y"))
            return true;
        else
            return false;
    }

    //存钱,取钱,转账共用
    private void howMuch(String str){
        System.out.println("欢迎办理"+ str +"业务。。。。。。");
        System.out.println("请输入金额(只能是整数且是100的倍数,最多为10000):");
        Scanner input = new Scanner(System.in);
        Double money = input.nextDouble();
        if(money%10 != 0) {
            System.out.println("您输入有误!");
            this.money = 0;
        }
        else
            this.money = money;
    }

    //查询实现
    private void look(){
        userMoney = data.getMoney();
        System.out.println("用户余额为:" + userMoney);
        try{
            Thread.sleep(2000);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    //存钱实现
    private void saveMoney(){
        howMuch("存钱");
        if(money != 0) {//如果存的钱正确
            boolean a = data.changeMoney(money, true);//存上
            if(a)
                System.out.println("已存入");
            look();//显示余额
        }
        if(isContinue())
            saveMoney();
    }

    //判断余额是否充足
    private boolean isEnough(){
        userMoney = data.getMoney();
        if(money <= userMoney)
            return true;
        else{
            System.out.println("您的余额不足!");
            return false;
        }
    }

    //取钱实现
    private void getMoney(){
        howMuch("取钱");
        //如果取的钱正确且如果转账账户余额够
        if(money != 0 && isEnough()){
            data.changeMoney(money, false);
            look();
            System.out.println("请收好您的钱");
        }
        if(isContinue())
            getMoney();
    }

    //转账实现
    private void giveMoney(){
        //只判断用户账户是否存在
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要转账账号:");
        //输入账号
        String inUserName = input.nextLine();
        //如果该账户存在
        if(data.isUser(inUserName)) {
            howMuch("转账");
            //如果转的钱正确且如果转账账户余额够
            if (money != 0 && isEnough()) {
                data.giveMoney(money);
                System.out.println("转账成功");
                look();
            }
        }
        else
            System.out.println("被转账账户不存在。。。");
        if(isContinue())
            giveMoney();
    }

    //修改密码实现
    private void changePassword(){
        System.out.println("请输入新密码:");
        Scanner input = new Scanner(System.in);
        String newPassword = input.nextLine();
        boolean b = data.changePassword(newPassword);
        if(b)
            System.out.println("密码修改成功!");
        else
            System.out.println("密码修改失败!");
    }
}

Data类
package atm;

import jdbc_util.JDBCUtil;

import java.sql.*;

public class Data {

    private double umoney;//用户余额
    private String uname; //用户
    private String gname;  //被转账用户
    private Connection coon = null;//连接对象,程序结束时释放
    private PreparedStatement pstmt = null;
    private ResultSet res = null;
    private String sql;//sql语句

    {
        try {
            coon = JDBCUtil.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    
    public double getMoney(){
        try {
            sql = "select * from atm where uname= ?";//查询语句
            pstmt = coon.prepareStatement(sql);
            pstmt.setString(1, uname);
            res = pstmt.executeQuery();
            if(res.next()){
                umoney = res.getDouble("money");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtil.close(res, pstmt, null);//释放资源
        }
        return umoney;
    }

    
    public boolean isTrue(String user,String password){
        if(user == null || password == null){
            return false;
        }
        try {
            sql = "select * from atm where uname = ? and password = ?";
            pstmt = coon.prepareStatement(sql);
            pstmt.setString(1,user);
            pstmt.setString(2,password);
            res = pstmt.executeQuery();
            uname = user;
            return res.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(res, pstmt, null);
        }
        return false;
    }

    
    public boolean isUser(String user){
        if(user == null){
            return false;
        }
        try {
            sql = "select * from atm where uname = ?";
            pstmt = coon.prepareStatement(sql);
            pstmt.setString(1,user);
            res = pstmt.executeQuery();
            gname = user;
            return res.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(res, pstmt, null);
        }
        return false;
    }

    
    public boolean changeMoney(double money,boolean isOrNot){
        if(isOrNot){
            sql = "update atm set money = money + ? where uname = ?";
        }else{
            sql = "update atm set money = money - ? where uname = ?";
        }
        return runSql(money,null);
    }

    
    public boolean changePassword(String newPassword){
        if(newPassword == null){
            return false;
        }
        sql = "update atm set password = ? where uname = ?";
        return runSql(0,newPassword);
    }

    //执行sql修改操作
    private boolean runSql(double money,String newPassword){
        try {
            if(sql == null){
                return false;
            }
            pstmt = coon.prepareStatement(sql);
            if(newPassword == null){
                pstmt.setDouble(1, money);
            }else{
                pstmt.setString(1, newPassword);
            }
            pstmt.setString(2,uname);
            int count = pstmt.executeUpdate();
            if(count != 0){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            sql = null;
            JDBCUtil.close(res, pstmt, null);
        }
        return false;
    }

    
    public boolean giveMoney(double money){
        PreparedStatement pstmt1 = null;
        try {
            coon.setAutoCommit(false); //开启事务
            sql = "update atm set money = money - ? where uname = ?";
            String sql1 = "update atm set money = money + ? where uname = ?";
            pstmt = coon.prepareStatement(sql);
            pstmt1 = coon.prepareStatement(sql1);
            pstmt.setDouble(1,money);
            pstmt.setString(2,uname);
            pstmt1.setDouble(1,money);
            pstmt1.setString(2,gname);
            int a = pstmt.executeUpdate();
            int b = pstmt1.executeUpdate();
            coon.commit();//提交事务
            if(a !=0 && b!=0) {
                return true;
            }
        } catch (Exception e) {
            try {
                if(coon !=null)
                    coon.rollback();//回滚
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally{
            JDBCUtil.close(res, pstmt, null);
            JDBCUtil.close(null, pstmt1, null);
        }
        return false;
    }

    
    public void close(){
        JDBCUtil.close(res, pstmt, coon);
    }

}

JDBC工具类
package jdbc_util;

import com.sun.org.apache.bcel.internal.util.ClassLoader;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;


public class JDBCUtil {

    private static String url;
    private static String user;
    private static String password;
    private static String driver;

    
    static{
        try {
            //创建Properties集合类
            Properties pro = new Properties();
            //获取src下文件路径---->ClassLoader 类加载器(文件路径不有为中文)
            ClassLoader classLoader = new ClassLoader();
            URL res = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
            //加载文件
            //pro.load(new FileReader("/D:/java-idea2018File/jdbc/out/production/atm-gui-jdbc/jdbc.properties"));
            pro.load(new FileReader(path));
            //获取数据赋值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");

            //注册驱动
            Class.forName(driver);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

    
    public static void close(Statement stmt, Connection coon){
        close(null,stmt,coon);
    }

    public static void close(ResultSet res,Statement stmt,Connection coon){
        if(res != null){
            try{
                res.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if (stmt != null) {
            try{
                stmt.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if (coon != null) {
            try{
                coon.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }

}

Bank类
package atm;

//银行类
public class Bank {
    //银行有ATM机供给用户使用
    private ATM atm = new ATM();
    //欢迎用户使用
    public void welcome(User user){
        System.out.println("欢迎用户来我行使用ATM机");
        user.useATM(atm);
    }

}


User类
package atm;

//用户类
public class User {
    //用户使用ATM机办理业务
    public void useATM(ATM atm){
        atm.show();
    }
}
Demo测试类
package atm;

//测试类
public class Demo {

    public static void main(String[] args){
        //创建一个银行
        Bank bank = new Bank();
        //创建一个用户
        User user = new User();
        //银行欢迎用户
        bank.welcome(user);
    }
}

mysql代码
CREATE DATAbase atm;
CREATE TABLE atm(
	id INT PRIMARY KEY AUTO_INCREMENT,
	uname VARCHAR(30),
	PASSWORD VARCHAR(6),
	money DOUBLE(6,2)
);

INSERT INTO atm(id,uname,PASSWORD,money)  VALUES(
	NULL,
	'张三',
	'123',
	0
);

INSERT INTO atm(id,uname,PASSWORD,money)  VALUES(
	NULL,
	'李四',
	'456',
	0
);

INSERT INTO atm(id,uname,PASSWORD,money)  VALUES(
	NULL,
	'王五',
	'789',
	0
);

SELECT * FROM atm;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号