当前位置: 首页 > news >正文

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 网页接入微信扫码登录

创建微信开放平台账号&#xff0c;然后创建网页应用 获取appid和appsecret 前端使用的vue&#xff0c;安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…...

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法&#xff0c;结果弄完没有出现小鹤双拼方案&#xff0c;想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg&#xff0c;双击运行 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地址...

广东省道路货物运输资格证照片回执可手机线上办理

广东省道路运输资格证是从事道路运输业务、危险品道路运输人员的必要证件&#xff0c;而在办理该证件的过程中&#xff0c;驾驶员照片回执是一项必不可少的材料。随着科技的发展和移动互联网的普及&#xff0c;现在办理驾驶员照片回执已经不再需要亲自前往照相馆&#xff0c;而…...

【微信小程序——案例——本地生活(列表页面)】

案例——本地生活&#xff08;列表页面&#xff09; 九宫格中实现导航跳转——以汽车服务为案例&#xff08;之后可以全部实现页面跳转——现在先实现一个&#xff09; 在app.json中添加新页面 修改之前的九宫格view改为navitage 效果图&#xff1a; 动态设置标题内容—…...

【设计模式】SOLID设计原则

1、什么是SOLID设计原则 SOLID 是面向对象设计中的五个基本设计原则的首字母缩写&#xff0c;它们是&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a; 类应该只有一个单一的职责&#xff0c;即一个类应该有且只…...

基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30

摘 要 随着人们生活水平的高速发展&#xff0c;智能停车计费信息管理方面在近年来呈直线上升&#xff0c;人们也了解到智能停车计费的实用性&#xff0c;因此智能停车计费的管理也逐年递增&#xff0c;智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…...

IntelliJ IDEA 2022.3.2 解决decompiled.class file bytecode version:52.0(java 8)

1 背景 使用idea 打开一个Kotlin语言编写的demo项目&#xff0c;该项目使用gradle构建。其gradle文件如下&#xff1a; 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图

一 什么是 "模板方法&#xff08;Template Method&#xff09;模式" 在固定步骤确定的情况下&#xff0c;通过多态机制在多个子类中对每个步骤的细节进行差异化实现&#xff0c;这就是模板方法模式能够达到的效果。 模板方法模式属于&#xff1a;行为型模式。 二 &…...

HarmonyOS实战开发-自定义分享

介绍 自定义分享主要是发送方将文本&#xff0c;链接&#xff0c;图片三种类型分享给三方应用,同时能够在三方应用中展示。本示例使用数据请求 实现网络资源的获取&#xff0c;使用屏幕截屏 实现屏幕的截取&#xff0c;使用文件管理 实现对文件&#xff0c;文件目录的管理&…...

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 文件系统部署完成并投入生产环境&#xff0c;接下来就需要着手解决一个非常重要的问题 —— 如何实时监控它的运行状态&#xff1f;毕竟&#xff0c;它可能正在为关键的业务应用或容器工作负载提供持久化存储支持&#xff0c;任何小小的故障或性能下降都可能造成不利…...

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…...

4月14日总结

java学习 一.多线程 简介&#xff1a;多线程是计算机科学中的一个重要概念&#xff0c;它允许程序同时执行多个任务或操作。在单个程序内部&#xff0c;多线程使得代码可以并行执行&#xff0c;从而提高程序的性能和响应速度。 这里先来介绍一下创建多线程的几种方法。 1.扩展…...

kafka---broker相关配置

一、Broker 相关配置 1、一般配置 broker.id 当前kafka服务的sid(server id)&#xff0c;在kafka集群中&#xff0c;该值是唯一的&#xff08;unique&#xff09;&#xff0c;如果未设置此值&#xff0c;kafka会自动生成一个int值&#xff1b;为了防止自动生成的值与用户设置…...

【Golang学习笔记】从零开始搭建一个Web框架(二)

文章目录 模块化路由前缀树路由 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 模块化路由 路由在kilon.go文件中导致路由和引擎交织在一起&#xff0c;如果要实现路由功能的拓展增强&#xff0c;那将会非常麻烦&…...

高精度地图导航论文汇总

文章目录 2021基于车载激光点云的高精地图矢量化成图[J] 2022基于高精度地图的智能车辆路径规划与跟踪控制研究[M] 2023一种无人驾驶融合决策方案的设计与实现[M] 2021 基于车载激光点云的高精地图矢量化成图[J] 摘要&#xff1a; 针对车载激光点云中对各特征物提取结果后矢量…...

【域适应】基于域分离网络的MNIST数据10分类典型方法实现

关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型&#xff0c;其中自动提供注释。尽管它们很有吸引力&#xff0c;但此类模型通常无法从合成图像推广到真实图像&#xff0c;因此需要域…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...