ATM项目实战(JAVA基础案例)

本文介绍了Java编程初学者在第四天实现Java入门,并通过ArrayList操作实践,包括添加、移除元素,以及创建Food实体类和FoodManager类来管理菜品,同时展示了如何模拟ATM系统的基本功能,如账户管理、存款和取款操作。
摘要由CSDN通过智能技术生成

哈哈哈!第四天,终于实现了Java入门 。不过,今天晚上停电了,要早一点写今日的收获啦。

ArrayList项目实战

第三天遇到的问题:关于集合remove无法减去的情况下

可以使用 i --  或 倒着遍历的形式解决!!

package com.itheima.arraylist;

import java.util.ArrayList;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("java入门");
        list.add("吃枸杞");
        list.add("j人字拖");
        list.add("张三");
        list.add("河枸杞");
        System.out.println(list);

//        // 2\ 开始需求
//        for (int i = 0; i < list.size(); i++) {
//            String ele = list.get(i);
//
//            if(ele.contains("枸杞")){
//                list.remove(ele);
//            }
//
//        }
//        System.out.println(list);
        //第一种方式:每次分析完,删除后,就让i退一步
//        for (int i = 0; i < list.size(); i++) {
//            String ele = list.get(i);
//
//            if(ele.contains("枸杞")){
//                list.remove(ele);
//                i--;
//            }
//
//        }
//        System.out.println(list);
            // 方式二:从集合后面开始遍历
        for (int i = list.size()-1; i >= 0; i--) {
            String ele = list.get(i);
            if(ele.contains("枸杞")){
                list.remove(ele);
            }

        }
        System.out.println(list);
    }
}

项目需求:完成菜品的上架、以及菜品的浏览功能

项目解析:首先定义一个Food实体类、FoodMangager管理类(业务数据操作)、Test(主程序)

package com.itheima.arraylistdemo;

public class Food {
    private String name;
    private double originaPrice;
    private double speciaPrice;
    private String info;

    public Food() {

    }

    public Food(String name, double originaPrice, double speciaPrice, String info) {
        this.name = name;
        this.originaPrice = originaPrice;
        this.speciaPrice = speciaPrice;
        this.info = info;
    }

    public String getName() {
        return name;
    }

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

    public double getOriginaPrice() {
        return originaPrice;
    }

    public void setOriginaPrice(double originaPrice) {
        this.originaPrice = originaPrice;
    }

    public double getSpeciaPrice() {
        return speciaPrice;
    }

    public void setSpeciaPrice(double speciaPrice) {
        this.speciaPrice = speciaPrice;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}
package com.itheima.arraylistdemo;

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

public class FoodManager {
    private ArrayList<Food> foods = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);
    /**
     * 1商家上架菜品
     * */
    public void add(){
        System.out.println("==菜品上架==");
        // 2|提前创建一个菜品对象,用于封装用户上架的菜品信息
        Food food = new Food();
        System.out.println("请输入名字");
        String name = sc.next();
        food.setName(name);

        System.out.println("请输入菜品的原始价格");
        double originaPrice = sc.nextDouble();
        food.setOriginaPrice(originaPrice);

        System.out.println("请输入菜品的优惠价格");
        double speciaPrice = sc.nextDouble();
        food.setSpeciaPrice(speciaPrice);

        System.out.println("请输入菜品的相关信息");
        String info = sc.next();
        food.setInfo(info);

        // 添加
        foods.add(food);
        System.out.println("菜品上架成功");
    }
    public void printALLFoods(){
        for (int i = 0; i < foods.size(); i++) {
            Food food = foods.get(i);
            System.out.println("菜品名称" + food.getName());
            System.out.println("菜品原价" + food.getOriginaPrice());
            System.out.println("菜品优惠价" + food.getSpeciaPrice());
            System.out.println("菜品信息" + food.getInfo());
            System.out.println("----------------------");
        }
    }

