1. 程式人生 > 程式設計 >java+mysql模擬實現銀行系統

java+mysql模擬實現銀行系統

類比電子銀行,開戶,存錢,取錢,查詢使用者資訊,修改使用者資訊,查詢餘額,查詢明細,登出,退出,等等

基本實現了相關功能。但是規定每次需要重新登入,還是很麻煩的。

另外使用者登出時候,沒有規定刪除operator表中資訊,此處會有問題。但想了半天覺得現實中這部分資訊需要保留一段時間,不應該刪除。orz

資料庫設計:

java+mysql模擬實現銀行系統

java+mysql模擬實現銀行系統

java+mysql模擬實現銀行系統

java+mysql模擬實現銀行系統

java+mysql模擬實現銀行系統

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,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(?,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,};
 
 QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
 
 
 Object[] obj = qr.query(conn,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",idnum,0);
// PreparedStatement pstmt ;
// pstmt = conn.prepareStatement("insert into operator values(?,"login");//System.out.println("again!");
// pstmt.setInt(3,"");//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,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,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",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,toidnum);
 pstmt.executeUpdate();
 conn.commit();
 writeoperator("transfer",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);
 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);
 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

關於管理系統的更多內容請點選《管理系統專題》進行學習

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。