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. php访问控制

    访问控制 访问控制通过关键字public,protected和private来实现.被定义为公有的类成员可以在任何地方被访问.被定义为受保护的类成员则可以被其自身以及其子类和父类访问.被定义为私有的类 ...

  2. magento install

    1: apt-get insatll   apache2  mysql  php5 2: 把下载的magneto 解压后放到  /var/www/magento 3: 进入   http://127. ...

  3. Educational Codeforces Round 6 C. Pearls in a Row

    Educational Codeforces Round 6 C. Pearls in a Row 题意:一个3e5范围的序列:要你分成最多数量的子序列,其中子序列必须是只有两个数相同, 其余的数只能 ...

  4. source insight添加汇编文件.s

    (1) 做ARM嵌入式开发时,有时得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来,默认只加了.inc和.asm后缀的, ...

  5. 2、.net NVelocity中原生javascript ajax封装使用

    在页面上,我们经常会遇到局部刷新的例子,这个时候,就需要用到ajax, 因为很多代码都是公用的,所以我们想到了,将代码封装,简化了使用,减少了冗余 javascript ajax代码如下: var x ...

  6. 双积分式(A/D)转换器电路结构及工作原理

    1.转换方式 V-T型间接转换ADC. 2.  电路结构 图1是这种转换器的原理电路,它由积分器(由集成运放A组成).过零比较器(C).时钟脉冲控制门(G)和计数器(ff0-ffn)等几部分组成 图1 ...

  7. 图表插件——Highcharts插件的使用(一柱状图)

    1.下载Highcharts插件 官方下载网址:http://www.highcharts.com/download 2.引入需要的js文件 <script src="~/Script ...

  8. ACMer程序员智力拾遗

           浏览网页偶得,遂记录下来,每天进步一点点--        博客园真是个不错的平台,今天我让师姐也注册了--        学会分享吧,孩子们-- 一.编程中无穷大量的设置        ...

  9. uva 11922 - Permutation Transformer

    splay的题: 学习白书上和网上的代码敲的: #include <cstdio> #include <cstring> #include <cstdlib> #i ...

  10. Yii modules中layout文件的调用

    在YII中,如果我们使用了modules区分了前后台,那么在不同的modules中需要使用各自的layout文件,在使用中发现经常会调用不到modules中的layout,下面介绍一下如何才能正确的调 ...