atm设计java
‘壹’ 如何用java编写模拟ATM取款机的程序
import java.io.IOException;
/**
* ATM机类
*
* 查看余额
*
* 取款
*
* 存款
*
* 退出系统
*
*
*
*/
public class ATM {
static double yue = 1200.00;
public static void main(String[] arg) {
ATM localTest1 = new ATM();
localTest1.ATM_Operate();
}
/**
* ATM机的操作
*/
private void ATM_Operate() {
System.out.println("欢迎使用中国工商银行ATM取款机");
System.out.println("1、查看余额 2、取款");
System.out.println("3、存款 0、退出");
System.out.print("请输入您需要的服务:");
byte[] buffer = new byte[512];
try {
int count = System.in.read(buffer);// 返回实际读取的字节数
System.out.print("您输入的是:");
for (int i = 0; i < count; i++) {
System.out.print("" + (char) buffer[i]);
}
if ((char) buffer[0] == '1') {
// 查看余额
System.out.println("您的余额是:¥" + yue + "元");
System.out.println();
ATM_Operate();
} else if ((char) buffer[0] == '2') {
// 取款
withdrawal();
System.out.println();
ATM_Operate();
} else if ((char) buffer[0] == '3') {
// 存款
deposit();
System.out.println();
ATM_Operate();
} else if ((char) buffer[0] == '0') {
// 退出
System.out.println("您已经成功退出系统,谢谢你的使用");
System.exit(0);
} else {
System.out.println("输入不合法,请重新输入");
System.out.println();
ATM_Operate();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 取款
*
* @throws IOException
*/
private void withdrawal() throws IOException {
byte[] buffer = new byte[512];
System.out.print("请输入您要取出的金额:¥");
int count2 = System.in.read(buffer);// 返回实际读取的字节数
System.out.print("您输入的金额是:");
for (int i = 0; i < count2 - 1; i++) {
System.out.print("" + (char) buffer[i]);
}
System.out.println();
// 字符0 ~ 9对应ASCII值48 ~ 57
boolean flag = false;
for (int i = 0; i < count2 - 1; i++) {
if ((char) buffer[i] > 47 && (char) buffer[i] < 58) {
if (i == count2 - 2) {
flag = true;
}
} else {
// 输入的字符不是数值
System.out.println("输入不合法,请重新输入");
withdrawal();
break;
}
}
System.out.println();
if (flag) {
System.out.print("您已成功取出¥:");
String num = "";
for (int i = 0; i < count2 - 1; i++) {
System.out.print("" + (char) buffer[i]);
num += (char) buffer[i];
}
yue -= Double.valueOf(num);
System.out.print(",现在余额¥:" + yue);
}
}
/**
* 存款
*
* @throws IOException
*/
private void deposit() throws IOException {
byte[] buffer = new byte[512];
System.out.print("请输入您要存入的金额:¥");
int count2 = System.in.read(buffer);// 返回实际读取的字节数
System.out.print("您输入的金额是:");
for (int i = 0; i < count2 - 1; i++) {
System.out.print("" + (char) buffer[i]);
}
System.out.println();
// 字符0 ~ 9对应ASCII值48 ~ 57
boolean flag = false;
for (int i = 0; i < count2 - 1; i++) {
if ((char) buffer[i] > 47 && (char) buffer[i] < 58) {
if (i == count2 - 2) {
flag = true;
}
} else {
// 输入的字符不是数值
System.out.println("输入不合法,请重新输入");
withdrawal();
break;
}
}
System.out.println();
if (flag) {
System.out.print("您已成功存入¥:");
String num = "";
for (int i = 0; i < count2 - 1; i++) {
System.out.print("" + (char) buffer[i]);
num += (char) buffer[i];
}
yue += Double.valueOf(num);
System.out.print(",现在余额¥:" + yue);
}
}
}
‘贰’ JAVA设计虚拟ATM机。其中数据库怎么设计(详细的数据库设计)。。。。知道的告诉我一下!谢谢拉
最后一列为备注
1、 管理员表(tb_admin)
字段 类型 约束 备注
aId number(6) 主键 --管理员编号
aName varchar2(10) 唯一、非空 --管理员登陆名
aPassword varchar2(16) 非空 --管理员登陆密码
aLastDate date 非空 --上次登陆时间
aNowDate date 非空 --本次登陆时间
2、 银行卡登陆表(tb_login)
字段 类型 约束 备注
lId number(8) 主键 --登录ID
lCardNumber varchar2(19) 引用银行卡信息表 卡号
lPassword number(6) 非空 银行卡密码
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) 非空 客户身份证号码
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、 银行卡信息表(tb_CardInfo)
字段 类型 约束 备注
bCardID number(19) 主键 卡号
bBalance number(8,2) 默认0.00 余额
bUserId number(8) 引用客户详细资料表 卡对应用户ID
bBranchID number(4) 引用支行表 支行ID
bDate date 默认系统时间 开户时间
6、 银行卡交易类型表(tb_TransType)
字段 类型 约束 备注
tId number(2) 主键 类型ID
tType nvarchar2(6) 唯一 类型(转账、存款、取出等)
7、 银行卡个人账户存、取款记录表(tb_ Pacount)
字段 类型 约束 备注
tId number(10) 主键 交易记录流水号
tType number(2) 引用交易类型表 交易类型ID
tCardID number(19) 引用银行卡信息表 交易卡号
tamount number(10) 非空 交易金额
tDate date 非空 交易时间
8、 银行卡转账等交易记录表(tb_TransInfo)
字段 类型 约束 备注
tId number(10) 主键 交易记录流水号
tType number(2) 引用交易类型表 交易类型ID
tCardIDout number(19) 引用银行卡信息表 交易金额转出卡号
tCardIDIn number(19) 引用银行卡信息表 交易金额转入卡号
tamount number(10) 非空 交易金额
tDate date 非空 交易时间
‘叁’ 用java做一个简易的ATM机具体流程在下面
代码如下
packageBaiD;
importjava.util.Scanner;
publicclassATM{
/*1提示请输入密码然后直接进入下一步。密码6位限制(限制方法用“最小大于100000最大小于999999”这样限制)
2.提示密码正确还是错误密码直接弄成“123456”错误返回上一步循环方法用for循环。
3.密码输入正确后进入下一步提示5个选项(1.余额查询“基础10000”2.取款3存款4.退出)
4.进行取款或者存款之后要回到第三步重新选择(余额和取款存款相关联)
备注:用键盘输入的方法用scanner*/
privatestaticintmoney=10000;//全局变量余额默认10000
publicstaticvoidmain(Stringargs[])
{
for(;;){//for循环,有意思吗?
System.out.println("请输入密码:");
Scannerinput=newScanner(System.in);
intpw=input.nextInt();
if(Checkpw(pw)){
System.out.println("密码正确。");
Next();
}
elseSystem.out.println("密码错误!");
}
}
publicstaticbooleanCheckpw(intpw)
{
if(pw==123456)returntrue;//固定密码就不需要限制位数了,反正不符合就错
else
returnfalse;
}
publicstaticvoidNext(){
do{
System.out.println("请选择你需要的功能:");
System.out.println("1.余额查询2.取款3.存款4.退出");
intvalue=newScanner(System.in).nextInt();
switch(value){
case1://查询余额
System.out.println("您的余额为"+money+"元");
break;
case2://取款
System.out.println("请输入取款金额:");
intgetnum=newScanner(System.in).nextInt();
if(getnum<0)System.out.println("输入金额有误!");
elseif(getnum>money)System.out.println("余额不足.");
else{money=money-getnum;System.out.println("取款成功,余额为"+money);}
break;
case3://存款
System.out.println("请输入存款金额:");
intpushnum=newScanner(System.in).nextInt();
if(pushnum<0)System.out.println("输入金额有误!");
else{money=money+pushnum;System.out.println("存款成功,余额为"+money);}
break;
case4://退出
System.out.println("谢谢使用!");
System.exit(0);
break;
default:
System.out.println("输入有误");
break;
}
}while(true);
}
}
2、运行效果
‘肆’ java编写的模拟ATM取款机程序
我现写的: import java.util.Scanner;public class ATM {
private static String theName = "admin";
private static String thePassword = "123456";
private static int balance = 10000;
public static void getBalance(){
System.out.println("当前余额:" + balance);
}
public static void drawMoney(Scanner sc){
int money = 0;
System.out.println("请输入取款金额:");
money = sc.nextInt();
String type = "";
if (balance > 0) {
if (balance >= money) {
if (money <= 5000) {
balance = balance - money;
type = "请在30秒内提取现金...\n剩余余额:"+balance;
} else if (money <= 0) {
type = "金额错误";
} else {
type = "超出最大限制金额";
}
} else {
type = "超出最大余额";
}
} else {
type = "余额不足";
}
System.out.println(type);
}
public static void bankMoney(Scanner sc){
int money = 0;
System.out.println("请输入存储金额:");
money = sc.nextInt();
String type = "";
if (money > 0) {
balance = balance + money;
type = "存储成功,现有余额:" + balance;
} else {
type = "存储金额不能为负";
}
System.out.println(type);
}
public static void updatePass(Scanner sc){
String oldPass = "";
String newPass1 = "";
String newPass2 = "";
while(true){
System.out.println("请输入原密码:");
oldPass = sc.next();
if (oldPass.equals(thePassword)) {
break;
} else {
System.out.println("密码错误,请重新输入");
}
}
while(true){
System.out.println("请输入新密码");
newPass1 = sc.next();
System.out.println("再次输入");
newPass2 = sc.next();
if (newPass1.equals(newPass2)) {
if (!isSame(newPass1)) {
thePassword = newPass1;
System.out.println("修改成功");
break;
} else {
System.out.println("所有字符不能相同,重新输入");
}
} else {
System.out.println("两次输入不一致,重新输入");
}
}
}
public static boolean isSame(String string){
boolean bool = false;
for (int i = 0; i < string.length() - 1; i++) {
char char1 = string.charAt(i);
for (int j = i + 1; j < string.length(); j++) {
char char2 = string.charAt(j);
if (char1 == char2) {
bool = true;
break;
}
}
}
return bool;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
String name = "";
String password = "";
System.out.println("请输入账号:");
name = sc.next();
System.out.println("请输入密码:");
password = sc.next();
if (name.equals(theName) && password.equals(thePassword)) {
break;
} else {
System.out.println("账号或密码错误,请重新输入!");
}
}
while(true){
int operate = 0;
System.out.println("请选择你要进行的操作:\n1、查询 2、取款 3、存款 4、修改密码 0、退出");
operate = sc.nextInt();
if (0 == operate) {
System.out.println("谢谢使用!");
break;
} else if (1 == operate) {
getBalance();
} else if (2 == operate) {
drawMoney(sc);
} else if (3 == operate) {
bankMoney(sc);
} else if (4 == operate) {
updatePass(sc);
}
}
}
}