您的位置:首页 > 数据库

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

2016-10-20 21:04 309 查看
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<>();       //账号储蓄卡集合
}


测是结果











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: