java银行管理系统(MySql+JDBC+数据库(Druid数据库连接池)+GUI)重要代码有解析注释

2 篇文章 0 订阅

java银行管理系统

小白又来水博客了



一、项目需求与分析:

  • 该系统主要有如下业务功能:每个人储户、管理员都拥有一个系统账号和密码。管理员可执行增、删、改、查、用户等系统操作。储户可执行存取款、转账汇款、打印流水、修改密码、验证信息

二、知识及有关技术的概述:

与数据库建立链接
1.1、使用Druid数据库连接池技术(博主采用):

 /**
     * 使用Druid数据库连接池技术
     */
    private static DataSource source1;
    static{
        try {
            Properties pros = new Properties();
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
            pros.load(is);
            source1 = DruidDataSourceFactory.createDataSource(pros);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection3() throws SQLException{
        Connection conn = source1.getConnection();
        return conn;
    }

Druid数据库配置文件:

/**
 *以下是mysql5.0的配置
 */
url=jdbc:mysql://localhost:3306/test1?rewriteBatchedStatements=true
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver

initialSize=10
maxActive=20
maxWait=1000
filters=wall

1.2、使用C3P0的数据库连接池技术:

 *
 * @Description 使用C3P0的数据库连接池技术
 * @author shkstart
 * @return
 * @throws SQLException
 */
//数据库连接池只需提供一个即可。
private static ComboPooledDataSource cpds = new ComboPooledDataSource("hellc3p0");
public static Connection getConnection1() throws SQLException{
    Connection conn = cpds.getConnection();
    return conn;
}

1.3、创建一个DBCP数据库连接池:

  //创建一个DBCP数据库连接池
    private static DataSource source;
    static{
        try {
            Properties pros = new Properties();
            FileInputStream is = new FileInputStream(new File("src/dbcp.properties"));
            pros.load(is);

            source = BasicDataSourceFactory.createDataSource(pros);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection2() throws Exception{

        Connection conn = source.getConnection();
        return conn;
    }

2.分别对管理、用户、以及流水记录建立的MySql表:
Administrator:
在这里插入图片描述

Transfer:
在这里插入图片描述

User:
在这里插入图片描述

3.对于GUI事件监听博主大量采用ActionListener(问就是学术浅):

书写格式
 record.addActionListener(new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            这里可以调用所封装的类:
        }
    });

作用
当鼠标左键点击窗口中的按钮时触发

三、银行管理系统需求的具体实现:

首先给项目分层(利用MVC)思想:

  • MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

创建以下7个层:

  1. com.MyBank.been 实体类层 放置实体类
  2. com.MyBank.dao dao层 操作数据
  3. com.MyBank.service 服务层 处理业务
  4. com.MyBank.service 控制层 控制操作
  5. com.MyBank.utils 配合dao层 链接数据
  6. com.MyBank.test 测试
  7. com.MyBank.view 视图层 展示信息
    在这里插入图片描述

实体层、持久层等结构如下:
在这里插入图片描述

Administrator:

package com.MyBank.been;


public class Administrator {
    private String  Aname;
    private String  Acord;

    public String getAname() {
        return Aname;
    }
    public void setAname(String aname) {
        Aname = aname;
    }
    public String getAcord() {
        return Acord;
    }
    public void setAcord(String acord) {
        Acord = acord;
    }
    public Administrator() {
    }
    @Override
    public String toString() {
        return "Administrator{" +
                "Aname='" + Aname + '\'' +
                ", Acord='" + Acord + '\'' +
                '}';
    }
}

Transfer :

package com.MyBank.been;

public class Transfer {
    private String transfer_people;//转账人
    private String transfer_object;//转账的对象
    private double transfer_money;//转账数目
    private String transfer_data;//转账日期
    private double money;

    public Transfer() {
        super();
    }

    public Transfer(String transfer_people, String transfer_object, double transfer_money, String transfer_data,
                    double money) {
        super();
        this.transfer_people = transfer_people;
        this.transfer_object = transfer_object;
        this.transfer_money = transfer_money;
        this.transfer_data = transfer_data;
        this.money = money;
    }

    public String getTransfer_people() {
        return transfer_people;
    }
    public void setTransfer_people(String transfer_people) {
        this.transfer_people = transfer_people;
    }
    public String getTransfer_object() {
        return transfer_object;
    }
    public void setTransfer_object(String transfer_object) {
        this.transfer_object = transfer_object;
    }

    public double getTransfer_money() {
        return transfer_money;
    }

    public void setTransfer_money(double transfer_money) {
        this.transfer_money = transfer_money;
    }

    public String getTransfer_data() {
        return transfer_data;
    }
    public void setTransfer_data(String transfer_data) {
        this.transfer_data = transfer_data;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Transfer [transfer_people=" + transfer_people + ", transfer_object=" + transfer_object
                + ", transfer_money=" + transfer_money + ", transfer_data=" + transfer_data + ", money=" + money + "]";
    }
}

User :

package com.MyBank.been;

public class User {

    private String name;
    private String password;  //密码
    private String id;  //身份证号
    private String number;  //银行卡号
    private String payment; //支付密码
    private String phone;   //手机号
    private double balance;  //余额
    private String acount;   //账号

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getPayment() {
        return payment;
    }

    public void setPayment(String payment) {
        this.payment = payment;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public String getAcount() {
        return acount;
    }

    public void setAcount(String acount) {
        this.acount = acount;
    }

    @Override
    public String   toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", id='" + id + '\'' +
                ", number='" + number + '\'' +
                ", payment='" + payment + '\'' +
                ", phone='" + phone + '\'' +
                ", balance=" + balance +
                ", acount='" + acount + '\'' +
                '}';
    }
}

dao层:
在这里插入图片描述

Administrator

package com.MyBank.dao;

import com.MyBank.been.Administrator;
import com.MyBank.utils.BaseUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;

public class AdministratorDao {
    //找到用户和密码
    public Administrator findNameAndCord(String str1, String str2){
        String sql = "select *from administrator where Aname=? and Acord=?";
        QueryRunner qr = BaseUtils.getQueryRunner();
        try {
            return qr.query(sql,new BeanHandler<Administrator>(Administrator.class),str1,str2);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }return null;
    }
    //删除用户
    public int delectUser(String str1, String str2){
        String sql = "delete from user  where user=? and acount=?";
        QueryRunner qr = BaseUtils.getQueryRunner();
        try {
            int update = qr.update(sql, str1, str2);
            return update;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }return 0;
    }
    //更新姓名 账号 密码
    public int UpdateCord(String str1,String str2,String str3){
        String sql = "update user set  acount=?,cord= ?where name=? ";
        QueryRunner qr = BaseUtils.getQueryRunner();
        try {
            int i =qr.update(sql,str2,str3,str1);
            return i;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }return 0;
    }
}

service层:
在这里插入图片描述

package com.MyBank.service;

import com.MyBank.been.Transfer;
import com.MyBank.been.User;
import com.MyBank.dao.FindAllSql;
import com.MyBank.dao.TransferInsertSql;
import com.MyBank.dao.UserDao;

import java.sql.SQLException;
import java.util.List;

public class UserService {
    /**
     *
     * @param str1 用户名
     * @param str2 密码
     * @return
     */
    public User findNameAndCord(String str1, String str2) {
        UserDao userDao = new UserDao();
        return userDao.findNameAndCord(str1, str2);
    }

    /**
     *
     * @param str1 账号
     * @param str2 卡号
     * @param str3 身份证号
     * @return
     */
    public User findIdAndNumberAndAcount(String str1, String str2, String str3) {
        UserDao userDao = new UserDao();
        return userDao.findIdAndNumberAndAcount(str1, str2, str3);
    }

    public int Insert(User user) {
        UserDao userDao = new UserDao();
        return userDao.Insert(user);
    }

    public User findPayment(String str2) throws SQLException {
        UserDao userDao = new UserDao();
        return userDao.findPayment(str2);
    }

    public User findCount(String str2) throws SQLException {
        UserDao userDao = new UserDao();
        return userDao.findCount(str2);
    }

    public boolean UpdateBlance(User user) {
        UserDao userDao = new UserDao();
        if (userDao.UpdateBlance(user) == 0)
            return false;
        else
            return true;
    }

    public boolean UpdateCord(User user) {
        UserDao userDao = new UserDao();
        if (userDao.UpdateCord(user) == 0)
            return false;
        else
            return true;
    }

    public List findAll(String str) {
        FindAllSql findAllSql = new FindAllSql();
        List<Transfer> list = findAllSql.findAll(str);
        if (list == null)
            return null;
        else
            return list;
    }

    public int Insert1(Transfer tf) {
        TransferInsertSql insert = new TransferInsertSql();
        return insert.Insert1(tf);
    }

}

view层:
在这里插入图片描述

package com.MyBank.view;

import com.MyBank.been.Administrator;
import com.MyBank.been.User;
import com.MyBank.dao.AdministratorDao;
import com.MyBank.service.UserService;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 登录注册类
 */
public class LoginPage extends JFrame {


public void FirstRegister() {
JFrame frame = new JFrame();
    Container c = frame.getContentPane();
    JTextField account = new JTextField();
    JPasswordField password = new JPasswordField();
    JButton record = new JButton("登录");
    JButton register = new JButton("注册");
    JButton forget = new JButton("忘记/修改密码");
    User user = new User();
    // 窗口设置
		frame.setTitle("欢迎进入银行");
    int width = Toolkit.getDefaultToolkit().getScreenSize().width;
    int height = Toolkit.getDefaultToolkit().getScreenSize().height;
		frame.setBounds(width / 2 - 200, height / 2 - 220, 650, 650);
		c.setLayout(new BorderLayout());
		frame.setResizable(false);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(EXIT_ON_CLOSE);


    JPanel jpanel = new JPanel();
		jpanel.setBackground(Color.cyan);
		jpanel.setLayout(null);
    JLabel Bank = new JLabel("Bank");
		Bank.setFont(new Font("宋体", Font.PLAIN, 30));
		jpanel.add(Bank);
		Bank.setBounds(280, 10, 100, 30);
		c.add(jpanel, "North");

    // 创建两个单选按钮
    JRadioButton radioBtn01 = new JRadioButton("管理员");
        radioBtn01.setFont(new Font("宋体", Font.PLAIN, 20));
		radioBtn01.setBounds(180, 400, 100, 20);
    JRadioButton radioBtn02 = new JRadioButton("用   户");
        radioBtn02.setFont(new Font("宋体", Font.PLAIN, 20));
		radioBtn02.setBounds(400, 400, 100, 20);
    // 创建按钮组,把两个单选按钮添加到该组
    ButtonGroup btnGroup = new ButtonGroup();
        btnGroup.add(radioBtn01);
        btnGroup.add(radioBtn02);
        jpanel.add(radioBtn01);
        jpanel.add(radioBtn02);

    ImageIcon jpg = new ImageIcon("1.jpg");
		jpg.setImage(jpg.getImage().getScaledInstance(200, 200, Image.SCALE_DEFAULT));
    JLabel a3 = new JLabel(jpg);
		a3.setBounds(240, 50, 200, 200);
		c.add(a3);

    JLabel a1 = new JLabel("账号:");
		a1.setFont(new Font("宋体", Font.PLAIN, 20));
		a1.setBounds(180, 280, 50, 20);
    JLabel a2 = new JLabel("密码:");
		a2.setFont(new Font("宋体", Font.PLAIN, 20));
		a2.setBounds(180, 360, 50, 20);
		jpanel.add(a1);
		jpanel.add(a2);
		account.setBounds(280, 275, 150, 30);
		account.setFont(new Font("宋体", Font.PLAIN, 18));

		password.setBounds(280, 355, 150, 30);
		password.setFont(new Font("宋体", Font.PLAIN, 18));

		jpanel.add(account);
		jpanel.add(password);
		c.add(jpanel, "Center");

		jpanel.add(register);
		jpanel.add(forget);
		register.setBounds(15, 550, 200, 40);
		register.setFont(new Font("宋体", Font.PLAIN, 15));
		forget.setBounds(425, 550, 200, 40);
		forget.setFont(new Font("宋体", Font.PLAIN, 15));
		c.add(jpanel);

		jpanel.add(record);
		record.setBounds(270, 450, 150, 75);
		record.setFont(new Font("宋体", Font.PLAIN, 20));
		c.add(jpanel);
        JLayeredPane jp = new JLayeredPane();
		register.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            // 触发注册弹窗
            homeRegist homeRegist = new homeRegist();
            homeRegist.RegisterDialog();
            frame.setVisible(false);
        }

    });
		forget.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            // 触发忘记密码弹窗
            homeVerify honVerify = new homeVerify();
            honVerify.ForgetDialog(user);
            frame.setVisible(false);
        }
    });

		record.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            // 触发登录弹窗
            String str1 = account.getText();
            String str2 = password.getText();
            UserService userService = new UserService();
            AdministratorDao adminDao = new AdministratorDao();
            User user3 = userService.findNameAndCord(str1,str2);
            Administrator admin = adminDao.findNameAndCord(str1,str2);

            if(user3!=null && radioBtn02.isSelected()) {
                JOptionPane.showMessageDialog(null, "登录成功", "提示", JOptionPane.WARNING_MESSAGE);
                HomeMenu homeMenu = new HomeMenu();
                homeMenu.HomeMenu(user3);
                frame.setVisible(false);
            }
            else if(admin != null && radioBtn01.isSelected()){
                JOptionPane.showMessageDialog(null, "登录成功", "提示", JOptionPane.WARNING_MESSAGE);
                A_homeMain home = new A_homeMain();
                home.a_homeMain();
                frame.setVisible(false);
            }
            else {
                JOptionPane.showMessageDialog(null, "信息错误.", "提示", JOptionPane.ERROR_MESSAGE);
            }

        }
    }
           );
    }
}

