Java　アプリ作成

## オリジナルアプリを作成
まだまだ初心者ですが、オリジナルアプリを作成しました。思うようにいかないことや完全な理想ではないですが、アプリを製作することで勉強になりました！
本での学習や他にもアプリを製作しため、クラス名が重ならないようにした部分もあり名前がわかりずらい部分があればすみません:sob:

#### スッキリわかるJava入門
を参考書に勉強しました:relaxed::relaxed:
あとは、ネットで調べたり、チャットGPTを利用し考え方や必要なメソッドを相談しました！！
初心者のため、つっこみどころなどあるかもしれませんが、もしよろしければ目を通して頂きご教授いただければ幸いです:bow:
メソッドの名前などわかりずらい、コメント入れた方がいい、見にくいなどやこんな考え方の方がいいなどもあればぜひお願いします:bow:

英語が本当に全然だめで調べまくりました:joy:
これは慣れてくるものなのか、、、
英語の勉強もしていきたいなと思いました:robot:


### 内容
飲食の注文アプリで、基本的には数字を使い注文をするスタイルです。
``` MainApp.java
import menuapp.Menu;
import menuapp.Drink;
import menuapp.Food;
import menuapp.MenuCart;
import java.util.Scanner;

public class MainApp {
 public static void main(String[] args) {
  Food.addFoods();
  Drink.addDrinks();
  Scanner scanner = new Scanner(System.in);
  
  System.out.println("メニューの一覧表示をします");
  System.out.println("＜飲み物＞");
  Drink.drinkDisplay();
  System.out.println("＜食べ物＞");
  Food.foodDisplay();
 
  while(true) {
  System.out.println("ご希望される番号を入力してください");
  System.out.println("1.飲み物を注文する");
  System.out.println("2.食べ物を注文する");
  System.out.println("3.注文を終了する");
  // 注文の選択画面
  int choose = scanner.nextInt();
  switch(choose) {
   case 1 -> {
    System.out.println("希望の商品の番号を入力してください");
    Drink.drinkDisplay();
    int number = scanner.nextInt();
    System.out.println("数量を入力してください");
    int quantity = scanner.nextInt();
    Drink drink = Drink.drinkNumber(number);
     if (drink != null) {
      MenuCart.addMenuCart(drink, quantity);
     } else {
      System.out.println("無効な数字です");
     }  
    }
   case 2 -> {
    System.out.println("希望の商品の番号を入力してください");
    Food.foodDisplay();
    int number = scanner.nextInt();
    System.out.println("数量を入力してください");
    int quantity = scanner.nextInt();
    Food food = Food.foodNumber(number);
    if ( food != null) {
     MenuCart.addMenuCart(food, quantity);
    } else {
     System.out.println("無効な数字です");
    }
   }
   case 3 -> {
    System.out.println("注文を終了しカートの中身を確認します。");
    MenuCart.displayCart();
    System.out.println("1.購入に進む");
    System.out.println("2.注文に戻る");
    System.out.println("3.注文をキャンセルする");
    int select = scanner.nextInt();
     // 購入画面の選択画面
     switch(select) {
      case 1 -> {
       MenuCart.sumPrice();
       System.out.println("合計金額は、" + MenuCart.getTotalPrice() + "円です");
       System.out.println("商品が届くまでお待ちください");
       return;
      }
      case 2 -> {
       System.out.println("注文に戻る");
      }
      case 3 -> {
       System.out.println("注文をすべてキャンセルします");
       return;		
      }
      default -> {
       System.out.println("無効な値です。1～3の値を入力してください");
      }
     }
    }
   default -> {
    System.out.println("無効な値です。1～3の値を入力してください");
   }
  } 
 }
}
}
```
実行クラスです。
注文の画面や選択画面などになってます。


``` Menu.java
package menuapp;
import java.util.*;

public abstract class Menu{
 protected String name;
 protected int price;
 protected int stock;
 protected int quantity;
 protected int number;

 public Menu(String name, int price, int stock, int quantity, int number) {
  this.name = name;
  this.price = price;
  this.stock = stock;
  this.quantity = quantity;
  this.number = number;
 }

 public String getName() {
  return name;
 }
 
 public int getPrice() {
  return price;
 }
 
 public int getStock() {
  return stock;
 }

 public void setStock(int stock) {
  this.stock = stock;
 }

 public int getQuantity() {
  return quantity;
 }

 public void setQuantity(int quantity){
  this.quantity = quantity;
 }

 public int getNumber() {
  return number;
 }
 
 // ストックを管理するメソッド
 public void menuStock(int quantity) {
  if ( this.stock >= quantity ) {
   this.stock -= quantity;
  } else {
   System.out.println("売り切れです");
  }
 }

 public static ArrayList<Menu> menuList = new ArrayList<>();
}
```
メニュークラスです。
個々の詳しい内容は各子クラスで設定してます。
在庫を管理してます。


