【C#】クラスのサンプル(シンプルな図書館)

2023年1月20日

図書館の仕組みをシミュレートする感じで、クラスを作成してみましょう
実際には、図書館の管理システム(プログラム)がPCで動作していることを想定してみましょう

まず最初に蔵書1冊ごとの本情報を属性としてクラスを作成します

基本

本クラス

著者などの細かな情報は今回割愛しています
今では、バーコードで管理もされていますので、そのような属性も追加してみるとリアリティが増しますね
本屋に置いている本と違う点として、貸し出し日、返却日、在庫状況の属性を追加しています

// 本
class Book
{
    // タイトル
    public string title;
    // 貸し出し日
    public DateTime rentDate;
    // 返却日
    public DateTime dueDate;
    // 在庫あり?
    public bool isAvailable;
}

図書館クラス

次に本を納めている図書館をイメージしてクラスを作ってみましょう
本は、2冊にしておきます(今回は配列を使っています)
また、振る舞い(メソッド)として、貸し出しと一覧表示を追加しています

// 図書館
class Library
{
    // 蔵書(複数の本を収容しているので配列としています)
    public Book[] books = new Book[2];

    // 本の貸し出し
    public void CheckOutBook(Book book, DateTime rentDate)
    {
        book.isAvailable = false;
        book.rentDate = rentDate;
    }

    // 蔵書一覧の表示
    public void Show()
    {
        foreach (var book in books)
        {
            Console.WriteLine($"{book.title},{book.rentDate},{(book.IsAvailable ? "在庫あり" : "貸し出し中")}");
        }
    }
}

使い方

// 1冊目の本の実体(インスタンス)を作る
Book book1 = new Book();
book1.title = "吾輩は猫である";
book1.isAvailable = true;

// 2冊目の本の実体(インスタンス)を作る
Book book2 = new Book();
book2.title = "三四郎";
book2.isAvailable = true;

// 図書館の実体(インスタンス)を作る
Library library = new Library();

// 本を購入して、図書館に追加するイメージ
library.books[0] = book1;
library.books[1] = book2;

// 本を貸し出すシミュレーション
library.CheckOutBook(book1, new DateTime(2023, 10, 25));

// 図書館の今の蔵書状況を表示する
library.Show();

実行結果

吾輩は猫である,2023/10/25 0:00:00,在庫あり
三四郎,0001/01/01 0:00:00,貸し出し中

本の追加をメソッドにしてみる

図書館クラス

メソッドを1つ追加しています
Addメソッド(追加という意味)で、引数に配列のインデックス番号と追加する本のインスタンスを与えます
このメソッドが呼ばれると、books配列の必要とするインデックス番号に代入されます

class Library
{
    // 蔵書(複数の本を収容しているので配列としています)
    public Book[] books = new Book[2];

    // 本の貸し出し
    public void CheckOutBook(Book book, DateTime rentDate)
    {
        book.IsAvailable = true;
        book.rentDate = rentDate;
    }

    // 所蔵する本を追加
    public void Add(int index, Book book)
    {
        books[index] = book;
    }

    // 蔵書一覧の表示
    public void Show()
    {
        foreach (var book in books)
        {
            Console.WriteLine($"{book.title},{book.rentDate},{(book.IsAvailable ? "在庫あり" : "貸し出し中")}");
        }
    }
}

使い方

本の追加がメソッド呼び出しに変わっています
ここでは、適用していませんが、メリットとして、エラー処理を追加できることが挙げられます
例えば、インデックス番号を−1とされた場合などの時にエラーとして配列のデータに追加されることなく、メソッド側のプログラムで、内部のデータを守ることができます

// 1冊目の本の実体(インスタンス)を作る
Book book1 = new Book();
book1.title = "吾輩は猫である";

// 2冊目の本の実体(インスタンス)を作る
Book book2 = new Book();
book2.title = "三四郎";

// 図書館の実体(インスタンス)を作る
Library library = new Library();

//// 本を購入して、図書館に追加するイメージ
// library.books[0] = book1;
// library.books[1] = book2;

// メソッドを使って追加する方法
library.Add(0, book1);
library.Add(1, book2);

// 本を貸し出すシミュレーション
library.CheckOutBook(book1, new DateTime(2023, 10, 25));

// 図書館の今の蔵書状況を表示する
library.Show();

C#,学習,設計

Posted by hidepon