JAVA基础两个项目案例代码
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-9cardId += 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文件都是放到同一个包下面