クラスの練習問題

要件からコードを作成する練習です

問題

C#のクラスを使って、次の要件を満たす「Book」クラスを作成してください。

属性(プロパティ):
・ブック名(Title)
・著者(Author)
・出版社(Publisher)
・出版日(PublishDate)
メソッド:
・ブックの情報を表示するメソッド(DisplayInfo)
・ブックのタイトルを変更するメソッド(ChangeTitle)

次のテストコードを実行し、出力が期得通りになることを確認してください。

Book book = new Book("吾輩は猫である", "夏目漱石", "アイデア出版", new DateTime(1861, 12, 1));

Console.WriteLine("変更前のタイトル:");
book.DisplayInfo();

book.ChangeTitle("坊っちゃん");

Console.WriteLine("\n変更後のタイトル:");
book.DisplayInfo();

期待される出力

変更前のタイトル:
タイトル: 吾輩は猫である
著者: 夏目漱石
出版社: アイデア出版
出版日: 1861/12/01 0:00:00

変更後のタイトル:
タイトル: 坊っちゃん
著者: 夏目漱石
出版社: アイデア出版
出版日: 1861/12/01 0:00:00

解答

次のようにトップレベルステートメントでの記述ができます

Book book = new Book("吾輩は猫である", "夏目漱石", "アイデア出版", new DateTime(1861, 12, 1));

Console.WriteLine("変更前のタイトル:");
book.DisplayInfo();

book.ChangeTitle("坊っちゃん");

Console.WriteLine("\n変更後のタイトル:");
book.DisplayInfo();

class Book
{
    private string Title { get; set; }
    private string Author { get; set; }
    private string Publisher { get; set; }
    private DateTime PublishDate { get; set; }

    public Book(string title, string author, string publisher, DateTime publishDate)
    {
        Title = title;
        Author = author;
        Publisher = publisher;
        PublishDate = publishDate;
    }

    public void DisplayInfo()
    {
        Console.WriteLine("タイトル: " + Title);
        Console.WriteLine("著者: " + Author);
        Console.WriteLine("出版社: " + Publisher);
        Console.WriteLine("出版日: " + PublishDate.ToString());
    }

    public void ChangeTitle(string newTitle)
    {
        Title = newTitle;
    }
}

解説

このコードは、「Book」クラスを使ってブックの情報を表示し、タイトルを変更するプログラムです。

まず、変数「book」を宣言して、「Book」クラスの新しいインスタンスを生成します。このとき、「吾輩は猫である」というタイトル、「夏目漱石」という著者、「アイデア出版」という出版社、「1861年12月1日」という出版日を渡しています。

次に、「DisplayInfo」メソッドを使ってブックの情報を表示します。

次に、「ChangeTitle」メソッドを使ってブックのタイトルを「坊っちゃん」に変更します。

最後に、「DisplayInfo」メソッドを再び使って、変更後のブックの情報を表示します。

「Book」クラスは、タイトル、著者、出版社、出版日の4つの属性を持っています。これらは、プロパティとして宣言されています。また、「DisplayInfo」メソッドはブックの情報を表示するためのメソッドであり、「ChangeTitle」メソッドはブックのタイトルを変更するためのメソッドです。

C#,学習,練習問題

Posted by hidepon