热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单Atm系统JAVA代码

packagecom.atm;importjava.util.Scanner;importjava.util.Timer;importjava.util.TimerTask;publiccl
package com.atm;


import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;


public class Em {

int balance=20000;
String password="123456";
int sum1;
int sum2;
Scanner sc=new Scanner(System.in);
//欢迎界面登陆界面
public void Welcome() throws Exception{
System.out.println("-----------------------欢迎使用xxxx银行ATM系统---------------------");
     System.out.println( "1.进入系统   \t2.退出\t");
     System.out.println("请选择:");
    int select=new Scanner(System.in).nextInt();
    switch(select){
    case 2:
    exit();
    break;
    case 1:    
    mima();   
    break;
    
    default:Welcome();
    }
}

//密码输入
public void mima() throws Exception{
int timer=0;
do{  
System.out.println("请输入密码:"); 
String pwd=sc.next();
  if(!pwd.equals(password)){
  System.out.println("密码错误,请重新输入");
 timer++;  
  }else{
 language();
 }
 
      }while(timer<3);
      System.out.println("由于输入的次数过多,您的卡已经被ATM吞掉,请联系工作人员!");
        exit();
}

//语言选择
public void language() throws Exception{
System.out.println("1.中文      2.英文");
System.out.println("请选择语言:");
int lan=sc.nextInt();
switch(lan){
case 1:
homepage();
break;
   case 2:
System.out.println("英文系统正在建设中....");
language();
break;
default:
System.out.println("只能输入1或者2");
language();
break;

}
//主界面菜单
public void homepage() throws Exception{
System.out.println("------------------------请选择服务项目------------------------");
System.out.println("1.查询余额\t2.取款\t3.转账\t4.存款\t5.退出");
int check=new Scanner(System.in).nextInt();      
         int num=0;
         do{
         switch(check){
             case 1:
            account();
            break;
        case 2:
        draw();
        break;
        case 3:
        transfer();
        break;
        case 4:
        deposit();
        break;
        case 5:
        exit();
        default:
          System.out.println("服务项目不存在,请重新选择服务项目!"); 
          num++;
          //缺陷System.out.println(num);
          homepage();                  
          }
            }while(num<3);
         System.out.println("不要捣乱了,赶紧回家吧!");
         exit();
}
//查询余额
public void account() throws Exception{
System.out.println(balance);
homepage();
}

//取款
public void draw() throws Exception{

int mOney=0;
if(sum1==5000){
System.out.println("\n"+"对不起,您今日取款已达到限制,请选择其他项目或去柜台取钱。");
TimerTask task = new TimerTask(){
public void run(){
sum1 = 0;
}
};
Timer timer = new Timer();
long delay = 1000*60*60*24;
long period = 1000*60*60*24;
timer.scheduleAtFixedRate(task, delay, period);
homepage();
}
System.out.println("该ATM机一次能取款的最大金额为2000元,2)用户的帐户一天取款累计的最大金额为5000.");
System.out.println("-----------------------------请选择取款金额-------------------------------");
System.out.println(" 1. 500    2. 1000   3. 2000   4. 其他金额");
System.out.println("请选取金额");
int dr=sc.nextInt();
switch(dr){
   case 1:
    mOney=500;
    //balance-=money;
   
    
   break;
   case 2:
    mOney=1000;
    //balance-=money;
 
    break;
   case 3:
    mOney=2000;
    //balance-=money;
   
    break;
   case 4:
    System.out.println("只能输入100的整数倍,并且要小于2000.");
    System.out.println("请输入金额");
    mOney=sc.nextInt();
    if (money % 100 != 0 || money > 2000) {
System.out.println("您输入的金额不是100的整数倍或者大于2000,请选择:");
other(money);
    }
    break;
    default:draw();
    }
  sum1=sum1+money;
if(money > balance) {
System.out.println("余额不足请重新输入");
draw();
} else if (sum1 > 5000) {
System.out.println("对不起,本次取钱后当天累计金额将超过5000,将跳转到取款界面,请重新取款:" + "\n");
draw();
} else {
balance-=money;

System.out.println("取款成功你的账户余额为" +balance);
// System.out.println(sum);
afterDraw();
}
}          


// 一次取款大于2000的操作
public void other(int money) throws Exception {
int num;
System.out.println("1 重新输入取款金额;2 选择退出系统.");
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("您选择重新输入金额,将返回取款界面...");
draw();
break;
case 2:
exit();
break;
default:
other(money);
}
}
//取款成功后
public void afterDraw() throws Exception{
int numb;
System.out.println("您选择:1 继续取款;2 返回主页3 退出");
Scanner scanner = new Scanner(System.in);
numb = scanner.nextInt();
switch (numb) {
case 1:
System.out.println("您选择继续取款,将返回取款界面...");
draw();
break;
case 2:
System.out.println("您选择返回主页面,即将返回...");
homepage();
case 3:
System.out.println("您选择退出,即将退出...");
exit();
break;
default:
afterDraw();
}
}  

public void exit(){
System.out.println("--------------欢迎再次使用xxxx银行ATM系统,再见!------------");
System.exit(0);
}
//转账账号登陆
public void transfer() throws Exception {
int mOney=0;
System.out.println("请输入账号");
String num1="null";
   try{
num1=sc.next();
   Integer.parseInt(num1);  
  }catch(Exception e){
       System.out.println("学号只能是数字,并且前后要一致。请重新输入转入账户:");
       transfer();
     }
   System.out.println("请再次输入账号");
    String num2="null";
    try{
    num2=sc.next();
    Integer.parseInt(num1);  
      }catch(Exception e){
    System.out.println("学号只能是数字,并且前后要一致。请重新输入转入账户");
    transfer();
       }
   if(num1.equals(num2)){
   
    inputMoney(money);
//     if(money>balance){
//     System.out.println("余额不足,请重新输入");
//     inputMoney(money);
//     }else{
//     balance-=money;
//    
//     }System.out.println("转账成功你的账户余额为" + balance);
// afterTransfer();
//    }else{
//     System.out.println("账户必须都是数字,并且前后要一致。请重新输入转入账户:");
//     transfer();
//     System.out.println("转账成功,账户余额为"+balance);
   }
}
//输入转账金额
public void inputMoney(int money) throws Exception{
int num;

System.out.println("转账一次的金额不能超过10000元"+"\n"+"请您输入转账金额:");
try{
mOney=sc.nextInt();
     
      }catch(Exception e){
    System.out.println("转账金额必须要保证全是数字,并且在1~10000之间。");
    inputMoney(money);
        }
if(money>10000||money<1){
System.out.println("转账的金额超过10000元或者小于1元,请选择");
System.out.println("1 重新输入转出金额;2 退出系统");
num=sc.nextInt();
switch(num){
case 1:
System.out.println("您选择重新输入转出金额");
inputMoney(money);
break;
case 2:
exit();break;
default:
System.out.println("需选择1或者2,但您没有选择,默认返回输入转账账户输入界面...");
transfer();
break;

}
}else if(money>balance){
    System.out.println("余额不足,请重新输入");//缺陷应该加个余额为0,有退出选项
    //inputMoney(money); 
    afterTransfer();
    }else{
   
balance-=money;System.out.println("转账成功你的账户余额为" + balance);
afterTransfer();
System.out.println("账户必须都是数字,并且前后要一致。请重新输入转入账户:");
transfer();
}

}


// 转账成功后操作
public void afterTransfer() throws Exception {
int num;
System.out.println("您选择:1 继续转账;2 返回主页面;3 退出");
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("您选择继续转账,将返回转账界面...");
transfer();
break;
case 2:
System.out.println("您选择返回主页面,即将返回...");
homepage();
case 3:
System.out.println("您选择退出,即将退出...");
exit();
break;
default:
afterTransfer();
}   

public void deposit() throws Exception{
  int money;
  if (sum2 == 50000) {
System.out.println("\n" + "您今日存款已达到限制,请选择其他项目或去柜台存钱。");
TimerTask task = new TimerTask(){
public void run(){
sum2 = 0;
}
};
Timer timer = new Timer();
long delay = 1000*60*60*24;
long period = 1000*60*60*24;
timer.scheduleAtFixedRate(task, delay, period);
homepage();
  }
   
System.out.println("提示该ATM机一次能存款的最大金额为10000元."+"\n"+"用户的帐户一天存款累计的最大金额为50000元.");
System.out.println("请输入存款金额:");
mOney=sc.nextInt();
if(money%50!=0 ||money>10000 || money<=0){
System.out.println("输入有误,请重新输入存款金额:");
deposit();
}else if(sum2>50000){
System.out.println("存款金额将超过50000,请重新存入");
deposit();
}else{
balance+=money;
sum2=sum2+money;
//System.out.println(sum2);
System.out.println("转账成功你的账户余额为" + balance);
afterdeposit();

}
}
public void afterdeposit() throws Exception {
int num;
System.out.println("您选择:1 继续服务;2 返回主页面;3 退出");
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("您选择继续服务,将返回服务界面...");
deposit();
break;
case 2:
System.out.println("您选择返回主页面,即将返回...");
homepage();
case 3:
System.out.println("您选择退出,即将退出...");
exit();
break;
default:
afterdeposit();
}   

}

