简易版银行管理(50分)
已知:现有账户表account,创建的SQL语句如下。
create table account(
id int PRIMARY KEY auto_increment,
name varchar(20) not null,
money double not null);
基本要求:
(1)利用面向对象方式实现功能;
(2)利用三层架构实现;
(3)应用事务处理。
功能要求:
(1)开户——增加记录
增加3个账户,姓名分别为:张三、李四、王五,账户初始金额:0元;
开户成功,显示所有账户信息。
(2)销户——删除记录
对姓名为“王五”的账户给予销户。成功操作后,显示所有账户信息。
(3)存钱——修改记录
张三、李四账户分别存入2000元。成功操作后,显示所有账户信息。
(4)取钱——修改记录
张三账户取出1000元,显示张三账户信息。
(5)转账——修改记录
李四给张三转账500元,显示张三和李四账户信息。
(6)查询所有账户信息。
前提:建数据库时我建的表名字为bank
三层架构:
Bank.java
package po;
public class Bank {
private int id;
private String name;
private double money;
public Bank() {
super();
}
public Bank(int id, String name, double money) {
super();
this.id = id;
this.name = name;
this.money = money;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String toString() {
return "Bank [id=" + id + ", name=" + name + ",money=" + money + "]";
}
}
BaseDao.java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
Connection con;
PreparedStatement pst;
ResultSet rs;
public Connection getConn() throws ClassNotFoundException, SQLException {
// 1 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2 获得数据库的连接
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf-8", "root", "usbw");
return con;
}
public void closeAll() throws SQLException {
if (rs != null) {
rs.close();
}
if (pst != null) {
pst.close();
}
if (con != null) {
pst.close();
}
}
}
BankDao.java
package dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import po.Bank;
public class BankDao extends BaseDao{
//开户:增加,显示所有账户信息
public int openBank(Bank bank) throws ClassNotFoundException, SQLException {
con = getConn();
String insertSQL = "insert into bank values(null, ?, ?)";
pst = con.prepareStatement(insertSQL);
pst.setString(1, bank.getName());
pst.setDouble(2, bank.getMoney());
int result = pst.executeUpdate();
closeAll();
return result;
}
//销户(给出姓名):删除,成功后显示所有账户信息
public int delBank(String name) throws ClassNotFoundException, SQLException {
con = getConn();
String deleteSQL = "delete from bank where name = ?";
pst = con.prepareStatement(deleteSQL);
pst.setString(1, name);
int result = pst.executeUpdate();
closeAll();
return result;
}
//存钱(两个人都存):修改,显示所有账户信息。取钱:修改,显示此人的账户信息
public int updateBank(Bank bank) throws ClassNotFoundException, SQLException {
con = getConn();
String updateSQL = "update bank set money=? where name = ?";
pst = con.prepareStatement(updateSQL);
pst.setDouble(1, bank.getMoney());
pst.setString(2, bank.getName());
int result = pst.executeUpdate();
closeAll();
return result;
}
//转账:修改,显示两个人的账户信息
public int transBank(Bank bank1, Bank bank2) throws ClassNotFoundException, SQLException {
con = getConn();
String transSQL = "update bank set bank1.money = ?, bank2.money = ? where bank1.name=? and bank2.name = ?";
pst = con.prepareStatement(transSQL);
pst.setDouble(1, bank1.getMoney());
pst.setDouble(2, bank2.getMoney());
pst.setString(3, bank1.getName());
pst.setString(4, bank2.getName());
int result = pst.executeUpdate();
closeAll();
return result;
}
//查询所有账户信息:查询
public List<Bank> queryAll() throws ClassNotFoundException, SQLException{
con = getConn();
String sql = "select * from bank";
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
List<Bank> list = new ArrayList<Bank>();
while(rs.next()) {
Bank acc = new Bank();
acc.setId(acc.getId());
acc.setName(acc.getName());
acc.setMoney(acc.getMoney());
list.add(acc);
}
closeAll();
return list;
}
//根据主键(姓名)查询单条记录
public Bank queryByName(String name) throws ClassNotFoundException, SQLException {
con = getConn();
String sql = "select * from bank from name = ?";
pst = con.prepareStatement(sql);
pst.setString(1, name);
rs = pst.executeQuery();
Bank bank = null;
if(rs.next()) {
bank = new Bank(rs.getInt(1), rs.getString(2), rs.getDouble(3));
}
closeAll();
return bank;
}
}
Main.java
package aMain;
import java.sql.SQLException;
import java.util.List;
import dao.BankDao;
import po.Bank;
public class Main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
BankDao dao = new BankDao();
//给三个人开户
Bank bank1 = new Bank(1, "张三", 0);
Bank bank2 = new Bank(2, "李四", 0);
Bank bank3 = new Bank(3, "王五", 0);
int result1 = dao.openBank(bank1);
int result2 = dao.openBank(bank2);
int result3 = dao.openBank(bank3);
if(result1 == 1 && result2 == 1 && result3 == 1) {
System.out.println("开户成功!");
//开户成功后查询所有账户信息
List<Bank> list = dao.queryAll();
for(Bank bank:list) {
System.out.println(bank);
}
System.out.println("==========这是分割线===========");
}
//对“王五”的账户进行销户
int result4 = dao.delBank("王五");
if(result4 == 1) {
System.out.println("销户成功!");
//销户成功后查询所有账户信息
List<Bank> list = dao.queryAll();
for(Bank bank:list) {
System.out.println(bank);
}
System.out.println("==========这是分割线===========");
}
//存钱——修改记录:张三、李四账户分别存入2000元。成功操作后,显示所有账户信息。
Bank bank4 = new Bank(1, "张三", 2000);
Bank bank5 = new Bank(2, "李四", 2000);
int result5 = dao.updateBank(bank4);
int result6 = dao.updateBank(bank5);
if(result5 == 1 && result6 == 1) {
System.out.println("存钱成功!");
//存钱成功后查询所有账户信息
List<Bank> list = dao.queryAll();
for(Bank bank:list) {
System.out.println(bank);
}
System.out.println("==========这是分割线===========");
}
//取钱——修改记录:张三账户取出1000元,显示张三账户信息。
Bank bank6 = new Bank(1, "张三", 1000);
int result7 = dao.updateBank(bank6);
if(result7 == 1) {
System.out.println("取钱成功!");
//取钱成功后显示此账户信息(张三)
Bank bank7 = dao.queryByName("张三");
System.out.println(bank7);
}
//转账——修改记录:李四给张三转账500元,显示张三和李四账户信息。
Bank bank8 = new Bank(1, "张三", 1500);
Bank bank9 = new Bank(2, "李四", 1500);
int result8 = dao.transBank(bank8, bank9);
if(result8 == 1) {
System.out.println("转账成功!");
//显示张三和李四账户信息
Bank bank11 = dao.queryByName("张三");
Bank bank22 = dao.queryByName("李四");
System.out.println(bank11);
System.out.println(bank22);
}
//查询所有账户信息
List<Bank> list = dao.queryAll();
for(Bank bank:list) {
System.out.println(bank);
}
System.out.println("==========程序结束!===========");
}
}