    public  void start(){
        while (true) {
            System.out.println("----欢迎来到信息后台管理系统------");
            System.out.println("1、上架");
            System.out.println("2、浏览");
            System.out.println("请你输入操作的命令");
            String command = sc.next();

            switch (command){
                case "1":
                    add();
                    break;
                case "2":
                    printALLFoods();
                    break;
                case "3":
                    return;
                default:
                    System.out.println("你输入的操作命令有错误~~");

            }
        }
    }

}
package com.itheima.arraylistdemo;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        FoodManager manager = new FoodManager();
        manager.start();

    }
}

简单的集合应用,类似于数组,完成对每个Food类型变量的遍历,赋值,查看。

ATM项目实战

其实感觉是大流程的ArrayList集合,因为停电原因,未完成对转账(性式隐藏)、修改密码的操作。

完成了如下内容:收获蛮大的!!!明天复盘一下程序,开始接下来的内容!!!

package com.itheima;

public class Account {
    private String cardId;
    private String userName;
    private char sex;
    private String passWord;
    private double money;
    private double limit;

    public Account() {

    }

    public Account(String cardId, String userName, char sex, String passWord, double money, double limit) {
        this.cardId = cardId;
        this.userName = userName;
        this.sex = sex;
        this.passWord = passWord;
        this.money = money;
        this.limit = limit;
    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public String getUserName() {
        return userName +( sex == '男' ? "先生" : "女");
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    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;
    }
}
package com.itheima;

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

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

