1、界面:包含开户、查询、存款、取款、功能
package com.bank.test;
/**
*
* @author Administrator
*界面类
*/
public class Jiemian {
public static void jiemian() {
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("请选择你要执行的功能:");
}
}
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、储蓄卡类——实现查询、存款、取款功能
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner; import com.bank.test.Jiemian;
import com.bank.unionpay.Bank;
import com.bank.unionpay.Yinlian; /**
*
* @author Administrator
*储蓄卡类
*/
public class Bankchuxu implements Yinlian{
protected final Bank ABC=Bank.ABC; //银行类型(枚举类型=ABC)
private String name; //姓名
private String IDcard; //身份证号
protected long card; //银行卡号
private String password; //密码
protected int yue; //余额
//储蓄卡号get、set方法
public long getCard() {
return card;
}
public void setCard(long card) {
this.card = card;
}
//姓名get、set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//身份证号get、set方法
public String getIDcard() {
return IDcard;
}
public void setIDcard(String iDcard) {
IDcard = iDcard;
}
//密码get、set方法
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//余额get、set方法
public int getYue() {
return yue;
}
public void setYue(int yue) {
this.yue = yue;
}
查询功能:通过输入的卡号,从数据库中查询数据,存在将数据打印出来
public void Chaxun(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");
System.out.println("请输入您的密码:"); //输入密码
int i=0;
while(true){
Scanner s=new Scanner(System.in);
String pws=s.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"));
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;
}
}
}
存款功能:通过输入的卡号从数据库中查询数据,若存在,则将重新计算的余额通过修改数据改到相应的余额中
public void Cunkuan(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");
System.out.println("请输入您的密码:"); // 输入密码
int i = 0;
while (true) {
Scanner s = new Scanner(System.in);
String pws = s.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 cun = new Scanner(System.in);
int jine = cun.nextInt(); // 输入存款金额
if (jine < 0) {
System.out.println("您输入的数据无效,系统将自动退出!谢谢使用"); // 负数提示
break;
} else {
yue = rs.getInt("yue");
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;
}
}
}
取款功能:通过输入的卡号从数据库中查询数据,若存在,则将重新计算的余额通过修改数据改到相应的余额中
@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;
}
}
}
}
测试类:
import java.util.Scanner; import com.bank.abc.ATMzi;
import com.bank.abc.Bankchuxu;
import com.bank.abc.Bankclass;
import com.bank.unionpay.Yinlian; /**
*
* @author Administrator
*测试类
*/
public class Test {
public static void main(String[] args) {
Jiemian.jiemian(); //调界面
Yinlian yinl=new Bankchuxu();
while(true){ //死循环实现输入错误返回
Scanner sc=new Scanner(System.in);
try{ //输入异常
int shuru=sc.nextInt();
switch(shuru){
case 0:
System.out.println("****************************");
System.out.println("您选择的为开户功能");
ATMzi a=new ATMzi();
a.Kaihu(); //调用开户
System.out.println("开户成功!");
Jiemian.jiemian();
break;
case 1:
System.out.println("****************************");
System.out.println("您选择的为查询功能");
yinl.Chaxun(yinl);
Jiemian.jiemian();
break;
case 2:
System.out.println("****************************");
System.out.println("您选择的为存款功能");
yinl.Cunkuan(yinl);
Jiemian.jiemian();
break;
case 3:
System.out.println("****************************");
System.out.println("您选择的为取款功能");
yinl.Qukuan(yinl);
Jiemian.jiemian();
break;
case 4:
System.out.println("谢谢使用!");
break;
default:
System.out.println("您选择的菜单不存在!");
System.out.println("请重新选择:");
continue;
}
if(shuru==4)break;
}catch(Exception e){
System.out.println("输入有误!");
System.out.println("请重新选择:");
}
}
}
}
其它类:接口、枚举、单例等
package com.bank.unionpay;
/**
*
* @author Administrator
*银联接口
*/
public interface Yinlian {
void Chaxun(Yinlian yinl); //查询余额
void Cunkuan(Yinlian yinl); //存款
void Qukuan(Yinlian yinl); //取款
}
package com.bank.unionpay;
/**
*
* @author Administrator
*四大银行——枚举
*/
public enum Bank {
ABC("农行"),ICBC("工行"),CCB("建行"),BOC("中行"); //枚举类型 枚举列表
private final String name; //常量银行名
public String getName(){ //getter方法返回银行名
return this.name;
}
private Bank(String name){ //私有构造方法
this.name=name;
}
}
package com.bank.unionpay; import java.util.Scanner; /**
*
* @author Administrator
*ATM机抽象类
*/
public abstract class ATM {
private int yue; //变量余额
public abstract void Kaihu(); //抽象方法——开户
public int getYue() { //get余额方法
return yue;
}
public void setYue(int yue) { //set余额方法
this.yue = yue;
}
public void Chaxun(Yinlian yinl) { //查询余额
System.out.println("您的账户余额为:"+yue);
}
public void Cunkuan(Yinlian yinl) { //存款
while(true){
System.out.println("请输入存款金额:");
Scanner sc=new Scanner(System.in);
int jine=sc.nextInt(); //输入存款金额
if(jine<0){
System.out.println("输入有误!"); //负数提示
continue;
}else{
yue+=jine; //重新计算余额
break;
}
}
}
public void Qukuan(Yinlian yinl) { //取款
while(true){
System.out.println("请输入取款金额:");
Scanner sc=new Scanner(System.in);
int jine=sc.nextInt(); //输入取款金额
if(jine<=yue){
yue-=jine; //重新计算余额
break;
}else if(jine>yue){
System.out.println("余额不足,无法取款!"); //余额不足提示
continue;
}else{
System.out.println("输入有误!"); //负数提示
continue;
}
}
}
}
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<>(); //账号储蓄卡集合
}
测是结果
连接数据库——模拟ATM机查、存、取、开户功能的更多相关文章
-
模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
-
序列化,反序列化,模拟ATM机
package com.bank.unionpay; //银行卡的接口 public interface I_yinhangka { //抽象方法 //public abstract默认修饰抽象的 p ...
-
模拟ATM机将输入的数据插入数据库
ATM抽象类 public abstract class ATM { private double balance; private String idcard; private String pas ...
-
C语言模拟ATM机界面
虽然是满屏的printf.printf.printf.printf......尴尬 但是一个小项目做下来还是能学习到很多的,有很多小的问题,不是亲自来敲一遍代码,是不会发现的.他的框架,每一个小函数功 ...
-
01、模拟ATM机界面程序
一.概述 设计一个简单的模拟自动取款机ATM界面的程序,实现用户登录及取款等功能. 二.需求分析 (1)模拟自动取款机ATM界面,有常用功能. (2)主要功能包括;用户输入密码登录主界面.取款功能.取 ...
-
语言模拟ATM自动取款机系统
C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...
-
简单的小程序实现ATM机操作
简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...
-
多用户ATM机(面向对象编程)
let readline = require('readline-sync'); // 清屏函数 let clear = () => process.stdout.write(process.p ...
-
数据库存储ATM机,开户、查询等信息
package com.bank.unionpay; //银行卡的接口 public interface I_yinhangka { //抽象方法 //public abstract默认修饰抽象的 p ...
随机推荐
-
.net多线程
线程 线程池 异步 异步更新winform界面 线程同步
-
SSIS WITH VERTICA的注意事项总结
项目中使用到SSIS访问vertica,以下是我使用中总结的一些注意事项: 1.vertica对约束的处理方式与之前的DBMS是不同的. 以上的截图说明,在使用ado.net provider连接ve ...
-
SQL 编码规范
1. 必须对表起别名,方便调查表用了哪些列 比如 select owner,object_id,name from a,b where a.id=b.id; 如果不对表取别名,我怎么知道你访问的列是哪 ...
-
nginx 中location和root
nginx 中location和root,你确定真的明白他们关系? 2016-01-17 14:48 3774人阅读 评论(1) 收藏 举报 分类: linux(17) 版权声明:本文为博主原创文 ...
-
iOS开发之性能优化
1.避免过于庞大的XIB 当加载XIB的时候把所有的东西都放在了内存里,包括任何的图片:如果有一个不会即刻用到的view,就会浪费宝贵的内存资源了. 当加载一个引用了图片或者声音资源的nib时,nib ...
-
【2-24】for循环嵌套,跳转语句,异常语句,穷举法、迭代法
For循环嵌套与if嵌套相似,是在for中再套for,其结构如下: For(;;) { For(;;){} }经典题型为打印星星例: Console.Write("请输入一个奇数:" ...
-
prometheus告警插件-alertmanager
prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警.AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户. pr ...
-
div height 自适应高度 占满剩余高度的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
PHP页面显示中文字符出现乱码
[出现问题] php页面显示中文字符出现乱码 [解决方法] 在php页面的代码前插入一行代码即可 header("Content-Type: text/html;charset=utf-8& ...
-
Tesseract-OCR 训练教程(一)
实际应用中[font]替换为你自己的字体名,比如newfont.hehe等 1.根据tif生成box文件(位置宽高等信息)tesseract [font].font.exp0.tif [font].f ...