2016-09-18 6 views
0

Title、Author、およびID#を持つBooksのリストを持つLibraryクラスを作成する必要があります。私は本を​​追加する方法、タイトルごとに本を見つける方法、すべての本を表示する方法、および本を取り除く方法が必要です。リスト内のブックを検索し、リストからブックを削除するためのC#メソッド

私のaddBook()メソッドは正しいですか?

findBook()メソッドでBookクラスにコンストラクタを作成するとエラーがありますが、コンストラクタは既に存在します。

また、リストからブックを削除し始めるのは本当にわかりません...リストからアイテムを削除するためのソリューションを探しましたが、自分のプログラムでどのように実装するのか分かりません。

私の最初の大学のコースCSE 1301はひどいので、私は多くのことを理解していません。私は基本的なものとより複雑なものを学ばなければなりません。

public class Library 
{ 
    public string name; 
    public List<Book> books = new List<Book>(); 

    public void addBook(string title, string author) 
    { 
     int bookQuantity; 

     string btitle; 
     string bauthor; 

     bookQuantity = int.Parse(Console.ReadLine()); 

     for (int x = 0; x <= bookQuantity; x++) 
     { 
      Console.WriteLine("Enter Title:"); 
      btitle = Console.ReadLine(); 

      Console.WriteLine("Enter Author:"); 
      bauthor = Console.ReadLine(); 

      books.Add(new Book(btitle, bauthor)); 
     } 
    } 

    public void findBook() 
    { 
     var obj = new Book(); 
     obj.ID = "xy"; 
     string id = obj.ID; 

     Book result = books.Find(x => x.ID == "xy"); 
    } 

    public void displayBooks() 
    { 
     foreach (Book b in books) 
     { 
      Console.WriteLine(b.ToString()); 
     } 
    } 

    public void removeBook() 
    { 

    } 

    public Library() 
    { 

    } 
} 

public class Book 
{ 
    public string title; 
    public string author; 
    public int id; 
    static int isbn; 

    public string ID { get; set; } 

    public void assignID() 
    { 
     id = isbn; 
     isbn++; 
    } 

    public Book(string title, string author) 
    { 
     this.title = title; 
     this.author = author; 
    } 

    public override string ToString() 
    { 
     return string.Format("Title: " + title, "\nAuthor: " + author, "\nISBN: " + id); 
    } 
} 
+0

...単にlist.removeその後、タイトルやISBNコード(あなたの選択またはその両方)を使用して、リストを横断し、removeメソッドについては...

をコンパイルしますどの行?あなたのクラスの新しいインスタンスを作っていないように見えるので、book.book()を呼び出す代わりに、そのメソッドは括弧内に2つの引数を持ちます... – Niklas

+0

あなたのFindBook()メソッドをこれに変更し、実際に本を見つけて返すことができるように予約するための空白、そしてあなたのコードはコンパイルされます。少なくともエラーはそのように固定されています... public Book findBook() { string id = "xy"; return books.FirstOrDefault(x => x.ID == id); } – Niklas

+0

@Niklas:それは1つの本しか見つけられません。 – siride

答えて

1

この方法は正しくありません。それにはいくつかの欠陥があります。 1. I/Oメソッドを呼び出して、ユーザーから情報を取得します。しかし、それはこの機能がしなければならないものではありません。その仕事は図書を図書館に追加することです。それはパラメータを介して本の情報を与えられ、その情報を使って新しい本を構成し、それを内部のリストに追加する必要があります。他に何もない。あなたは実際にそのためのコードの大半を持っているので、あなたの問題を解決することは、一連のコードを削除し、残っているものを修正するという行に沿ったものになります。 2.関数は "ブックを追加"と言いますが、実際にはユーザー入力に基づいて複数のブックを追加し、渡された引数は無視します。関数はそれが何をしているのかを実際に指示しなければなりません。

findBook()コードでも同じことが起こりますが、何もパラメータを取ることはできません(何が見つかるか)、何も返されません(見つかったものは無視され、他のコードでは使用できません)。

あなたのコードには他にも多くの問題がありますが、質問したところでは、addBook()です。しかし、一般的には、あなたが言うことを行い、パラメータをとり、物事を返し、余分な作業をしない、あるいはI/Oを行う関数を作るなら、おそらく自分でコードを改善することができます。フォローアップの質問がある場合はお知らせください。

+0

私は自分の割り当てで、ユーザーがコンソールから手動で本を追加する必要があると述べたはずです。それは物事を変えますか?もっと明確にならないと申し訳ありません。 –

+0

@JustinL:実際はそうではありません。書籍情報を読み込むコードはどこか別の場所にあります。このような簡単な代入の場合、そのコードはおそらく 'Main()'にあります。情報がユーザから収集されると、 'Library'クラスのインスタンスに対して' addBook() 'メソッドを呼び出すことができます。 'Library'クラスは、ユーザからの情報の取得には関係しません。 – siride

+0

これは私が思いついたものです。これは良いですか? 'addBook()'メソッドでは、 'Book btitle = new Book(title、author);を入れます。 btitle.assignID(); books.Add(btitle); ' –

-1

あなたのコンストラクタは最初のメソッドでなければなりません...あなたは最初のメソッドとして "public void AssignId()"を持っています...コンパイラはあなたのコンストラクタを見ません...コンストラクタとあなたのプログラムの下にassignIDを移動しますuが取得EXACTエラーが何であるかを

+0

コンストラクタが最初のメソッドでなければならないということは絶対に真実ではありません。 – siride

関連する問題