连接数据库——模拟ATM机查、存、取、开户功能

1、界面:包含开户、查询、存款、取款、功能

 1 package com.bank.test;
 2 /**
 3  * 
 4  * @author Administrator
 5  *界面类
 6  */
 7 public class Jiemian {
 8     public static void jiemian() {
 9         System.out.println("银行自助终端系统");
10         System.out.println("****************************");
11         System.out.println("0.------开户");
12         System.out.println("1.------查询");
13         System.out.println("2.------存款");
14         System.out.println("3.------取款");
15         System.out.println("4.------退出");
16         System.out.println("****************************");
17         System.out.println("请选择你要执行的功能:");
18     }
19 }

2、ATM子类——实现开户功能,将新开户信息写入数据库

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Random;
import java.util.Scanner;

import com.bank.unionpay.ATM;
import com.bank.unionpay.Bank;
/**
 * 
 * @author Administrator
 *ATM机的子类
 */

public class ATMzi extends ATM{
    private final Bank ABC=Bank.ABC;                    //银行类型(枚举类型=ABC)                       
    @Override
    public void Kaihu() {                               //开户功能
        Bankchuxu bk=new Bankchuxu(); 
        System.out.println("请输入您的姓名:");
        while(true){                                    //输入姓名
            try{                                        //异常处理
                Scanner sc=new Scanner(System.in);
                bk.setName(sc.nextLine());
                break;
            }catch(Exception e){
                System.out.println("输入有误!");
                System.out.println("请重新输入:");
                continue;
            }
        }
        while(true){                                         //输入身份证号
            try{
                System.out.println("请输入您的身份证号:");
                Scanner sc=new Scanner(System.in);
                String a=sc.nextLine();
                String regex="\\d{15}|\\d{17}[\\dxX]";                  //正则表达式控制身份证号
                if(a.matches(regex)){
                    bk.setIDcard(a);
                    break;
                }else{
                    System.out.println("身份证号格式输入有误!");
                    continue;
                }
            }catch(Exception e){
                System.out.println("输入有误!");
                System.out.println("请重新输入:");
                continue;
            }
        }
        while(true){                                    //输入密码
            try{
                System.out.println("请输入6位纯数字密码:");
                Scanner sc=new Scanner(System.in);
                String a=sc.nextLine();
                String regex="\\d{6}";                        //正则表达式控制密码
                if(a.matches(regex)){
                    bk.setPassword(a);
                    break;
                }
                else{
                    System.out.println("输入密码格式有误!");
                    continue;
                }
            }catch(Exception e){
                System.out.println("输入有误!");
                System.out.println("请重新输入:");
                continue;
            }
        }
        
        while(true){    
            Random a=new Random();
            Long c=a.nextLong();                //生成储蓄卡号
            String regex="\\d{19}";
            if(c>0&&c.toString().matches(regex)){
                bk.setCard(c);           //将生成的储蓄卡号赋给储蓄卡卡号属性
                try {
                    // 访问数据库
                    //1、加载驱动:加载数据库提供的驱动类
                    Class.forName("oracle.jdbc.driver.OracleDriver");
                    
                    //2、获取数据库连接,通过java的驱动管理器
                    //url-数据库地址,不同的数据库写法不一样;user-用户名;password-密码
                    Connection conn = DriverManager.getConnection(
                            "jdbc:oracle:thin:@localhost:1521:orcl ",
                            "test01", "131281huazioo");
                    
                    //操作数据库——增删改查
                    //3、获得操作数据库的声明
                    Statement st=conn.createStatement();
                    //4、DML增加数据,执行更新操作
                    int i=st.executeUpdate("insert into BANKCARD values('"
                            +bk.getCard()+"','"
                            +bk.getName()+"','"
                            +bk.getPassword()+"','"
                            +bk.getYue()+"','"
                            +bk.getIDcard()+"')");
                    //关闭声明,释放资源
                    st.close();
                    //关闭连接
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println("您的账号为:"+bk.getCard());
                break;
                }else{
                    continue;
                }
        }
    }
}

3、储蓄卡类——实现查询、存款、取款功能