``` Drink.java
package menuapp;
import java.util.ArrayList;

public class Drink extends Menu {
 private String size;
 private static ArrayList<Drink> drinkList = new ArrayList<>();

 public Drink(String name, int price, String size, int stock) {
  super(name, price, stock, 0, 0);
  this.size = size;
 }

 public String getSize() {
  return size;
 }
 
 public static ArrayList<Drink> getDrinkList() {
  return drinkList;
 }

 // ドリンクを追加するメソッド
 public static void addDrinks() {
  drinkList.add(new Drink("アイスコーヒ", 150, "M", 80));
  drinkList.add(new Drink("アイスコーヒ", 200, "L", 80));
  drinkList.add(new Drink("カフェラッテ", 250, "L", 50 ));
  drinkList.add(new Drink("コーラ", 150, "M", 80));
  drinkList.add(new Drink("コーラ", 200, "L", 80));
  drinkList.add(new Drink("ゆずはちみつ", 250, "L", 50));
 }

 // ドリンクを表示するメソッド
 public static void drinkDisplay() {
  int number = 1;
  for (Drink drink : drinkList){
   System.out.println(number + ". " +drink.getName() + "(" + drink.getSize() + ")： " + drink.getPrice() + "円");
   number++;
  }
 }
 
 // ドリンクアイテムと番号を紐づけするメソッド
 public static Drink drinkNumber(int number) {
  if (number > 0 && number <= drinkList.size()){
   return drinkList.get(number -1);
  } else {
   return null;
  }
 }
}
```
ドリンククラスです。
メニュークラスを継承している形になり、名前や金額、在庫の数などを管理してます。
ArrayListを利用してます。

``` Food.java
package menuapp;
import java.util.ArrayList;

public class Food extends Menu {
 private static ArrayList<Food> foodList = new ArrayList<>();

 public Food(String name, int price, int stock) {
  super(name, price, stock, 0, 0);
 }

 public static ArrayList<Food> getFoodList() {
  return foodList;
 }

  // フードアイテムを追加するメソッド
 public static void addFoods() {
  foodList.add(new Food("ポテトフライ", 400, 20));
  foodList.add(new Food("ホットドッグ", 300, 30));
  foodList.add(new Food("うどん", 580, 40));
  foodList.add(new Food("ラーメン", 680, 30));
  foodList.add(new Food("おにぎり(3個セット)", 450, 50));
 }

  // フードアイテムを表示するメソッド
 public static void foodDisplay() {
  int number = 1;
  for (Food food : foodList) {
   System.out.println( number + ". " + food.getName() + "： "+ food.getPrice() + "円");
   number++;
  }
 }

 // フードアイテムと番号を紐づけするメソッド
 public static Food foodNumber(int number) {
  if (number > 0 && number <= foodList.size()) {
   return foodList.get(number - 1);  
  } else {
   return null;
  }
 }
}
```
フードクラスです。
メニュークラスを継承している形になり、名前や金額、在庫の数などを管理してます。
ArrayListを利用してます。

``` MenuCart.java
package menuapp;
import java.util.ArrayList;

public class MenuCart {
 private static ArrayList<Menu> cartList = new ArrayList<>();
 private static int totalPrice;
 int quantity;

 
 // カートに追加するメソッド
 public static void addMenuCart(Menu menu, int quantity) {
  if (menu.getStock() >= quantity) {
  menu.menuStock(quantity);
  menu.setQuantity(quantity);
  cartList.add(menu);
  } else {
   System.out.println("売り切れです");
  }
 }
 
 // カートの中身を表示するメソッド
 public static void displayCart() {
  for(Menu item : cartList) {
   System.out.println("注文商品：" + item.getName() + "数量：" + item.getQuantity() );
  }
 }

 // カートの合計金額を計算するメソッド
 public static void sumPrice() {
  totalPrice = 0;
  for(Menu item : cartList) {
   totalPrice += item.getPrice() * item.getQuantity();
  } 
 }

 // 合計金額を返す
 public static int getTotalPrice() {
  return totalPrice;
 }
}
```
メニューカートクラスです。
カートにアイテムの追加
カートの中身を表示させる
カートの金額を計算し、返す役割です。

理想
注文を一度に複数注文できたり、あとはメニュー表やカートの中身を表示する際見にくい部分が多いので、それも改善したいなと思いつつなかなかいい改善が見つからず、今の状態です、、、:open_mouth: