哈哈哈!第四天,终于实现了Java入门 。不过,今天晚上停电了,要早一点写今日的收获啦。
ArrayList项目实战
第三天遇到的问题:关于集合remove无法减去的情况下
可以使用 i -- 或 倒着遍历的形式解决!!
package com.itheima.arraylist;
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("java入门");
list.add("吃枸杞");
list.add("j人字拖");
list.add("张三");
list.add("河枸杞");
System.out.println(list);
// // 2\ 开始需求
// for (int i = 0; i < list.size(); i++) {
// String ele = list.get(i);
//
// if(ele.contains("枸杞")){
// list.remove(ele);
// }
//
// }
// System.out.println(list);
//第一种方式:每次分析完,删除后,就让i退一步
// for (int i = 0; i < list.size(); i++) {
// String ele = list.get(i);
//
// if(ele.contains("枸杞")){
// list.remove(ele);
// i--;
// }
//
// }
// System.out.println(list);
// 方式二:从集合后面开始遍历
for (int i = list.size()-1; i >= 0; i--) {
String ele = list.get(i);
if(ele.contains("枸杞")){
list.remove(ele);
}
}
System.out.println(list);
}
}
项目需求:完成菜品的上架、以及菜品的浏览功能
项目解析:首先定义一个Food实体类、FoodMangager管理类(业务数据操作)、Test(主程序)
package com.itheima.arraylistdemo;
public class Food {
private String name;
private double originaPrice;
private double speciaPrice;
private String info;
public Food() {
}
public Food(String name, double originaPrice, double speciaPrice, String info) {
this.name = name;
this.originaPrice = originaPrice;
this.speciaPrice = speciaPrice;
this.info = info;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getOriginaPrice() {
return originaPrice;
}
public void setOriginaPrice(double originaPrice) {
this.originaPrice = originaPrice;
}
public double getSpeciaPrice() {
return speciaPrice;
}
public void setSpeciaPrice(double speciaPrice) {
this.speciaPrice = speciaPrice;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
package com.itheima.arraylistdemo;
import java.util.ArrayList;
import java.util.Scanner;
public class FoodManager {
private ArrayList<Food> foods = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
/**
* 1商家上架菜品
* */
public void add(){
System.out.println("==菜品上架==");
// 2|提前创建一个菜品对象,用于封装用户上架的菜品信息
Food food = new Food();
System.out.println("请输入名字");
String name = sc.next();
food.setName(name);
System.out.println("请输入菜品的原始价格");
double originaPrice = sc.nextDouble();
food.setOriginaPrice(originaPrice);
System.out.println("请输入菜品的优惠价格");
double speciaPrice = sc.nextDouble();
food.setSpeciaPrice(speciaPrice);
System.out.println("请输入菜品的相关信息");
String info = sc.next();
food.setInfo(info);
// 添加
foods.add(food);
System.out.println("菜品上架成功");
}
public void printALLFoods(){
for (int i = 0; i < foods.size(); i++) {
Food food = foods.get(i);
System.out.println("菜品名称" + food.getName());
System.out.println("菜品原价" + food.getOriginaPrice());
System.out.println("菜品优惠价" + food.getSpeciaPrice());
System.out.println("菜品信息" + food.getInfo());
System.out.println("----------------------");
}
}
public void start(){
while (true) {
System.out.println("----欢迎来到信息后台管理系统------");
System.out.println("1、上架");
System.out.println("2、浏览");
System.out.println("请你输入操作的命令");
String command = sc.next();
switch (command){
case "1":
add();
break;
case "2":
printALLFoods();
break;
case "3":
return;
default:
System.out.println("你输入的操作命令有错误~~");
}
}
}
}
package com.itheima.arraylistdemo;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
FoodManager manager = new FoodManager();
manager.start();
}
}
简单的集合应用,类似于数组,完成对每个Food类型变量的遍历,赋值,查看。
ATM项目实战
其实感觉是大流程的ArrayList集合,因为停电原因,未完成对转账(性式隐藏)、修改密码的操作。
完成了如下内容:收获蛮大的!!!明天复盘一下程序,开始接下来的内容!!!
package com.itheima;
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;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName +( sex == '男' ? "先生" : "女");
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
package com.itheima;
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;
/** 启动ATM 的用户开户*/
private void createAccont (){
//1、创建一个账户对象,封装开户信息
System.out.println("==欢迎加入系统开户页面==");
Account acc = new Account();
//输入自己的开户信息
while (true) {
System.out.println("请您输入您的账户名称");
String name = sc.next();
acc.setUserName(name);
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(okpassWord.equals(passWord)){
acc.setPassWord(okpassWord);
break;
}else{
System.out.println("确认密码错误!!请你再次输入您的密码");
}
}
System.out.println("请你输入您的取钱限额");
double limit = sc.nextDouble();
acc.setLimit(limit);
String newCardId = createCardID();
acc.setCardId(newCardId);
//把账户对象,加入到集合中去
accounts.add(acc);
System.out.println("恭喜您 " + acc.getUserName() + "开户成功,您的开号是: " + acc.getCardId() );
}
/* 返回一个8位数 的考号,而且这个卡号不能与其他账户的卡号重复*/
private String createCardID(){
Random r = new Random();
while (true) {
String cardId = "";
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10);//(0,9)
cardId += data;
}
// 判断cardId记住卡号,是否与其他卡号重复,没有重复才可以用
Account acc = getAccountByCardId(cardId);
if(acc == null){
return cardId;
}
}
}
private Account getAccountByCardId(String cardId){
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if(acc.getCardId().equals(cardId)){
return acc;
}
}
return null;
}
// 用户登录功能//
// 判断账号存在, 输入密码, 密码正确才能提示登录车工
private void login(){
System.out.println("==系统登录==");
// 1、判断是否存在账户对象呢?
if(accounts.size() == 0) {
System.out.println("当前系统中无任何用户,请先开户再进行登录");
return;//推出
}
while (true) {
System.out.println("请输入你的登录卡号: ");
String cardId = sc.next();
// 判断卡号是否存在?
Account acc = getAccountByCardId(cardId) ;
if ( acc == null){
System.out.println("你输入的登录的卡号不存在,请确认");
}else{
while (true) {
System.out.println("请输入您的密码:");
String passWord = sc.next();
// 判断密码是否正确?
if(acc.getPassWord().equals(passWord)){
// 密码正确
loginAcc = acc;
System.out.println("恭喜你"+ acc.getUserName() + "你成功登录,你的卡号是" + acc.getCardId());
// 展示登录后的操作页面
showUserCommand();
return;
}else{
System.out.println("您输入的密码错误,请重新输入");
}
}
}
}
}
/* 展示登录后的操作页面 */
private void showUserCommand(){
while (true) {
System.out.println( loginAcc.getUserName() + "你可以选择如下功能的账户处理 ");
System.out.println("1、查询账户");
System.out.println("2、存款");
System.out.println("3、取款");
System.out.println("4、转账");
System.out.println("5、密码修改");
System.out.println("6、推出");
System.out.println("7、注销当前账户");
System.out.println("请选择你要选择的功能:");
int command = sc.nextInt();
switch (command){
case 1:
// 查询当前账户
showLoginAccount();
break;
case 2:
// 存款
deposiMoney();
break;
case 3:
// 取款
drawMoney();
break;
case 4:
// 转账
break;
case 5:
// 密码修改
break;
case 6:
// 退出
System.out.println(loginAcc.getUserName() + "你已退出当前系统");
return; // 跳出这话方法
case 7:
// 注销当前登录账户
break;
default:
System.out.println("您当前选择的操作不存在,请确认~~");
}
}
}
/* 取款操作 */
private void drawMoney() {
System.out.println("==取钱操作==");
// 判断账户余额是否大于100元
if(loginAcc.getMoney()<100){
System.out.println("您的账户余额不是100元,不允许取钱");
return;
}
while (true) {
// 2、让用户输入取款金额
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 deposiMoney() {
System.out.println("==存钱操作==");
System.out.println("请您输入存款金额");
double money = sc.nextDouble();
//更新当前登录用户的金额
loginAcc.setMoney(loginAcc.getMoney()+money);
System.out.println("恭喜你,你存钱" + money + "成功,存钱后金额是:" + loginAcc.getMoney());
}
/*
展示当前登录的账户信息
*/
private void showLoginAccount(){
System.out.println("==当前系统为查询用户信息==");
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());
}
/** 启动ATM系统 展示欢迎页面*/
public void start(){
while (true) {
System.out.println("===欢迎您进入到了ATM系统===");
System.out.println("1、用户登录");
System.out.println("2、用户开户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command){
case 1:
//用户登录
break;
case 2:
//用户开户
createAccont();
break;
default:
System.out.println("没有该操作~~");
}
}
}
}
package com.itheima;
public class Test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}