题目要求是(用  C# ):
1.编写一个Book类:
    两个属性: 
          String name     书名 
          int price         定价 
         ( 注:本题中假定书名唯一,可作为书的标识。 )
       一个构造方法:
              Book(String p1, int p2)
       两个方法: 
              String getName()     获取书名 
              int getPrice()         获取价格  2.编写一个BookCard类(借书卡)
         三个属性:
           int rno            读者号        
           String rname        读者名
           Book[] books        在借图书(最多10本)
        一个构造方法:
           BookCard(int p1, String p2, Book[] p3)
        八个成员方法:
           int getRno()        取读者号
           String getRname()    取读者名
           int bnum()        统计在借图书数(已借了几本书)           boolean borrow(Book b)
       //借书方法:参数为所借书之对象。返回值为true表示借书成功,返回值为 false表示借书不成功(如已借10本)
        
           boolean returnBook(String s)
          //还书方法:参数为所还书名。返回值为true表示还书成功,返回值为false表示还书不成功(如没借此书)
           
           void printBooks()
           // 该方法输出在借书名清单,每行一个书名
           
          int  expensive(int p)
            //  该方法统计出在借图书中定价高于参数p的图书册数
           
           String[] search(String s)
            // 本方法的参数是指定的一个关键词(如"计算机")。本方法找出所有在借图书中书名包括该关键词的图书,并将找到的书以数组形式返回   
    
        然后在主程序中编写测试用例,要用到BookCard类的8个方法,要测试方法的不同返回值。
下面是我小弟写的代码:有几个问题一直没法解决,麻烦高人指点下谢谢了!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace borrowbook
{
    class Book
    {
        string bname;                       //书名
        int price;                          //定价
        public Book(string p1,int p2)       //构造函数  
        {
            bname = p1;
            price = p2;
        }            
        public string GetName()             //获取书名
        {
            return bname;
        }                 
        public int GetPrice()               //获取价格
        { 
            return price;
        }                    
   }   class BookCard{                                  //(借书卡)  
       public int rno;                              //读者号        
       public string rname;                         //读者名
       public Book[] books = new Book[10];          //在借图书(最多10本)
       public int count = 0;       public BookCard(int p1,String p2,Book[] p3)          //构造函数
       { 
           rno = p1;
           rname = p2;
           for (int i = 0; i < books.Length;i++ )
               books = p3;
       }        public int GetRno()           //取读者号
       {
           return rno;
       }             
       
       public string GetRname()      // 取读者名
       { 
           return rname;
       }  
       
       public int Bnum()             // 统计在借图书数(已借了几本书)
       {
           int counter = 0;
           for (int i = 0; i < books.Length; i++)
           {
               if (books[i] != null)
                   counter++;
           }
           count = counter;
           return count;
       }       //借书方法:参数为所借书之对象。返回值为true表示借书成功,返回值为false表示借书不成功(如已借10本)。
       public bool Borrow(Book b)
       {
           bool CanBorrow = false;
           if (count >= 10)
           {
               Console.WriteLine("您已借了10本书,不能再多借了...");
               CanBorrow = false;
           }
           else
           {
               for (int i = 0; i <= 10; i++)
               {
                   if (books[i] != null && books[i].GetName().Equals(b.GetName()))
                   {
                       Console.WriteLine("这本书您已经借了...");
                       CanBorrow = false;
                   }
                   else
                   {
                       Console.WriteLine("借书成功!");
                       count++;
                       books[i] = b;
                       CanBorrow = true;
                       break;
                   }
               }
           }
            return CanBorrow;
       }
       
       //还书方法:参数为所还书名。返回值为true表示还书成功,返回值为false表示还书不成功(如没借此书)
       public bool ReturnBook(string s)
       {
           bool returnbook = false;
           for (int i = 0; i < books.Length; i++)
           {
               if (books[i].GetName().Equals(s))
               {
                   books[i] = books[i + 1];
                   books[i + 1] = null;
                   count--;
                   Console.WriteLine("还书成功!");
                   returnbook = true;
               }
               else
               {
                   returnbook = false;
                   Console.WriteLine("还书失败!");
                   break;
               }
           }
           return returnbook;
       }       // 该方法输出在借书名清单,每行一个书名。
       public void PrintBooks()
       {
           for (int i = 0; i < books.Length; i++)
               Console.WriteLine("所借的第{0}本书的书名:{1}, 其价格为:{2}", i + 1, books[i].GetName(), books[i].GetPrice());
       }        //该方法统计出在借图书中定价高于参数p的图书册数。
       public int  Expensive(int p)
       {
           int n = 0;
           for (int i = 0; i < books.Length; i++)
           {
               if (books[i].GetPrice() > p)
                   n++;
           }
           return n;
       }        //本方法的参数是指定的一个关键词(如“计算机”)。本方法找出所有在借图书中书名包括该关键词的图书,并将找到的书以数组形式返回。
       public string[] Search(string s)
       {
           string[] booksearch = new string[10];
           for (int i = 0; i < books.Length; i++) 
           {
               if (books[i].GetName() == s)
               {
                   for (int t = 0; t <= i;t++ )
                       booksearch[t] = books[i].GetName();
               }
           }
           return booksearch;
       }       public void PrintBookSearch(string[] booksearch)
       {
           for (int i = 0; i < booksearch.Length; i++)
               Console.WriteLine("{0}", booksearch[i]);
       }
   }    //自己在主程序中编写测试用例,要用到BookCard类的8个方法,要测试方法的不同返回值。
    class Test
    {
        static void Main(string[] args)
        {
            Book b1 = new Book("C#.NET程序设计教程", 55);
            Book b2 = new Book("EJB应用指南", 32);
            Book b3 = new Book("Java大学实用教程(第2版)", 48);
            Book b4 = new Book("C程序设计", 26);
            Book b5 = new Book("JSP2.0应用教程", 39);
            Book b6 = new Book("线性代数(第四版)", 12);
            Book b7 = new Book("VB.NET应用教程", 34);
            Book b8 = new Book("概率论与数理统计", 19);
            Book b9 = new Book("Visual C#.NET应用教程", 34);
            Book b10 = new Book("运筹学", 25);
            Book b11 = new Book("数据结构(C语言版)", 30);            Book[] books = { b1, b2, b3, b4, b5, b6, b7, b9 };
            BookCard reader = new BookCard(10713, "张三", books);            Console.WriteLine("该读者的信息:");
            Console.WriteLine("读者号:{0}, 读者名:{1}", reader.GetRno(), reader.GetRname());
            Console.WriteLine("该读者共借了{0}本书.",reader.Bnum());
            Console.WriteLine("其中,价格高于30元/本的书有{0}本.",reader.Expensive(30));
            reader.PrintBooks();
            Console.WriteLine("书名中包含了“应用教程”关键字的书有:");
            string[] booksearch = reader.Search("应用教程");
            reader.PrintBookSearch(booksearch);            Console.Write("\n还能借《概率论与数理统计》这本书么?       ");
            reader.Borrow(b8);
            Console.WriteLine("至今为止,共借了{0}本书.", reader.Bnum());
            reader.PrintBooks();            Console.Write("\n还能借《Java大学实用教程(第2版)》吗?       ");//这本书已借,检验。。
            reader.Borrow(b3);
            Console.WriteLine("至今为止,共借了{0}本书.", reader.Bnum());
            reader.PrintBooks();            Console.Write("\n还能借《数据结构(C语言版)》这本书么?       ");
            reader.Borrow(b11);
            Console.WriteLine("至今为止,共借了{0}本书.", reader.Bnum());
            reader.PrintBooks();
            Console.Write("\n还能借《运筹学》这本书么?       ");
            reader.Borrow(b10);
            Console.WriteLine("至今为止,共借了{0}本书.", reader.Bnum());
            reader.PrintBooks();            Console.Write("\n\n能不能还《C程序设计》这本书?      ");
            reader.ReturnBook("C程序设计");            Console.Write("\n能不能还《VB.NET应用教程》这本书?      ");
            reader.ReturnBook("VB.NET应用教程");            Console.ReadLine();
        }
    }
}
编译时,有几个问题一直都没法解决,望高手帮帮忙,点拨下,谢谢!~
问题一:借书方法有问题

       ①    借一本自己已经借了的书时,出现问题
                 if (books[i] != null && books[i].GetName().Equals(b.GetName()))
                   {
                       Console.WriteLine("这本书您已经借了...");
                       CanBorrow = false;
                   }
                  
       ②   借书成功的情况下,新借到的书居然取代了books[0]的书
                  else
                   {
                       Console.WriteLine("借书成功!");
                       count++;
                       books[i] = b;
                       CanBorrow = true;
                       break;
                   }
               这个问题纠结了好久,望高手帮忙改改~谢谢了!问题二:还书方法有问题。。书全都是“还不了。。”问题三:通过关键词搜索图书时,无法打印出搜索结果
麻烦高人指点下!小弟在此谢过了!