boy in green shirt
Photo by CDC on Pexels.com

【授業レポート】システム開発入門 第21週目 〜継承で拡張&コンソールUIを作ろう!〜

21週目の授業では、先週実装した図書館貸出システムをさらに強化し、継承を使った機能拡張と、コンソールベースのメニューUIを導入しました。


■ 先生の導入:「使いやすいインターフェースは、ユーザーへの思いやり」

田中先生:「機能を増やすだけではなく、ユーザーが直感的に操作できる仕組みづくりも大切です。今回は継承で新しい本の種類を追加し、操作画面を整えましょう。」


■ 実習①:ReferenceBook/Magazine クラスの作成

まずは Book クラスを継承し、利用制限や異なる返却ルールを持つ本の種類を追加。

from book import Book

class ReferenceBook(Book):
    def lend(self):
        # 参考図書は貸出不可
        print(f"{self.title} は参考図書のため貸出できません。")
        return False

class Magazine(Book):
    def __init__(self, title, author, issue):
        super().__init__(title, author)
        self.issue = issue
    
    def lend(self):
        # 雑誌は最新号のみ貸出可能
        if self.is_available and self.issue == "最新号":
            self.is_available = False
            return True
        print(f"{self.title} の{self.issue}は貸出不可です。")
        return False

生徒A:「参考図書だけ特別扱いできて面白い!」
生徒B:「雑誌は最新号だけ…実際の図書館っぽい!」


■ 実習②:簡易コンソールメニューの実装

次に、ユーザーが操作しやすいメニューUIを作成。Library クラスにメソッドを追加して、選択肢を表示するループを実装しました。

def show_menu():
    print("\n=== 図書館メニュー ===")
    print("1. 本を検索する")
    print("2. 本を借りる")
    print("3. 本を返す")
    print("4. 終了")

def run_console(library, member):
    while True:
        show_menu()
        choice = input("番号を入力してください:")
        if choice == "1":
            title = input("検索する本のタイトル:")
            results = library.find_book(title)
            print([b.title for b in results] or "該当する本はありません")
        elif choice == "2":
            title = input("借りたい本のタイトル:")
            results = library.find_book(title)
            if results and member.borrow(results[0]):
                print("貸出が完了しました!")
            else:
                print("貸出に失敗しました。")
        elif choice == "3":
            title = input("返却する本のタイトル:")
            book = next((b for b in member.borrowed if b.title == title), None)
            if book and member.give_back(book):
                print("返却が完了しました!")
            else:
                print("返却に失敗しました。")
        elif choice == "4":
            print("ご利用ありがとうございました!")
            break
        else:
            print("無効な入力です。もう一度選んでください。")

生徒C:「メニューがあると一気にアプリ感が出る!」
生徒D:「入力ミスにも対応できて安心です」


■ 黙々タイム:UIの微調整と動作テスト

後半は、メニューの表示文言や入力エラーハンドリングをブラッシュアップ。各自の環境で何度も動作させ、使いやすさを意識した改善を施しました。

  • メニュー選択肢への番号付与
  • 不正入力時のガイドメッセージ強化
  • 雑誌・参考図書も検索結果に表示

生徒E:「ガイドを増やしたら迷わなくなった!」
生徒F:「参考図書も一覧に出ると親切だね」


■ 先生のひとこと

「継承で機能を整理し、UIで使いやすさを高める。大切なのは、コードの構造ユーザー体験の両立です。今日学んだ考え方は、どんなアプリでも応用できます。」


■ 来週の予告:外部API連携の準備

次週からは、2年生での学習に先立ち、簡単な外部API連携の基礎を学びます。天気情報や地図データなど、外部サービスと通信する方法にチャレンジしましょう!


継承による拡張と、コンソールUIの実装を通じ、1年生たちは「使えるコード」を書く楽しさと奥深さを実感しました。

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)