1.JAVA使用ArrayList上架菜品案例

视频参考链接

创建一个Food.java类

package org.example;
// 菜品类
public class Food {
    private String name; // 菜品名
    private double price; // 价格
    private String desc; // 菜品描述
    public Food() {
    }
    public Food(String name, Double price, String desc) {
        this.name = name;
        this.price = price;
        this.desc = desc;
    }
    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }
    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * 获取
     * @return price
     */
    public Double getPrice() {
        return price;
    }
    /**
     * 设置
     * @param price
     */
    public void setPrice(Double price) {
        this.price = price;
    }
    /**
     * 获取
     * @return desc
     */
    public String getDesc() {
        return desc;
    }
    /**
     * 设置
     * @param desc
     */
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public String toString() {
        return "Food{name = " + name + ", price = " + price + ", desc = " + desc + "}";
    }
}

创建一个FoodOperator.java类

package org.example;
import java.util.ArrayList;
import java.util.Scanner;
// 菜品操作类
public class FoodOperator {
    private ArrayList<Food> foodList = new ArrayList<>();
    // 上架菜品
    public void addFood(){
        // 创建菜品对象
        Food food = new Food();
        // 创建扫描器(录入商品信息)
        Scanner scanner = new Scanner(System.in);
        // 录入商品名
        System.out.println("请输入商品名称:");
        String nextName = scanner.next();
        food.setName(nextName);
        // 录入商品价格
        System.out.println("请输入商品价格:");
        double i = scanner.nextDouble();
        food.setPrice(i);
        // 录入商品描述
        System.out.println("请输入商品描述:");
        String sc = scanner.next();
        food.setDesc(sc);
        // 将商品信息存入ArrayList集合内
        foodList.add(food);
        System.out.println("录入商品信息成功");
    }
    // 展示菜品
    public void showAllFood(){
        // 从集合中将所有商品遍历出来(foodList.fori快捷键)
        for (int i = 0; i < foodList.size(); i++) {
            // 获取当前商品信息
            Food food = foodList.get(i);
            // 展示当前信息的内容(商品名,价格,描述)
            System.out.println("商品为:"+food.getName()+"; 价格为: "+food.getPrice()+"; 描述为: "+food.getDesc());
        }
    }
    // 负责展示操作界面
    public void start(){
        System.out.println("请选择操作内容:1.上架菜品,2.展示菜品,3.退出操作界面");
        while (true){
            Scanner scanner = new Scanner(System.in);
            System.out.println("请选择你的操作: ");
            String i = scanner.next();
            switch (i){
                case "1":
                    addFood();
                    break;
                case "2":
                    showAllFood();
                    break;
                case "3":
                    System.out.println("已退出系统!");
                    return;
                default:
                    System.out.println("你输入的命令不存在");
            }
        }
    }
}

main.java内容如下,进行代码测试(温馨提示,这个main.java和上面两个要放在同一个包下,否则自行记得导包操作)

package org.example;
public class Main {
    public static void main(String[] args) {
        FoodOperator foodOperator = new FoodOperator();
        // 展示操作界面
        foodOperator.start();
    }
}

2.ATM项目

新建Account.java,放入以下代码

package org.example.atm;
// 账户类
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;
    }
    /**
     * 获取
     * @return cardId
     */
    public String getCardId() {
        return cardId;
    }
    /**
     * 设置
     * @param cardId
     */
    public void setCardId(String cardId) {
        this.cardId = cardId;
    }
    /**
     * 获取
     * @return userName
     */
    public String getUserName() {
        return userName;
    }
    /**
     * 设置
     * @param userName
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
    /**
     * 获取
     * @return sex
     */
    public String  getSex() {
        return sex=='男'?"先生":"女士";
    }
    /**
     * 设置
     * @param sex
     */
    public void setSex(char sex) {
        this.sex = sex;
    }
    /**
     * 获取
     * @return passWord
     */
    public String getPassWord() {
        return passWord;
    }
    /**
     * 设置
     * @param passWord
     */
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
    /**
     * 获取
     * @return money
     */
    public double getMoney() {
        return money;
    }
    /**
     * 设置
     * @param money
     */
    public void setMoney(double money) {
        this.money = money;
    }
    /**
     * 获取
     * @return limit
     */
    public double getLimit() {
        return limit;
    }
    /**
     * 设置
     * @param limit
     */
    public void setLimit(double limit) {
        this.limit = limit;
    }
    public String toString() {
        return "Account{cardId = " + cardId + ", userName = " + userName + ", sex = " + sex + ", passWord = " + passWord + ", money = " + money + ", limit = " + limit + "}";
    }
}