 1 import java.io.BufferedReader;
 2 import java.io.FileOutputStream;
 3 import java.io.FileReader;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.ResultSet;
 7 import java.sql.Statement;
 8 import java.util.Scanner;
 9 
10 import com.bank.test.Jiemian;
11 import com.bank.unionpay.Bank;
12 import com.bank.unionpay.Yinlian;
13 
14 /**
15  * 
16  * @author Administrator
17  *储蓄卡类
18  */
19 public class Bankchuxu implements Yinlian{
20     protected final Bank ABC=Bank.ABC;                    //银行类型(枚举类型=ABC)
21     private String name;                                //姓名
22     private String IDcard;                                //身份证号
23     protected long card;                                //银行卡号
24     private String password;                               //密码
25     protected int yue;                              //余额
26     //储蓄卡号get、set方法
27     public long getCard() { 
28         return card;
29     }
30     public void setCard(long card) {
31         this.card = card;
32     }
33     //姓名get、set方法
34     public String getName() {
35         return name;
36     }
37     public void setName(String name) {
38         this.name = name;
39     }
40     //身份证号get、set方法
41     public String getIDcard() {
42         return IDcard;
43     }
44     public void setIDcard(String iDcard) {
45         IDcard = iDcard;
46     }
47     //密码get、set方法
48     public String getPassword() {
49         return password;
50     }
51     public void setPassword(String password) {
52         this.password = password;
53     }
54     //余额get、set方法
55     public int getYue() {
56         return yue;
57     }
58     public void setYue(int yue) {
59         this.yue = yue;
60     }

查询功能:通过输入的卡号,从数据库中查询数据,存在将数据打印出来

 1 public void Chaxun(Yinlian yinl) {              //查询功能
 2         
 3         System.out.println("请输入您要查的账号:");                  //输入账号
 4         while(true){
 5             try{
 6                 Scanner sc=new Scanner(System.in);
 7                 long a=sc.nextLong();
 8                 // 访问数据库
 9                 //1、加载驱动:加载数据库提供的驱动类
10                 Class.forName("oracle.jdbc.driver.OracleDriver");
11                 
12                 //2、获取数据库连接,通过java的驱动管理器
13                 //url-数据库地址,不同的数据库写法不一样;user-用户名;password-密码
14                 Connection conn = DriverManager.getConnection(
15                         "jdbc:oracle:thin:@localhost:1521:orcl ",
16                         "test01", "131281huazioo");
17                 
18                 //操作数据库——增删改查
19                 //3、获得操作数据库的声明
20                 Statement st=conn.createStatement();
21                 //5、查询数据
22                 //ResultSet 数据结果集
23                 ResultSet rs = st.executeQuery("select * from BANKCARD where card='"
24                         +a+"'");
25                 //遍历结果集
26                 //next()判断是否存在下一条记录,移动指针到下一条记录
27                 if(rs.next())
28                 {
29                     String pw=rs.getString("password");
30                     System.out.println("请输入您的密码:");            //输入密码
31                     int i=0;
32                     while(true){
33                     Scanner s=new Scanner(System.in);
34                         String pws=s.nextLine();
35                             if(pws.equals(pw)){                           //验证密码
36                                 System.out.println("你查询的账号信息为:");
37                                 System.out.println("******************************");
38                                 System.out.println("姓名     身份证号                                     卡号                             金额");
39                                 System.out.println(rs.getString("name")+" "+rs.getString("idcard")+" "+rs.getString("card")+" "+rs.getString("yue"));
40                                 break;
41                             }else{
42                                 i++;
43                                 if(i==3){                                               //控制输入次数最多3次
44                                     System.out.println("密码输错超过3次,无法继续输入!");
45                                     break;
46                                 }else{
47                                     System.out.println("密码输入错误!请重新输入:");
48                                     continue;
49                                 }
50                             }
51                         }
52                     //关闭数据结果集,释放资源
53                     rs.close();
54                     //关闭声明,释放资源
55                     st.close();
56                     //关闭连接
57                     conn.close();
58                         break;
59                 }else{
60                     System.out.println("您输入的卡号不存在,请重新输入:");
61                     continue;
62                 }
63                 
64             }catch(Exception e){
65                 System.out.println("您输入的账号格式有误!");
66                 System.out.println("请重新输入:");
67                 continue;
68             }
69         }
70     }

存款功能:通过输入的卡号从数据库中查询数据,若存在,则将重新计算的余额通过修改数据改到相应的余额中

 1     public void Cunkuan(Yinlian yinl) { // 存款
 2 
 3         System.out.println("请输入您要存款的账号:");
 4         while (true) {
 5             try {
 6                 Scanner sc = new Scanner(System.in);
 7                 long a = sc.nextLong();
 8                 // 访问数据库
 9                 // 1、加载驱动:加载数据库提供的驱动类
10                 Class.forName("oracle.jdbc.driver.OracleDriver");
11 
12                 // 2、获取数据库连接,通过java的驱动管理器
13                 // url-数据库地址,不同的数据库写法不一样;user-用户名;password-密码
14                 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl ", "test01",
15                         "131281huazioo");
16 
17                 // 操作数据库——增删改查
18                 // 3、获得操作数据库的声明
19                 Statement st = conn.createStatement();
20                 // 5、查询数据
21                 // ResultSet 数据结果集
22                 ResultSet rs = st.executeQuery("select * from BANKCARD where card='" + a + "'");
23                 // 遍历结果集
24                 // next()判断是否存在下一条记录,移动指针到下一条记录
25 
26                 if (rs.next()) { // 验证卡号
27                     String pw = rs.getString("password");
28                     System.out.println("请输入您的密码:"); // 输入密码
29                     int i = 0;
30                     while (true) {
31                         Scanner s = new Scanner(System.in);
32                         String pws = s.nextLine();
33                         if (pws.equals(pw)) { // 验证密码
34                             System.out.println("您要存款的账号信息为:");
35                             System.out.println("******************************");
36                             System.out.println(
37                                     "姓名     身份证号                                     卡号                                       金额");
38                             System.out.println(rs.getString("name") + "   " + rs.getString("idcard") + "   "
39                                     + rs.getString("card") + "   " + rs.getString("yue"));
40                             while (true) {
41                                 try {
42                                     System.out.println("请输入存款金额:");
43                                     Scanner cun = new Scanner(System.in);
44                                     int jine = cun.nextInt(); // 输入存款金额
45                                     if (jine < 0) {
46                                         System.out.println("您输入的数据无效,系统将自动退出!谢谢使用"); // 负数提示
47                                         break;
48                                     } else {
49                                         yue = rs.getInt("yue");
50                                         yue += jine; // 重新计算余额
51                                         try {
52                                             int ss = st.executeUpdate(
53                                                     "update bankcard set yue='" + yue + "' where card='" + a + "'");
54                                         } catch (Exception e) {
55                                             e.printStackTrace();
56                                         }
57                                         System.out.println("存款成功,谢谢使用!");
58                                         break;
59                                     }
60                                 } catch (Exception e) {
61                                     System.out.println("您输入的存款金额格式有误!");
62                                     System.out.println("请重新输入:");
63                                     continue;
64                                 }
65                             }
66                             break;
67                         } else {
68                             i++;
69                             if (i == 3) { // 控制输入次数最多3次
70                                 System.out.println("密码输错超过3次,无法继续输入!");
71                                 break;
72                             } else {
73                                 System.out.println("密码输入错误!请重新输入:");
74                                 continue;
75                             }
76                         }
77                     }
78                     //关闭数据结果集,释放资源
79                     rs.close();
80                     //关闭声明,释放资源
81                     st.close();
82                     //关闭连接
83                     conn.close();
84                     break;
85                 } else {
86                     System.out.println("您输入的卡号不存在,请重新输入:");
87                     continue;
88                 }
89             } catch (Exception e) {
90                 System.out.println("您输入的账号格式有误!");
91                 System.out.println("请重新输入:");
92                 continue;
93             }
94         }
95     }

取款功能:通过输入的卡号从数据库中查询数据,若存在,则将重新计算的余额通过修改数据改到相应的余额中

