java+mysql模拟实现银行系统

2020-05-27,

模拟电子银行,开户,存钱,取钱,查询用户信息,修改用户信息,查询余额,查询明细,注销,退出,等等 

基本实现了相关功能。但是规定每次需要重新登录,还是很麻烦的。

另外用户注销时候,没有规定删除operator表中信息,此处会有问题。但想了半天觉得现实中这部分信息需要保留一段时间,不应该删除。orz

数据库设计:

bank.java:

package mybank;
 
import org.apache.commons.dbutils.QueryRunner;
 
//import java.sql.Date;
import java.util.*;
import java.util.Date;
import java.sql.*;
import java.text.DecimalFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
 
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
public class bank {
 
// public static Connection getConnection() throws Exception
// {
//// Class.forName("com.mysql.cj.jdbc.Driver");
//// Properties info=new Properties();
//// info.setProperty("user", "root");
//// info.setProperty("password", "wenmiao11");
//// 
//// Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/scsxbank?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false", info);
//// 
// 
// 
// return conn;
// }
 
 public static int writeoperator(String type,double num,int fromid,int toid) throws Exception
 {
 Connection conn=JdbcUtil.getConn();
 PreparedStatement pstmt = conn.prepareStatement("insert into operator "
 + "values(0,?,?,?,?,?,?)");
 pstmt.setString(1,type);
 pstmt.setDouble(2,num);
 pstmt.setInt(3,fromid);
 pstmt.setInt(4,toid);
 //Date d=new Date();
 java.sql.Date timePara = new java.sql.Date(new Date().getTime());
 pstmt.setDate(5,timePara);
 Calendar cal = Calendar.getInstance();//日期类
 java.sql.Timestamp timestampnow = new java.sql.Timestamp(cal.getTimeInMillis());//转换成正常的日期格式
 java.util.Date current =new java.util.Date();
 timestampnow = new java.sql.Timestamp(current.getTime());
 pstmt.setTimestamp(6, timestampnow);
 int k=pstmt.executeUpdate();
 return k;
 }
 public static int testmoneyenough(int idnum,double awaymoney) throws Exception
 {
 double balance=getbalance(idnum);
 if(balance>awaymoney)
 {
 return 1;
 }
 else
 {
 System.out.println("money is not enough!");
 return 0;
 }
 }
 public static double getbalance(int idnum) throws Exception
 {
 Connection conn=JdbcUtil.getConn();
 String sql="select * from balance where id=?;";
 Object[] params2 = {idnum};
 QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
 Object[] obj = qr.query(conn, sql, new ArrayHandler(),params2);
 
 if(obj.length>0)
 {
 System.out.println(obj[1]);
 return ((double)obj[1]);
 }
 else
 {
 System.out.println("error");
 return -1;
 }
 }
 
 public static int updatebalance(double num,int idnum) throws Exception
 {
 Connection conn=JdbcUtil.getConn();
 PreparedStatement pstmt ;
 pstmt = conn.prepareStatement("update balance set balance=balance+? where id=?;");
 pstmt.setDouble(1, num);
 pstmt.setInt(2, idnum);
 int k=pstmt.executeUpdate();
 return k;
 }
 public static int testpassword() throws Exception
 {
 System.out.println("input your id number:");
 Scanner cin=new Scanner(System.in); 
 int idnum=cin.nextInt();
 System.out.println("input your password:");
 String password = cin.next();
 Connection conn=JdbcUtil.getConn();
 String sql="select * from user where id=? and password=?";
 
 Object[] params = {idnum,password,};
 
 QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
 Object[] obj = qr.query(conn, sql, new ArrayHandler(),params);
 
 if(obj.length>0)
 {
 return idnum;
 }
 else
 {
 System.out.println("wrong message!");
 return -1;
 }
 
 }
 
