连接数据库——模拟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) @Overridepublic 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 }
取款功能:通过输入的卡号从数据库中查询数据,若存在,则将重新计算的余额通过修改数据改到相应的余额中
@Overridepublic 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<>(); //账号储蓄卡集合 }
测是结果
转载于:https://www.cnblogs.com/jingzhenhua/p/5982558.html
连接数据库——模拟ATM机查、存、取、开户功能相关推荐
- 模拟ATM机存取款管理系统设计(C++)
模拟ATM机存取款管理系统设计 有问题欢迎私信哦 1.1问题描述: 模拟银行自动存取款机使用过程中的界面和用户交互过程,实现查询银行卡余额.取款.修改密码.退出系统等功能. 1.2基本要求(功能要求) ...
- 模拟ATM机存取款管理系统C语言课程设计
模拟ATM机存取款管理系统(只列出了大体的框架,需要源码的朋友请私信联系.) 1.问题描述 模拟银行的自动取款机使用过程中的界面和用户交互过程.实现查询银行卡余额.取款.修改密码.退出系统等功能. 2 ...
- java web atm机_java笔记——模拟ATM机例子
模拟ATM机,实现用户登录.查询.取款.存款和退出. 假定一个银行卡账户,程序执行的时候提示用户输入账号,然后输入密码,如果输入内容不符合规范,则程序会给出相应提示,连续3次输入有误,则退出系统.登录 ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- c语言模拟自动饮料机,C语言--小程序--简单模拟ATM机
原标题:C语言--小程序--简单模拟ATM机 ATM.H #ifndef ATM_h #define ATM_h #include #include #include typedef struct _ ...
- Java模拟ATM机系统
要求: 模拟ATM机系统的登陆.显示个人信息.存取款等基本功能. 图形用户界面,要有登陆界面,主界面有菜单: 连接MySQL数据库:服务器端存放用户账户信息: 实现存.取款,查询余额.显示个人信息等功 ...
- c语言做出的atm机怎样运行,c语言模拟ATM机界面
问题描述: 相信大家都在ATM机上取过钱吧,本博客将模拟ATM机的界面以及实现简易的功能(账户密码修改,账户余额查询,取款,存款) 鉴于水平有限,如有不足之处,请多多指教 头文件:ATM.H #ifn ...
- java程序模拟atm机_Java项目实现模拟ATM机
本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...
- java web atm机_Java项目实现模拟ATM机
本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...
最新文章
- 收藏!中国卫星互联网产业发展白皮书
- Eclipse 配置 maven 的两个 settings 文件
- 多线程读取同一个文件_前端进阶:多线程Web Workers的工作原理及使用场景
- 安卓开发fragment之间的切换_Android开发必会的组件化技术—Android架构和提升必备...
- html怎么让方块自动旋转,如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)...
- 2016030206 - mysql常用命令
- 码农干私活的建议(转)
- 他们在大学本科实现童年梦想!自研火箭,飞向外太空,创造人类新纪录
- OCR文字识别技术总结(三)
- 想用好大数据,你需要先了解这些事
- C#中声明、调用和配置事件的演示源码
- java64字节指令包,JVM 字节码指令解析
- Eucalyptus学习汇总
- 学习java兴趣之作模仿原神抽卡模块。希望哥、姐指点一下以下是代码;
- 如何用电脑制作VR全景图
- Android 自动检测版本更新(包含强制更新)并安装
- 随机创建圆形、三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长
- C++表白代码(较差)
- Python PIL.Image之制作GIF图片
- 农夫过河——python贪心算法实现
热门文章
- Python 兵器谱
- rt-thread+SAL+W5500 以太网Socket通信
- 程序员眼中的 Eclipse
- 如何报p20手机数据导入计算机,华为P20系列手机与电脑共享内容传输文件的方法...
- 操作系统_第三章处理器管理_批处理作业的调度算法
- [linux]platform总线机制与wtd驱动开发
- LInux查看系统信息命令
- 数据库 not in 的坑
- BlackHat USA 2021 洞察(三):议题技术解读
- 步进电机 步距角 编码器_我如何迈出了学习编码的第一步