一个用java模拟ATM机的代码且数据库为mysql,

一个用java模拟ATM机的代码且数据库为mysql,,第1张

最后一列为备注 1、 管理员表(tb_admin) 字段 类型 约束 备注 aId number(6) 主键 --管理员编号 aName varchar2(10) 唯一、非空 --管理员登陆名 aPassword varchar2(16) 非空 --管理员登陆密码 aLastDate date 非空 --上次登陆时间 aNowDate date 非空 --本次登陆时间 2、 yhk登陆表(tb_login) 字段 类型 约束 备注 lId number(8) 主键 --登录ID lCardNumber varchar2(19) 引用yhk信息表 卡号 lPassword number(6) 非空 yhk密码 bIsLock char(1) 默认1 是否被锁,0表示被锁,1表示开启 lTime number(10) 初始为0 登陆次数 aLastDate date 非空 上次登陆时间 aNowDate date 非空 本次登陆时间 3、 客户详细资料表(tb_userInfo) 字段 类型 约束 备注 usId number(8) 主键 客户ID usName varchar2(10) 非空 客户姓名 usIDNumber varchar2(18) 非空 客户身份z号码 usSex char(1) 默认0 客户性别,0表示男,1表示女 usTel varchar2(11) 非空 客户电话 usAddress varchar2(50) 非空 客户地址 4、 银行支行表(tb_Branch) 字段 类型 约束 备注 bId number(3) 主键 支行ID bName varchar2(20) 唯一、非空 支行名 bAddress varchar2(100) 非空 支行地址 5、 yhk信息表(tb_CardInfo) 字段 类型 约束 备注 bCardID number(19) 主键 卡号 bBalance number(8,2) 默认000 余额 bUserId number(8) 引用客户详细资料表 卡对应用户ID bBranchID number(4) 引用支行表 支行ID bDate date 默认系统时间 开户时间 6、 yhk交易类型表(tb_TransType) 字段 类型 约束 备注 tId number(2) 主键 类型ID tType nvarchar2(6) 唯一 类型(转账、存款、取出等) 7、 yhk个人账户存、取款记录表(tb_ Pacount) 字段 类型 约束 备注 tId number(10) 主键 交易记录流水号 tType number(2) 引用交易类型表 交易类型ID tCardID number(19) 引用yhk信息表 交易卡号 tamount number(10) 非空 交易金额 tDate date 非空 交易时间 8、 yhk转账等交易记录表(tb_TransInfo) 字段 类型 约束 备注 tId number(10) 主键 交易记录流水号 tType number(2) 引用交易类型表 交易类型ID tCardIDout number(19) 引用yhk信息表 交易金额转出卡号 tCardIDIn number(19) 引用yhk信息表 交易金额转入卡号 tamount number(10) 非空 交易金额 tDate date 非空 交易时间

ATM系统势必要把,安全性放在第一位,那么用Java的多线程以及锁可以解决多用户 *** 作统一账户的情况,关于每登录进来一个账户,也可以写一个事件监听,关于异常也就是你说的取款记得要用同步锁(synchronized) ,还有什么不明白的吗

import javautilScanner;

public class ZH {

private String zh;//账户

 private String password;//密码

 private String openTime;//开户时间

 private String sfz;//身份z号

 private double je;//存款金额

 public String getZh() {

  return zh;

 }

 public void setZh(String zh) {

  thiszh = zh;

 }

 public String getPassword() {

  return password;

 }

 public void setPassword(String password) {

  thispassword = password;

 }

 public String getOpenTime() {

  return openTime;

 }

 public void setOpenTime(String openTime) {

  thisopenTime = openTime;

 }

 public String getSfz() {

  return sfz;

 }

 public void setSfz(String sfz) {

  thissfz = sfz;

 }

 public double getJe() {

  return je;

 }

 public void setJe(double je) {

  thisje = je;

 }

 

 //存款方法

 public void ck(double je){

  thisje=thisje+je;//存入的金额加上原有的金额

 }

 

 //取款方法

 public void qk(double je){

  if(je>thisje){//取款金额大于余额

   Systemoutprintln("存款余额不足");

  }else{

   thisje=thisje-je;//原有的金额减去取出的金额

  }

 }

