1. 程式人生 > >JDBC專案實戰,使用Java和MySQL實現銀行ATM系統

JDBC專案實戰,使用Java和MySQL實現銀行ATM系統

JDBC 資料庫階段性專案:ATM系統

需求分析

一、ATM機

1、要求使用插卡(這裡使用卡號)和密碼登入ATM系統;

2、能夠根據使用者賬戶的凍結狀態判斷使用者是否能夠進入系統並給出提示;

3、使用者進入系統後可以檢視其賬戶所有資訊;

4、使用者可以存取款與轉賬;

5、使用者可以更改自己的密碼;

6、退卡(登出);

二、管理端

1、登入前同樣進行輸入判斷,輸錯三次密碼則刪除管理員;

2、要求可以查詢所有的使用者資訊,可以根據使用者提供的卡號查詢;最後可以查詢ATM機的餘額並選擇是否新增餘額;

3、要求可以為使用者開戶,根據使用者提供的姓名,密碼與金額,隨機生成一個六位數卡號進行開戶;

4、要求可以後臺更改使用者的狀態,也可以為使用者修改密碼,還可以更改管理員自己的密碼;

5、可以對存在的使用者進行銷戶操作;

6、退出;

詳細設計

一、ATM機

在這裡插入圖片描述

三張表

使用者表

user_card user_password user_name user_money user_action
使用者卡號 使用者密碼 使用者姓名 使用者餘額 使用者狀態

ATM餘額表

ATM_money ID

管理員表

admin_id admin_password admin_action
管理員卡號 管理員密碼 管理員狀態

被刪除的管理員表(公司炒掉員工還是會有記錄的吧)

admin
管理員卡號

二、管理端
在這裡插入圖片描述

終端機功能模組

賬戶認證

1、判斷卡號和密碼是否正確

2、判斷賬戶是否凍結

3、判斷輸入型別是否出錯

4、密碼錯誤三次凍結該賬戶

賬戶資訊查詢

1、查詢使用者資訊:卡號,姓名,餘額,狀態

取款功能

取款:

(1)請輸入取款金額:XXXXX

(2)判斷取款額度是否小於ATM額度

(3)判斷取款是否小於銀行卡餘額

(4)判斷取款是否小於ATM餘額

(5)取款成功

(6)是否列印憑條

(7)返回上一級

存款功能

存款:

(1)請輸入存款金額:XXXXX

(2)判斷存款額度是否小於ATM額度

(3)存款成功!

(4)是否列印憑條

(5)返回上一級

轉賬功能

轉賬:

(1)請輸入轉賬卡號:XXXXXX

(2)判斷卡號型別是否有誤

(3)判斷是否存在該卡號

(4)判斷是否為相同賬戶

(5)列印對方賬號資訊,等待確認轉賬

(6)確認賬號資訊

(7)請輸入轉賬金額:XXXXXX

(8)判斷金額輸入型別是否有誤

(9)判斷金額是否大於0

(10)轉賬請輸入密碼

(11)判斷密碼型別

(12)判斷密碼是否正確

(13)判斷對方賬戶是否凍結

(14)轉賬成功

(15)是否列印憑條、是否繼續轉賬

(16)返回上一級

修改密碼功能

修改密碼:

(1)請輸入舊密碼:XXXXXX

(2)判斷舊密碼是否正確

(3)請輸入新密碼:XXXXXX

(4)判斷密碼型別輸入是否出錯

(5)判斷密碼是否超過六位或不足六位

(6)請再次輸入新密碼:XXXXXX

(7)判斷兩次密碼輸入是否相同

(8)修改成功

(9)返回上一級

登出功能

登出之後,根據使用者輸入判斷是否繼續使用系統

管理端

賬戶認證

使用者認證

1、判斷賬號和密碼是否正確

2、判斷輸入型別是否出錯

3、密碼錯誤三次刪除賬號

賬戶資訊總覽

1、查詢:

(1)、查詢除密碼外所有使用者資訊

(2)、根據卡號查詢使用者資訊

(3)、查詢ATM餘額

2、查詢ATM餘額

(1)、是否增加ATM餘額

(2)、退出

使用者開戶及增加管理員

使用者開戶及增加管理員:

(1)、使用者開戶

(2)、增加管理員

(3)、返回上一級

1、使用者開戶:(賀程)

(1)、請輸入姓名:XXXX

(2)、請輸入密碼:XXXXXX

(3)、判斷密碼型別輸入是否有誤

(4)、判斷密碼是否為六位

(5)、請輸入儲存金額:XXXX

(6)、判斷金額是否大於0

(7)、開戶成功,是否列印憑條

(8)、返回上一級

2、增加管理員:

(1)、請輸入賬號:XXXX

(2)、請輸入密碼:XXXXXX

(3)、判斷密碼型別輸入是否有誤

(4)、判斷密碼是否為六位

(5)、增加成功

(6)、返回上一級

修改使用者資訊及管理員密碼

修改使用者及管理密碼:

(1)修改使用者密碼

(2)修改使用者狀態

(3)修改管理員密碼

銷戶

銷戶:

(1)請輸入需要銷戶的卡號:XXXXXX

(2)判斷卡號型別是否有誤

(3)判斷是否存在該卡號

(4)請輸入密碼:XXXXXX

(5)判斷密碼輸入型別是否有誤

(6)銷戶成功

(7)返回上一級

登出功能

登出之後,根據使用者輸入判斷是否繼續使用系統

伺服器端

存錢儲存過程,取錢儲存過程,開戶儲存過程,ATM存/取錢儲存過程,修改管理員密碼儲存過程,增加管理員過程,銷戶儲存過程。

具體實現

首先我們需要引入一個MySQL的jar包,我的是 mysql-connector-java-5.1.40-bin.jar,下面提供jar包連結與MySQL navcat 12版本的破解下載,要拿的留個言,謝謝

這裡就預設大家都會MySQL了,如果不會,請參考我前面的章節,MySQL快速開始
然後,把我前面說的幾個必要的表都建立好久萬事俱備了

使用者表錄入資料
在這裡插入圖片描述

管理員表錄入資料
在這裡插入圖片描述

ATM餘額表錄入資料
在這裡插入圖片描述

被刪除的管理員表
在這裡插入圖片描述

下面我們進入程式碼

一、我們先建立資料庫中需要用到的儲存過程

