c语言编写atm取款功能_Java小项目——ATM系统

1项目背景

目前的学习进度,已经足够我们做一个小的项目,锻炼我们的逻辑思维。今天,笔者就带领大家做一个简单的ATM机系统,模仿几个ATM机的业务功能。

最终的效果展示:

登录失败:

cd9336a37ae0cfcfcfc64cbf140a6f21.png

存款:

8a328c57eeb5b340c859535167c61ff2.png

取款:

a206e75a3c8e1a3b2d53619acfd768c9.png

转账:

4be3f2907705cfa350ef3a9b49ebf7a2.png

查看余额:

66f2f98208d490cacbe46390b8d6e26b.png

2总体构思

不管做什么项目,只要是Java语言开发的,都要遵循面向对象的思想。我们对这个系统进行分析,都需要哪些对象呢?

首先,ATM是一个机器,我们要把ATM抽象为一个对象。ATM代表的是一个银行,一个银行肯定有用户,所以ATM机应该包含一些用户。另外,ATM是这个系统的主要实现,它应该有一些方法,比如展示菜单、供用户登录、转账、取款等。

其次,这些用户应该有哪些属性呢?基本的,要有用户名、银行账号、密码、余额。至于业务功能,我们已经抽象到了ATM身上。

另外,我们需要一个启动类,来测试我们的程序。

基于上面的表述,让我们开始做这个项目!

3构建银行用户

创建一个SysUser类,表示银行系统用户:

这里我们将字段声明成public的,后面会为大家介绍get和set方法。