 public static void openAnAccount() throws Exception
 {
 Scanner cin=new Scanner(System.in); 
 
 System.out.println("input your name:");
 String name=cin.next();
 String password;
 String passwordagain;
 
 while(true)
 {
 System.out.println("input your password:");
 password=cin.next();
 
 System.out.println("input your password again:");
 passwordagain=cin.next();
 
 if(password.equals(passwordagain))
 {
 break;
 }
 else
 {
 System.out.println("different password, please input again!");
 }
 }
 Connection conn=JdbcUtil.getConn();
 
 PreparedStatement pstmt = conn.prepareStatement("select * from maxid");
 //String sql="select max(id) from user";
 ResultSet rs=pstmt.executeQuery();
 
 rs.next();
 
 //rs.getObject(1);
 int id=rs.getInt(1)+1;
 pstmt = conn.prepareStatement("update maxid set id=id+1");
 pstmt.executeUpdate();
 //String strmaxid=rs.getString(1);
 //System.out.println(id);
 
 //sql="insert into user values(%d,%s,%s)";
 pstmt = conn.prepareStatement("insert into user values(?,?,?)");
 
 pstmt.setInt(1, id);
 pstmt.setString(2, name);//System.out.println("again!");
 pstmt.setString(3, password);
 
 int k = pstmt.executeUpdate();
 pstmt = conn.prepareStatement("insert into balance values(?,?)");
 
 pstmt.setInt(1, id);
 pstmt.setDouble(2, 0);
 
 int l = pstmt.executeUpdate();
 
 //System.out.println("dif");
 DecimalFormat df=new DecimalFormat("0000000000");
 if(k!=0&&l!=0)
 System.out.println("create the account successfully,your id is "+df.format(id));
 //15246785055
 k=writeoperator("enroll",-1,id,0);
// pstmt = conn.prepareStatement("insert into operator values(?,?,?,?,?)");
// pstmt.setInt(1, 0);
// pstmt.setString(2, "enroll");//System.out.println("again!");
// pstmt.setInt(3, 0);
// pstmt.setString(4, String.valueOf(id));//System.out.println("again!");
// pstmt.setString(5, "");//System.out.println("again!");
// k=pstmt.executeUpdate();
 if(k==1)
 System.out.println("success again");
 else
 System.out.println("TAT");
 }
 
 
 public static void showbalance() throws Exception
 {
 System.out.println("input your id number:");
 Scanner cin=new Scanner(System.in); 
 int idnum=cin.nextInt();
 //System.out.println(idnum);
 System.out.println("input your password:");
 String password = cin.next();
 
 Connection conn=JdbcUtil.getConn();
 String sql="select * from user where id=? and password=?";
 
 Object[] params = {idnum,password,};
 
 QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
 
 
 Object[] obj = qr.query(conn, sql, new ArrayHandler(),params);
 //System.out.println("2w2w");
 //String id=obj[0].toString();
 if(obj.length>0)
 {
 //System.out.println("-----");
 System.out.println(obj[1]+" : 你好!");
 }
 else
 {
 System.out.println("wrong message!");
 return;
 }
 int k=writeoperator("login",-1,idnum,0);
// PreparedStatement pstmt ;
// pstmt = conn.prepareStatement("insert into operator values(?,?,?,?,?)");
// pstmt.setInt(1, 0);
// pstmt.setString(2, "login");//System.out.println("again!");
// pstmt.setInt(3, 0);
// pstmt.setString(4, String.valueOf(id));//System.out.println("again!");
// pstmt.setString(5, "");//System.out.println("again!");
// int k=pstmt.executeUpdate();
 if(k==1)
 System.out.println("success again");
 else
 System.out.println("TAT");
 
 getbalance(idnum);
 
// sql="select * from balance where id=?;";
// Object[] params2 = {idnum};
// qr = new QueryRunner(JdbcUtil2.getDataSource());
// obj = qr.query(conn, sql, new ArrayHandler(),params2);
//
// if(obj.length>0)
// System.out.println(obj[1]);
// else
// System.out.println("error");
 
 }
 
 public static void saving() throws Exception
 {
 Scanner cin=new Scanner(System.in); 
 int idnum=testpassword();
 if(idnum==-1)
 {
 System.out.println("wrong message!");
 return;
 }
 else
 {
 System.out.println("input saving number:");
 double accountnum=cin.nextDouble();
 System.out.println("before saving, your balance is "+getbalance(idnum)+"¥");
 updatebalance(accountnum,idnum);
 writeoperator("saving",accountnum,idnum,0);
 System.out.println("after saving, your balance is "+getbalance(idnum)+"¥");
 } 
 }
 