    @Override
    public void Qukuan(Yinlian yinl) { // 取款
        System.out.println("请输入您要取款的账号:");
        while(true){
                try{
                    Scanner sc=new Scanner(System.in);
                    long a=sc.nextLong();
                    // 访问数据库
                    //1、加载驱动:加载数据库提供的驱动类
                    Class.forName("oracle.jdbc.driver.OracleDriver");
                    
                    //2、获取数据库连接,通过java的驱动管理器
                    //url-数据库地址,不同的数据库写法不一样;user-用户名;password-密码
                    Connection conn = DriverManager.getConnection(
                            "jdbc:oracle:thin:@localhost:1521:orcl ",
                            "test01", "131281huazioo");
                    
                    //操作数据库——增删改查
                    //3、获得操作数据库的声明
                    Statement st=conn.createStatement();
                    //5、查询数据
                    //ResultSet 数据结果集
                    ResultSet rs = st.executeQuery("select * from BANKCARD where card='"
                            +a+"'");
                    //遍历结果集
                    //next()判断是否存在下一条记录,移动指针到下一条记录
                
                if(rs.next()){          //验证卡号
                    String pw=rs.getString("password");
                    yue=rs.getInt(yue);
                    System.out.println("请输入您的密码:");            //输入密码
                    int i=0;
                    while(true){
                        Scanner qumi=new Scanner(System.in);
                        String pws=qumi.nextLine();
                        if(pws.equals(pw)){  //验证密码
                            System.out.println("您要取款的账号信息为:");
                            System.out.println("******************************");
                            System.out.println("姓名     身份证号                                     卡号                                       金额");
                            System.out.println(rs.getString("name")+"   "+rs.getString("idcard")+"   "+rs.getString("card")+"   "+rs.getString("yue"));
                            while(true){
                                try{
                                    System.out.println("请输入取款金额:");
                                    Scanner quj=new Scanner(System.in);
                                    int jine=quj.nextInt();                      //输入存款金额
                                    if(jine>yue||jine<0){
                                        System.out.println("您输入的数据无效,系统将自动退出!谢谢使用");       //负数提示
                                        break;
                                    }else{
                                        yue-=jine;                              //重新计算余额
                                        try {
                                            int ss=st.executeUpdate("update bankcard set yue='"
                                                    +yue+"' where card='"
                                                    +a+"'");
                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }
                                        System.out.println("取款成功,谢谢使用!");
                                        break;
                                    }
                                }catch(Exception e){
                                    System.out.println("您输入的存款金额格式有误!");
                                    System.out.println("请重新输入:");
                                    continue;
                                }
                            }
                            break;
                        }else{
                            i++;
                            if(i==3){                                               //控制输入次数最多3次
                                System.out.println("密码输错超过3次,无法继续输入!");
                                break;
                            }else{
                                System.out.println("密码输入错误,请重新输入:");
                                continue;
                            }
                        }
                    }
                    //关闭数据结果集,释放资源
                    rs.close();
                    //关闭声明,释放资源
                    st.close();
                    //关闭连接
                    conn.close();
                    break;
                }else{
                    System.out.println("您输入的卡号不存在,请重新输入:");
                    continue;
                }
            }catch(Exception e){
                System.out.println("您输入的账号格式有误!");
                System.out.println("请重新输入:");
                continue;
            }
        }    
    }
}

