本の購入処理をプログラム化する

概要

本の購入をプログラム化して動作を確認する。既出のHuman_01を継承したBookBuyerクラスのオブジェクトが既出のShohinクラスを継承したShohinBookクラスのオブジェクトを購入する。継承の基本を学ぶ。

import java.util.ArrayList;

/*本を買う人*/
class BookBuyer extends Human_01 {

    int                   myFunds;                                // 手持ちの資金
    ArrayList<ShohinBook> bookShelf = new ArrayList<ShohinBook>();// 本棚の確保
    ShohinBook            myBook;                                 // 手持ちの書籍

    BookBuyer(String name, int age, String address, int birth, int fund) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.birth = birth;
        this.myFunds = fund;
        this.myBook = new ShohinBook("nothing", 0, "nothing", 0);
    }

    // ほしい本とその数を引数とする
    public void buyBook(ShohinBook wishBook, int wishBookAmount) {
        System.out.println(
                           this.name 
                         + "さんが" 
                         + wishBook.getName() 
                         + "/" 
                         + wishBookAmount 
                         + "冊を購入されようとしていますので、在庫を調べます。");
        // 条件1/2:在庫の数が十分にあるか
        if (wishBookAmount <= wishBook.getStock()) {
            // 条件2/2:買うだけの金があるか
            if (this.myFunds >= wishBook.getPrice() * wishBookAmount) {
                // 購入出来る場合の処理
                myBook = new ShohinBook(
                        wishBook.getName(), 
                        wishBook.getPrice(), 
                        wishBook.getPublisher(), 
                        wishBookAmount);
                // 本棚に入れる
                bookShelf.add(myBook);
                // (店の?)在庫を売れた分減らす
                wishBook.decrementStock(wishBookAmount);
                // 支払い分の資金を減らす
                this.myFunds -= wishBook.getPrice() * wishBookAmount;
                System.out.println(
                                 wishBook.getName() 
                                + "を" 
                                + wishBookAmount 
                                + "冊お買い上げ、" 
                                + this.name 
                                + "様、ありがとうございました。");
                // 金が足りない場合の処理
            } else {
                System.out.println(
                          this.name 
                        + "様のお手持ち資金が足りません。" 
                        + "お買い上げできません。あしからずご了承ください。");
            }
            // 在庫がない場合の処理
        } else {
            System.out.println(
                             wishBook.getName() 
                            + "の在庫が" 
                            + wishBook.getStock() 
                            + "ですので、" 
                            + "お買い上げできません。あしからずご了承ください。");
        }
    }

    void display() {
        System.out.println(
                  name    + "   "         
                + age     + "   " 
                + address + "   " 
                + birth   + "   " 
                + myFunds);
    }

    public void displayMyProperty() {
        if (this.myBook.getStock() == 0) {
            System.out.println(
                    this.name + "に手持ちの本はありません。");
        } else {
            System.out.println(
                    this.name + "の手持ちの資金は" + this.myFunds + "円");
            System.out.println(
                    this.name + "の手持ちの本は:");
            for (int i = 0; i < this.bookShelf.size(); i++) {
                System.out.println(this.bookShelf.get(i));
            }
        }

    }

    public String toString() {
        return 
                this.myBook.getName() + "     " 
                + this.myBook.getPrice() + "     " 
                + this.myBook.getPublisher() + "     " 
                + this.myBook.getStock();
    }
}

public class BookShoppingTest_1 {
    public static void main(String[] args) {
        // 初期在庫の生成
        ShohinBook sbt1 = new ShohinBook("人月の神話【新装版】", 3500, "丸善出版", 10);
        ShohinBook sbt2 = new ShohinBook("闘うプログラマー[新装版]", 2000, "日経BP社", 5);
        // 買い手の生成
        BookBuyer Alan = new BookBuyer("アラン・チューリング", 43, "新宿区新宿", 1912, 10000);

        System.out.println("買い手の状況");
        System.out.println();
        Alan.display();
        Alan.displayMyProperty();
        System.out.println();
        System.out.println("只今の在庫状況");
        System.out.println(sbt1);
        System.out.println(sbt2);
        System.out.println();

        // アランがsbt1を2冊購入しようとする
        Alan.buyBook(sbt1, 2);
        System.out.println();
        Alan.displayMyProperty();
        System.out.println();
        System.out.println(sbt1.getName() + "の在庫は、" + sbt1.getStock() + "冊");
        System.out.println();

        // アランがsbt1を10冊購入しようとする
        Alan.buyBook(sbt1, 10);
        System.out.println();
        Alan.displayMyProperty();
        System.out.println();
        System.out.println(sbt1.getName() + "の在庫は、" + sbt1.getStock() + "冊");
        System.out.println();

        // アランがsbt1を4冊購入しようとする
        Alan.buyBook(sbt1, 4);
        System.out.println();
        Alan.displayMyProperty();
        System.out.println();
        System.out.println(sbt1.getName() + "の在庫は、" + sbt1.getStock() + "冊");
        System.out.println();

        // アランがsbt2を1冊購入しようとする
        Alan.buyBook(sbt2, 1);
        System.out.println();
        Alan.displayMyProperty();
        System.out.println();
        System.out.println(sbt2.getName() + "の在庫は、" + sbt2.getStock() + "冊");
        System.out.println();
    }
}

実行結果

買い手の状況

アラン・チューリング 43 新宿区新宿 1912 10000
アラン・チューリングに手持ちの本はありません。

只今の在庫状況
人月の神話【新装版】 3500 丸善出版 10
闘うプログラマー[新装版] 2000 日経BP社 5

アラン・チューリングさんが人月の神話【新装版】/2冊を購入されようとしていますので、在庫を調べます。
人月の神話【新装版】を2冊お買い上げ、アラン・チューリング様、ありがとうございました。

アラン・チューリングの手持ちの資金は3000円
アラン・チューリングの手持ちの本は:
人月の神話【新装版】 3500 丸善出版 2

人月の神話【新装版】の在庫は、8冊

アラン・チューリングさんが人月の神話【新装版】/10冊を購入されようとしていますので、在庫を調べます。
人月の神話【新装版】の在庫が8ですので、お買い上げできません。あしからずご了承ください。

アラン・チューリングの手持ちの資金は3000円
アラン・チューリングの手持ちの本は:
人月の神話【新装版】 3500 丸善出版 2

人月の神話【新装版】の在庫は、8冊

アラン・チューリングさんが人月の神話【新装版】/4冊を購入されようとしていますので、在庫を調べます。
アラン・チューリング様のお手持ち資金が足りません。お買い上げできません。あしからずご了承ください。

アラン・チューリングの手持ちの資金は3000円
アラン・チューリングの手持ちの本は:
人月の神話【新装版】 3500 丸善出版 2

人月の神話【新装版】の在庫は、8冊

アラン・チューリングさんが闘うプログラマー[新装版]/1冊を購入されようとしていますので、在庫を調べます。
闘うプログラマー[新装版]を1冊お買い上げ、アラン・チューリング様、ありがとうございました。

アラン・チューリングの手持ちの資金は1000円
アラン・チューリングの手持ちの本は:
人月の神話【新装版】 3500 丸善出版 2
闘うプログラマー[新装版] 2000 日経BP社 1

闘うプログラマー[新装版]の在庫は、4冊

チューリングの大聖堂: コンピュータの創造とデジタル世界の到来

チューリングの大聖堂: コンピュータの創造とデジタル世界の到来

闘うプログラマー[新装版]

闘うプログラマー[新装版]

人月の神話【新装版】

人月の神話【新装版】