 public static void withdrawal() throws Exception
 {
 Scanner cin=new Scanner(System.in); 
 int idnum=testpassword();
 if(idnum==-1)
 {
 System.out.println("wrong message!");
 return;
 }
 else
 {
 System.out.println("input withdrawal number:");
 double accountnum=cin.nextDouble();
 int flag=testmoneyenough(idnum,accountnum);
 if(flag>0)
 {
 System.out.println("before withdrawal, your balance is "+getbalance(idnum)+"¥");
 updatebalance(accountnum*(-1),idnum);
 writeoperator("withdrawal",accountnum,idnum,0);
 System.out.println("after withdrawal, your balance is "+getbalance(idnum)+"¥");
 }
 else
 return;
 }
 }
 
 public static void transfer() throws Exception
 {
 Scanner cin=new Scanner(System.in);
 int idnum=testpassword();
 if(idnum>0)
 {
 System.out.println("which evil will deprive your little money?");
 int toidnum=cin.nextInt();
 System.out.println("And how much?");
 double accountnum=cin.nextInt();
 int flag=testmoneyenough(idnum,accountnum);
 if(flag>0)
 {
 System.out.println("before transfer, your balance is "+getbalance(idnum)+"¥");
 Connection conn=JdbcUtil.getConn();
 conn.setAutoCommit(false);
 String sql1 = "update balance set balance=balance-? where id=?";
 String sql2 = "update balance set balance=balance+? where id=?";
 PreparedStatement pstmt = conn.prepareStatement(sql1);
 pstmt.setDouble(1,accountnum);
 pstmt.setInt(2,idnum);
 pstmt.executeUpdate();
 pstmt = conn.prepareStatement(sql2);
 pstmt.setDouble(1,accountnum);
 pstmt.setInt(2,toidnum);
 pstmt.executeUpdate();
 conn.commit();
 writeoperator("transfer",accountnum,idnum,toidnum);
 
 System.out.println("after transfer, your balance is "+getbalance(idnum)+"¥");
 }
 else
 return;
 }
 else
 return;
 }
 
 public static void seekdetails() throws Exception
 {
 int idnum=testpassword();
 writeoperator("seek",0,idnum,0);
 if(idnum>0)
 {
 Connection conn=JdbcUtil.getConn();
 
 String sql = "select * from operator where fromid=?;";
 PreparedStatement pstmt = conn.prepareStatement(sql);
 pstmt.setInt(1,idnum);
 ResultSet rs = pstmt.executeQuery();
 while(rs.next())
 {
 System.out.println(rs.getInt(1)+" "+rs.getString(2));
 }
 }
 else
 {
 return;
 }
 }
 
 public static void logoff() throws Exception
 {
 int idnum=testpassword();
 if(idnum>0)
 {
 System.out.println("are you sure?(Y/N)");
 Scanner cin=new Scanner(System.in);
 String s=cin.next();
 if(s.equals("Y"))
 {
 Connection conn=JdbcUtil.getConn();
 
 String sql = "delete from user where id=?;";
 PreparedStatement pstmt = conn.prepareStatement(sql);
 pstmt.setInt(1,idnum);
 int k=pstmt.executeUpdate();
 
 sql = "delete from balance where id=?;";
 pstmt = conn.prepareStatement(sql);
 pstmt.setInt(1,idnum);
 int l=pstmt.executeUpdate();
 if(k>0&&l>0)
 {
 writeoperator("delete",0,idnum,0);
 System.out.println("delete successfully!");
 }
 else
 {
 System.out.println("there must be something wrong!");
 }
 }
 else
 {
 return;
 }
 }
 else
 {
 return;
 }
 }
 
