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个层:
- com.MyBank.been 实体类层 放置实体类
- com.MyBank.dao dao层 操作数据
- com.MyBank.service 服务层 处理业务
- com.MyBank.service 控制层 控制操作
- com.MyBank.utils 配合dao层 链接数据
- com.MyBank.test 测试
- 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);
}
}
}
);
}
}
四、部分功能预览:
主页面:
注册页面:
管理员菜单
查看菜单
用户菜单
部分功能展示:
五、Last:
资源+3232691860,有问题都可以远程解决。