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