 public static void main(String[] args) throws Exception {
 // TODO Auto-generated method stub
 Scanner cin=new Scanner(System.in);
 int flag=0;
 while(true)
 {
 System.out.println("--欢迎使用并没有钱的银行系统!--\n"
 + "(1):开户\n"
 + "(2):显示余额\n"
 + "(3):存钱\n"
 + "(4):取钱\n"
 + "(5):转账\n"
 + "(6):明细查询\n"
 + "(7):注销\n"
 + "(0):退出\n"
 + "请输入你的操作:\n");
 
 int i=cin.nextInt();
 switch(i)
 {
 case 1 :
 {
 openAnAccount();
 break;
 }
 case 2 :
 {
 showbalance();
 break;
 }
 case 3 :
 {
 saving();
 break;
 }
 case 4 :
 {
 withdrawal();
 break;
 }
 case 5 :
 {
 transfer();
 break;
 }
 case 6 :
 {
 seekdetails();
 break;
 }
 case 7 :
 {
 logoff();
 break;
 }
 case 0:
 {
 System.out.println("欢迎下次使用!");
 flag=1;
 break;
 }
 default:
 {
 System.out.println("输入错误,请重试!");
 }
 }
 if(flag==1)
 break;
 
 }
 cin.close();
 }
 
}

JdbcUtil.java:

package mybank;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;
 
/*
 * 为了提高代码复用性,进行简单的封装
 * */
public class JdbcUtil {
 /*public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
 public static final String URL = "jdbc:mysql:///test";
 public static final String USER = "root";
 public static final String PASSWORD = "123456";*/
 
/* public static String driver;
 public static String url;
 public static String user;
 public static String password;
 */
 //加载配置文件
 public static Properties ps = null;
 static{
 ps = new Properties();
 Reader r = null;
 try {
 r = new FileReader("src/db.properties");
 } catch (FileNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 try {
 ps.load(r);
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 
 //driver = ps.getProperty(driver);
 }
 
 static{
 try {
 Class.forName(ps.getProperty("driver"));
 } catch (ClassNotFoundException e) {
 System.out.println("注册驱动失败。。");
 e.printStackTrace();
 }
 }
 /*static{
 try {
 Class.forName(DRIVERNAME);
 } catch (ClassNotFoundException e) {
 System.out.println("注册驱动失败。。");
 e.printStackTrace();
 }
 }*/
 
 //提供获取连接对象的方法
 public static Connection getConn(){
 Connection conn = null;
 try {
 conn = DriverManager.getConnection(ps.getProperty("url"), ps.getProperty("user"), ps.getProperty("password"));
 } catch (SQLException e) {
 System.out.println("获取连接失败。");
 e.printStackTrace();
 }
 return conn;
 }
 
 //提供一个专门执行dml语句的方法
 public static int executeUDI(String sql,Object[] params) throws Exception{
 Connection conn = getConn();
 PreparedStatement pstmt = conn.prepareStatement(sql);
 for(int i=0;params!=null&&i<params.length;i++){
 pstmt.setObject(i+1, params[i]);
 }
 return pstmt.executeUpdate();
 }
 
 //提供一个转么执行select语句的方法,返回对象集合
 public static ArrayList executeQuery(String sql,Object[] params){
 //....
 return null;
 }
}

JdbcUtil2.java:

package mybank;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Properties;
 
import javax.sql.DataSource;
 
import org.apache.commons.dbcp2.BasicDataSource;
 
 
 
public class JdbcUtil2 {
 //加载配置文件
 public static Properties ps = null;
 static{
 ps = new Properties();
 Reader r = null;
 try {
 r = new FileReader("src/db.properties");
 } catch (FileNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 try {
 ps.load(r);
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 
 //driver = ps.getProperty(driver);
 }
 
 /*
 * 创建连接池
 * */
 public static BasicDataSource dataSource = new BasicDataSource();
 /*
 * 对连接池进行配置,基本配置
 * */
 static{
 dataSource.setDriverClassName(ps.getProperty("driver"));
 dataSource.setUrl(ps.getProperty("url"));
 dataSource.setUsername(ps.getProperty("user"));
 dataSource.setPassword(ps.getProperty("password"));
 }
 
 /*
 * 返回连接对象
 * */
 public static DataSource getDataSource(){
 return dataSource;
 }
}

db.properties:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/scsxbank?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
user=root
password=xxx

关于管理系统的更多内容请点击《管理系统专题》进行学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼。

《java+mysql模拟实现银行系统.doc》

下载本文的Word格式文档,以方便收藏与打印。