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文件都是放到同一个包下面
相关文章:
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 …...
asp.net core 网页接入微信扫码登录
创建微信开放平台账号,然后创建网页应用 获取appid和appsecret 前端使用的vue,安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…...
【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼
【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法,结果弄完没有出现小鹤双拼方案,想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg,双击运行 3. 在设置中找到微软输入法-常规 1. 新建一个…...
如何解决微信小程序无法使用css3过度属性transition
由于微信小程序不支持CSS3过度属性transition,所以我们需要利用微信小程序api进行画面过度的展示 首先是官方示例: wxml: <view animation="{{animationData}}" style="background:red;height:100rpx;width:100rpx"></view> js: Page(…...
【软件设计师知识点】九、网络与信息安全基础知识
文章目录 计算机网络的概念网络分类网络拓扑结构网络体系结构ISO/OSI 7层参考模型TCP/IP 4层模型TCP/IP 协议族应用层协议传输层协议网络层协议IP 地址IPV4 数据报IP 地址分类子网划分子网掩码IPv6地址...
广东省道路货物运输资格证照片回执可手机线上办理
广东省道路运输资格证是从事道路运输业务、危险品道路运输人员的必要证件,而在办理该证件的过程中,驾驶员照片回执是一项必不可少的材料。随着科技的发展和移动互联网的普及,现在办理驾驶员照片回执已经不再需要亲自前往照相馆,而…...
【微信小程序——案例——本地生活(列表页面)】
案例——本地生活(列表页面) 九宫格中实现导航跳转——以汽车服务为案例(之后可以全部实现页面跳转——现在先实现一个) 在app.json中添加新页面 修改之前的九宫格view改为navitage 效果图: 动态设置标题内容—…...
【设计模式】SOLID设计原则
1、什么是SOLID设计原则 SOLID 是面向对象设计中的五个基本设计原则的首字母缩写,它们是: 单一职责原则(Single Responsibility Principle,SRP): 类应该只有一个单一的职责,即一个类应该有且只…...
基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30
摘 要 随着人们生活水平的高速发展,智能停车计费信息管理方面在近年来呈直线上升,人们也了解到智能停车计费的实用性,因此智能停车计费的管理也逐年递增,智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…...
IntelliJ IDEA 2022.3.2 解决decompiled.class file bytecode version:52.0(java 8)
1 背景 使用idea 打开一个Kotlin语言编写的demo项目,该项目使用gradle构建。其gradle文件如下: plugins {id javaid org.jetbrains.kotlin.jvm version 1.8.20 } group me.administrator version 1.0-SNAPSHOTrepositories {mavenCentral()jcenter()…...
C++11 设计模式1. 模板方法(Template Method)模式学习。UML图
一 什么是 "模板方法(Template Method)模式" 在固定步骤确定的情况下,通过多态机制在多个子类中对每个步骤的细节进行差异化实现,这就是模板方法模式能够达到的效果。 模板方法模式属于:行为型模式。 二 &…...
HarmonyOS实战开发-自定义分享
介绍 自定义分享主要是发送方将文本,链接,图片三种类型分享给三方应用,同时能够在三方应用中展示。本示例使用数据请求 实现网络资源的获取,使用屏幕截屏 实现屏幕的截取,使用文件管理 实现对文件,文件目录的管理&…...
Spring源码刨析之配置文件的解析和bean的创建以及生命周期
public void test1(){XmlBeanFactory xmlBeanFactory new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));user u xmlBeanFactory.getBean("user",org.xhpcd.user.class);// System.out.println(u.getStu());}先介绍一个类XmlBeanFac…...
如何使用 Grafana 监控文件系统状态
当 JuiceFS 文件系统部署完成并投入生产环境,接下来就需要着手解决一个非常重要的问题 —— 如何实时监控它的运行状态?毕竟,它可能正在为关键的业务应用或容器工作负载提供持久化存储支持,任何小小的故障或性能下降都可能造成不利…...
智能革命:未来人工智能创业的天地
智能革命:未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代,人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步,不仅影响着科技行业的每一个角落,更是为创业者提供了…...
4月14日总结
java学习 一.多线程 简介:多线程是计算机科学中的一个重要概念,它允许程序同时执行多个任务或操作。在单个程序内部,多线程使得代码可以并行执行,从而提高程序的性能和响应速度。 这里先来介绍一下创建多线程的几种方法。 1.扩展…...
kafka---broker相关配置
一、Broker 相关配置 1、一般配置 broker.id 当前kafka服务的sid(server id),在kafka集群中,该值是唯一的(unique),如果未设置此值,kafka会自动生成一个int值;为了防止自动生成的值与用户设置…...
【Golang学习笔记】从零开始搭建一个Web框架(二)
文章目录 模块化路由前缀树路由 前情提示: 【Golang学习笔记】从零开始搭建一个Web框架(一)-CSDN博客 模块化路由 路由在kilon.go文件中导致路由和引擎交织在一起,如果要实现路由功能的拓展增强,那将会非常麻烦&…...
高精度地图导航论文汇总
文章目录 2021基于车载激光点云的高精地图矢量化成图[J] 2022基于高精度地图的智能车辆路径规划与跟踪控制研究[M] 2023一种无人驾驶融合决策方案的设计与实现[M] 2021 基于车载激光点云的高精地图矢量化成图[J] 摘要: 针对车载激光点云中对各特征物提取结果后矢量…...
【域适应】基于域分离网络的MNIST数据10分类典型方法实现
关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型,其中自动提供注释。尽管它们很有吸引力,但此类模型通常无法从合成图像推广到真实图像,因此需要域…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