测试类:

 1 import java.util.Scanner;
 2 
 3 import com.bank.abc.ATMzi;
 4 import com.bank.abc.Bankchuxu;
 5 import com.bank.abc.Bankclass;
 6 import com.bank.unionpay.Yinlian;
 7 
 8 /**
 9  * 
10  * @author Administrator
11  *测试类
12  */
13 public class Test {
14     public static void main(String[] args) {
15         Jiemian.jiemian();                                       //调界面
16         Yinlian yinl=new Bankchuxu();
17         while(true){                                             //死循环实现输入错误返回
18             Scanner sc=new Scanner(System.in);
19             try{                                                 //输入异常
20                 int shuru=sc.nextInt();
21                 switch(shuru){
22                 case 0:
23                     System.out.println("****************************");
24                     System.out.println("您选择的为开户功能");
25                     ATMzi a=new ATMzi();
26                     a.Kaihu();                                     //调用开户
27                     System.out.println("开户成功!");
28                     Jiemian.jiemian();
29                     break;
30                 case 1:
31                     System.out.println("****************************");
32                     System.out.println("您选择的为查询功能");
33                     yinl.Chaxun(yinl);
34                     Jiemian.jiemian();
35                     break;
36                 case 2:
37                     System.out.println("****************************");
38                     System.out.println("您选择的为存款功能");
39                     yinl.Cunkuan(yinl);
40                     Jiemian.jiemian();
41                     break;
42                 case 3:
43                     System.out.println("****************************");
44                     System.out.println("您选择的为取款功能");
45                     yinl.Qukuan(yinl);
46                     Jiemian.jiemian();
47                     break;
48                 case 4:
49                     System.out.println("谢谢使用!");
50                     break;
51                 default:
52                     System.out.println("您选择的菜单不存在!");
53                     System.out.println("请重新选择:");
54                     continue;
55                 }
56                 if(shuru==4)break;
57             }catch(Exception e){
58                 System.out.println("输入有误!");
59                 System.out.println("请重新选择:");
60             }
61         }
62     }
63 }

 其它类:接口、枚举、单例等

 1 package com.bank.unionpay;
 2 /**
 3  * 
 4  * @author Administrator
 5  *银联接口
 6  */
 7 public interface Yinlian {
 8     void Chaxun(Yinlian yinl);             //查询余额
 9     void Cunkuan(Yinlian yinl);           //存款
10     void Qukuan(Yinlian yinl);            //取款
11 }
 1 package com.bank.unionpay;
 2 /**
 3  * 
 4  * @author Administrator
 5  *四大银行——枚举
 6  */
 7 public enum Bank {
 8     ABC("农行"),ICBC("工行"),CCB("建行"),BOC("中行");     //枚举类型    枚举列表
 9     private final String name;             //常量银行名
10     public String getName(){               //getter方法返回银行名
11         return this.name;
12     }
13     private Bank(String name){             //私有构造方法
14         this.name=name;
15     }
16 }
 1 package com.bank.unionpay;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 
 7  * @author Administrator
 8  *ATM机抽象类
 9  */
