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机查、存、取、开户功能的更多相关文章

  1. 模拟ATM机银行系统

    淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...

  2. 序列化,反序列化,模拟ATM机

    package com.bank.unionpay; //银行卡的接口 public interface I_yinhangka { //抽象方法 //public abstract默认修饰抽象的 p ...

  3. 模拟ATM机将输入的数据插入数据库

    ATM抽象类 public abstract class ATM { private double balance; private String idcard; private String pas ...

  4. C语言模拟ATM机界面

    虽然是满屏的printf.printf.printf.printf......尴尬 但是一个小项目做下来还是能学习到很多的,有很多小的问题,不是亲自来敲一遍代码,是不会发现的.他的框架,每一个小函数功 ...

  5. 01、模拟ATM机界面程序

    一.概述 设计一个简单的模拟自动取款机ATM界面的程序,实现用户登录及取款等功能. 二.需求分析 (1)模拟自动取款机ATM界面,有常用功能. (2)主要功能包括;用户输入密码登录主界面.取款功能.取 ...

  6. 语言模拟ATM自动取款机系统

    C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...

  7. 简单的小程序实现ATM机操作

    简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...

  8. 多用户ATM机(面向对象编程)

    let readline = require('readline-sync'); // 清屏函数 let clear = () => process.stdout.write(process.p ...

  9. 数据库存储ATM机,开户、查询等信息

    package com.bank.unionpay; //银行卡的接口 public interface I_yinhangka { //抽象方法 //public abstract默认修饰抽象的 p ...

随机推荐

  1. libcurl安装使用方法-简单实用(摘录)

    http://curl.haxx.se/libcurl/c/example.html 官网c例子http://curl.haxx.se/download/curl-7.21.3.tar.gz 下载地址 ...

  2. Python全栈--6.1-match-search-findall-group(s)的区别以及计算器实例

    match.search.findall.group(s) 区别 import re # match findall经常用 # re.match() #从开头匹配,没有匹配到对象就返回NONE # r ...

  3. ios 项目引用全局pch文件

    1.在项目中新建添加PCH文件 把这些记下来,下次直接粘贴:$(SRCROOT)/工程名/pch文件名

  4. python学习之——计算给出代码中注释、代码、空行的行数

    题目:计算给出代码中注释.代码.空行的行数 来源:网络 思路:注释行以 ‘#’开头,空行以 ‘\n’ 开头,以此作为判断 def count_linenum(fname): fobj = open(f ...

  5. Windows CMD命令大全【转】

    命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...

  6. phpmyadmin连接,管理多个mysql服务器

    方法一,修改phpMyAdmin/libraries/config.default.php 修改配置文件前,最好先备份一下,万一改错地方了,显示不了,就郁闷了. /** * allow login t ...

  7. LeetCode OJ-- Word Ladder II ***@

    https://oj.leetcode.com/problems/word-ladder-ii/ 啊,终于过了 class Solution { public: vector<vector< ...

  8. log4net详细配置说明

    原文地址:http://blog.sina.com.cn/s/blog_671486bc01011rdj.html 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——05

    2013-08-19 22:35:57 2.6 PPP:点对点协议 PPP点对点协议修改了SLIP协议中的所有缺陷: 1. 在串联链路上封装IP数据报的方法.PPP即支持数据为8位&无奇偶检验 ...

  10. iOS 用代码搭建UI界面实例

    1.背景 学习IOS开发也差不多两个月了,赶鸭子上架的学习模式让我学习比较快,但是真心很累,每天有每天的工作进度,在学习的 时候需要边做一个项目真心有点累,但是看到自己的收获还是值得的.自己原来是做C ...