zoukankan      html  css  js  c++  java
  • 连接数据库——模拟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<>();       //账号储蓄卡集合
    }

    测是结果

     

  • 相关阅读:
    .NET分布式架构开发实战之一 故事起源
    .NET 分布式架构开发实战之三 数据访问深入一点的思考
    .NET 分布式架构开发实战之二 草稿设计
    .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
    跨域SSO的实现之一:架构设计
    .NET下实现分布式缓存系统Memcached
    第一章 .NET的原理(2.0)
    Memcache协议中文版
    Excel数据导入Axapta中
    SQL Server2000的安装
  • 原文地址:https://www.cnblogs.com/jingzhenhua/p/5982558.html
Copyright © 2011-2022 走看看