每注册一个用户,该用户的信息会自动存到数据库中,并且下次再启动查询时信息不会丢失。
package com.Bank.unionpay; // ATM 抽象类 public abstract class ATM { //成员属性 public ICard account ; // 抽象方法 public abstract void kaiHu() ; }
package com.Bank.unionpay; // 银行枚举 public enum Fourbank { // 首行放置 ABC("农行") , ICBC("工行") , CCB("建行") , BOC("中行"); private String name ; public String getName() { return name; } Fourbank(String name) { this.name = name ; } }
package com.Bank.unionpay; // 银行卡接口 public interface ICard { // 查询余额 public void chaXun( ) ; // 存款 public void cunKuan( ) ; // 取款 public void quKuan( ) ; }
package com.Bank.abc; import com.Bank.unionpay.Fourbank; public class ABCBank { //私有属性 final Fourbank bank = Fourbank.ABC ; //银行类型 private String bankName ; // 银行名称 //私有构造方法,防止该类被实例化 private ABCBank() { } //创建Bank的一个对象 private static ABCBank bk = new ABCBank() ; //获取唯一可用对象 public static ABCBank getBk() { return bk ; } }
package com.Bank.abc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.Bank.unionpay.ATM; import com.Bank.unionpay.Fourbank; public class AutoATM extends ATM { // 属性 final Fourbank bank = Fourbank.ABC; // /* // map集合 卡号映射密码 // 不将密码存入数据库表格 // 防止用户密码泄露给数据库管理员 // */ // Map<String, String> maps = new HashMap<String, String>(); // @Override public void kaiHu() { for (int i = 0; i > -1; i++) { // 分支语句,判断用户输入,提供相关功能 System.out.println("************************************"); System.out.println("您选择的为开户功能!"); System.out.println("请输入您的姓名:"); // 提供输入,供用户注册名字 for (int j1 = 1; j1 > 0; j1++) { Scanner can = new Scanner(System.in); String ss = can.nextLine(); String regEx = "[u4e00-u9fa5]"; Pattern p = Pattern.compile(regEx); int num = 0; // 汉字长度 for (int s = 0; s < ss.length(); s++) { if (p.matches(regEx, ss.substring(s, s + 1))) { num++; } } // 判断名字是否合法 if (num < 2) { System.out.println("您输入的名字不合法!"); } else { System.out.println("您输入的名字是:" + ss); // 判断身份证号码是否合法 for (int j2 = 1; j2 > 0; j2++) { System.out.println("请输入您的身份证号:"); Scanner sf = new Scanner(System.in); String sfNum = sf.nextLine(); // 定义判别用户身份证号的正则表达式(18位,最后一位可以为字母) Pattern idNumPattern = Pattern.compile("(\d{17}[0-9a-zA-Z])"); // 通过Pattern获得Matcher Matcher idNumMatcher = idNumPattern.matcher(sfNum); // 判断用户输入是否为身份证号 if (idNumMatcher.matches()) { System.out.println("您的身份证号是:" + sfNum); // 判断密码是否合法 for (int j = 1; j > 0; j++) { System.out.println("请输入您的密码:"); Scanner mm = new Scanner(System.in); String mmNum = mm.nextLine(); // 定义判别用户密码的正则表达式(6位纯数字) Pattern idNumPattern1 = Pattern.compile("(\d{5}[0-9])"); // 通过Pattern获得Matcher Matcher idNumMatcher1 = idNumPattern.matcher(mmNum); // 判断用户输入的密码格式是否正确 if (idNumMatcher.matches()) { while (true) { System.out.println("您的密码是:" + mmNum); System.out.println("请再次输入您的密码,进行确认:"); Scanner mm1 = new Scanner(System.in); String mmNum1 = mm.nextLine(); if (mmNum1.equals(mmNum) == true) { System.out.println("开户成功,谢谢使用!"); System.out.println("银行自助终端系统"); //连接访问数据库 try { Class.forName("oracle.jdbc.driver.OracleDriver") ; //加载驱动 String url = "jdbc:oracle:thin:@localhost:1521:orcl" ; // 获取数据库连接 Connection conn = DriverManager.getConnection(url, "test0816", "934617699"); Statement st = conn.createStatement() ;// 获得操作数据库声明 // //在数据库中建立一个表格,用来存储 // String sql ="CREATE TABLE account_Bank ( " + // "kahao number not null ," // +"name varchar(18) not null , " // +"sfNum varchar(20) not null , " // +"balance number(10,2) not null ) "; // // boolean rs1 = st.execute(sql) ; // CXCard cd = new CXCard() ; cd.setBalance(0); //初始账户余额为零 String a = kaHao() ; // //首先判断生成卡号是否与数据库中卡号重复 // ResultSet rt = st.executeQuery("select * from account_Bank where kahao = ' "+a+" ' ") ; // // //对卡号进行遍历 // if(rt.next()) // { // kaHao() ; // } System.out.println("您的卡号为:"+a); // //将卡号密码存入map集合 // maps.put(a, mmNum) ; //将联系人卡号、姓名、身份证号、账户余额存入数据库表格存入 st.executeUpdate("insert into account_Bank(kahao,name,sfNum,balance,password)" +"values(' "+a+" ' , ' "+ss+" ' , ' "+sfNum+" ' , ' "+cd.getBalance()+" ', ' "+mmNum+" ' )") ; System.out.println("3"); ResultSet rst = st.executeQuery("select * from account_Bank") ; while(rst.next()) { String kh = rst.getString("kahao") ; String xm = rst.getString("name") ; String sfz = rst.getString("sfNum") ; double ye = rst.getDouble("balance") ; System.out.println("kahao:"+kh+",name:"+xm+",sfNum:"+sfz+"balance:"+ye); } rst.close(); st.close();//关闭,释放资源 conn.close(); //关闭,释放资源 } catch (ClassNotFoundException | SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); break; } else { System.out.println("您两次输入密码不一样,请重新设置密码!"); } } break; } else { // 如果不是,输出信息提示用户 System.out.println("您输入的密码必须为六位数字!"); } } break; } else { // 如果不是,输出信息提示用户 System.out.println("请输入合法的身份证号!"); } break; } break; } } break; } } //卡号获取方法 public String kaHao() { String num = ""; for (int i = 0; i < 6; i++) { num += (int)(Math.random() * 10) + ""; // 生成六位随机卡号 } return num; } }
package com.Bank.abc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; import com.Bank.unionpay.ICard; //储蓄卡 public class CXCard implements ICard { //属性 private double balance ; //账户余额 public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } AutoATM am = new AutoATM() ; @Override public void chaXun() { System.out.println("************************************"); System.out.println("您选择的为查询功能!"); //提供用户输入渠道 while(true) { System.out.println("请输入您的卡号:"); Scanner id = new Scanner(System.in) ; String idNum = id.nextLine(); //判断用户输入卡号是否存在 try { Class.forName("oracle.jdbc.driver.OracleDriver") ; String url = "jdbc:oracle:thin:@localhost:1521:orcl" ; //本机地址 Connection conn = DriverManager.getConnection(url ,"test0816","934617699" );//建立连接 Statement st = conn.createStatement() ; //查询用户输入卡号的结果集 ResultSet rt = st.executeQuery("select * from account_Bank where kahao = ' " +idNum +" ' ") ; // if else 判断该结果集是否有数据 if(rt.next()) { String ss = rt.getString("password") ; for(int i = 0 ; i<3; i++ ) { System.out.println("请输入您的密码:"); Scanner mm = new Scanner(System.in) ; String mima = mm.nextLine(); if(ss.equals(mima)) { System.out.println("姓名:"+rt.getString("name")+" " +" 卡号:"+rt.getString("kahao")+" " +" 身份证号:"+rt.getString("sfNum")+" " +" 账户余额:"+rt.getString("balance")); break ; } else { System.out.println("重新输入密码!"); } } break ; //跳出循环 } else { System.out.println("卡号不存在!"); } st.close(); rt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //驱动加载 } } @Override public void cunKuan() { System.out.println("************************************"); System.out.println("您选择的为存款功能!"); //提供用户输入渠道 while(true) { System.out.println("请输入您的卡号:"); Scanner id = new Scanner(System.in) ; String idNum = id.nextLine(); //判断用户输入卡号是否存在 try { Class.forName("oracle.jdbc.driver.OracleDriver") ; String url = "jdbc:oracle:thin:@localhost:1521:orcl" ; //本机地址 Connection conn = DriverManager.getConnection(url ,"test0816","934617699" );//建立连接 Statement st = conn.createStatement() ; //查询用户输入卡号的结果集 ResultSet rt = st.executeQuery("select * from account_Bank where kahao = ' " +idNum +" ' ") ; // if else 判断该结果集是否有数据 if(rt.next()) { String ss = rt.getString("password") ; for(int i = 0 ; i<3; i++ ) { System.out.println("请输入您的密码:"); Scanner mm = new Scanner(System.in) ; String mima = mm.nextLine(); if(ss.equals(mima)) { System.out.println("姓名:"+rt.getString("name")+" " +" 卡号:"+rt.getString("kahao")+" " +" 身份证号:"+rt.getString("sfNum")+" " +" 账户余额:"+rt.getString("balance")); System.out.println("请输入您要存款的金额"); Scanner sr = new Scanner(System.in) ;//存款金额 double money = sr.nextDouble(); if(money>0) { double yue = rt.getDouble("balance") ; double sum =yue + money ; //将用户新的余额修改在数据库中 st.executeUpdate("update account_bank set balance= ' " +sum+" ' where kahao = ' " +idNum +" ' ") ; System.out.println("存款成功! 返回主界面请按1"); Scanner sss= new Scanner(System.in) ; int t = sss.nextInt() ; if(t==1) { System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); } break ; } else { System.out.println("您的存款金额不对!"); System.out.println("请重新输入密码,进行相关操作,您还有"+(3-i)+"次机会"); } } else { System.out.println("重新输入密码!"); } } break ; //跳出循环 } else { System.out.println("卡号不存在!"); } st.close(); rt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //驱动加载 } } @Override public void quKuan() { System.out.println("************************************"); System.out.println("您选择的为取款功能!"); //提供用户输入渠道 while(true) { System.out.println("请输入您的卡号:"); Scanner id = new Scanner(System.in) ; String idNum = id.nextLine(); //判断用户输入卡号是否存在 try { Class.forName("oracle.jdbc.driver.OracleDriver") ; String url = "jdbc:oracle:thin:@localhost:1521:orcl" ; //本机地址 Connection conn = DriverManager.getConnection(url ,"test0816","934617699" );//建立连接 Statement st = conn.createStatement() ; //查询用户输入卡号的结果集 ResultSet rt = st.executeQuery("select * from account_Bank where kahao = ' " +idNum +" ' ") ; // if else 判断该结果集是否有数据 if(rt.next()) { String ss = rt.getString("password") ; for(int i = 0 ; i<3; i++ ) { System.out.println("请输入您的密码:"); Scanner mm = new Scanner(System.in) ; String mima = mm.nextLine(); if(ss.equals(mima)) { System.out.println("姓名:"+rt.getString("name")+" " +" 卡号:"+rt.getString("kahao")+" " +" 身份证号:"+rt.getString("sfNum")+" " +" 账户余额:"+rt.getString("balance")); System.out.println("请输入您要取款的金额"); Scanner sr = new Scanner(System.in) ;//存款金额 double money = sr.nextDouble(); if(money>0) { double yue = rt.getDouble("balance") ; if(money <= yue) { double sum =yue - money ; //将用户新的余额修改在数据库中 st.executeUpdate("update account_bank set balance= ' " +sum+" ' where kahao = ' " +idNum +" ' ") ; System.out.println("取款成功! 返回主界面请按1"); Scanner sss= new Scanner(System.in) ; int t = sss.nextInt() ; if(t==1) { System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); } break ; } else { System.out.println("您的账户余额不足!"); System.out.println("请重新输入密码,进行相关操作,您还有"+(3-i)+"次机会"); } } else { System.out.println("您的取款金额不对!"); System.out.println("请重新输入密码,进行相关操作,您还有"+(3-i)+"次机会"); } } else { System.out.println("重新输入密码!"); } } break ; //跳出循环 } else { System.out.println("卡号不存在!"); } st.close(); rt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //驱动加载 } } }
package com.Bank.test; import java.util.Scanner; import com.Bank.abc.AutoATM; import com.Bank.abc.CXCard; public class Test { public static void main(String[] args) { CXCard cd = new CXCard() ; AutoATM am = new AutoATM() ; System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); while(true) { //提供输入 Scanner sc = new Scanner(System.in) ; int it = sc.nextInt( ) ; try { if(it==0) { am.kaiHu(); } if(it==1) { cd.chaXun(); } if(it==2) { cd.cunKuan(); } if(it==3) { cd.quKuan(); } if(it==4) { System.out.println("系统即将退出!"); break ; } } catch(Exception e) { System.out.println("输入有误!"); System.out.println("银行自助终端系统"); System.out.println("************************************"); System.out.println(); System.out.println("0——————开户"); System.out.println("1——————查询"); System.out.println("2——————存款"); System.out.println("3——————取款"); System.out.println("4——————退出"); System.out.println(); System.out.println("************************************"); System.out.println(); System.out.println("请选择您要执行的功能:"); } } } }