1、轉賬儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `bank_acounts`(in one int,in two int,in money int) //這裡的 DEFINER=`all`@`%`是給哪一個使用者建立,大家可以改成自己的使用者,或者不寫,預設為root賬戶
BEGIN

	declare one_action int default 0;//轉出方使用者狀態

	declare two_action int default 0;//轉入方使用者狀態

	declare one_id int default 0;//轉出方使用者卡號

	declare two_id int default 0;//轉入方使用者卡號

	declare m int default 0;//轉出方使用者剩餘金額

	declare continue handler for SQLEXCEPTION ROLLBACK;

	start transaction;

	SELECT user_card into one_id from user where user_card = one;

	SELECT user_card into two_id from user where user_card = two;

	if(one_id = two_id)

	then

	SELECT "相同賬戶不能轉賬";

	else 

		SELECT user_action into two_action from user where user_card = two;

		if(two_action = 1)

		then

			SELECT user_money into m from user where user_card = one;

			if(m-money>0)

			then

				update user set user_money = m-money where user_card = one;

				SELECT user_money into m from user where user_card = two;

				update user set user_money = m+money where user_card = two;

				SELECT "轉賬成功";

			else

				SELECT "對不起,您的賬戶餘額不足";

			END if;

		else

			SELECT "對方的賬戶被凍結";

		end if;

		COMMIT;

	end if;

END

2、使用者存款儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `save`(in u_card int,in s_money int,out rs varchar(128))
begin

declare atm_lit int default 10000;

declare exist_money int default 0;

declare exit handler for sqlexception rollback;



if (s_money <= atm_lit && s_money%100=0)

then

select atm_money into exist_money from atm where atm_id = 1;

if(s_money+exist_money<=1000000) 

then

update user set user_money = user_money + s_money where user_card = u_card;

update atm set atm_money = atm_money + s_money where atm_id = 1;

set rs = '存款成功';

select rs;

else 

set rs = '超過ATM容納量';

end if;

elseif(s_money%100 != 0)

then

set rs = '存款只能存100倍數的現金';

select rs;

else

set rs = '存款金額大於存款額度';

select rs;

end if;

commit;

end

3、使用者取款

CREATE DEFINER=`all`@`%` PROCEDURE `user_remove`(in u_card int,in u_money int,out print varchar(128))
begin

declare atm_lit int default 10000;
declare a int default 0;
declare b int default 0;

set @a = (select user_money from user where user_card = u_card);
set @b = (select atm_money from atm where atm_id = 1);
if(u_money>0) then
if(u_money%100=0) then
if(u_money>atm_lit) then 
  set  print = '取款額度超額,請輸入10000元以下';
  select print;
else if(u_money>@a) then
  set print = '銀行卡餘額不足';
  select print;  
else if(u_money>@b) then
  set print = 'ATM機餘額不足';
  select print;  
else 
  update user set [email protected]_money where user_card = u_card;
  update atm set [email protected]_money where atm_id = 1;
  set print = '取款成功';
  select print;
end if;
end if;
end if;
else
set print = '請取出100的整數';
select print;
end if;
else
set print = '輸入不正確,不能輸入負數';
select print;
end if;

end

4、管理員修改密碼儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `changeadminpwd`(in passwd int,in id varchar(128) )
begin
update admin set admin_password=passwd where admin_id= id;
end

5、增加管理員儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `insert_admin`(in admin_id varchar(128),in pass int)
BEGIN
	insert into admin values(admin_id,pass);
END

6、使用者開戶儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `insert_user`(in user_card int,in user_password int,in user_name varchar(128),in user_money int,in user_action int)
begin
	insert into user values(user_card,user_password,user_name,user_money,user_action);
end

7、使用者銷戶儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `user_delete`(in u_card int, out print varchar(128))
begin
declare exit handler for sqlexception rollback;
start transaction;
delete from user where user_card = u_card;
set print = '刪除賬戶成功';
select print;
commit;
end

8、放錢到ATM的儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `increase_m`(in money int,out rs varchar(128))
begin 

declare all_money int default 0;

declare exist_money int default 0;

declare continue handler for SQLEXCEPTION ROLLBACK;

start transaction;

select atm_money into exist_money from atm where atm_id=1;

set all_money = money + exist_money;
if money>0 then

if all_money > 1000000 then

set rs ='總現金超過容納量';

select rs;

else

update atm set atm_money=all_money where atm_id=1;

set rs='存入成功';

select rs;
end if;
else 
set rs = '金額不能小於0';

end if;

commit;

end

9、從ATM退錢的儲存過程

CREATE DEFINER=`all`@`%` PROCEDURE `decrease_m`(in money int,out rs varchar(128))
begin 
declare exist_money int default 0;
declare all_money int default 0;
declare continue handler for SQLEXCEPTION ROLLBACK;
start transaction;
select atm_money into exist_money from atm where atm_id =1;
if money>0 then
if exist_money>=money  then
set all_money=exist_money-money;
update atm set atm_money=all_money where atm_id=1;
set rs = '退錢成功';
select rs;
else
set rs= 'ATM記憶體款不足';
select rs;
end if;
else 
set rs = '金額不能小於0';
end if;
commit;
end

二、下面我們開始寫Java程式碼

我們將之前下載的 mysql-connector-java-5.1.40-bin.jar 匯入eclipse中
1、資料庫連線類

這是最原生的連線資料庫的方法,為了初學者都能看懂,這裡就不寫db.properties的配置檔案了,會的同學可以寫
package com.jdbc.bank;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import com.mysql.jdbc.exceptions.jdbc4.CommunicationsException;

public class JdbcConn {
	//註冊驅動
	private static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
	//資料庫連線
	private static Connection conn = null;
	
	static {
		try {
		//載入驅動類
			Class.forName(JDBC_DRIVER).newInstance();
		} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection(String ip) throws SQLException{
		//資料庫地址,這裡我們動態傳入資料庫的ip地址,使用者名稱與密碼寫大家自己資料庫的使用者名稱和密碼
		conn = DriverManager.getConnection("jdbc:mysql://"+ip+":3306/bank?user=all&password=123456&useUnicode=true&characterEncoding=utf8");
		return conn;//返回連線
	}
}

2、Atm終端類

package com.jdbc.bank;

import java.sql.*;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;

import static java.lang.Thread.sleep;

public class Atm {
	public static int user_card;
	public static boolean old_pass;
	public Atm() {
	}