    /** 启动ATM 的用户开户*/
    private void createAccont (){
        //1、创建一个账户对象,封装开户信息
        System.out.println("==欢迎加入系统开户页面==");
        Account acc = new Account();
        //输入自己的开户信息
        while (true) {
            System.out.println("请您输入您的账户名称");
            String name = sc.next();
            acc.setUserName(name);

            System.out.println("请您输入您的性别");
            char sex = sc.next().charAt(0);
            if(sex == '男' || sex == '女'){
                acc.setSex(sex);
                break;
            }else{
                System.out.println("你输入的性别有无,只能男或者女");
            }
        }

        while (true) {
            System.out.println("请你输入您的账户密码: ");
            String passWord = sc.next();
            System.out.println("请你输入您的确认密码: ");
            String okpassWord = sc.next();

            if(okpassWord.equals(passWord)){
                acc.setPassWord(okpassWord);
                break;
            }else{
                System.out.println("确认密码错误!!请你再次输入您的密码");
            }
        }
        System.out.println("请你输入您的取钱限额");
        double limit = sc.nextDouble();
        acc.setLimit(limit);

        String newCardId = createCardID();
        acc.setCardId(newCardId);
        //把账户对象,加入到集合中去
        accounts.add(acc);
        System.out.println("恭喜您 " + acc.getUserName() + "开户成功,您的开号是: " + acc.getCardId() );
    }
    /*  返回一个8位数 的考号,而且这个卡号不能与其他账户的卡号重复*/
    private String createCardID(){
        Random r = new Random();
        while (true) {
            String cardId = "";
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10);//(0,9)
                cardId += data;
            }
            //  判断cardId记住卡号,是否与其他卡号重复,没有重复才可以用
            Account acc = getAccountByCardId(cardId);
            if(acc == null){
                return cardId;
            }
        }
    }
    private Account getAccountByCardId(String cardId){

        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if(acc.getCardId().equals(cardId)){
                return acc;
            }
        }
        return null;
    }

        //  用户登录功能//
     //  判断账号存在, 输入密码, 密码正确才能提示登录车工

    private void login(){
        System.out.println("==系统登录==");
        // 1、判断是否存在账户对象呢?
        if(accounts.size() == 0) {
            System.out.println("当前系统中无任何用户,请先开户再进行登录");
            return;//推出
        }
        while (true) {
            System.out.println("请输入你的登录卡号: ");
            String cardId = sc.next();
            // 判断卡号是否存在?
            Account acc = getAccountByCardId(cardId) ;
            if ( acc == null){
                System.out.println("你输入的登录的卡号不存在,请确认");
            }else{
                while (true) {
                    System.out.println("请输入您的密码:");
                    String passWord = sc.next();
                    // 判断密码是否正确?
                    if(acc.getPassWord().equals(passWord)){
                        // 密码正确
                        loginAcc = acc;
                        System.out.println("恭喜你"+ acc.getUserName() + "你成功登录,你的卡号是" + acc.getCardId());
                        // 展示登录后的操作页面
                        showUserCommand();
                        return;
                    }else{
                        System.out.println("您输入的密码错误,请重新输入");
                    }
                }
            }
        }
    }

    /* 展示登录后的操作页面  */
    private void showUserCommand(){
        while (true) {
            System.out.println( loginAcc.getUserName() + "你可以选择如下功能的账户处理 ");
            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:
                    // 查询当前账户
                    showLoginAccount();
                    break;
                case 2:
                    // 存款
                    deposiMoney();
                    break;
                case 3:
                    // 取款
                    drawMoney();
                    break;
                case 4:
                    // 转账
                    break;
                case 5:
                    // 密码修改
                    break;
                case 6:
                    // 退出
                    System.out.println(loginAcc.getUserName() + "你已退出当前系统");

                    return; // 跳出这话方法
                case 7:
                    // 注销当前登录账户
                    break;
                default:
                    System.out.println("您当前选择的操作不存在,请确认~~");
            }
        }

    }
    /* 取款操作 */
    private void drawMoney() {
        System.out.println("==取钱操作==");
         // 判断账户余额是否大于100元
        if(loginAcc.getMoney()<100){
            System.out.println("您的账户余额不是100元,不允许取钱");
            return;
        }
        while (true) {
            // 2、让用户输入取款金额
            System.out.println("请输入取款金额");
            double money = sc.nextDouble();

            // 判断账户余额是否够
            if(loginAcc.getMoney() >= money){
                //账户足够
                if(money > loginAcc.getLimit()){
                    System.out.println("你当前存钱金额超过了每次限额,你每次最多可以取:"+loginAcc.getLimit());
                }else{
                    loginAcc.setMoney(loginAcc.getMoney()-money);
                    System.out.println("恭喜你,你取出" + money + "成功,取钱后金额是:" + loginAcc.getMoney());
                }
            }else{
                System.out.println("余额不足,您的账户余额的是:" +loginAcc.getMoney());
            }
        }

    }

    /*  存钱  */
    private void deposiMoney() {
        System.out.println("==存钱操作==");
        System.out.println("请您输入存款金额");
        double money = sc.nextDouble();

        //更新当前登录用户的金额
        loginAcc.setMoney(loginAcc.getMoney()+money);
        System.out.println("恭喜你,你存钱" + money + "成功,存钱后金额是:" + loginAcc.getMoney());
    }

    /*
      展示当前登录的账户信息
     */
    private void showLoginAccount(){
        System.out.println("==当前系统为查询用户信息==");
        System.out.println("卡号" +  loginAcc.getCardId());
        System.out.println("姓名" +  loginAcc.getUserName());
        System.out.println("性别" +  loginAcc.getSex());
        System.out.println("余额" +  loginAcc.getMoney());
        System.out.println("每次取款限额" +  loginAcc.getLimit());
    }


    /** 启动ATM系统 展示欢迎页面*/
    public void start(){
        while (true) {
            System.out.println("===欢迎您进入到了ATM系统===");
            System.out.println("1、用户登录");
            System.out.println("2、用户开户");
            System.out.println("请选择:");
            int command = sc.nextInt();
            switch (command){
                case 1:
                    //用户登录

                    break;
                case 2:
                    //用户开户
                    createAccont();
                    break;
                default:
                    System.out.println("没有该操作~~");

            }
        }
    }
}
package com.itheima;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值