最后一列为备注 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编程设计一个银行账户类,其中包括以下内容,并用字符界面模拟存款和取款过程。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)