package user;/** *  ATM系统用户 * * @author Java开发之旅 * @date 2020-07-26 * */public class SysUser {    //用户名    public String username;    //账号    public String account;    //密码    public String password;    //账户余额    public double money;}
4构建ATM机

创建一个Atm类,表示ATM机:

package atm;import user.SysUser;import java.util.Scanner;/** *  ATM机 * * * @author Java开发之旅 * @date 2020-07-26 * */public class Atm {    //ATM系统用户,这里应该是一个集合,因为一个银行有多个用户,但我们只模拟一个    private SysUser user;    //键盘录入器    private Scanner scanner = new Scanner(System.in);}
5加载用户

ATM机启动的时候,要将用户的信息加载进来,所以我们应该在Atm类编写一个加载用户的方法,并且这个方法应该是私有的,只能由ATM去执行:

/** *  加载所有用户,在ATM机启动时调用 * */private void loadUser () {    //简单的模拟一下初始化用户的过程,真正的场景是从数据库加载,后期会讲到    this.user = new SysUser();    this.user.username = "张三";    this.user.account = "666666";    this.user.password = "123456";    //初识金额为1000    this.user.money = 1000.0;}
6用户登录

用户加载完毕,当用户使用ATM机的时候,应该先插卡,然后输入密码,进行登录,只不过我们只能模拟输入卡号的情形。所以,Atm类应该有一个登录的方法,且密码最多输入3次:

/** *  用户登陆,在ATM机启动时调用 * */private boolean login () {    //接收用户输入的用户名    System.out.println("请输入您的账号:");    String account = scanner.next();    //记录输入密码的次数,最多输入3次,否则锁定账户    int count = 0;    do {        //如果不是第一次输入,给出操作提示        if (count == 0) {            System.out.println("请输入您的密码:");        }else {            System.out.println("密码错误,您还有" + (3 - count) + "次机会:");        }        String password = scanner.next();        //每输入一次密码,次数+1        count++;        //匹配成功,返回true        if (account.equals(this.user.account) && password.equals(this.user.password)) {            return true;        }    }while (count < 3);    //代码执行到这里,说明3次都没有匹配上,返回false    return false;}
7展示菜单

ATM机应该有一个方法,将菜单展示给用户,这一点很好理解:

/** *  加载菜单 * */private void loadMenu () {    System.out.println();    System.out.println("********************欢迎使用Java银行********************");    System.out.println("1、存款   2、取款   3、转账   4、查询余额   5、退出");}
8实现存款
/** *  存款的业务方法 * */private void deposit () {    System.out.println("\n请输入您的存款数额:");    double money = scanner.nextDouble();    if (money <= 0) {        System.out.println("请输入正确的数额!");        return;    }    this.user.money += money;    System.out.println("存款成功,您目前的余额为:" + this.user.money);}
9实现取款
/** *  取款的业务方法 * */private void withdrawal () {    System.out.println("\n请输入您的取款数额:");    double money = scanner.nextDouble();    if (money < 0) {        System.out.println("请输入正确的数额!");        return;    }    //余额不足的情况    if (money > this.user.money) {        System.out.println("您的账户余额不足");        return;    }    this.user.money -= money;    System.out.println("取款成功,您目前的余额为:" + this.user.money);}
10实现转账
/** *  转账的业务方法 * */private void transfer () {    System.out.println("请输入对方的账号:");    String account = scanner.next();    //假设另一个账户是55555,随便模拟一下账户不存在的情况    if (!account.equals("55555")) {        System.out.println("账号不存在!");        return;    }    System.out.println("请输入转账数额:");    double money = scanner.nextDouble();    //余额不足的情况    if (money > this.user.money) {        System.out.println("您的账户余额不足");        return;    }    //转出方的钱减少    this.user.money -= money;    //转入方的钱增加,我们这里只有一个账户,模拟一下即可    //this.user2.money += money;    System.out.println("转账成功,您目前的余额为:" + this.user.money);}
11查看余额
/** *  查询余额 * */private void getMoney () {    System.out.println("您的账户余额为:" + this.user.money);}
12选择业务功能
/** *  提供业务服务的方法 * */private void service () {    //记录用户的选择    int choose = 0;    //通过while死循环,实现业务的多次选择,直到用户选择退出    while (true) {        System.out.println("请选择您要办理对业务:")        choose = scanner.nextInt();        switch (choose) {            case 1:                deposit();                break;            case 2:                withdrawal();                break;            case 3:                transfer();                break;            case 4:                getMoney();                break;            case 5:                return;            default:                return;        }        //每执行完一个业务,重新将菜单展示给用户        loadMenu();    }}
13启动ATM机

上面的方法都是私有的,我们应该暴露出一个公共的方法,让调用者启动ATM机。同时,在ATM机启动的时候,应该加载用户,然后让用户登录:如果登录失败,冻结账户,结束业务;如果登录成功,展示菜单给用户。

/** *  启动ATM机的方法,暴露给调用者 * */public void start () {    //先加载用户到ATM机    loadUser();    //登录    boolean flag = login();    //登录失败,直接结束业务    if (!flag) {        System.out.println("您的密码3次全部输入错误,账户已被锁定,请到柜台办理相关业务");        //当方法没有任何返回值,此时return语句表示结束方法,不再往下执行        return;    }    System.out.println("\n登录成功!");    //向用户展示菜单    loadMenu();        //调用业务功能    service();    System.out.println("欢迎下次使用!");    }

我们再创建一个Run类,测试我们的程序:

import atm.Atm;/** *  启动类 * * @author Java开发之旅 * @date 2020-07-26 * */public class Run {    public static void main(String[] args) {        //启动类负责声明ATM机,并启动它        Atm atm = new Atm();        atm.start();    }}

然后大家就可以看到效果了!

14整体代码

最后,贴出整体的Atm类代码:

package atm;import user.SysUser;import java.util.Scanner;/** *  ATM机 * * * @author Java开发之旅 * @date 2020-07-26 * */public class Atm {    //ATM系统用户,这里应该是一个集合,因为一个银行有多个用户,但我们只模拟一个    private SysUser user;    //键盘录入器    private Scanner scanner = new Scanner(System.in);    /**     *  加载所有用户,在ATM机启动时调用     * */    private void loadUser () {        //简单的模拟一下初始化用户的过程,真正的场景是从数据库加载,后期会讲到        this.user = new SysUser();        this.user.username = "张三";        this.user.account = "666666";        this.user.password = "123456";        //初识金额为0        this.user.money = 1000.0;    }    /**     *  用户登陆,在ATM机启动时调用     * */    private boolean login () {        //接收用户输入的用户名        System.out.println("请输入您的账号:");        String account = scanner.next();        //记录输入密码的次数,最多输入3次,否则锁定账户        int count = 0;        do {            //如果不是第一次输入,给出操作提示            if (count == 0) {                System.out.println("请输入您的密码:");            }else {                System.out.println("密码错误,您还有" + (3 - count) + "次机会:");            }            String password = scanner.next();            //每输入一次密码,次数+1            count++;            //匹配成功,返回true            if (account.equals(this.user.account) && password.equals(this.user.password)) {                return true;            }        }while (count < 3);        //代码执行到这里,说明3次都没有匹配上,返回false        return false;    }    /**     *  加载菜单     * */    private void loadMenu () {        System.out.println();        System.out.println("********************欢迎使用Java银行********************");        System.out.println("1、存款   2、取款   3、转账   4、查询余额   5、退出");    }    /**     *  启动ATM机的方法,暴露给调用者     * */    public void start () {        //先加载用户到ATM机        loadUser();        //登录        boolean flag = login();        //登录失败,直接结束业务        if (!flag) {            System.out.println("您的密码3次全部输入错误,账户已被锁定,请到柜台办理相关业务");            //当方法没有任何返回值,此时return语句表示结束方法,不再往下执行            return;        }        System.out.println("\n登录成功!");        //向用户展示菜单        loadMenu();        //调用业务功能        service();        System.out.println("欢迎下次使用!");    }    /**     *  提供业务服务的方法     * */    private void service () {        //记录用户的选择        int choose = 0;        //通过while死循环,实现业务的多次选择,直到用户选择退出        while (true) {            System.out.println("请选择您要办理对业务:");            choose = scanner.nextInt();            switch (choose) {                case 1:                    deposit();                    break;                case 2:                    withdrawal();                    break;                case 3:                    transfer();                    break;                case 4:                    getMoney();                    break;                case 5:                    return;                default:                    return;            }            //每执行完一个业务,重新将菜单展示给用户            loadMenu();        }    }    /**     *  存款的业务方法     * */    private void deposit () {        System.out.println("\n请输入您的存款数额:");        double money = scanner.nextDouble();        if (money <= 0) {            System.out.println("请输入正确的数额!");            return;        }        this.user.money += money;        System.out.println("存款成功,您目前的余额为:" + this.user.money);    }    /**     *  取款的业务方法     * */    private void withdrawal () {        System.out.println("\n请输入您的取款数额:");        double money = scanner.nextDouble();        if (money < 0) {            System.out.println("请输入正确的数额!");            return;        }        //余额不足的情况        if (money > this.user.money) {            System.out.println("您的账户余额不足");            return;        }        this.user.money -= money;        System.out.println("取款成功,您目前的余额为:" + this.user.money);    }    /**     *  转账的业务方法     * */    private void transfer () {        System.out.println("请输入对方的账号:");        String account = scanner.next();        //假设另一个账户是55555,随便模拟一下账户不存在的情况        if (!account.equals("55555")) {            System.out.println("账号不存在!");            return;        }        System.out.println("请输入转账数额:");        double money = scanner.nextDouble();        //余额不足的情况        if (money > this.user.money) {            System.out.println("您的账户余额不足");            return;        }        //转出方的钱减少        this.user.money -= money;        //转入方的钱增加,我们这里只有一个账户,模拟一下即可        //this.user2.money += money;        System.out.println("转账成功,您目前的余额为:" + this.user.money);    }    /**     *  查询余额     * */    private void getMoney () {        System.out.println("您的账户余额为:" + this.user.money);    }}

733f103c381c93ea8b73b7dafd05cf08.png

e3b4b673ed19309002d8f37d07a4fa8b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值