数据库存储ATM机,开户、查询等信息
package com.bank.unionpay; //银行卡的接口
public interface I_yinhangka
{ //抽象方法
//public abstract默认修饰抽象的 public abstract void cxyue();//查询余额 void cunkuan();//存款 void qukuan();//取款 void accound();//账户 }
package com.bank.unionpay; import java.util.ArrayList;
import java.util.List; public class Zhujiemian { public void zhujiemian()
{
System.out.println("银行自助终端系统");
System.out.println();
System.out.println("************************");
List<String> li=new ArrayList<>();
li.add("开户");
li.add("查询");
li.add("存款");
li.add("取款");
li.add("退出"); for(int i=0;i<5;i++)
{
System.out.println(i+"------"+li.get(i));
}
System.out.println();
System.out.println("请选择您要执行的功能");
} }
package com.bank.unionpay; public abstract class Atm implements I_yinhangka
{
String leixing;//银行卡类型
String accound;//账户
double qukuan;//取款
double cunkuan;//存款
double cxyue ;//余额
String name;
String sfzheng;//省份证号 public Atm(String name,String sfzheng,String accound, double cxyue ) {
super();
this.accound = accound;
this.cxyue = cxyue;
this.name = name;
this.sfzheng = sfzheng;
} public Atm() {
super();
} @Override
public void cxyue()
{
// 查询余额
cxyue-=qukuan;
cxyue+=cunkuan; System.out.println("您的余额="+cxyue);
} @Override
public void cunkuan()
{
// 存款
cxyue+=cunkuan; System.out.println("存款成功,您的存款金额为"+cunkuan);
System.out.println("本次操作后您的余额为:"+cxyue);
} @Override
public void qukuan()
{
// 取款
cxyue-=qukuan;
if(cxyue>=0)
{
System.out.println("取款成功,本次取款金额= "+qukuan);
System.out.println("本次操作后您的余额= "+cxyue);
}
else
{
System.out.println("余额不足,无法取款"); } } @Override
public void accound() {
// 账户 } //声明成员方法
public double qukuan(double qukuan)//取款
{
cxyue-=qukuan;
if(cxyue>=0)
{
System.out.println("取款成功,本次取款金额= "+qukuan);
System.out.println("本次操作后您的余额= "+cxyue);
}
else
{
System.out.println("余额不足,无法取款"); }
return qukuan; } public double cunkuan(double cunkuan)//存款
{ cxyue+=cunkuan; System.out.println("存款成功,您的存款金额为"+cunkuan);
System.out.println("本次操作后您的余额为:"+cxyue);
return cunkuan;
} public double cxyue(double cxyue)
{
cxyue-=qukuan;
cxyue+=cunkuan; System.out.println("您的余额="+cxyue);
return cxyue;
} //添加开户的抽象方法
public abstract void kaihu(); }
package com.bank.unionpay; //银行枚举类型
public enum Leixing
{ ABC("农行"),ICBC("工行"),CCB("建行"),BOC("中行"); private final String leixing; public String getLeixing()
{
return this.leixing;
} //构造方法
private Leixing(String leixing)
{
this.leixing=leixing;
} }
package com.bank.abc; import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.bank.unionpay.Leixing; //单利模式
public class Bank implements Serializable
{
private Bank()//禁止外部访问构造方法
{ }
private static Bank bank=new Bank();//内部产生唯一实例
public static Bank getBank()//开放一个方法给调用者返回这个实例
{
return bank;
} final Leixing lx=Leixing.ABC;//农行类型 private String yhName;//银行名称 public List <String>card=new ArrayList<>();//银行卡列表 //public Map<String, CxCard > account=new HashMap<>();//账号储蓄卡集合 }
package com.bank.abc; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;
import java.util.Scanner; import com.bank.unionpay.Atm;
import com.bank.unionpay.Leixing; public class Atm2 extends Atm
{ public CxCard cx=new CxCard();// public Atm2(String name, String sfzheng, String accound, double cxyue) {
super(name, sfzheng, accound, cxyue);
// TODO 自动生成的构造函数存根
} public Atm2() {
// TODO 自动生成的构造函数存根
super();
} final Leixing lx = Leixing.ABC; @Override
public void kaihu()// 实现开户
{
System.out.println("您选择的为开户功能");
Scanner sc0=new Scanner(System.in);
System.out.println("请输入姓名");
String name=sc0.nextLine(); for(int i=1;i>0;i++)
{
System.out.println("请输入身份证号");
String sfzheng=sc0.nextLine(); if(sfzheng.length()==18)//判断身份证
{ for(int j=1;j>0;j++)
{ System.out.println("请输入密码");
String mm="\\d{6}";//6位数字正则表达式
String password=sc0.nextLine();
if(password.matches(mm))
{ //cx.setPassword(password);//写入密码 Random ra=new Random();//随机生成6位卡号
int[] ch=new int[6];
StringBuilder str=new StringBuilder();
String s;//用于下面拼接
for(int k=0;k<6;k++)
{
ch[k]=ra.nextInt(9);//0-9
} for(Integer c:ch)
{
str.append(c.toString());//遍历 拼接6位数字
}
s=str.toString();
//cx.setCairNumber(s);//写入卡号 // Bank.getBank().card.add(cx.getCairNumber());//将生成的储蓄卡号存到银行的银行卡列表中
//
// Bank.getBank().account.put(cx.getCairNumber(), cx); //id+储蓄卡对象
System.out.println("开户成功");
System.out.println("您的账号为: "+s); // 访问数据库
//1.加载驱动:加载数据库提供的驱动类
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//2.获取数据库连接
Connection conn;
try {
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"test0816", "123456"); System.out.println("连接成功"); //操作数据库:增删改查
//3.获得操作数据库的声明
Statement st; st = conn.createStatement(); int y=st.executeUpdate("insert into ATM(cairNumber,name,sfzheng,cxyue,password)"
+"values('"+s+"','"+name+"','"+sfzheng+"','"+cx.getCxyue()+"','"+password+"')");
}
catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
break;
} else
{
System.out.println("请输入6位纯数字密码");
}
} break;
} else
{
System.out.println("请重新输入身份证号"); }
} } }
package com.bank.abc; import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner; import com.bank.unionpay.Leixing; //储蓄卡
//只有实现了Serializable和Externalizable接口的类的对象才能被序列化。
public class CxCard implements Serializable {
//属性
final Leixing lx=Leixing.ABC;
String name;//姓名
String sfzheng;//身份证号
String cairNumber2;//卡号
String password;//密码
double cxyue ;//余额 //生成卡号的get set方法 public String getCairNumber() {
return cairNumber2;
} public void setCairNumber(String cairNumber) {
this.cairNumber2 = cairNumber;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSfzheng() {
return sfzheng;
} public void setSfzheng(String sfzheng) {
this.sfzheng = sfzheng;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public double getCxyue() {
return cxyue;
} public void setCxyue(double cxyue) {
this.cxyue = cxyue;
} public CxCard(String cairNumber, String password) {
super(); this.cairNumber2 = cairNumber;
this.password = password; } @Override
public String toString() {
return "姓名:" + name + "\n"+" 身份证:" + sfzheng + "\n"+"卡号: " + cairNumber2 +"\n"+ " 余额:" + cxyue;
} public CxCard() {
// TODO 自动生成的构造函数存根
} //声明成员方法
public void qukuan()//取款
{
if(true)
{
System.out.println("您选择的为取款功能");
for(int i=1;i>0;i++)
{
Scanner sc1=new Scanner(System.in); System.out.println("请输入您要取款的卡号");
String c2=sc1.nextLine(); try
{
Class.forName("oracle.jdbc.driver.OracleDriver") ; Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"test0816","123456") ; Statement st = conn.createStatement() ;
//查询用户输入卡号的结果集
ResultSet rs =st.executeQuery("select * from ATM where cairnumber = '" +c2 +"' ") ; if(rs.next())
{ String ss = rs.getString("password") ;
for(int k = 0 ; k<3; k++ )
{
System.out.println("请输入您的密码:");
Scanner mm = new Scanner(System.in) ;
String mima = mm.nextLine();
if(ss.equals(mima))
{
System.out.println("请输入取款金额");
Scanner sc =new Scanner(System.in);
double qk =sc.nextDouble();
if(qk>0)
{
double yue = rs.getDouble("cxyue");
if(qk<=yue)
{
double sumyue =yue-qk;
st.executeUpdate("update ATM set cxyue='"+sumyue+"' where cairnumber "
+ "= '" +c2 +"' ");
System.out.println("取款成功"); break;
}
else
{
System.out.println("您的余额不足,无法取款");
}
}
else
{
System.out.println("您输入的取款金额,系统不识别");
} }
else
{
System.out.println("密码不对");
} break;
}
break;
}
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} } } } public void cunkuan()//存款
{ if(true)
{
System.out.println("您选择的为存款功能");
for(int i=1;i>0;i++)
{
Scanner sc1=new Scanner(System.in); System.out.println("请输入您要存款的卡号");
String c2=sc1.nextLine(); try
{
Class.forName("oracle.jdbc.driver.OracleDriver") ; Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"test0816","123456") ; Statement st = conn.createStatement() ;
//查询用户输入卡号的结果集
ResultSet rs =st.executeQuery("select * from ATM where cairnumber = '" +c2 +"' ") ; if(rs.next())
{ String ss = rs.getString("password") ;
for(int k = 0 ; k<3; k++ )
{
System.out.println("请输入您的密码:");
Scanner mm = new Scanner(System.in) ;
String mima = mm.nextLine();
if(ss.equals(mima))
{
System.out.println("请输入存款金额");
Scanner sc =new Scanner(System.in);
double ck =sc.nextDouble();
if(ck>=0)
{
double yue = rs.getDouble("cxyue");
double sumyue =yue+ck;
st.executeUpdate("update ATM set cxyue='"+sumyue+"' where cairnumber "
+ "= '" +c2 +"' ");
System.out.println("存款成功"); break;
}
else
{
System.out.println("您输入的存款金额,系统不识别");
} }
else
{
System.out.println("密码不对");
} break;
}
break;
}
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} }
} } public void cxyue()//查询
{ if(true)
{
System.out.println("您选择的为查询功能");
for(int i=1;i>0;i++)
{
Scanner sc1=new Scanner(System.in); System.out.println("请输入您要查询的卡号");
String c2=sc1.nextLine(); try
{
Class.forName("oracle.jdbc.driver.OracleDriver") ; Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"test0816","123456") ; Statement st = conn.createStatement() ; ResultSet rs =st.executeQuery("select * from ATM where cairnumber = '" +c2 +"' ") ; if(rs.next())
{ String ss = rs.getString("password") ;
for(int k = 0 ; k<3; k++ )
{
System.out.println("请输入您的密码:");
Scanner mm = new Scanner(System.in) ;
String mima = mm.nextLine();
if(ss.equals(mima))
{
System.out.println("您的信息为:");
System.out.println("姓名:"+rs.getString("name")+"\t身份证号:"+rs.getString("sfzheng")
+"\t账号:"+rs.getString("cairnumber")+"\t余额"+rs.getString("cxyue"));
break;
}
else
{
System.out.println("密码不对");
} break;
}
break;
}
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} }
} } }
package com.bank.test; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner; import com.bank.abc.Atm2;
import com.bank.abc.Bank;
import com.bank.abc.CxCard;
import com.bank.unionpay.Atm;
import com.bank.unionpay.Leixing;
import com.bank.unionpay.Zhujiemian; public class A
{ public static void main(String[] args) throws Exception
{ for(int i=1;i>0;i++)
{
Zhujiemian zjm=new Zhujiemian();
zjm.zhujiemian(); Scanner sc=new Scanner(System.in);
int in=sc.nextInt();
if(in==0||in==1||in==2||in==3||in==4)
{ if(in==0) {//测试开户
Atm2 a2=new Atm2();
a2.kaihu();
continue;
}
//查询
if(in==1)
{
Atm2 a2=new Atm2();
a2.cx.cxyue();
continue;
} if(in==2)
{
//存款
Atm2 a2=new Atm2();
a2.cx.cunkuan();
continue;
}
if(in==3)
{
//取款
Atm2 a2=new Atm2();
a2.cx.qukuan();
continue;
}
if(in==4)
{
//退出
System.out.println("系统即将退出"); // File fi=new File("d:/abc122");
// if(!fi.exists())
// {
// fi.mkdirs();
// }
// ObjectOutputStream obj=new ObjectOutputStream(new FileOutputStream("d:/abc122/abc.obj"));
// obj.writeObject(Bank.getBank().account);
// System.out.println("数据保存完成");
// obj.close();
//
break; } }
else
{
System.out.println("该菜单不存在");
} } } }
数据库存储ATM机,开户、查询等信息的更多相关文章
- MySQL 按照数据库表字段动态排序 查询列表信息
MySQL 按照数据库表字段动态排序 查询列表信息 背景描述 项目中数据列表分页展示的时候,前端使用的Table组件,每列自带对当前页的数据进行升序或者降序的排序. 但是客户期望:随机点击某一列的时候 ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- 用java实现一个ATM机系统(2.0版)
用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...
- 连接数据库——模拟ATM机查、存、取、开户功能
1.界面:包含开户.查询.存款.取款.功能 package com.bank.test; /** * * @author Administrator *界面类 */ public class Jiem ...
- python实现用户登陆(sqlite数据库存储用户信息)
python实现用户登陆(sqlite数据库存储用户信息) 目录 创建数据库 数据库管理 简单登陆 有些地方还未完善. 创建数据库 import sqlite3 #建一个数据库 def create_ ...
- 原创:Python编写通讯录,支持模糊查询,利用数据库存储
1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入“add”,可以对通 ...
- 将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成
将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成. 代码比较乱,但是方法还是对的,大家又需要的选择看,希望对博友 有帮助,欢迎留言分享! public class s ...
- 利用数据库视图实现WEB查询敏感信息接口动态脱敏
前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...
- python实现atm机基本操作及购物车
一.需求分析 ATM机要为用户提供转账,提现,还款,付款,消费流水,操作记录等操作接口 ATM机要为管理员提供创建用户,冻结解冻,修改额度的功能 ATM机管理员认证使用装饰器来实现 购物车要提供管理员 ...
随机推荐
- loadrunner写入数据到文件
首先在F盘创建: F:\\LR\\test.txt文件 #define USERCOUNT 100 //定义参数数量 Action() { char *namecommon=" ...
- poj3616 LIS变形
题目链接:http://poj.org/problem?id=3616 题意:给出m组数据a,b,c代表在第a分钟到第b分钟产生c个效益,问最大产生多少效益(区间不能重叠,每次工作完必须歇息R分钟) ...
- TCP Wrapper 特殊使用
更多,更好内容请参见: http://www.ibm.com/developerworks/cn/aix/library/au-tcpwrapper/ 一. 用处和用法 没有符合hosts.allow ...
- uva748 - Exponentiation
import java.io.*; import java.text.*; import java.util.*; import java.math.*; public class Exponenti ...
- linux ubuntu的root密码
安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可 ...
- Storm-166:Nimbus HA solution based on Zookeeper
Nimbus HA feature is quite important for our application running on the storm cluster. So, we've bee ...
- 2017亚洲VR&AR博览会暨高峰论坛
2017亚洲VR&AR博览会暨高峰论坛 2017 Asia VR&AR Fair & Summit(VR&AR Fair 2017) 活动介绍活动时间: 2017年3月 ...
- Leap Motion发布新平台,直击下一代移动端VR/AR手部追踪
2013年,动作捕捉技术公司Leap Motion发布了面向PC的体感控制器,不过销量并不乐观.随着2014年虚拟现实技术的再一次兴起,它发布一款用于Oculus Rift的附加设备,从而正式登上VR ...
- Android的Proxy/Delegate Application框架 (主要介绍插件化开发)
1. 插件化的原理 是 Java ClassLoader 的原理:Java ClassLoader基础 常用的其他解决方法还包括:Google Multidex,用 H5 代替部分逻辑,删无用代码,买 ...
- Reids 主从同步
安装Redis(主从两个装在同一服务器上) 参考地址:http://www.cnblogs.com/kgdxpr/p/3550633.html 主安装在“/usr/local/redis-Master ...