java+mysql模擬實現(xiàn)銀行系統(tǒng)
模擬電子銀行,開戶,存錢,取錢,查詢用戶信息,修改用戶信息,查詢余額,查詢明細(xì),注銷,退出,等等
基本實現(xiàn)了相關(guān)功能。但是規(guī)定每次需要重新登錄,還是很麻煩的。
另外用戶注銷時候,沒有規(guī)定刪除operator表中信息,此處會有問題。但想了半天覺得現(xiàn)實中這部分信息需要保留一段時間,不應(yīng)該刪除。orz
數(shù)據(jù)庫設(shè)計:
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());//轉(zhuǎn)換成正常的日期格式 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("--歡迎使用并沒有錢的銀行系統(tǒng)!--\n" + "(1):開戶\n" + "(2):顯示余額\n" + "(3):存錢\n" + "(4):取錢\n" + "(5):轉(zhuǎn)賬\n" + "(6):明細(xì)查詢\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; /* * 為了提高代碼復(fù)用性,進行簡單的封裝 * */ 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("注冊驅(qū)動失敗。。"); e.printStackTrace(); } } /*static{ try { Class.forName(DRIVERNAME); } catch (ClassNotFoundException e) { System.out.println("注冊驅(qū)動失敗。。"); 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; } //提供一個專門執(zhí)行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(); } //提供一個轉(zhuǎn)么執(zhí)行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); } /* * 創(chuàng)建連接池 * */ 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
關(guān)于管理系統(tǒng)的更多內(nèi)容請點擊《管理系統(tǒng)專題》進行學(xué)習(xí)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用釘釘創(chuàng)建企業(yè)內(nèi)部機器人的實現(xiàn)
釘釘?shù)某霈F(xiàn)為企業(yè)節(jié)約了大量人力成本,其中也開放了大量的外部api接口方便企業(yè)使用。本文主要介紹了Java使用釘釘創(chuàng)建企業(yè)內(nèi)部機器人的實現(xiàn),感興趣的可以了解一下2021-11-11Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個結(jié)點開始,都可以很方便地訪問它的前驅(qū)結(jié)點和后繼結(jié)點。本文將為大家詳細(xì)介紹雙向鏈表的特點與使用,需要的可以參考一下2021-12-12Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之棧和隊列
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之棧和隊列,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有一定的幫助,需要的朋友可以參考下2021-05-05springBoot 過濾器去除請求參數(shù)前后空格實例詳解
這篇文章主要為大家介紹了springBoot 過濾器去除請求參數(shù)前后空格實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11java.lang.OutOfMemoryError: Metaspace異常解決的方法
這篇文章主要介紹了java.lang.OutOfMemoryError: Metaspace異常解決的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03