	// 使用者認證
	public static boolean login(Connection conn) {//傳入Connection連結連線資料庫
		while (true) {
			boolean card = false;
			boolean password = false;
			boolean flag = false;
			try {
				Scanner console = new Scanner(System.in);
				System.out.println("請輸入您的卡號:");
				while (true) {
                    try {
                    	user_card = console.nextInt();
                    } catch (InputMismatchException e) {
                        System.out.print("請輸入正確型別的六位卡號:");//判斷卡號輸入型別
                        String input = console.next();
                        Pattern pattern = Pattern.compile("[0-9]*");
                        boolean digit =  pattern.matcher(input).matches();
                        if (digit) {
                            break;
                        }else continue;
                    }
                    break;
                }
				
				Statement stmt = conn.createStatement();
				stmt.execute("select * from user");//卡號型別輸入正確後去資料庫查詢卡號
				ResultSet rs = stmt.getResultSet();
				while (rs.next()) {
					if (user_card == rs.getInt(1)) {
						card = true;//卡號正確,card值為true
						break;
					} else {
						card = false;
					}
				}
				if (card == true) {
					int count = 3;//密碼輸入次數
					while (true) {
						System.out.println("請輸入您的密碼:");
						stmt.execute("select * from user where user_card = '" + user_card + "'");//卡號正確後去資料庫查詢卡號對應的密碼
						rs = stmt.getResultSet();
						int user_password = 0;
						while (true) {
		                    try {
		                    	user_password = console.nextInt();
		                    } catch (InputMismatchException e) {//判斷密碼輸入型別
		                        System.out.print("請輸入正確型別的六位密碼:");
		                        String input = console.next();
		                        Pattern pattern = Pattern.compile("[0-9]*");
		                        boolean digit =  pattern.matcher(input).matches();
		                        if (digit) {
		                            break;
		                        }else continue;
		                    }
		                    break;
		                }
						while (rs.next()) {
							if (user_password == rs.getInt(2)) {
								password = true;//密碼輸入正確,password值為true
								stmt.execute("select user_action from user where user_card = '" + user_card + "'");
								rs = stmt.getResultSet();
								while (rs.next()) {
									if (rs.getInt(1) == 1) {//判斷使用者狀態是否為凍結
										flag = true;
										break;
									} else {
										System.out.println("您的賬戶已被凍結");
										System.out.println();
									}
								}
								break;
							} else {
								password = false;
							}
							break;
						}
						if (count == 1 && password == false) {//輸入密碼錯誤三次,使用者凍結
							stmt.execute("update user set user_action = 0 where user_card = '" + user_card + "'");
							System.out.println("輸入密碼錯誤超過三次,您的賬戶已被凍結,滾吧");
							break;
						}
						if (password == false) {
							System.out.println("密碼錯誤,請重新輸入");
							count--;
							System.out.println("剩餘輸入次數:" + count);
							continue;
						}
						break;
					}
				} else {
					System.out.println("卡號錯誤");
					continue;
				}

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return flag;
		}
	}

	// 終端選單
	public static void menu1() {
		System.out.println("*--------澳門ATM--------");
		System.out.println("*      1、查詢使用者資訊             ");
		System.out.println("*      2、性感荷官線上存款     ");
		System.out.println("*      3、勁爆提現                    ");
		System.out.println("*      4、轉賬                            ");
		System.out.println("*      5、修改密碼                    ");
		System.out.println("*      6、退卡                            ");
		System.out.println("*--------版本 1.0.0-------");
		System.out.println("請根據選單序號進行操作:");
	}

	// 查詢使用者資訊與餘額
	public static void select(Connection conn) {
		while (true) {
			try {
				Scanner console = new Scanner(System.in);
				Statement statement = conn.createStatement();

				statement.execute("select * from user where user_card = " + user_card);

				ResultSet rs = statement.getResultSet();
				System.out.println("正在查詢......");
				Thread.currentThread().sleep(1000);
				rs.next();
				System.out.println("查詢成功!");
				String user_action;
				if(rs.getInt(5)==1){
					user_action = "正常";
				}else{
					user_action = "凍結";
				}
				System.out.println("卡號:" + rs.getInt(1) + "   姓名:" + rs.getString(3) + "   餘額:" + rs.getInt(4)
						+ "   賬戶狀態:" + user_action);
				System.out.println();
				System.out.println("是否繼續查詢?Y/任意鍵退出");
				String str = console.next();
				if (str.toUpperCase().equals("Y")){
					continue;
				}else{
					System.out.println("正在退出查詢系統......");
					sleep(1000);
					break;
				}

			} catch (SQLException | InterruptedException e) {
				// TODO 自動生成的 catch 塊
				e.printStackTrace();
			}
		}
	}

	// 存款
	public static void save(Connection conn) {
		int count = 3;//輸入金額次數
		while (true) {
			try {
				System.out.println("請輸入存錢金額: ");
				Scanner sc = new Scanner(System.in);
				int money = 0;
				while (true) {
                    try {
                    	money= sc.nextInt();
                    } catch (InputMismatchException e) {//判斷輸入金額型別
                        System.out.print("請輸入正確的數字金額:");
                        String input = sc.next();
                        Pattern pattern = Pattern.compile("[0-9]*");
                        boolean digit =  pattern.matcher(input).matches();
                        if (digit) {
                            break;
                        }else continue;
                    }
                    break;
                }
				
				if (money < 0) {
					if (count != 0) {
						count--;
						System.out.println("存款不能小於零!再搗亂" + count + "次退出存款系統");
						continue;
					} else {
						System.out.println("正在退出存款系統.....");
						Thread.currentThread().sleep(1000);
						break;
					}
				} else {
					CallableStatement cs = conn.prepareCall("{call save(?,?,?)}");//呼叫存款儲存過程
					cs.setInt(1, user_card);
					cs.setInt(2, money);
					cs.execute();
					System.out.println("正在存款......");
					Thread.currentThread().sleep(1000);
					String res = cs.getString(3);
					if (res.equals("存款成功")) {
						Scanner console = new Scanner(System.in);
						System.out.println("存款成功,是否列印憑條Y/任意鍵退出");//列印憑條即列印使用者資訊
						String in = console.next();
						if (in.toUpperCase().equals("Y")) {
							System.out.println("正在列印憑條......");
							Thread.currentThread().sleep(1000);
							Statement stmt = conn.createStatement();
							stmt.execute("select user_money from user where user_card = '" + user_card + "'");
							ResultSet rs = stmt.getResultSet();
							rs.next();
							System.out.println("此次存入金額:" + money);
							System.out.println("賬戶餘額:" + rs.getInt(1));
							System.out.println();
							System.out.println("是否繼續存款:Y/任意鍵退出 ?");
							String in_in_yn = console.next();
							if (in_in_yn.toUpperCase().equals("Y")) {
								continue;
							} else {
								System.out.println("正在退出存款系統......");
								Thread.currentThread().sleep(1000);
								break;
							}
						} else {
							System.out.println();
							System.out.println("是否繼續存款:Y/任意鍵退出 ?");
							String in_in_yn = console.next();
							if (in_in_yn.toUpperCase().equals("Y")) {
								continue;
							} else {
								System.out.println("正在退出存款系統......");
								Thread.currentThread().sleep(1000);
								break;
							}
						}
					} else {
						Scanner console = new Scanner(System.in);
						System.out.println(res);
						System.out.println();
						System.out.println("是否繼續存款:Y/任意鍵退出 ?");
						String in_in_yn = console.next();
						if (in_in_yn.toUpperCase().equals("Y")) {
							continue;
						} else {
							System.out.println("正在退出存款系統......");
							Thread.currentThread().sleep(1000);
							break;
						}
					}
				}

			} catch (SQLException | InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	// 取款
	public static void remove(Connection conn) {
		while (true) {
			try {
				System.out.println("請輸入取款金額");
				Scanner sc = new Scanner(System.in);
				int money = 0;
				while (true) {
                    try {
                    	money= sc.nextInt();
                    } catch (InputMismatchException e) {//判斷金額輸入型別
                        System.out.print("請輸入正確的數字金額:");
                        String input = sc.next();
                        Pattern pattern = Pattern.compile("[0-9]*");
                        boolean digit =  pattern.matcher(input).matches();
                        if (digit) {
                            break;
                        }else continue;
                    }
                    break;
                }
				CallableStatement cs = conn.prepareCall("{call user_remove(?,?,?)}");//呼叫取款儲存過程
				cs.setInt(1, user_card);
				cs.setInt(2, money);
				cs.execute();
				System.out.println("正在取款......");
				Thread.currentThread().sleep(1000);
				String res = cs.getString(3);
				if (res.equals("取款成功")) {
					Scanner console = new Scanner(System.in);
					System.out.println("取款成功,是否列印憑條Y/任意鍵退出");
					String in = console.next();
					if (in.toUpperCase().equals("Y")) {//列印憑條
						System.out.println("正在列印憑條......");
						Thread.currentThread().sleep(1000);
						Statement stmt = conn.createStatement();
						stmt.execute("select user_money from user where user_card = '" + user_card + "'");
						ResultSet rs = stmt.getResultSet();
						rs.next();
						System.out.println("此次取款金額:" + money);
						System.out.println("賬戶餘額:" + rs.getInt(1));
						System.out.println();
						System.out.println("是否繼續取款:Y/任意鍵退出 ?");
						String in_in_yn = console.next();
						if (in_in_yn.toUpperCase().equals("Y")) {
							continue;
						} else {
							System.out.println("正在退出取款系統......");
							Thread.currentThread().sleep(1000);
							break;
						}
					} else {
						System.out.println();
						System.out.println("是否繼續取款:Y/任意鍵退出 ?");
						String in_in_yn = console.next();
						if (in_in_yn.toUpperCase().equals("Y")) {
							continue;
						} else {
							System.out.println("正在退出取款系統......");
							Thread.currentThread().sleep(1000);
							break;
						}
					}
				} else {
					System.out.println(res);
					System.out.println();
					System.out.println("是否繼續取款:Y/任意鍵退出 ?");
					Scanner console = new Scanner(System.in);
					String in_in_yn = console.next();
					if (in_in_yn.toUpperCase().equals("Y")) {
						continue;
					} else {
						System.out.println("正在退出取款系統......");
						Thread.currentThread().sleep(1000);
						break;
					}
				}

			} catch (SQLException | InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	// 轉賬
	public static void acounts(Connection conn) {
		while (true) {
			try {
				boolean out_card_flag = false;
				Scanner console = new Scanner(System.in);
				System.out.println("請輸入轉賬的賬號:");
				int out_card = 0;
				while (true) {
                    try {
                    	out_card = console.nextInt();
                    } catch (InputMismatchException e) {//判斷輸入卡號
                        System.out.print("請輸入正確型別的六位數卡號:");
                        String input = console.next();
                        Pattern pattern = Pattern.compile("[0-9]*");
                        boolean digit =  pattern.matcher(input).matches();
                        if (digit) {
                            break;
                        }else continue;
                    }
                    break;
                }
				Statement stmt = conn.createStatement();
				stmt.execute("select * from user");
				ResultSet rs = stmt.getResultSet();
				while (rs.next()) {
					if (out_card == rs.getInt(1)) {
						out_card_flag = true;
						break;
					} else {
						out_card_flag = false;
					}
				}
				if (out_card_flag == true) {
					boolean out_yn = true;
					stmt.execute("select * from user where user_card ="+out_card);
					rs = stmt.getResultSet();
					rs.next();
					System.out.println("正在查詢轉賬賬戶......");
					sleep(1000);
					System.out.println("卡號:"+out_card+"   姓名:"+rs.getString(3));
					System.out.println("是否確認轉賬賬戶?Y/任意鍵重新輸入");
					String in_money = console.next();
					if (!(in_money.toUpperCase().equals("Y"))) {			
						out_yn = false;
					}
					if(out_yn == false){
						System.out.println();
						System.out.println("是否繼續轉賬:Y/任意鍵退出 ?");
						String in_in_yn = console.next();
						if (in_in_yn.toUpperCase().equals("Y")) {
							continue;
						} else {
							System.out.println("正在退出轉賬系統......");
							Thread.currentThread().sleep(1000);
							break;
						}
					}
					
					System.out.println("請輸入轉賬的金額:");
					int out_money = 0;
					while (true) {
	                    try {
	                    	out_money = console.nextInt();
	                    } catch (InputMismatchException e) {//金額輸入型別判斷
	                        System.out.print("請輸入正確的數字金額:");
	                        String input = console.next();
	                        Pattern pattern = Pattern.compile("[0-9]*");
	                        boolean digit =  pattern.matcher(input).matches();
	                        if (digit) {
	                            break;
	                        }else continue;
	                    }
	                    if(out_money>0){
	                    	break;
	                    }else{
	                    	System.out.println("金額必須大於0,請重新輸入:");
	                    	continue;
	                    }
	                }
	
					int count = 3;
					boolean password = false;
					while (true) {//密碼判斷,與登入判斷一致
						System.out.println("請輸入您的密碼:");
						stmt.execute("select * from user where user_card = '" +user_card + "'");
						rs = stmt.getResultSet();
						int user_password = 0;
						while (true) {
		                    try {
		                    	user_password = console.nextInt();
		                    } catch (InputMismatchException e) {
		                        System.out.print("請輸入正確型別的六位密碼:");
		                        String input = console.next();
		                        Pattern pattern = Pattern.compile("[0-9]*");
		                        boolean digit =  pattern.matcher(input).matches();
		                        if (digit) {
		                            break;
		                        }else continue;
		                    }
		                    break;
		                }
						while (rs.next()) {
							if (user_password == rs.getInt(2)) {
								password = true;
								break;
							} else {
								password = false;
							}
							break;
						}
						if (count == 1 && password == false) {
							System.out.println("輸入密碼錯誤超過三次,強制退出轉賬系統......");
							sleep(1000);
							break;
						}
						if (password == false) {
							System.out.println("密碼錯誤,請重新輸入");
							count--;
							System.out.println("剩餘輸入次數:" + count);
							continue;
						}
						break;
					}
					if(password == false){
						System.out.println("正在退出系統......");
						Thread.currentThread().sleep(1000);
						break;
					}
					
	
					CallableStatement cstmt = conn.prepareCall("{call bank_acounts(?,?,?)}");//呼叫轉賬儲存過程
					cstmt.setInt(1, user_card);
					cstmt.setInt(2, out_card);
					cstmt.setInt(3, out_money);
					System.out.println("正在轉賬......");
					Thread.currentThread().sleep(1000);
					cstmt.execute();
					rs = cstmt.getResultSet();
					rs.next();
					System.out.println(rs.getString(1));
					if (rs.getString(1).equals("轉賬成功")) {
						System.out.println("是否列印憑條: Y/任意鍵退出 ?");
						String in_yn = console.next();
						if (in_yn.toUpperCase().equals("Y")) {
							System.out.println("正在列印憑條......");
							Thread.currentThread().sleep(1000);
							System.out.println("轉出賬號:" + user_card + "    轉入賬號:" + out_card + "   轉賬金額: " + out_money);
							System.out.println();
							System.out.println("是否繼續轉賬:Y/任意鍵退出 ?");
							String in_in_yn = console.next();
							if (in_in_yn.toUpperCase().equals("Y")) {
								continue;
							} else {
								System.out.println("正在退出轉賬系統......");
								Thread.currentThread().sleep(1000);
								break;
							}
						} else {
							System.out.println();
							System.out.println("是否繼續轉賬:Y/任意鍵退出 ?");
							String in_in_yn = console.next();
							if (in_in_yn.toUpperCase().equals("Y")) {
								continue;
							} else {
								System.out.println("正在退出轉賬系統......");
								Thread.currentThread().sleep(1000);
								break;
							}
						}
					}else{
						System.out.println();
						System.out.println("是否繼續轉賬:Y/任意鍵退出 ?");
						String in_in_yn = console.next();
						if (in_in_yn.toUpperCase().equals("Y")) {
							continue;
						} else {
							System.out.println("正在退出轉賬系統......");
							Thread.currentThread().sleep(1000);
							break;
						}
					}
				} else {
					System.out.println("查無此人");
					System.out.println("正在重新載入轉賬系統......");
					Thread.currentThread().sleep(2000);
					continue;
				}

			} catch (SQLException | InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	// 修改密碼

    public static void changeUserPassword(Connection conn) {
	//修改密碼需要輸入舊密碼,新密碼與確認新密碼,每個密碼輸錯三次就退出系統
        try {
            Statement st = conn.createStatement();
            boolean b = st.execute("select user_password from user where user_card = " + user_card + "");
            if (b) {
                ResultSet rs2 = st.getResultSet();
                rs2.next();
                int oldPassword = rs2.getInt("user_password");
                boolean flag = true;
                int login_count = 3;//舊密碼次數
                int new_pass_count = 3;//新密碼次數
                int new_one_pass = 3;//確認新密碼次數
                while (flag) {
                    Scanner sc = new Scanner(System.in);
                    System.out.print("輸入6位數字舊密碼 ");
                    int passwd = 0;
                    boolean isDigit = true;
                    while (isDigit) {
                        try {
                            passwd = sc.nextInt();
                        } catch (InputMismatchException e) {
                            System.out.print("請輸入六位數字密碼  ");
                            String input = sc.next();
                            Pattern pattern = Pattern.compile("[0-9]*");
                            boolean digit =  pattern.matcher(input).matches();
                            if (digit) {
                                break;
                            }else continue;
                        }
                        break;
                    }
                    if (oldPassword == passwd) {
                        while (true) {

                            System.out.print("新密碼  ");
                            int newpassword = 0;
                            while (isDigit) {
                                try {
                                    newpassword = sc.nextInt();
                                } catch (InputMismatchException e) {
                                    System.out.print("請輸入六位數字密碼  ");
                                    String input1 = sc.next();
                                    Pattern pattern = Pattern.compile("[0-9]*");
                                    boolean digit =  pattern.matcher(input1).matches();
                                    if (digit) {
                                        break;
                                    }else continue;
                                }
                                break;
                            }
                            int len = Integer.toString(newpassword).length();//密碼位數判斷
                            if (len != 6) {
                                --new_one_pass;
                                System.out.println("密碼位數錯誤,剩餘次數" + new_one_pass);
                                if (new_one_pass == 0) {
                                    System.out.println("密碼輸入次數用完,正在退出...");
                                    try {
                                        sleep(2000);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }

                                    break;
                                }
                                continue;
                            } else {
                                System.out.print("確認新密碼  ");
                                int newpassword2 =0;
                                while (isDigit) {
                                    try {
                                        newpassword2   = sc.nextInt();
                                    } catch (InputMismatchException e) {
                                        System.out.print("請輸入六位數字密碼  ");
                                        String input1 = sc.next();
                                        Pattern pattern = Pattern.compile("[0-9]*");
                                        boolean digit =  pattern.matcher(input1).matches();
                                        if (digit) {
                                            break;
                                        }else continue;
                                    }
                                    break;
                                }
                                if (newpassword == newpassword2) {
                                	System.out.println("正在修改您的密碼......");
                                	sleep(1000);
                                    st.execute("update user set user_password='" + newpassword + "' where user_card = " + user_card + "");
                                    System.out.println("修改成功");
                                    flag = false;
                                    break;
                                } else {
                                    System.out.println("密碼兩次不相同");
                                    --new_pass_count;
                                    if (new_pass_count == 0) {
                                        flag = false;
                                        break;
                                    }
                                    continue;
                                }
                            }
                        }

                    } else {
                        --login_count;
                        if (login_count == 0) {
                            try {
                                System.out.println("舊密碼輸入次數用完,正在退出...");
                                sleep(1000);
                                old_pass = false;
                                
                                break;
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            flag = false;
                        }
                        System.out.println("密碼錯誤,請重新輸入" + "  " + "剩餘次數" + login_count);
                        continue;
                    }
                    break;
                }
            }
        } catch (SQLException | InterruptedException e) {
            e.printStackTrace();
        }

    }
}

3、使用者呼叫Atm介面類

package com.jdbc.bank;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;

import com.mysql.jdbc.exceptions.jdbc4.CommunicationsException;

public class UserStart {
	static Connection conn = null;
	static ResultSet rs = null;

	
	public static void UserBegin(Connection conn){
		// 得到資料庫連線
		while(true){
		try {
			Scanner console = new Scanner(System.in);
			while (true) {
				System.out.println("----歡迎使用澳門賭場 ATM 系統----");
				boolean flag = Atm.login(conn);//呼叫Atm類login方法進行登入驗證
				if (flag == true) {
					System.out.println("----正在進入系統......----");
					Thread.currentThread().sleep(1000);
					System.out.println();
					System.out.println("----成功進入系統!----");
					while (true) {
						int in_num=0;
						Atm.menu1();//呼叫Atm類menu1方法選單頁面
						while (true) {
		                    try {
		                    	in_num = console.nextInt();
		                    } catch (InputMismatchException e) {//輸入指令判斷
		                        System.out.print("請輸入正確的數字指令:");
		                        String input = console.next();
		                        Pattern pattern = Pattern.compile("[0-9]*");
		                        boolean digit =  pattern.matcher(input).matches();
		                        if (digit) {
		                            break;
		                        }else continue;
		                    }
		                    break;
		                }
						switch (in_num) {
						case 1://查詢資訊
							Atm.select(conn);
							continue;
						case 2://存款
							Atm.save(conn);
							continue;
						case 3://取款
							Atm.remove(conn);
							continue;
						case 4://轉賬
							Atm.acounts(conn);
							continue;
						case 5://修改密碼
							Atm.changeUserPassword(conn);
							if(Atm.old_pass){
								continue;
							}else
							break;
						case 6://登出
							System.out.println("正在退卡......");
							Thread.currentThread().sleep(1000);
							System.out.println("請拿走您的銀行卡!");
							System.out.println();
							break;
						default:
							System.out.println("輸入指令有誤,請重新輸入");
							continue;
						}
						break;
					}
				}
				System.out.println("是否繼續使用澳門賭場 ATM 系統?Y/任意鍵退出");
				String enter = console.next();
				if (enter.toUpperCase().equals("Y")){
					continue;
				}else{
					System.out.println("正在退出終端系統......");
					Thread.currentThread().sleep(1000);
					System.out.println("歡迎再來賭哦~~~");
					break;
				}
			}
			break;
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	}
	
}

4、管理端類

package com.jdbc.bank;

import java.sql.*;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;
import static java.lang.Thread.sleep;

public class Admin {
	private static String admin_card;

	public Admin() {
	}

	// 使用者認證,與Atm類登入驗證大致相同
	public static boolean login(Connection conn) {
		while (true) {
			boolean card = false;
			boolean password = false;
			boolean flag = false;
			try {
				Scanner console = new Scanner(System.in);
				System.out.println("請輸入管理員賬號:");
				while (true) {//賬號輸入型別判斷
					admin_card = console.next();
					String reg = "^[a-z]+$";
					if (admin_card.matches(reg)) {
						break;
					} else {
						System.out.println("賬號只能是小寫字母的組合,請重新輸入:");
						continue;
					}
				}
				Statement stmt = conn.createStatement();
				stmt.execute("select * from admin");
				ResultSet rs = stmt.getResultSet();
				while (rs.next()) {
					if (admin_card.equals(rs.getString(1))) {
						card = true;
						break;
					} else {
						card = false;
					}
				}
				if (card == true) {
					int count = 3;
					while (true) {
						System.out.println("請輸入您的密碼:");
						int user_password = 0;
						while (true) {
							try {
								user_password = console.nextInt();
							} catch (InputMismatchException e) {//密碼型別判斷
								System.out.print("請輸入正確型別的六位密碼:");
								String input = console.next();
								Pattern pattern = Pattern.compile("[0-9]*");
								boolean digit = pattern.matcher(input).matches();
								if (digit) {
									break;
								} else
									continue;
							}
							break;
						}
						stmt.execute("select * from admin where admin_id = '" + admin_card + "'");
						rs = stmt.getResultSet();
						while (rs.next()) {
							if (user_password == rs.getInt(2)) {
								password = true;
								flag = true;
								break;
							} else {
								password = false;
							}
							break;
						}
						if (count == 1 && password == false) {
							// stmt.execute("update user set user_action = 0
							// where user_card = '" + admin_card + "'");//應該刪除他
							stmt.execute("insert into admin_old values ('"+admin_card+"')");
							stmt.execute("delete from admin where admin_id = '" + admin_card + "'");
							System.out.println("正在刪除你的管理賬戶......");
							sleep(1000);
							System.out.println("輸入密碼錯誤超過三次,你被炒了,滾吧");
							break;
						}
						if (password == false) {
							System.out.println("密碼錯誤,請重新輸入");
							count--;
							System.out.println("剩餘輸入次數:" + count);
							continue;
						}
						break;
					}
				} else {
					System.out.println("查無此人");
					continue;
				}

			} catch (SQLException | InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return flag;
		}
	}

	// 管理端首頁選單
	public static void menu1() {
		System.out.println("  *-------澳門賭場管理--------");
		System.out.println("  *  1、查詢使用者資訊及ATM         ");
		System.out.println("  *  2、使用者開戶及增加管理員      ");
		System.out.println("  *  3、修改資訊及密碼                 ");
		System.out.println("  *  4、銷戶                                    ");
		System.out.println("  *  5、登出                                    ");
		System.out.println("  *----------版本 1.0.0-------");
		System.out.println("請根據選單序號進行操作:");
	}

	// 查詢使用者資訊及ATM的主選單
	public static void menu_by_select(Connection conn) {
		while (true) {
			System.out.println("  *---------查詢-------------");
			System.out.println("  *  1、查詢所有使用者資訊             ");
			System.out.println("  *  2、根據卡號查詢                     ");
			System.out.println("  *  3、查詢ATM機餘額                 ");
			System.out.println("  *  4、返回上一級                         ");
			System.out.println("  *--------------------------");
			System.out.println("請輸入查詢指令:");
			Scanner console = new Scanner(System.in);
			int in_num = console.nextInt();
			switch (in_num) {
			case 1:
				select_all(conn);//呼叫查詢所有使用者資訊的方法
				continue;
			case 2:
				select_by_card(conn);//根據卡號查詢
				continue;
			case 3:
				update_atm_menu(conn);//查詢ATM餘額
				continue;
			case 4:
				System.out.println("正在退出......");//返回上一級
				try {
					Thread.currentThread().sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				break;
			default:
				System.out.println("輸入指令有誤,請重新輸入");
				continue;
			}
			break;
		}
	}

	// ATM主選單
	public static void update_atm_menu(Connection conn) {
		while (true) {
			System.out.println("正在查詢當前ATM餘額:");
			ResultSet rs = null;
			try {
				sleep(1000);
				Statement stmt = conn.createStatement();
				stmt.execute("select * from atm");
				rs = stmt.getResultSet();
				rs.next();

				System.out.println("  *------ATM餘額選單--------");
				System.out.println("  * 當前ATM餘額:   " + rs.getInt(2) + "元    *");
				System.out.println("  *  1、往ATM放錢                        ");
				System.out.println("  *  2、從ATM取錢                        ");
				System.out.println("  *  3、返回上一級                         ");
				System.out.println("  *--------------------------");
				System.out.println("請輸入指令:");
				Scanner console = new Scanner(System.in);
				int in_num = console.nextInt();
				switch (in_num) {
				case 1:
					dealCashIn(conn);//往Atm放錢方法
					continue;
				case 2:
					dealCashOut(conn);//從Atm取錢方法
					continue;
				case 3:
					System.out.println("正在退出......");//返回上一級
					try {
						Thread.currentThread().sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				default:
					System.out.println("輸入指令有誤,請重新輸入");
					continue;
				}
				break;
			} catch (InterruptedException | SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();

			}
		}
	}

	// 從ATM取錢
	public static void dealCashOut(Connection conn) {

		boolean flag = true;
		while (flag) {
			Scanner sc = new Scanner(System.in);
			int input_m = 0;
			System.out.println("要取出的現金金額:");
			while (true) {
				try {
					input_m = sc.nextInt();
				} catch (InputMismatchException e) {
					System.out.println("請輸入數字:");
					String input = sc.next();
					Pattern pattern = Pattern.compile("[0-9]*");
					boolean digit = pattern.matcher(input).matches();
					if (digit) {
						break;
					} else {
						continue;
					}
				}
				if (input_m % 100 == 0) {
					break;
				} else {
					System.out.println("請輸入100的正整數倍數:");
					continue;
				}
			}
			try {
				CallableStatement cs = conn.prepareCall("{call decrease_m(?,?)}");//呼叫資料庫中從ATM取錢儲存過程
				cs.setInt(1, input_m);
				cs.execute();
				String rs = cs.getString(2);
				System.out.println("正在從ATM取錢.....");
				sleep(1000);
				System.out.println(rs);
				Scanner console = new Scanner(System.in);
				System.out.println("是否繼續取錢?Y/任意鍵退出系統");
				String in_yn = console.next();
				if (in_yn.toUpperCase().equals("Y")) {
					System.out.println("正在重新載入......");
					Thread.currentThread().sleep(1000);
					continue;
				} else {
					System.out.println("正在返回上一級......");
					Thread.currentThread().sleep(1000);
					break;
				}

			} catch (SQLException | InterruptedException e) {
				System.out.println("呼叫儲存過程發生異常");
			}
		}
	}

	// 存錢到ATM
	public static void dealCashIn(Connection conn) {

		boolean flag = true;
		while (flag) {
			Scanner sc = new Scanner(System.in);
			int input_m = 0;
			System.out.println("要存入的現金金額:");
			while (true) {
				try {
					input_m = sc.nextInt();
				} catch (InputMismatchException e) {
					System.out.println("請輸入數字:");
					String input = sc.next();
					Pattern pattern = Pattern.compile("[0-9]*");
					boolean digit = pattern.matcher(input).matches();
					if (digit) {
						break;
					} else {
						continue;
					}
				}
				if (input_m % 100 == 0) {
					break;
				} else {
					System.out.println("請輸入100的正整數倍數:");
					continue;
				}
			}
			try {
				CallableStatement cs = conn.prepareCall("{call increase_m(?,?)}");//呼叫資料庫中放錢到Atm的儲存過程
				cs.setInt(1, input_m);
				cs.execute();
				String rs = cs.getString(2);
				System.out.println(rs);
				Scanner console = new Scanner(System.in);
				System.out.println("是否繼續放錢?Y/任意鍵退出系統");
				String in_yn = console.next();
				if (in_yn.toUpperCase().equals("Y")) {
					System.out.println("正在重新載入......");
					Thread.currentThread().sleep(1000);
					continue;
				} else {
					System.out.println("正在返回上一級......");
					Thread.currentThread().sleep(1000);
					break;
				}
			} catch (SQLException | InterruptedException e) {
				System.out.println("呼叫儲存過程發生異常");
			}
		}
	}

	// 查詢所有使用者資訊
	public static void select_all(Connection conn) {
		while (true) {
			try {
				System.out.println("正在查詢所有使用者資訊......");
				Scanner console = new Scanner(System.in);
				Thread.currentThread().sleep(1000);
				Statement stmt = conn.createStatement();
				stmt.execute("select * from user");
				ResultSet rs = stmt.getResultSet();
				System.out.println("查詢成功");
				while (rs.next()) {
					int card = rs.getInt("user_card");
					String name = rs.getString("user_name");
					int money = rs.getInt("user_money");
					int user_action = rs.getInt("user_action");
					String action;
					if (user_action == 1) {
						action = "正常";
					} else {
						action = "凍結";
					}
					System.out.println("卡號:" + card + "   姓名:" + name + "   餘額:" + money + "   狀態:" + action);
				}
				System.out.println("是否繼續查詢?Y/任意鍵退出系統");
				String in_yn = console.next();
				if (in_yn.toUpperCase().equals("Y")) {
					System.out.println("正在重新載入查詢系統......");
					Thread.currentThread().sleep(1000);
					continue;
				} else {
					System.out.println("正在退出查詢系統......");
					Thread.currentThread().sleep(1000);
					break;
				}
			} catch (SQLException | InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	// 更改使用者狀態
	public static void change_action(Connection conn) {
		while (true) {
			boolean card = false;
			try {
				Scanner console = new Scanner(System.in);
				System.out.println("請輸入您的卡號:");
				int user_card = 0;
				while (true) {
					try {
						user_card = console.nextInt();
					} catch (InputMismatchException e) {
						System.out.print("請輸入正確型別的卡號:");
						String input = console.next();
						Pattern pattern = Pattern.compile("[0-9]*");
						boolean digit = pattern.matcher(input).matches();
						if (digit) {
							break;
						} else
							continue;
					}
					break;
				}

				Statement stmt = conn.createStatement();
				stmt.execute("select * from user");
				ResultSet rs = stmt.getResultSet();
				while (rs.next()) {
					if (user_card == rs.getInt(1)) {
						card = true;
						break;
					} else {
						card = false;
					}
				}
				if (card == true) {
					while (true) {
						System.out.println("請更正使用者的狀態(凍結/正常):");
						String action = console.next();
						int user_action = 0;
						if (action.equals("正常")) {
							user_action = 1;
						} else if (action.equals("凍結")) {
							user_action = 0;
						} else {
							System.out.println("輸入有誤,請重新輸入");
							continue;
						}
						System.out.println("正在修改使用者狀態......");
						sleep(1000);
						stmt.execute("update user set user_action =" + user_action + " where user_card =" + user_card);
						System.out.println("修改成功!");
						System.out.println("卡號:" + user_card + "   狀態:" + action);
						break;
					}
				} else {
					System.out.println("賬號不存在");
					System.out.println("是否繼續修改使用者狀態?Y/任意鍵退出系統");
					String in_yn = console.next();
					if (in_yn.toUpperCase().equals("Y")) {
						System.out.println("正在重新載入修改使用者狀態系統......");
						Thread.currentThread().sleep(1000);
						continue;
					} else {
						System.out.println("正在退出修改使用者狀態系統......");
						Thread.currentThread().sleep(1000);
						break;
					}
				}
				System.out.println("是否繼續修改使用者狀態?Y/任意鍵退出系統");
				String in_yn = console.next();
				if (in_yn.toUpperCase().equals("Y")) {
					System.out.println("正在重新載入修改使用者狀態系統......");
					Thread.currentThread().sleep(1000);
					continue;
				} else {
					System.out.println("正在退出修改使用者狀態系統......");
					Thread.currentThread().sleep(1000);
					break;
				}

			} catch (SQLException | InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

	// 開戶及增加管理員主選單
	public static void menu_by_insert(Connection conn) {
		while (true) {
			System.out.println("  *----使用者開戶及增加管理員---");
			System.out.println("  *  1、使用者開戶                            ");
			System.out.println("  *  2、增加管理員                        ");
			System.out.println("  *  3、返回上一級                         ");
			System.out.println("  *--------------------------");
			System.out.println("請輸入查詢指令:");
			Scanner console = new Scanner(System.in);
			int in_num = console.nextInt();
			switch (in_num) {
			case 1:
				insert_account(conn);//使用者開戶方法
				continue;
			case 2:
				insert_admin(conn);//增加管理員選單
				continue;
			case 3:
				System.out.println("正在退出......");//返回上一級
				try {
					Thread.currentThread().sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				break;
			default:
				System.out.println("輸入指令有誤,請重新輸入");
				continue;
			}
			break;
		}
	}

	// 使用者開戶
	public static void insert_account(Connection conn) {
		try {
			while (true) {

				Scanner console = new Scanner(System.in);
				System.out.println("請輸入您的姓名:");
				String user_name = console.next();
				String reg = "[\\u4e00-\\u9fa5]+";//正則表示式判斷輸入型別
				if (!(user_name.matches(reg))) {
					System.out.println("請輸入漢字!");
					continue;
				} else {
					while (true) {
						System.out.println("請輸入您的密碼:");
						int user_password = 0;
						while (true) {
							try {
								user_password = console.nextInt();
							} catch (InputMismatchException e) {
								System.out.print("請輸入正確型別的六位密碼:");
								String input = console.next();
								Pattern pattern = Pattern.compile("[0-9]*");
								boolean digit = pattern.matcher(input).matches();
								if (digit) {
									break;
								} else
									continue;
							}
							break;
						}
						int len = Integer.toString(user_password).length();
						if (len != 6) {
							System.out.println("密碼位數出錯,請重新輸入:");
							continue;
						} else {
							System.out.println("請輸入您存款的金額:");
							int money = 0;
							while (true) {
								try {
									money = console.nextInt();
								} catch (InputMismatchException e) {
									System.out.print("請輸入正確的數字金額:");
									String input = console.next();
									Pattern pattern = Pattern.compile("[0-9]*");
									boolean digit = pattern.matcher(input).matches();
									if (digit) {
										break;
									} else
										continue;
								}
								break;
							}
							int user_card = (int) (Math.random() * 999999) + 100000;//隨機生成六位卡號
							System.out.println("正在開戶......");
							Thread.currentThread().sleep(1000);
							CallableStatement cstmt = conn.prepareCall("{call insert_user(?,?,?,?,?)}");//呼叫資料庫中開戶儲存過程
							cstmt.setInt(1, user_card);
							cstmt.setInt(2, user_password);
							cstmt.setString(3, user_name);
							cstmt.setInt(4, money);
							cstmt.setInt(5, 1);
							cstmt.execute();
							System.out.println("開戶成功");
							System.out.println("正在列印使用者資訊......");
							Thread.currentThread().sleep(1000);
							System.out
									.println("卡號:" + user_card + "   姓名:" + user_name + "   餘額:" + money + "   狀態:正常");
							break;
						}
					}

				}
				System.out.println("是否繼續開戶?Y/任意鍵退出");
				String in_yn = console.next();
				if (in_yn.toUpperCase().equals("Y")) {
					System.out.println("正在重新載入開戶系統......");
					Thread.currentThread().sleep(1000);
					continue;
				} else {
					System.out.println("正在退出系統......");
					Thread.currentThread().sleep(1000);
					break;
				}
			}
		} catch (SQLException | InterruptedException e) {

		}
	}

	// 增加管理員
	public static void insert_admin(Connection conn) {
		try {
			while (true) {
				Scanner console = new Scanner(System.in);
				System.out.println("請輸入要新增的管理員賬號:");
				String more_card = null;
				while (true) {
					more_card = console.next();
					String reg = "^[a-z]+$";
					if (more_card.matches(reg)) {
						break;
					} else {
						System.out.println("賬號只能是小寫字母的組合,請重新輸入:");
						continue;
					}
				}
				while (true) {
					System.out.println("請輸入您的密碼:");
					int admin_password = 0;
					while (true) {
						try {
							admin_password = console.nextInt();
						} catch (InputMismatchException e) {
							System.out.print("請輸入正確型別的六位密碼:");
							String input = console.next();
							Pattern pattern = Pattern.compile("[0-9]*");
							boolean digit = pattern.matcher(input).matches();
							if (digit) {
								break;
							} else
								continue;
						}
						break;
					}
					int len = Integer.toString(admin_password).length();
					if (len != 6) {
						System.out.println("密碼位數出錯,請重新輸入:");
						continue;
					} else {
						System.out.println("正在增加管理員......");
						Thread.currentThread().sleep(1000);
						CallableStatement cstmt = conn.prepareCall("{call insert_admin(?,?)}");
						cstmt.setString(1, more_card);
						cstmt.setInt(2, admin_password);
						cstmt.execute();
						System.out.println("增加成功");
						break;
					}
				}
				System.out.println("是否繼續增加管理員?Y/任意鍵退出");
				String in_yn = console.next();
				if (in_yn.toUpperCase().equals("Y")) {
					System.out.println("正在重新載入......");
					Thread.currentThread().sleep(1000);
					continue;
				} else {
					System.out.println("正在退出系統......");
					Thread.currentThread().sleep(1000);
					break;
				}
			}
		} catch (SQLException | InterruptedException e) {

		}
	}

	// 修改管理員密碼
	public static void changeAdminPassword(Connection conn) {
		int admin_password_old = 0;
		Scanner sc = new Scanner(System.in);
		try {
			Statement statement = conn.createStatement();//先查詢賬戶
			boolean b = statement.execute("SELECT admin_password from admin where admin_id = '" + admin_card + "'");
			if (b) {
				ResultSet rs = statement
						.executeQuery("SELECT admin_password from admin where admin_id = '" + admin_card + "'");
				rs.next();
				admin_password_old = rs.getInt(1);
				CallableStatement cs = conn.prepareCall("call changeadminpwd(?,?)");//呼叫資料庫中修改管理員密碼儲存過程
				boolean flag = true;
				int admin_try_count_left = 3;
				while (flag) {
					System.out.print("輸入6位數字舊密碼 ");
					int new_f_pass_input = 3;
					int new_f_password = 0;
					int new_pass_count = 3;
					while (true) {
						try {
							new_f_password = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.print("請輸入六位數字密碼  ");
							String input = sc.next();
							Pattern pattern = Pattern.compile("[0-9]*");
							boolean digit = pattern.ma