题目要求是(用 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;
}
这个问题纠结了好久,望高手帮忙改改~谢谢了!问题二:还书方法有问题。。书全都是“还不了。。”问题三:通过关键词搜索图书时,无法打印出搜索结果
麻烦高人指点下!小弟在此谢过了!
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;
}
这个问题纠结了好久,望高手帮忙改改~谢谢了!问题二:还书方法有问题。。书全都是“还不了。。”问题三:通过关键词搜索图书时,无法打印出搜索结果
麻烦高人指点下!小弟在此谢过了!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货