java银行管理系统

小白又来水博客了


文章目录

  • java银行管理系统
  • 一、项目需求与分析:
  • 二、知识及有关技术的概述:
  • 三、银行管理系统需求的具体实现:
  • 四、部分功能预览:
  • 五、Last:

一、项目需求与分析:

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

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

与数据库建立链接
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.DriverinitialSize=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() {@Overridepublic 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() {}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;elsereturn true;}public boolean UpdateCord(User user) {UserDao userDao = new UserDao();if (userDao.UpdateCord(user) == 0)return false;elsereturn true;}public List findAll(String str) {FindAllSql findAllSql = new FindAllSql();List<Transfer> list = findAllSql.findAll(str);if (list == null)return null;elsereturn 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() {@Overridepublic void actionPerformed(ActionEvent arg0) {// 触发注册弹窗homeRegist homeRegist = new homeRegist();homeRegist.RegisterDialog();frame.setVisible(false);}});forget.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// 触发忘记密码弹窗homeVerify honVerify = new homeVerify();honVerify.ForgetDialog(user);frame.setVisible(false);}});record.addActionListener(new ActionListener() {@Overridepublic 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);}}});}
}

四、部分功能预览:

主页面:

注册页面:

管理员菜单

查看菜单

用户菜单

部分功能展示:

五、Last:

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

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

  1. druid java直接调用_Spring Boot使用Druid连接池的示例代码

    Druid是Java语言中最好的数据库连接池.Druid相比于其他的数据库连接池,有两大特性: 监控数据库,有利于分析线上数据库问题 更容易扩展,同时也很高效. 今天演示一下Spring Boot集成 ...

  2. java 银行管理系统(连接数据库Mysql)

    java 银行管理系统(连接数据库Mysql) 逻辑与功能图 实现逻辑 功能图 代码 逻辑与功能图 实现逻辑 程序共有三个文件 Bankmangement.java:包括程序运行的主函数,方法等 Us ...

  3. Java JDBC篇4——数据库连接池

    Java JDBC篇4--数据库连接池 1.DBCP 1.1.依赖jar包 官网:https://mvnrepository.com/artifact/org.apache.commons/commo ...

  4. log4j mysql 异步_spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)...

    一,druid数据库连接池的功能? 1,Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 2,druid的官方站: http ...

  5. spring boot、mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问

    spring boot.mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问 1.原理实现介绍 本质来说使用连接池是为了节省创建.关闭数据库连接的资源消耗,从而提 ...

  6. Mysql实现监控数据统计分析:Druid开源分布式系统与阿里巴巴的Druid数据库连接池

    看到Druid很多国内的开发者所熟知的就是阿里巴巴提供的开源数据库连接池工具.如果看了这篇文章还认为Druid仅仅是一个阿里巴巴提供的开源数据库连接池工具那么就错了,它或许指的是用于大数据实时处理的开 ...

  7. Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)

    文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...

  8. Druid数据库连接池使用参考

    一:添加相应依赖 druid-1.0.9.jar: mysql-connector-java-5.1.48-bin.jar 二:编写properties文件 放置位置在src中: driverClas ...

  9. Druid数据库连接池监控的使用

    Druid数据库连接池 1. Druid是什么? Druid是Java语言中最好的数据库连接池,由阿里巴巴团队开发.Druid能够提供强大的监控和扩展功能.         github地址为http ...

最新文章

  1. Intel Realsense D435报错 RuntimeError: MFCreateDeviceSource(_device_attrs, _source) returned: HResult
  2. 清楚linux缓存文件,Linux删除文件 清除缓存
  3. Android应用开发控件——Gallery和ImageSwitcher
  4. 突发!王思聪名下房产、汽车、存款等被查封
  5. [渝粤教育] 重庆工程职业技术学院 Linux服务器配置与管理(唐宏) 参考 资料
  6. 广工drcom用openwrt极路由破解小记
  7. 手把手教你制作一块Linux开发板(基于Planck-pi)
  8. PDF文件如何转JPG图片?简单三步轻松转换
  9. Edge使用Flash
  10. 第三阶段应用层——1.11 数码相册—setting_page设置页面的显存管理、页面规划、输入控制
  11. android 火车购票功能,基于Android的火车票售票系统的设计与实现.doc
  12. 学习java需要的软件
  13. Windows Media Encode 9简介及SDK
  14. 官方途径 | 知网、维普、万方、中文在线免费下载,不限次!
  15. Xgboost如何处理缺失值
  16. 收藏:信息安全相关的认证有哪些?有没有必要考?
  17. 地球 three.js 城市 3d
  18. configure(configure的中文意思)
  19. 每个女生都有一个不是男朋友的男朋友
  20. 新版标准日本语高级_第17课

热门文章

  1. 神经网络进行图像分类,神经网络和图神经网络
  2. QT+百度AI 手势识别
  3. 荣耀路由x1 虚拟服务器,荣耀路由X1增强版怎么设置端口映射规则
  4. android 哪个服务提示 存储设备空间不足,请释放一些空间,[已解决]Android手机上的存储空间不足怎么办?...
  5. 联想小新Air14 锐龙 换屏
  6. 关于Python user32.dll SetWindowPos调用无效的问题的解决方案
  7. 在Jenkins中Svn Publisher插件的使用
  8. beats耳机开机闪白灯_beatsx开机白光一直闪
  9. Java爬取百度图片人脸识别下载高颜值小姐姐图片
  10. ofo小黄车发起首个“国民骑行日”绿色出行917国民单车“就要骑”