10 public abstract class ATM {
11     private int yue;                  //变量余额
12     public abstract void Kaihu();     //抽象方法——开户
13     public int getYue() {             //get余额方法
14         return yue;
15     }
16     public void setYue(int yue) {     //set余额方法
17         this.yue = yue;
18     }
19     public void Chaxun(Yinlian yinl) {              //查询余额
20         System.out.println("您的账户余额为:"+yue);
21     }
22     public void Cunkuan(Yinlian yinl) {             //存款
23         while(true){
24             System.out.println("请输入存款金额:");
25             Scanner sc=new Scanner(System.in);
26             int jine=sc.nextInt();                      //输入存款金额
27             if(jine<0){
28                 System.out.println("输入有误!");       //负数提示
29                 continue;
30             }else{
31                 yue+=jine;                              //重新计算余额
32                 break;
33             }
34         }
35     }
36     public void Qukuan(Yinlian yinl) {                  //取款
37         while(true){
38             System.out.println("请输入取款金额:");
39             Scanner sc=new Scanner(System.in);
40             int jine=sc.nextInt();                      //输入取款金额
41             if(jine<=yue){
42                 yue-=jine;                              //重新计算余额
43                 break;
44             }else if(jine>yue){
45                 System.out.println("余额不足,无法取款!");      //余额不足提示
46                 continue;
47             }else{
48                 System.out.println("输入有误!");               //负数提示
49                 continue;
50             }
51         }        
52     }
53 }
package com.bank.abc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bank.unionpay.Bank;
/**
 * 
 * @author Administrator
 *银行类——单例模式
 */
public class Bankclass {
    private Bankclass(){                 //禁止外部访问构造方法
        
    }
    private static Bankclass bank=new Bankclass();      //内部产生唯一实例
    public static Bankclass getBankclass()              //开放一个方法给调用者返回这个实例
    {    
        return bank;
    }
    private final Bank ABC=Bank.ABC;                    //银行类型(枚举类型=ABC)
    private String bankname;                                //银行名称
    public List<Long> card=new ArrayList();                //银行卡列表——集合
    public Map<Long,Bankchuxu> Account=new HashMap<>();       //账号储蓄卡集合
}

测是结果

 

 

posted @ 2016-10-20 21:04  荆小八  阅读(992)  评论(0编辑  收藏  举报