 public static void main(String[] args) {

  ZH zh = new ZH();//初始化一个账户信息

  zhsetJe(100000);//向zh账户添加余额

  zhsetOpenTime("2013123");//向zh账户添加开发时间

  zhsetPassword("123456");//向zh账户添加密码

  zhsetSfz("123456789");//向zh账户添加身份z

  zhsetZh("zhangsan");//向zh账户添加账号

  Systemoutprintln("欢迎光临模拟银行");

  Scanner scan = new Scanner(Systemin);

  int count=0;//记录输入错误的次数

  while(1==1){//循环

   Systemoutprintln("请输入账号");

   String zhm=scannext();

   Systemoutprintln("请输入密码");

   String mm=scannext();

   if(zhmequals(zhgetZh()) && mmequals(zhgetPassword())){//输入的信息与zh账户信息的密码和账号一致

    while(1==1){

     Systemoutprintln("当前余额为:"+zhgetJe()+"元。请选择 *** 作:1存款;2取款;3退出(只能输入数字)");

     String cz=scannext();

     switch (IntegerparseInt(cz)) {

     case 1:

      Systemoutprintln("请输入存款金额(输入小数)");

      double ckje=scannextDouble();

      zhck(ckje);

      Systemoutprintln("实施存款:"+ckje+"元,当前余额为"+zhgetJe()+"元");

      break;

     case 2:

      Systemoutprintln("请输入取款金额(输入小数)");

      double qkje=scannextDouble();

      zhqk(qkje);

      Systemoutprintln("实施取款:"+qkje+"元,当前余额为"+zhgetJe()+"元");

      break;

     case 3:

      break;

     default:

      Systemoutprintln("暂无此功能");//输入1或者2、3以外的 *** 作

      break;

     }

     if("3"equals(cz)){

      break;

     }

    }

    Systemoutprintln("退出 *** 作");

    break;

   }else{

    

    if(count>=3){

     Systemoutprintln("已输入错误三次,账号被锁");

     break;//结束循环

    }else{

     Systemoutprintln("账号或密码错误,请重新输入");

     count++;//错误一次count+1

     continue;//进入下次循环

    }

   }

  }

  

 }

}

class ATM{ private double balance; public double getBalance(){ return balance; } public void setBalance(double balance){ thisbalance=balance; }//根据用户ID查询余额 public double getBalance(String NO){ //加载数据库驱动; //建立数据库连接; double balance=//执行查询语句并返回结果集; return balance; } }public class ATMTest{ public void main(String[] args){ ATM atm=new ATM(); double balance=atmgetBalance("123"); Systemoutprintln(balance); }}

public class ATM {

public static void main(String[] args) {

// 开立帐号

Account account = new Account();

// 在 account 中存 10,000 元

accountsetBalance(10000);

// 检查 account 中的存款

Systemoutprintln("帐户原始金额 : " + accountgetBalance() + " 元");

// 小明, 小华与小英一起对 account 进行提款的动作

WithDraw s1 = new WithDraw("小明", account, 5000); // 小明 在 account 中提 5000 元

WithDraw s2 = new WithDraw("小华", account, 2000); // 小华 在 account 中提 2000 元

WithDraw s3 = new WithDraw("小英", account, 4000); // 小英 在 account 中提 4000 元

s1start();

s2start();

s3start();

}

}

//帐户

class Account {

private int balance; // 帐户馀额

public int getBalance() { // 取得帐户馀额

return balance;

}

public void setBalance(int money) { // 设定帐户馀额

balance = money;

}

// 提款方法

public void withDraw(Account account, int withdrawMoney) {

String tName = ThreadcurrentThread()getName(); // tName=提款人

Systemoutprintln(tName + " 开始提款 ");

boolean withDrawStatus; // 提款状态 说明:false=提款失败, true=提款成功

synchronized(ATMclass) {

int tmpBalabce = accountgetBalance(); // 取得最新帐户馀额

//用 for-loop 模拟提款时系统所花的时间

for(double delay=0;delay<99999999;delay++) {

// 提款进行中

}

tmpBalabce = tmpBalabce - withdrawMoney; // 最新帐户馀额 - 欲提款金额 (用来判断是否馀额足够的依据)

if (tmpBalabce < 0) { // 判断是否馀额足够

withDrawStatus = false;

Systemoutprintln("");

Systemoutprintln(" 帐户馀额不足!");

Systemoutprintln("");

} else {

withDrawStatus = true;

accountsetBalance(tmpBalabce); // 回存account最後剩馀金额

}

}

Systemoutprintln(tName + "的交易单:");

Systemoutprintln("\t欲提款金额:" + withdrawMoney + "元");

Systemoutprintln("\t帐户馀额:" + accountgetBalance());

if(withDrawStatus == true){

Systemoutprintln(tName + " 完成提款 ");

} else {

Systemoutprintln(tName + " 提款失败 ");

}

Systemoutprintln("-------------------------------");

}

}

// 提款类别

class WithDraw extends Thread {

private Account account; // 帐号

private int withdrawMoney; // 欲提款的金额

// tName:执行绪名称, account:Account物件名称, withdrawMoney:欲提款金额

public WithDraw(String tName, Account account, int withdrawMoney) {

setName(tName);

thisaccount = account;

thiswithdrawMoney= withdrawMoney;

}

public void run() {

// 执行提款动作(account:帐号, withdrawMoney 欲提款金额)

accountwithDraw(account, withdrawMoney); // 执行提款动作

}

}

以上就是关于一个用java模拟ATM机的代码且数据库为mysql,全部的内容,包括:一个用java模拟ATM机的代码且数据库为mysql,、java项目编程----ATM系统、用JAVA编程设计一个银行账户类,其中包括以下内容,并用字符界面模拟存款和取款过程。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9776171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存