欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现ATM取款项目

程序员文章站 2023-12-22 14:15:46
项目要求:   1、用户需要从控制台输入账号密码,账号或者密码不正确报异常   2、每日取款的金额有限制(100,30000),否则报异常   3、每次取款都要有记录...

项目要求:

  1、用户需要从控制台输入账号密码,账号或者密码不正确报异常

  2、每日取款的金额有限制(100,30000),否则报异常

  3、每次取款都要有记录,并在下一次取款时显示出来

思路:

  1、先在“银行类”里生成一些用户(跳过了注册环节)

  2、可使用list集合存储取款日志

  3、可使用map集合将“用户名”和对应的用户信息建立“键值关系”

  4、使用while循环控制流程

项目实现代码:

管理类(含main方法):

import java.util.scanner;
public class manager {
  public static void main(string[] args) {
    scanner input = new scanner(system.in);
    
    //创建bankserver()类对象
    bankserver server = new bankserver();
    //创建user类对象,先令其为空
    user user = null;
    //调用creataccount()方法生成四个用户
    server.creataccount();
    
    //while循环控制流程
    while(true){
      system.out.println("请输入您的账号:");
      string id = input.nextline();
      system.out.println("请输入您的密码:");
      string password = input.nextline();
      try {
        user=server.chick(id, password);//调用chick()方法,让user有意义
        system.out.println("===========欢迎进入银行取款系统===========");
        system.out.println("您的账户余额为:"+user.getmoney());
        while(true){
          system.out.println("请输入您的取款金额(必须大于100,小于30000):");
          double money = input.nextdouble();
          server.getmoney(user, money);
          input.nextline();
          system.out.println("请问您需要继续取款吗? y or n");
          string selec = input.nextline();
          if(selec.equalsignorecase("n")){
            system.out.println("欢迎使用!");
            break;
          }
        }
      } catch (exception e) {
        system.out.println(">>> 账号/密码错误!请重新登录输入 <<<");
      }
    }
  }

}

用户类(user类):

import java.text.simpledateformat;
import java.util.arraylist;
import java.util.date;
import java.util.list;

public class user {
  private double balance;//用户账户金额
  private string id;//用户账号名
  private string passward;//用户密码
  private list<string> list=new arraylist<>() ;//用于存储用户取款记录的日志集合
  
  //无参构造方法
  public user() {
    super();
  }
  //有参构造方法
  public user(string id, string passward,double money) {
    super();
    this.balance = money;
    this.id = id;
    this.passward = passward;
  }
  
  //各个属性的set和get方法
  public double getmoney() {
    return balance;
  }
  public void setmoney(int money) {
    this.balance = money;
  }
  public string getaccount() {
    return id;
  }
  public void setaccount(string account) {
    this.id = account;
  }
  public string getpassward() {
    return passward;
  }
  public void setpassward(string passward) {
    this.passward = passward;
  }
  public list<string> getlist() {
    return list;
  }
  public void setlist(list<string> list) {
    this.list = list;
  }
  public double getbalance() {
    return balance;
  }
  public void setbalance(double balance) {
    this.balance = balance;
  }
  
  /**
   * 因为账户的密码被装在map集合中,不方便直接访问,所以在user类中定义一个检查密码是否正确的方法
   * 其返回一个布尔类型的值
   * @param password
   * @return
   */
  public boolean checkpassword(string password){
    if(password.equals(this.passward)){
      return true;
    }else{
      return false;
    }
  }
  
  
  /**
   * 与上面的方法同理,判断取款金额是否合理的方法,返回一个布尔类型的值
   * @param money
   * @return
   * @throws exception
   */
  public boolean getmoney(double money) throws exception {

    if (money < 100 || money > 5000) {  //规定每次取款金额的范围,超过这个范围则抛出异常
      throw new exception("取款金额不合理!取款金额必须大于100,小于5000");
    }
    if (this.balance < money) {//这个判断条件被许多人忽略,当账户内余额不足时,抛出异常
      throw new exception("您的余额不足!");
    }
    //从帐号余额中扣除相应金额
    this.balance -= money;
    
    //将取款记录到日志中
    string logstr = user.currenttime()+"\t取款 " + money +"元, 余额:"+this.balance;
    this.list.add(logstr);  //将记录添加进list集合中
    return true;  //返回true
    
  }
  /**
   * 获取当前时间的方法
   * @return
   */
  public static string currenttime(){
    long ct = system.currenttimemillis();
    date d = new date(ct);
    simpledateformat sdf = new simpledateformat("yyyy年mm月dd日 hh:ss:mm");
    return sdf.format(d);
  }
}

银行服务类(bankserver类):

import java.util.hashmap;
import java.util.map;
/**
 * 银行服务类,实现用户的创建
 * @author 
 *
 */
public class bankserver {
  //声明四个常量表示账户用户名
  final string ac1 = "1111-111111-1111aa";
  final string ac2 = "2222-222222-2222bb";
  final string ac3 = "3333-333333-3333cc";
  final string ac4 = "4444-444444-4444dd";
  //声明四个常量,用于存储密码,每个账户有一个专属的密码
  final string password1 = "111111";
  final string password2 = "222222";
  final string password3 = "333333";
  final string password4 = "444444";

  //声明一个静态常量规定初始金额为100000元
  public static final double balance = 100000.00;
  
  //创建一个map集合用于存储用户账号和对应的账户信息
  map<string, user> map = new hashmap<>();
  
  /**
   * 生成用户的方法,将用户存入map集合中
   */
  public void creataccount(){
    map.put(ac1, new user(ac1,password1,balance));
    map.put(ac2, new user(ac2,password2,balance));
    map.put(ac3, new user(ac3,password3,balance));
    map.put(ac4, new user(ac4,password4,balance));
  }
  
  /**
   * 比较用户从控制台输入的数据是否和银行预先存储的账户一样
   * @param id
   * @param password
   * @return
   * @throws exception
   */
  public user chick(string id,string password) throws exception{
    user account = null;  //此时的account对象为null
    //密码已经被放进map集合中,不好取出,所以需要在user类中定义一个checkpassword方法,其返回的是布尔类型的值(详情见user类)
    if(map.containskey(id) ){  
      account=map.get(id);  //如果账户名对上了,则调用map集合的get()方法给account对象赋值
      if(account.checkpassword(password)){
        system.out.println("登录成功!");  //如果密码也对上了,提示“登录成功”,否则抛出异常
      }else{
        throw new exception("密码错误");
      }
    }else{
      throw new exception("账号/密码错误!");
    }
    return account;    //返回一个account对象
  } 
  /**
   * 这是一个取钱并将记录存入list集合的方法
   * @param loginua
   * @param money
   */
  public void getmoney(user user, double money) {
    try {
      //用户余额已经被放进map集合中,同理,在user类中定义一个getmoney()方法,其返回的是布尔类型的值
      if(user.getmoney(money)){
        system.out.println("取款成功,用户当前余额:"+user.getbalance());
        system.out.println("==============================");
        //输出日志
        for (string str : user.getlist()) {
          system.out.println(str);
        }
      }
    } catch (exception e) {
      system.out.println(e.getmessage());
    }
  }
}

运行结果1(正确地输入了账号密码):

java实现ATM取款项目

运行结果2错误地输入了账号密码):

java实现ATM取款项目

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: