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机程序的更多相关文章

  1. JAVA - ATM机程序

    ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ // ...

  2. 用java实现一个ATM机系统(2.0版)

    用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...

  3. 第一次尝试学习java 安装jdk 与配置环境变量 写第一个java程序 并运行

    第一次学习java,今天知道了java之父叫  詹姆斯.高司令 其它的记不住太多,首先我们先来安装jdk 百度搜索jdk12   (现在的jdk为12版本)安装稳定版 找到javaSE12X..  下 ...

  4. JAVA编写的断点续传小程序

    上了一周的课,今天终于可以休息了,太棒了,今天闲着无聊使用java语言写了一个断点续传的小程序来分享给大家, 首先要下载个用于网络请求的框架:我这里给出地址,是用的Apache的HttpClient: ...

  5. java编写简单的累加程序

    编程思路:1.建立类包demo: 2.在类包中建立CommanParameter类: 3.利用for循环通过强制类型转换将在后台中输入的String类型的字符转换为整型并进进累加操作: package ...

  6. java 编写小工具 尝试 学习(七)

    1.在java 编写小工具 尝试 学习(六)里学会了,控件 的随意摆放, 以及大小(x,y,width,height),又根据前面学习的按钮 被点击 的事件监控 的方法 ,点击 按钮 在显示区域显示“ ...

  7. 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!

    网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...

  8. 模拟ATM机银行系统

    淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...

  9. 连接数据库——模拟ATM机查、存、取、开户功能

    1.界面:包含开户.查询.存款.取款.功能 package com.bank.test; /** * * @author Administrator *界面类 */ public class Jiem ...

随机推荐

  1. xml之phpdom操作

    php xml编程XML解析技术介绍 1.php与DOM 2.PHP与XPath 3.SimpleXML DOM(document object model)文档对象模型 把一个文件看做一个对象模型, ...

  2. jinja2 宏的简单使用总结(macro)

    Table of Contents 1. 简介 2. 用法 3. 参数和变量 4. 注意事项 4.1. macro的变量只能为如下三种: 4.2. 和block的关系: 5. 参考文档 1 简介 ji ...

  3. 从IT的角度思考BIM(三):敏捷开发

    人们看到了远处BIM的美丽胜景和阻挡在眼前的宽广河流.有些人自信满满地跳入河中打算孤身游过彼岸,可是却失败了.有些人匆匆忙忙地造了船胡乱地滑向彼岸,可是也失败了. 要如何继续这段探索之旅? 无论是&l ...

  4. shell脚本学习积累笔记(第一篇)

    (1)首先,今天在执行shell脚本./test.sh时抛出“/bin/sh^M: bad interpreter: No such file or directory”的异常,百度后,才知道这是由于 ...

  5. 在开发项目中有些常用的的实用代码(ps:平时看着无关紧要的,却很容易忘记)

    1,在客户端使用Cookie document.cookie = "key=1"; document.cookie = "name=zhangsan"; coo ...

  6. 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 ...

  7. Matlab中Rand()函数用法

    一.理论准备 matlab函数randn:产生均值为0,方差 σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数. 用法:Y = randn(n),返回一个n*n的随机项的矩阵.如果n不是 ...

  8. layer.js:2 Uncaught TypeError: Cannot read property 'extend' of undefined

    在引用layer.js插件进行前端编程的时候,如果报这个错,解决办法只需: 把layer的引用放在有冲突的js库前面就行了

  9. 李洪强iOS开发-网络新闻获取数据思路回顾

    李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据  1.1 定义类方法返回单例对 ...

  10. 周鸿祎——不要抱着打工心态去工作,而是把工作当创业(附读书笔记) good

    360周鸿祎反而最为开明,他说“不要抱着打工心态去工作,而是把工作当创业”,就像是,鼓励你拿着公司的工资,锻炼自己的能力,为自己以后创业积累资源和人脉(读书笔记:真是天底下最好的机会,天底下没有比工作 ...