Java

[Java]クラスの継承・対話型コマンドを利用した料理注文システム

共有すること

クラスの継承・対話型コマンドを利用した簡易的なアプリ作成

今回作成したアプリ

料理注文システム(Java)
注文したいメニューと個数を人間が入力すると、合計金額を表示する簡易的なシステム

ポイント

・クラスの継承を利用
import java.util.Scannerを利用して、コマンドで入力された情報を取得

開発環境

MacOS HighSierra

前提条件

・アプリは、desktop上のorder_systemディレクトリに保存

order_system
├ main.java
├ menu.java
├ food.java
└ drink.java

FoodクラスおよびDrinkクラスは、Menuクラスを継承

コード例

main.java
import java.util.Scanner;

class Main{
    public static void main(String[] args){

    //メニュー一覧
    Food food1 = new Food("おにぎり",108,10,"鮭",280);
    Food food2 = new Food("パン",150,5,"焼きそばパン",350);
    Food food3 = new Food("サンドイッチ",200,10,"卵",300);

    Drink drink1 = new Drink("緑茶",129,10,"綾鷹",500);
    Drink drink2 = new Drink("紅茶",151,10,"午後の紅茶",500);
    Drink drink3 = new Drink("コーヒー",130,15,"ボス",350);


    //メニューを配列にセット
    Food[] foods = {food1,food2,food3};
    Drink[] drinks= {drink1,drink2,drink3};


    //Foodメニュー表示
    int menu_number = 0;
    System.out.println("--Food--");

    for(int i=0;i<foods.length;i++){
        System.out.println(menu_number + ": " + foods[i].getName() + " " + foods[i].getPrice() + "円 " + foods[i].getCalorie() + "kcal");
        menu_number += 1;
        }

    System.out.println("メニュー番号を入力してください");
    Scanner scanner = new Scanner(System.in);
    int selected_food_menu = scanner.nextInt();

    System.out.println("選択されたメニュー:" + (String)foods[selected_food_menu].getName());

    System.out.println("購入個数を入力してください");
    int food_quantity = scanner.nextInt();

    int food_price = foods[selected_food_menu].getTotalPrice(food_quantity);


    //Drinkメニュー表示
    menu_number = 0;
    System.out.println("--Drink--");

    for(int i=0;i<drinks.length;i++){
        System.out.println(menu_number + ": " + drinks[i].getName() + " "  + drinks[i].getPrice() + "円 " + drinks[i].getAmount() + "ml");
        menu_number += 1;
    }

    System.out.println("番号を入力してください");
    int selected_drink_menu = scanner.nextInt();

    System.out.println("選択されたメニュー:" + (String)drinks[selected_drink_menu].getName());

    System.out.println("購入個数を入力してください");
    int drink_quantity = scanner.nextInt();

    int drink_price = drinks[selected_drink_menu].getTotalPrice(drink_quantity);
    int total_price = food_price + drink_price;

    System.out.println("合計購入金額:" + total_price + "円");
}
}
menu.java
class Menu{
    private String name;
    private int price;
    private int stock;
    private String memo;

    Menu(String name,int price,int stock,String memo){
        this.name = name;
        this.price = price;
        this.stock = stock;
        this.memo = memo;
    }

    public String getName(){
        return this.name;
    }

    public int getPrice(){
        return this.price;
    }

    public int getStock(){
        return this.stock;
    }

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

    public String getMemo(){
        return this.memo;
    }

    public void setMemo(String memo){
        this.memo = memo;
    }

    public int getTotalPrice(int quantity){
        return this.price * quantity;
    }
}
food.java
//Menuクラスを継承
class Food extends Menu{

    private int calorie;

    Food(String name,int price,int stock,String memo,int calorie){
        super(name,price,stock,memo);
        this.calorie = calorie;
    }


    public int getCalorie(){
        return this.calorie;
    }

    public int getTotalPrice(int quantity){
        return super.getTotalPrice(quantity);
    }
}
drink.java
//Menuクラスを継承
class Drink extends Menu{

    private int amount;

    Drink(String name,int price,int stock,String memo,int amount){
        super(name,price,stock,memo);
        this.amount = amount;
    }

    public String getMemo(){
        return super.getMemo();
    }

    public int getAmount(){
        return this.amount;
    }

    public int getTotalPrice(int quantity){
        return super.getTotalPrice(quantity);
    }
}

実行例

MacBookAir:desktop (your PC)$ cd order_system
MacBookAir:order_system (your PC)$ javac main.java menu.java food.java drink.java
MacBookAir:order_system (your PC)$ java Main

--Food--
0: おにぎり 108円 280kcal
1: パン 150円 350kcal
2: サンドイッチ 200円 300kcal
メニュー番号を入力してください
0
選択されたメニュー:おにぎり
購入個数を入力してください
1
--Drink--
0: 緑茶 129円 500ml
1: 紅茶 151円 500ml
2: コーヒー 130円 350ml
番号を入力してください
0
選択されたメニュー:緑茶
購入個数を入力してください
1
合計購入金額:237円

今後の改善点

main.javaのメニューを表示させるコードが悠長 → リファクタリングをして簡易化
・WEBシステムへの組み込み
・データベースとの連携