第一次尝试使用JAVA编写的ATM机程序
package study;
import java.util.Scanner;
public class ATM {
private static int[] users = { 111111, 222222, 333333, 444444, 555555,
666666, 777777, 888888, 999999 };// 定义数据库账户组
private static int[] passwords = { 111111, 222222, 333333, 444444, 555555,
666666, 777777, 88888, 999999 };// 定义数据库密码组
private static double[] money = { 99999, 88888, 77777, 66666, 55555, 44444,
33333, 22222, 11111 };// 定义数据库账户初始余额组
private static int maxRemainingMoney = 150000;// 初始化时ATM机内默认的剩余金额是15万
private static int maxMoney = 200000;// 最大金额容量为20万
private static int maxDrawingMoney = 100000;// 最大取款限额为10万
private static int I;// 定义登录账户在数据库账户组的下标值
// 主方法
public static void main(String[] args) {
login();// 跳转至验证功能
}
// 验证账号和密码(无参无返回值方法)
public static void login() {
for (int i = 1; i <= 3; i++) {
System.out.println("请输入账号:");// 提示用户输入账户
Scanner userSc = new Scanner(System.in);
int userIn = userSc.nextInt();
System.out.println("请输入密码:");// 提示用户输入密码
Scanner passwordSc = new Scanner(System.in);
int passwordIn = passwordSc.nextInt();
for (int j = 0; j < users.length; j++) {// 判断输入账户和密码是否匹配数据库
if (userIn == users[j] && passwordIn == passwords[j]) {
I = j;// 匹配成功,将当前账户在数据库中的账户组的下标值赋值给I
welcome();// 跳转至欢迎界面
} else if (i == 1 && j == users.length - 1) {// 第一次输入错误
System.out.println("账号或密码错误,请重新输入!");
} else if (i == 2 && j == users.length - 1) {// 第二次输入错误
System.out.println("账号或密码错误,请重新输入!");
System.out.println("这是您的最后一次输入机会,若账号或密码错误,将锁定您的银行卡");
} else if (j == users.length - 1) {// 第三次输入错误
System.out.println("您的错误次数超过限制,请联系相关银行!");
System.exit(0);// 三次错误后,程序终止
}
}
}
}
// 欢迎界面(无参无返回值方法)
public static void welcome() {
System.out.println("—————————————————————————————————————");
System.out.println("|1.查询余额 3.存款|");
System.out.println("|check account deposit|");
System.out.println("| 欢迎使用 4.转账|");
System.out.println("| 自助ATM机 transfer|");
System.out.println("|2.取款 5.退出|");
System.out.println("|withdraw exit|");
System.out.println("—————————————————————————————————————");
choose();// 跳转至选择功能
}
// 执行选择功能(无参无返回值方法)
public static void choose() {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
switch (n) {
case 1:
System.out.println("您的余额为" + money[I] + " RMB");// 显示余额
before();// 跳转到返回界面
case 2:
drawing();// 取款
before();// 跳转到返回界面
case 3:
deposit();// 存款
before();// 跳转到返回界面
case 4:
beforeTransfer();// 转账
before();// 跳转到返回界面
case 5:
end();// 跳转至退出界面
default:
System.out.println("您的输入有误,请重新输入!");// 若输入的数字不在1~5范围内,则提示错误
System.out.println("1.查询余额 2.取款 3.存款 4.退出");
choose();// 重新执行本方法
}
}
// 返回功能(无参无返回值方法)
public static void before() {
System.out.println("——————————————————————————————————");
System.out.println("|1.返回主界面/return 2.退出/exit|");
System.out.println("——————————————————————————————————");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
switch (n) {
case 1:
welcome();// 跳转至欢迎界面
case 2:
end();// 跳转至退出界面
default:
System.out.println("您的输入有误,请重新输入!");// 若输入的数字不为1或2,则提示错误
before();// 重新执行本方法
}
}
// 退出界面(无参无返回值方法)
public static void end() {
System.out.println("———————————————————————————————————————");
System.out.println("|感谢您的使用,请保管好您的银行卡,再见 |");
System.out.println("|Thanks for using |");
System.out.println("———————————————————————————————————————");
System.exit(0);// 退出后程序终止
}
// 实现取款功能(无参无返回值方法)
public static void drawing() {
System.out.println("请输入取款金额:");// 提示用户输入取款金额
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n == 0) {
System.out.println("金额不能为零,请重新输入");
drawing();// 用户输入金额为零,重新开始执行本方法
} else if (n % 100 != 0) {
System.out.println("金额应为整百数,请重新输入");
drawing();// 用户输入金额不为整百,重新开始执行本方法
} else if (n < 0) {
System.out.println("金额应大于零,请重新输入");
drawing();// 用户输入金额小于零,重新开始执行本方法
} else if (n > money[I]) {
System.out.println("您卡内的余额不足,请重新输入");
drawing();// 用户输入金额超过余额,重新开始执行本方法
} else if (n > maxDrawingMoney) {
System.out.println("您输入的金额超出取款限度,请重新输入");
drawing();// 用户输入金额超出取款限度,重新开始执行本方法
} else if (n > maxRemainingMoney) {
System.out.println("抱歉,本机剩余金额不足,请重新输入");
drawing();// 本机余额不足,重新开始执行本方法
} else {// 若金额合法,则打印确定提示
System.out.println("您取款的金额为" + n + " RMB");
System.out.println("1.确定 2.重新输入");
Scanner sc1 = new Scanner(System.in);
int m = sc1.nextInt();
if (m == 1) {// 用户选择确定,开始取款
System.out.println("正在出钞,请稍候");
money[I] = money[I] - n;// 取款后当前账户余额减少
System.out.println("请取走您的钞票");
System.out.println("当前卡内余额" + money[I] + " RMB");// 显示当前账户余额
before();// 跳转到返回界面
} else if (m == 2) {
drawing();// 用户选择重新输入,重新开始执行本方法
} else {
System.out.println("您的输入有误,请重新输入!");
drawing();// 用户输入错误,重新开始执行本方法
}
}
}
// 实现存款功能(无参无返回值方法)
public static void deposit() {
System.out.println("请输入存款金额,并将钞票整理好后放入存钞口");// 提示用户输入存款金额
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n == 0) {
System.out.println("金额不能为零,请重新输入");
deposit();// 用户输入金额为零,重新开始执行本方法
} else if (n % 100 != 0) {
System.out.println("金额应为整百数,请重新输入");
deposit();// 用户输入金额不为整百,重新开始执行本方法
} else if (n < 0) {
System.out.println("金额应大于零,请重新输入");
deposit();// 用户输入金额小于零,重新开始执行本方法
} else if ((n + money[I]) > maxMoney) {
System.out.println("抱歉,存入后超出本机最大金额容量,请重新输入:");
deposit();// //用户输入金额超过本机容量,重新开始执行本方法
} else {// 若金额合法,则打印确定提示
System.out.println("您存款的金额为" + n + " RMB");
System.out.println("1.确定 2.重新输入");
Scanner sc1 = new Scanner(System.in);
int m = sc1.nextInt();
if (m == 1) {// 用户选择确定,开始存款
System.out.println("正在存钞,请稍候");
money[I] = money[I] + n;// 存款后当前账户余额增加
System.out.println("您成功存入" + n + " RMB");
System.out.println("当前卡内余额" + money[I] + " RMB");// 显示当前账户余额
before();// 跳转到返回界面
} else if (m == 2) {
deposit();// 用户选择重新输入,重新开始执行本方法
} else {
System.out.println("您的输入有误,请重新输入!");
deposit();// 用户输入错误,重新开始执行本方法
}
}
}
// 转账判断(无参有返回值方法)
public static int beforeTransfer() {
int II = -1;// 定义转入账户在数据库账户组的下标值
System.out.println("请输入需要转账的账户:");// 提示用户输入转入账户
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
if (a == users[I]) {// 判断用户输入的转入账户是否为当前登录账户
System.out.println("您不能给自己转账!");// 若是则提示不能给自己转账
beforeTransfer();// 出现错误,重新开始执行本方法
}
for (int i = 0; i < users.length; i++) {// 将用户输入的转入账户匹配数据库中的账户组
if (a == users[i]) {// 若匹配成功,则打印确定提示
System.out.println("您转账的账户为" + users[i]);
System.out.println("1.确定 2.重新输入");
Scanner sc1 = new Scanner(System.in);
int n = sc1.nextInt();
if (n == 1) {// 用户选择确定,执行跨行判断
II = i;
if ((I >= 5 && II < 5) || (I < 5 && II >= 5)) {// 判断是否为跨行转账,是则显示手续费提示
System.out.println("跨行转账将收取您1%的手续费,不足1元按1元收取,每笔转账最多收取50元");
}
transfer(II);// 跳转至转账功能
} else if (n == 2) {
beforeTransfer();// 用户选择重新输入,重新开始执行本方法
} else {
System.out.println("您的输入有误,请重新输入!");
beforeTransfer();// 用户输入错误,重新开始执行本方法
}
} else if (i == users.length - 1) {
System.out.println("您输入的账户不存在,请重新输入!");
beforeTransfer();// 用户输入的账户不存在,重新开始执行本方法
}
}
return II;// 返回转入账户在数据库账户组的下标值,以便转账功能中引用
}
// 实现转账功能(带参无返回值方法)
public static void transfer(int II) {
System.out.println("请输入转账金额:");// 提示用户输入转账金额
Scanner sc = new Scanner(System.in);
float n = sc.nextFloat();
if (n == 0) {
System.out.println("金额不能为零,请重新输入");
transfer(II);// 用户输入金额为零,重新开始执行本方法
} else if (n < 0) {
System.out.println("金额应大于零,请重新输入");
transfer(II);// 用户输入金额小于零,重新开始执行本方法
} else if (n > money[I]) {
System.out.println("您卡内的余额不足,请重新输入");// 用户余额不足,重新开始执行本方法
transfer(II);
} else {// 若金额合法,则打印确定提示
System.out.println("您转账的金额为" + n + " RMB");
System.out.println("1.确定 2.重新输入");
Scanner sc1 = new Scanner(System.in);
int m = sc1.nextInt();
if (m == 1) {// 用户选择确定,开始转账
System.out.println("转账成功");
if ((I >= 5 && II < 5) || (I < 5 && II >= 5)) {// 判断是否为跨行转账,是则收取手续费
if (n * 0.01 < 1) {
money[I] = money[I] - 1;// 不足1元按1元收取手续费
} else if (n * 0.01 > 50) {
money[I] = money[I] - 50;// 超过50元按50元收取手续费
} else {
money[I] = money[I] - n * 0.01;// 正常收取手续费
}
}
money[I] = money[I] - n;// 当前账户扣除转账的钱
money[II] = money[II] + n;// 被转账户增加转账的钱
System.out.println("当前卡内余额" + money[I] + " RMB");// 打印当前账户扣款后的余额
for (int i = 0; i < money.length; i++) {// 打印所有账户余额,目的是判断程序是否正确执行
System.out.print("第" + (i + 1) + "位用户目前的余额为" + money[i]
+ " ");
System.out.println();
}
before();// 跳转到返回界面
} else if (m == 2) {
transfer(II);// 用户选择重新输入,重新开始执行本方法
} else {
System.out.println("您的输入有误,请重新输入!");
transfer(II);// 用户输入错误,重新开始执行本方法
}
}
}
}
第一次尝试使用JAVA编写的ATM机程序的更多相关文章
- JAVA - ATM机程序
ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...
- 用java实现一个ATM机系统(2.0版)
用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...
- 第一次尝试学习java 安装jdk 与配置环境变量 写第一个java程序 并运行
第一次学习java,今天知道了java之父叫 詹姆斯.高司令 其它的记不住太多,首先我们先来安装jdk 百度搜索jdk12 (现在的jdk为12版本)安装稳定版 找到javaSE12X.. 下 ...
- JAVA编写的断点续传小程序
上了一周的课,今天终于可以休息了,太棒了,今天闲着无聊使用java语言写了一个断点续传的小程序来分享给大家, 首先要下载个用于网络请求的框架:我这里给出地址,是用的Apache的HttpClient: ...
- java编写简单的累加程序
编程思路:1.建立类包demo: 2.在类包中建立CommanParameter类: 3.利用for循环通过强制类型转换将在后台中输入的String类型的字符转换为整型并进进累加操作: package ...
- java 编写小工具 尝试 学习(七)
1.在java 编写小工具 尝试 学习(六)里学会了,控件 的随意摆放, 以及大小(x,y,width,height),又根据前面学习的按钮 被点击 的事件监控 的方法 ,点击 按钮 在显示区域显示“ ...
- 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- 连接数据库——模拟ATM机查、存、取、开户功能
1.界面:包含开户.查询.存款.取款.功能 package com.bank.test; /** * * @author Administrator *界面类 */ public class Jiem ...
随机推荐
- xml之phpdom操作
php xml编程XML解析技术介绍 1.php与DOM 2.PHP与XPath 3.SimpleXML DOM(document object model)文档对象模型 把一个文件看做一个对象模型, ...
- jinja2 宏的简单使用总结(macro)
Table of Contents 1. 简介 2. 用法 3. 参数和变量 4. 注意事项 4.1. macro的变量只能为如下三种: 4.2. 和block的关系: 5. 参考文档 1 简介 ji ...
- 从IT的角度思考BIM(三):敏捷开发
人们看到了远处BIM的美丽胜景和阻挡在眼前的宽广河流.有些人自信满满地跳入河中打算孤身游过彼岸,可是却失败了.有些人匆匆忙忙地造了船胡乱地滑向彼岸,可是也失败了. 要如何继续这段探索之旅? 无论是&l ...
- shell脚本学习积累笔记(第一篇)
(1)首先,今天在执行shell脚本./test.sh时抛出“/bin/sh^M: bad interpreter: No such file or directory”的异常,百度后,才知道这是由于 ...
- 在开发项目中有些常用的的实用代码(ps:平时看着无关紧要的,却很容易忘记)
1,在客户端使用Cookie document.cookie = "key=1"; document.cookie = "name=zhangsan"; coo ...
- the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header
the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header ...
- Matlab中Rand()函数用法
一.理论准备 matlab函数randn:产生均值为0,方差 σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数. 用法:Y = randn(n),返回一个n*n的随机项的矩阵.如果n不是 ...
- layer.js:2 Uncaught TypeError: Cannot read property 'extend' of undefined
在引用layer.js插件进行前端编程的时候,如果报这个错,解决办法只需: 把layer的引用放在有冲突的js库前面就行了
- 李洪强iOS开发-网络新闻获取数据思路回顾
李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据 1.1 定义类方法返回单例对 ...
- 周鸿祎——不要抱着打工心态去工作,而是把工作当创业(附读书笔记) good
360周鸿祎反而最为开明,他说“不要抱着打工心态去工作,而是把工作当创业”,就像是,鼓励你拿着公司的工资,锻炼自己的能力,为自己以后创业积累资源和人脉(读书笔记:真是天底下最好的机会,天底下没有比工作 ...