新建ATM.java放入以下代码

package org.example.atm;
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; // 记住登陆成功后的账户
    // 启动欢迎页面
    public void start() {
        while (true) {
            System.out.println("==欢迎进入ATM系统==");
            System.out.println("1.用户登录,2.用户开户,3.退出系统");
            System.out.println("请选择: ");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    //用户登录
                    login();
                    break;
                case 2:
                    // 用户开户
                    createAccount();
                    break;
                case 3:
                    // 退出系统
                    System.out.println("您退出了系统");
                    return;
                default:
                    System.out.println("你输入的命令有误");
            }
        }
    }
    // 登录功能实现
    private void login() {
        System.out.println("======系统登录======");
        // 判断系统中是否有账户,没有账户赢直接结束登录操作
        if (accounts.size() == 0) {
            System.out.println("系统中暂无账户,请先开户");
            return;
        }
        while (true) {
            // 系统存在账号,可以登录
            System.out.println("请输入你的卡号");
            String cardId = sc.next();
            // 3. 根据cardId找到当前账户
            Account acc = getAccountByCardId(cardId);
            if (acc == null) {
                System.out.println("查无此账户");
            } else {
                while (true) {
                    // 4. 查到账号后
                    System.out.println("请输入登录密码");
                    String password = sc.next();
                    if (acc.getPassWord().equals(password)) {
                        // 密码正确,登录成功
                        this.loginAcc = acc;
                        System.out.println("恭喜" + acc.getUserName() + "登陆成功,您的卡号为: " + acc.getCardId());
                        showUserCommand();
                        return;
                    } else {
                        System.out.println("您输入的密码有误,请重新输入");
                    }
                }
            }
        }
    }
    // 登陆成功后展示的功能
    private void showUserCommand() {
        System.out.println(loginAcc.getUserName() + "您可以选择如下功能进行账户的处理");
        while (true) {
            System.out.println("1.查询,2.存款,3.取款,4.转账,5.密码修改,6.退出,7.注销当前账户");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    // 查询当前账户
                    showLoginAccount();
                    break;
                case 2:
                    // 存款
                    depositMoney();
                    break;
                case 3:
                    // 取款
                    drawMoney();
                    break;
                case 4:
                    // 转账
                    transferMoney();
                    break;
                case 5:
                    // 修改密码
                    updatePassword();
                    return;
                case 6:
                    // 退出
                    System.out.println(loginAcc.getUserName() + "您退出系统成功");
                    return; // 跳出并结束当前循环
                case 7:
                    // 注销当前账户
                    if (deleteAccount()) {
                        return;
                    }
                    break;
                default:
                    System.out.println("您输入的命令有误,请重新输入");
            }
        }
    }
    //密码修改
    private void updatePassword() {
        System.out.println("===账户密码修改操作===");
        while (true) {
            // 认证当前密码
            System.out.println("请输入当前账户密码");
            String password = sc.next();
            // 验证当前密码是否正确
            if(loginAcc.getPassWord().equals(password)){
                while (true) {
                    // 认证通过
                    System.out.println("请输入新密码");
                    String newpassword = sc.next();
                    System.out.println("再次输入确认新密码");
                    String againNewpassword = sc.next();
                    if(newpassword.equals(againNewpassword)){
                        // 密码修改成功
                        loginAcc.setPassWord(againNewpassword);
                        System.out.println("密码修改成功");
                        return;
                    }else{
                        System.out.println("两者密码不一致,请重新输入");
                    }
                }
            }else{
                System.out.println("输入当前密码有误");
            }
        }
    }
    // 账户注销
    private boolean deleteAccount() {
        System.out.println("===用户销户===");
        // 询问用户
        while (true) {
            System.out.println("请问你确认销户吗?y/n");
            String command = sc.next();
            switch (command) {
                case "y":
                    // 确认销户
                    // 判断账户是否有钱
                    if (loginAcc.getMoney() == 0) {
                        // 执行销户
                        accounts.remove(loginAcc);
                        System.out.println("销户成功");
                        return true;
                    } else {
                        System.out.println("账户存在余额,不允许销户");
                        return false;
                    }
                default:
                    // 这里默认输入除了y以外的都是保留
                    System.out.println("好的,账户保留");
                    return false;
            }
        }
    }
    // 用户转账模块
    private void transferMoney() {
        System.out.println("===用户转账===");
        // 判断系统中是否有其他账户
        if (accounts.size() < 2) {
            System.out.println("当前账户中只有一个账户,无法发起转账");
            return;
        }
        // 判断自己账户是否有钱
        if (loginAcc.getMoney() == 0) {
            System.out.println("余额为0,无法转账");
            return;
        }
        // 开始执行转账逻辑
        while (true) {
            System.out.println("==请输入对方卡号==");
            String cardId = sc.next();
            // 判断卡号是否正确
            Account acc = getAccountByCardId(cardId);
            if (acc == null) {
                System.out.println("您输入的卡号不存在");
            } else {
                // 对方账户存在,让用户认证姓氏
                while (true) {
                    String name = "*" + acc.getUserName().substring(1);
                    System.out.println("请您输入" + name + "姓氏");
                    String preName = sc.next();
                    // 判断姓氏是否正确
                    if (acc.getUserName().startsWith(preName)) {
                        while (true) {
                            // 认证通过了,真正转账了
                            System.out.println("请输入给对方转账的金额");
                            double money = sc.nextDouble();
                            // 判断金额是否超过余额
                            if (loginAcc.getMoney() >= money) {
                                // 转给对方了
                                // 更新自己的账户余额
                                loginAcc.setMoney(loginAcc.getMoney() - money);
                                // 更新对方账户余额
                                acc.setMoney(acc.getMoney() + money);
                                System.out.println("转账成功,余额为: " + loginAcc.getMoney());
                                // 退出转账
                                return;
                            } else {
                                System.out.println("余额不足,转账失败,最多可转" + loginAcc.getMoney());
                            }
                        }
                    }
                }
            }
        }
    }
    // 取款功能实现
    private void drawMoney() {
        System.out.println("===取款操作===");
        if (loginAcc.getMoney() < 100) {
            System.out.println("您的账户余额不足100元,不允许取钱");
            return;
        }
        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 showLoginAccount() {
        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());
    }
    // 存款功能的实现
    private void depositMoney() {
        System.out.println("====存款操作====");
        System.out.println("请输入存款金额");
        double money = sc.nextDouble();
        loginAcc.setMoney(loginAcc.getMoney() + money);
        System.out.println("恭喜您,您存钱 " + money + "成功,存钱后余额为: " + loginAcc.getMoney());
    }
    // 开户功能实现(当前类调用的方法建议私有化,需要暴漏出去的公有方法建议public)
    private void createAccount() {
        System.out.println("=======系统开户操作=======");
        // 1.创建账户对象
        Account acc = new Account();
        //2. 用户输入账户信息
        System.out.println("请输入你的账户名称");
        String name = sc.next();
        acc.setUserName(name);
        while (true) {
            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 (password.equals(okPassword)) {
                acc.setPassWord(okPassword);
                break;
            } else {
                System.out.println("你输入的2次密码不一致,请重新输入");
            }
        }
        System.out.println("请输入您的取现额度");
        double limit = sc.nextDouble();
        acc.setLimit(limit);
        // 生成卡号
        String newCardId = createCardId();
        acc.setCardId(newCardId);
        //3.将账户存入到集合中
        accounts.add(acc);
        System.out.println("恭喜" + acc.getUserName() + acc.getSex() + "开户成功, 您的卡号为: " + newCardId);
    }
    // 生成卡号,8位数字,并且不与其他账号的卡号重复
    private String createCardId() {
        while (true) {
            // 1.定义一个String类型的变量
            String cardId = "";
            // 使用循环,每次产生一个随机数字给cardId连接起来
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10); // 0-9
                cardId += data;
            }
            // 3.判断cardId中记住的卡号是否与其他账户的卡号重复了,没有重复,才可以作为一个新卡号返回
            Account acc = getAccountByCardId(cardId);
            if (acc == null) {
                // 代表没有重复卡号,可以返回卡号
                return cardId;
            }
        }
    }
    // 根据卡号查询账户对象返回
    private Account getAccountByCardId(String cardId) {
        for (int i = 0; i < accounts.size(); i++) {
            Account account = accounts.get(i);
            // 判断这个账户对象的卡号是否是我们要找的卡号
            if (account.getCardId().equals(cardId)) {
                return account; // 查到了
            }
        }
        return null; // 查无此账户
    }
}

新建Test.java放入以下代码

package org.example.atm;
// 测试类
public class Test {
    public static void main(String[] args) {
        ATM atm = new ATM();
        // 启动欢迎页面
        atm.start();
    }
}

上面的java文件都是放到同一个包下面