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文件都是放到同一个包下面