简易ATM系统

文章目录

  • 前言
  • 一、怎么去完成这样的一个系统?
  • 二、ATM系统源代码
    • 1.用户类
    • 2.主程序
  • 总结


前言

  这次的ATM系统主要是对前面的知识的一次综合,主要运用到了类和对象的使用,方法的编写和调用,程序流程控制和编写代码的逻辑思维的锻炼。虽然内容并不难,但是一定是一步一步慢慢的敲出来的,明白其中的逻辑和为什么要去这么写,等完完全全做完之后,在编程思维方面还是会有很大的进步。


一、怎么去完成这样的一个系统?

(1)确定这个系统需要哪些基础功能;

(2)这些功能可以用函数去怎样实现,心中有个大概的想法;

(3)怎样将交互做到最好,这就需要考虑到菜单如何去布置;

(4)前面的这些可以在纸上画出个大概模板,然后逐步进行完善;

(5)一定不能拿到任务就开始上手编写,这样会没有一点逻辑,并且到后面就不知道自己在干什么了。


二、ATM系统源代码

1.用户类

    将用户的信息全部封装起来之后再调用getter/setter方法去操作其中的属性。

代码如下:

public class User {
    private String name;
    private String IdCard;//卡号
    private String Password;//密码
    private double money;//余额
    private double MostMoney;//当次取现额度

    public String getIdCard() {
        return IdCard;
    }