四、部分功能预览:

主页面:

在这里插入图片描述

注册页面:
在这里插入图片描述
管理员菜单
在这里插入图片描述

查看菜单
在这里插入图片描述

用户菜单
在这里插入图片描述
部分功能展示:
k,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTU5NjY5Nw==,size_16,color_FFFFFF,t_70)

五、Last:

资源+3232691860,有问题都可以远程解决。

  • 20
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Java银行管理系统可以使用CSDN连接数据库。CSND是一个知名的技术社区和学习平台,提供了丰富的技术资源和博客文章,对于Java开发者来说是一个非常有用的参考和学习资源。在连接数据库方面,Java银行管理系统可以使用CSND提供的相关教程和示例代码来实现。 首先,Java银行管理系统需要引入数据库连接的相关依赖库,例如MySQLJDBC驱动。可以在CSND上搜索相关的文章和教程,找到合适的依赖库版本并下载到项目中。 其次,根据具体的数据库类型,需要在代码中进行相应的连接配置。可以参考CSND上的教程和示例代码,了解如何设置数据库的连接地址、用户名、密码等信息。 然后,Java银行管理系统可以使用CSND提供的相关内容来学习和实现数据库的增删改查操作。可以了解如何编SQL语句,如何通过Java代码连接数据库并执行相关操作,如何处理异常和错误等。 最后,在开发过程中遇到问题可以在CSND上提问,寻求其他开发者的帮助和意见。CSND拥有庞大的开发者社区,在这里可以得到及时且专业的解答。 总之,Java银行管理系统可以利用CSND提供的丰富资源和知识来连接数据库,通过学习相关教程和示例代码来实现数据库操作,同时也可以在CSND上获取其他开发者的帮助和意见。这样可以更高效地开发和管理银行系统,提高开发效率和系统的稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士汉堡 ིྀིྀ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值