JAVA-案列练习-ATM项目

        在JAVA入门学习后进行的项目练习——模拟ATM系统。

目录

1.设计内容和要求

 2.代码实现

(1)ATM账号类的定义

(2)ATM类中的操作

(3)操作说明

3.总结


6b654bbdc6bb4b388bdf961499992ae0.png

1.设计内容和要求

01  系统架构搭建,欢迎页设计

02  开户功能实现

03  登录功能实现
04 操作页展示,查询账户,退出账户
05 存款,取款功能实现
06 转账功能实现
07 销户功能实现
08 用户密码修改

 2.代码实现

(1)ATM账号类的定义

package ATM;

public class Account {
    private String id;
    private String name;
    private char sex;
    private String password;
    private double money;
    private double limit; //限额

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name + (sex == '男'? "先生":"女士");
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }

    public Account() {
    }
}

(2)ATM类中的操作

package ATM;

import javax.accessibility.AccessibleContext;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class ATM {
   private ArrayList<Account> list = new ArrayList<>();
   private Scanner sc= new Scanner(System.in);
   Account loginacc;

   private void creatAccount(){
       System.out.println("==系统开户操作==");
       Account account = new Account();

       System.out.println("请您输入您的账户名称");
       String name = sc.next();
       account.setName(name);

       while(true) {
           System.out.println("请您输入您的性别");
           char sex = sc.next().charAt(0);
           if(sex == '男' || sex == '女'){account.setSex(sex);break;}
           else{
               System.out.println("输入错误,只能是男或者女");
           }
       }

       while(true) {
           System.out.println("请您输入您的密码");
           String password = sc.next();

           System.out.println("请您确认您的密码");
           String password1 = sc.next();

           if(password.equals(password1)){
               account.setPassword(password);
               break;
           }
           else{
               System.out.println("您输入的两次密码不相同,请重新输入");
           }
       }

       System.out.println("请您输入每次取款限额");
       double limit = sc.nextDouble();
       account.setLimit(limit);

       //生成一个卡号 8位数字(卡号且不能重复)
       String id = createCardid();
       account.setId(id);
       //
       list.add(account);
       System.out.println("恭喜您"+account.getName()+ "开户成功");
       System.out.println("您的卡号为" + account.getId());

       return;
   }
   private String createCardid(){
       while(true){
       String id ="";
       Random r = new Random();
       for (int i = 0; i < 8; i++) {
           int data = r.nextInt(10);
           id += data;
       }
       Account acc = getAccountbyId(id);
       if(acc == null){ return id;}
       }
   }
   private Account getAccountbyId(String id){
       for (int i = 0; i < list.size(); i++) {
           Account acc = list.get(i);
           if(acc.getId().equals(id)){return acc;}
       }
       return null;
   }

   private void login(){
       System.out.println("==系统登录操作==");
       if(list.size() == 0){
           System.out.println("系统内无用户 请开户");return;
       }
       while(true) {
           System.out.println("请您输入您的登录卡号");
           String id = sc.next();
           Account acc = getAccountbyId(id);
           if (acc == null) {
               System.out.println("该卡号不存在");
           }
           while(true) {
               System.out.println("请你输入您的密码");
               String password = sc.next();
               if (acc.getPassword().equals(password)) {
                   loginacc = acc;
                   System.out.println("恭喜您," + acc.getName());
                   System.out.println("成功登录系统,您的卡号是"+acc.getId());
                   showUserCommand();return;
               }
               else {
                   System.out.println("密码不正确 请确认");
               }
           }
       }
   }

   private void showUserCommand(){

       while(true) {

           System.out.println(loginacc.getName());
           System.out.println("==您可以选择如下功能进行账号处理==");
           System.out.println("==        1.查询账户        ==");
           System.out.println("==          2.存款         ==");
           System.out.println("==          3.取款         ==");
           System.out.println("==          4.转账         ==");
           System.out.println("==        5.密码修改        ==");
           System.out.println("==          6.退出         ==");
           System.out.println("==        7.注销当前账户     ==");
           System.out.println("=============================");
           int command = sc.nextInt();


           switch (command) {
               case 1:
                   showLoginacc();
                   break;
               case 2:
                   depositMoney();
                   break;
               case 3:
                   drawMoney();
                   break;
               case 4:
                   transferMoney();
                   break;
               case 5:
                   updatePassword();return;
               case 6:
                   System.out.println(loginacc.getName()+"您已经成功退出系统");
                   return;
               case 7:
                   if(deleteAccount()){return;}
                   break;
               default:
                   System.out.println("操作不存在");
           }
       }
   }

   private void showLoginacc(){
       System.out.println("==当前您的账户信息==");
       System.out.println("卡号:" + loginacc.getId());
       System.out.println("姓名:" + loginacc.getName());
       System.out.println("性别:" + loginacc.getSex());
       System.out.println("余额:" + loginacc.getMoney());
       System.out.println("取现额度:3"+ loginacc.getLimit());
   }

   private void depositMoney(){
       System.out.println("==存款操作==");
       System.out.println("请您输入存款金额");
       double money = sc.nextDouble();
       loginacc.setMoney(loginacc.getMoney()+money);
       System.out.println("==存款成功==");
   }

   private void transferMoney(){
       System.out.println("用户转账");

       if(list.size() < 2){
           System.out.println("系统中只有一个用户,无法转账");
           return;
       }
       if(loginacc.getMoney() == 0){
           System.out.println("您账户内余额为0");
           return;
       }
       while(true) {
           System.out.println("请您输入对方的卡号");
           String id = sc.next();

           Account acc = getAccountbyId(id);
           if (acc == null) {
               System.out.println("您输入的对方卡号不存在");
           }
           else {
               String name ="*"+acc.getName().substring(1);
               System.out.println( "请您输入【"+name+"】的姓氏");
               String prename = sc.next();
               if(acc.getName().startsWith(prename)){
                   System.out.println("清输入转账金额");
                   double money = sc.nextDouble();
                   if(loginacc.getMoney() >= money){
                       loginacc.setMoney(loginacc.getMoney() - money);
                       acc.setMoney(acc.getMoney() + money);
                       return;
                   }
                   else{
                       System.out.println("余额不足,您的余额为"+loginacc.getMoney());
                   }
               }
               else{
                   System.out.println("您认证的姓氏有问题");
               }
           }
       }
   }

   private void drawMoney(){
       System.out.println("==取款操作==");
       if(loginacc.getMoney() < 100){
           System.out.println("您的余额不足100 无法取款");return;
       }
       while(true) {
           System.out.println("请您输入取款金额");
           double money = sc.nextDouble();
           if (loginacc.getMoney() < money) {
               System.out.println("余额不足 您账户中的余额为:" + loginacc.getMoney());break;
           }
           else {
               if (money > loginacc.getLimit()) {
                   System.out.println("您当前取款金额超过限额,您每次最多取款" + loginacc.getLimit());break;
               } else {
                   loginacc.setMoney(loginacc.getMoney() - money);
                   System.out.println("==取款成功==");
                   System.out.println("取款后剩余" + loginacc.getMoney());
                   return;
               }
           }
       }
   }

   private boolean deleteAccount(){
       System.out.println("==销户操作==");
       System.out.println("请问您确认销户嘛");
       String command = sc.next();
       switch (command){
           case "y":
               if(loginacc.getMoney() == 0){
                   list.remove(loginacc);
                   System.out.println("您好 您的账户已经成功销户");
                   return true;
               }
               else {
                   System.out.println("对不起 您的账户中存在金额 不允许销毁");
                   return false;
               }
           default:
               System.out.println("好的,您的账户保留!!");
               return false;
       }

   }

   private void updatePassword(){
       System.out.println("==账号密码修改==");
       System.out.println("请您输入当前账户密码");
       String pass = sc.next();

       if(loginacc.getPassword().equals(pass)){
           while(true) {
               System.out.println("请您输入新密码");
               String newpass = sc.next();

               System.out.println("请您确认新密码");
               String newpass1 = sc.next();

               if (newpass.equals(newpass1)) {
                   loginacc.setPassword(newpass);
                   System.out.println("您的密码修改成功");
                   return;
               }
               else {
                   System.out.println("您输入的两次密码不一致");
               }
           }
       }
       else{
           System.out.println("密码错误");
       }
   }
   public void start(){

        while(true){
            System.out.println("==欢迎您进入到ATM系统==");
            System.out.println("==    1.用户登录   ==");
            System.out.println("==    2.用户开户   ==");
            System.out.println("请选择");

            int n = sc.nextInt();
            switch(n){
                case 1:login();break;
                case 2:creatAccount(); break;
                case 0: return;
                default:
                    System.out.println("输出有误 重新输入");
            }
        }
    }
}
package ATM;

public class Text {
    public static void main(String[] args) {
        ATM a = new ATM();
        a.start();
    }
}

(3)操作说明

 

 

 

3.总结

        关于这个案例实际并不复杂,功能的实现和代码思路和C语言学习时是一致的,只是JAVA提供了API,更快捷的实现了一些原本要自己手写的功能。主要还是对于面向对象编程,把功能交给对象自己去完成,以及集合这种存储数据的容器的学习和理解,目前这个案例算是对前面入门的知识一个小的复习。后续就可以进行比较系统深入的学习了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值