    public void setIdCard(String idCard) {
        IdCard = idCard;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public double getMoney() {
        return money;
    }

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

    public double getMostMoney() {
        return MostMoney;
    }

    public void setMostMoney(double mostMoney) {
        MostMoney = mostMoney;
    }

    public String getName() {
        return name;
    }

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

2.主程序

   其中主要的还是对类和对象的使用和掌握ArrayList容器,再就是每个功能就可细分为一个函数,这样主函数里面的代码就不会显得很乱,整体看上来也就很有清晰,也可以随时进行一些细节方面的修改。

代码如下 :

package day09;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

//return:直接结束了当前的方法
//break :结束的是循环或者switch

public class ATMSystem {
    //主菜单
    private static void showMenu( ArrayList<User> arrayList,Scanner in) {
        System.out.println("========欢迎来到小唐ATM系统========");
        while (true){
            System.out.println("1.登录账户(登录前请先开户)");
            System.out.println("2.注册账户");
            System.out.println("请输入想要进行的操作:");
            int choice = in.nextInt();
            switch (choice){
                case 1:
                    //登录账户
                    Login(arrayList,in);
                    break;
                case 2:
                    //注册用户
                    register(arrayList,in);
                    break;
                default:
                    System.out.println("操作有误,请重新选取!");
                    break;
            }
        }

    }

    //判断登录是否成功
    public static void Login(ArrayList<User> arrayList,Scanner in){
        while (true){
            System.out.println("请输入银行卡卡号:");
            String inputIdCard= in.next();
            User user = getUserByIdcard(inputIdCard,arrayList);
            if(user!=null){ //说明该账户存在
                System.out.println("请您输入银行卡密码:");
                String inputPassword = in.next();
                if(inputPassword.equals(user.getPassword())){ //判段密码的正确性
                    LoginMenu(user,in,arrayList);
                    return;
                }else
                    System.out.println("密码输入错误");

            }else
                System.out.println("卡号输入错误");

        }
    }

   //登录后的菜单
    public static void LoginMenu( User user,Scanner in,ArrayList<User> arrayList){
        System.out.println("======登录成功,可选择以下的操作======");
        while (true){
            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 choice = in.nextInt();
            switch (choice){
                case 1:  //查询账户余额
                    inquireMoney(user);
                    break;
                case 2: //存款
                    MakeMoney(user,in);
                    break;
                case 3: //取款
                    TakeMoney(user,in);
                    break;

                case 4: //转帐
                    ChageMoneyTo(arrayList,user,in);
                    break;

                case 5: //修改密码
                    ChangePassword(user,in);
                    return; //结束当前方法;break结束的是switch

                case 6: //注销账户
                    RemoveUser(arrayList,user);
                    return;

                case 7 : //退出系统
                    System.out.println("欢迎下次光临~~~");
                    return;


            }
        }
    }

     //注销用户
    private static void RemoveUser(ArrayList<User> arrayList, User user) {
                 if(user.getMoney()==0.0){
                     arrayList.remove(user);
                     System.out.println("注销成功");
                 }else
                     System.out.println("您的卡里还有余额" +user.getMoney() +"元,请先取回");
                        return;
            }

    //转账
    private static void ChageMoneyTo(ArrayList<User> arrayList,User user, Scanner in) {
        if(arrayList.size()<2){
        System.out.println("目前只有您一个账户,无法进行转账服务~~~");
            showMenu(arrayList,in);
        }else
            while (true){
                System.out.println("请输入对方的卡号:");
                String inputIdCard = in.next();
                //根据卡号得到用户2的信息
                User user1 =  getUserByIdcard(inputIdCard,arrayList);
                if(user1!=null){
                    String name = "*" + user1.getName().substring(1);
                    System.out.println("请输入对方的姓氏:"+name);
                    String FirstName = in.next();
                    if(user1.getName().startsWith(FirstName)){
                        System.out.println("输入正确,输入您想要转账的数目:");
                        double TakeMoney = in.nextDouble();
                            if(TakeMoney<user.getMoney()){
                                user.setMoney(user.getMoney()-TakeMoney);
                                user1.setMoney(user1.getMoney()+TakeMoney);
                                System.out.println("转账成功!");
                                System.out.println(user.getName()+"用户,您卡上的余额还有:" +user.getMoney());
                            }else
                                System.out.println("卡上余额不足,无法进行转账操作~~~");
                                break;
                    }else
                        System.out.println("输入错误,请重新确认");
                }
            }
    }

    //修改密码
    private static void ChangePassword(User user, Scanner in) {
        while (true){
            System.out.println("输入原来的密码:");
            String BeforePassword = in.next();
            if(BeforePassword.equals(user.getPassword())){
                System.out.println("输入修改之后的密码:");
                String AfterPassword = in.next();
                user.setPassword(AfterPassword);
                System.out.println("修改完成!请重新登录~~~");
                return;//结束当前方法 ,break结束的是while循环
            }else
                System.out.println("密码输入有误,请重新输入!");
        }
    }



    //取款
    private static void TakeMoney(User user, Scanner in) {
        while (true){
            System.out.println("输入您想要取款的金额:");
            double takemoney = in.nextDouble();
            if(takemoney<user.getMoney()&&takemoney<user.getMostMoney()){
                System.out.println("取款成功!");
                user.setMoney(user.getMoney()-takemoney);
                System.out.println("您的余额还剩:" +user.getMoney());
                user.setMostMoney(user.getMostMoney()-takemoney);
                System.out.println("您的取款限度还有 " +user.getMostMoney());
                break;
            }else if (takemoney > user.getMostMoney()) {
                System.out.println("超出取款额度,需要提前预约~~");
            } else if (takemoney > user.getMoney()) {
                System.out.println("没有存这么多,努力赚钱吧!");
            }

        }


    }

    //存款
    private static void MakeMoney(User user,Scanner in) {
            System.out.println("请输入您想要存入多少钱:");
            Double money = in.nextDouble();
            user.setMoney(user.getMoney()+money);
        System.out.println("存款成功!");
        System.out.println("您的账户余额为" +user.getMoney());

    }

    //查询账户余额
    private static void inquireMoney(User user) {
                               System.out.println("户主:" +user.getName());
                               System.out.println("您的卡号为:" + user.getIdCard());
                               System.out.println("您的账户余额为:" +user.getMoney());
                               System.out.println("您的取现额度为:" +user.getMostMoney());

    }



    //注册账户
    public static void register(ArrayList<User> arrayList,Scanner in) {
        String name, IdCard;
        String Password, AgainPassword;
        double MostMoney;
        User user = new User();
        System.out.println("请输入账户名称");
        name = in.next();
        user.setName(name);
    while (true){
        System.out.println("请输入用户密码");
        Password = in.next();
        System.out.println("请确认密码:");
        AgainPassword = in.next();
        if (AgainPassword.equals( Password)) {
            user.setPassword(Password);
            break;
        } else
            System.out.println("两次密码不一致,请重新输入密码~~~");
    }
        System.out.println("确认当前账户取现额度:");
        MostMoney = in.nextDouble();
        user.setMostMoney(MostMoney);

        //设置随机生成的卡号
        IdCard = createIdCard(arrayList);
        user.setIdCard(IdCard);
        System.out.println("您的卡号为:" + IdCard);
        arrayList.add(user);
    }

    //生成卡号
    public static String createIdCard(ArrayList<User> arrayList) {
        while (true){
            Random random = new Random();
            String idcard = "";
            for (int i = 0; i < 8; i++) {
                idcard += random.nextInt(10);
            }
            //判断卡号是否重复
            if (getUserByIdcard(idcard, arrayList) == null) {
                return idcard;
            }
        }

    }

    //根据卡号查找用户
    public static User getUserByIdcard(String idcard,ArrayList<User> arrayList){
        for (int i = 0; i < arrayList.size(); i++) {
           User u =  arrayList.get(i);
           if(u.getIdCard().equals(idcard)){
               return u;
           }
        }
        return null;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        ArrayList<User> arrayList = new ArrayList<>();
        showMenu(arrayList,in);//菜单
    }
}


总结

       代码总体来说并不难,也没有什么之后说要用到的一些框架技术什么的,但是对于锻炼编程思维来说真的挺有意义的,从一开始的敲二三十行代码都费劲到现在两三百行也不那么吃力,中间也是一直慢慢的持续性学习,在基础方面也是慢慢的巩固了起来,对与类和对象的使用也是越来越熟练了,也学会了如何让程序看起来逻辑清晰等等一些进步,虽然难度不大,但收获十分可观,希望能一直保持平常的心,让学习成为一个平常事。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值