ATM系统功能需求

1. 运行系统的时候给用户一下提示:

----------------------------------------------------------------------------------

-----------------------欢迎使用xxxx银行ATM系统---------------------

----------------------------------------------------------------------------------

2. 给用户一下提示:

1. 进入系统   2. 退出

 

3. 如果用户选择退出,给用户一下提示:

----------------------------------------------------------------------------------

--------------欢迎再次使用xxxx银行ATM系统,再见!------------

----------------------------------------------------------------------------------

 

4. 如果用户选择进入系统,程序运行后要求用户输入密码 (123456) ,如果密码正确,进入系统,如果错误,提示用户密码错误,要求从新输入,于此同时开始计时,设置一个Timer, 超过三次给用户警告”由于输入的次数过多,您的卡已经被ATM吞掉,请联系工作人员!

 

5. 用户登录成功,给用户的银行卡余额设为“20000.00”,同时给用户一个提示:提示用户选择服务语言:1 中文;英文:如果用户输入1,则进入主服务页面,如果2,提示用户“英文系统正在建设中....”,然后返回,让用户再次选择服务语言。如果用户输入的是其他内容,则提示用户只能输入1或者2,然后让用户再一次选择语言。

 

6. 用户在我们的指引下进入了主系统界面,给用户一下提示: 

------------------------请选择服务项目------------------------

1. 查询余额    2. 取款   3. 转账   4. 存款   5. 退出

7. 请选择服务项目,如果用户输入非法字符或者>5 or <1的字符,给用户提示 “服务项目不存在,请重新选择服务项目!”如果超过三次用户输错,提示:不要捣乱了,赶紧回家吧!”退出系统。

----------------------------------------------------------------------------------

--------------欢迎再次使用xxxx银行ATM系统,再见!------------

----------------------------------------------------------------------------------

 

8. 选择1. 查询余额模块   项目,给用户一下提示“您卡上的信用余额为20000.00

------------------------请选择服务项目------------------------

1. 查询余额    2. 取款   3. 转账   4. 存款   5. 退出

 

9. 选择2.取款模块  项目,当用户选择取款时,给用户一下提示:

1) 提示该ATM机一次能取款的最大金额为2000.

2) 用户的帐户一天取款累计的最大金额为5000.

3) 选取系统界面上的固定金额(50010002000),或是输入要取的金额,进行取款,界面如下.

----------------------------------请选择取款金额------------------------------------

                               1. 500    2. 1000   3. 2000   4. 其他金额

4) 用户选择其他金额后,给用户提示:只能输入100的整数倍,并且要小于2000.

5) 若是取款金额大于余额,提示余额不足.

6) 若是所取金额大于ATM机一次能取款的最大金额2000,给出提示,重新输入取款金额或是选择退出系统.

7) 若是一天所取累计金额大于该帐户一天取款累计金额(5000)的限制,给出提示信息,重新输入取款金额或是选择退出系统.

8) 若是用户在一天之内已经取了5000, 给用户提示“您今日取款已达到限制,请选择其他项目或去柜台取钱。”

9) 取款后,给出提示选择退卡或是继续取款.

10) 完成后用户可选择退卡或是继续选择服务

 

10. 选择3. 转账模块 项目,当用户选择转账时候,给用户提示。

1) 请输入转入账户的账号,这时候有一个账号验证的功能,给用户两次输入账号,如果两次输入的账户账号一样,同时要保证用户输入的账号都为数字。

2) 如果用户的输入通过验证,则给用户提示“转账一次的金额不能超过10000元”,同时“请您输入转账金额:”,转账金额必须要保证全是数字,并且在1~10000之间。

3) 如果用户的输入没有通过验证,给用户提示“账户必须都是数字,并且前后要一致。请重新输入转入账户:”

4) 若是转账金额大于余额,提示余额不足.

5) 若是所转金额大于ATM机一次能转出的最大金额10000,给出提示,重新输入转出金额或是选择退出系统.

6) 如果转账成功,给用户提示“服务完成,请选择:1. 继续服务  2.主页面  3.退出”

7) 转账后,给出提示选择退卡或是继续转账.

8) 完成后用户可选择退卡或是继续选择服务

11. 选择4. 存款模块 项目,当用户选择存款的时候,给用户提示。

1) 提示该ATM机一次能存款的最大金额为10000.

2) 用户的帐户一天存款累计的最大金额为50000.

3) 给用户提示“请输入存款金额:”同时有以下规则:1.存款金额必须是整数 2. 存款的金额必须是50的整数倍 3. 存款金额最大限度是 10000.

4) 如果验证通过,则给用户的账户上加上用户输入的金额。

5) 如果验证不通过,给用户提示“输入有误,请重新输入存款金额:”

6) 如果存款成功,给用户提示“服务完成,请选择:1. 继续服务  2.主页面  3.退出”

7) 存款后,给出提示选择退卡或是继续存款.

8) 完成后用户可选择退卡或是继续选择服务

 

12. 选择5. 退出模块 项目,给用户一个欢迎再次使用的界面,退出系统!





   
推荐阅读
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
author-avatar
破背包
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有