我正在尝试创建一个检查ISBN号的程序,看看它是否有正确的校验位,如果它没有校验位,它会添加一个校验位。我知道它将如何工作我只是无法弄清楚如何编码它,就像在彼此继承的类中一样。 这是一个不会被评分的课堂示例,只是让我们熟悉将我们的设计变为工作程序。这就是我到目前为止所知道的这是一个简单的控制台程序。
代码已更新
public class isbn
{ //attributes
private string isbnNum;
//method
public string GetIsbn()
{
return this.isbnNum;
}
//constructor
public isbn()
{
Console.Write("Enter Your ISBN Number: ");
this.isbnNum = Console.ReadLine();
}//end default constructor
//method
public string displayISBN()
{
return this.GetIsbn();
}
public static void Main(string[] args)
{
//create a new instance of the ISBN/book class
isbn myFavoriteBook = new isbn();
//contains the method for checking validity
bool isValid = CheckDigit.CheckIsbn(myFavoriteBook.GetIsbn());
//print out the results of the validity.
Console.WriteLine(string.Format("Your book {0} a valid ISBN",
isValid ? "has" : "doesn't have"));
Console.ReadLine();
}//end main
这是教授在课堂上提供的校验位代码,我们只需要对其进行网格化即可使其工作。我知道这是在校验位类中,我不知道如何将它合并到代码中。
代码已更新
public static class CheckDigit
{ // attributes
public static string NormalizeIsbn(string isbn)
{
return isbn.Replace("-", "").Replace(" ", "");
}
public static bool CheckIsbn(string isbn) // formula to check ISBN's validity
{
if (isbn == null)
return false;
isbn = NormalizeIsbn (isbn);
if (isbn.Length != 10)
return false;
int result;
for (int i = 0; i < 9; i++)
if (!int.TryParse(isbn[i].ToString(), out result))
return false;
int sum = 0;
for (int i = 0; i < 9; i++)
sum += (i + 1) * int.Parse(isbn[i].ToString());
int remainder = sum % 11;
if (remainder == 10)
return isbn[9] == 'X';
else
return isbn[9] == (char)('0' + remainder);
}
答案 0 :(得分:1)
听起来类CheckDigit
是ISBN号的业务规则验证器。
在那种情况下:
public static class CheckDigit
{
public static bool CheckIsbn(string isbn)
{
//implementation as in your question.
}
}
现在编写一个使用两个类的新应用程序(这里是一个控制台应用程序)。
class MyConsoleApp
{
static void Main(string[] args)
{
//create a new instance of the ISBN/book class. you're prompted as part
//of the constructor.
isbn myFavoriteBook = new isbn();
//new class contains the method for checking validity
bool isValid = CheckDigit.CheckIsbn(myFavoriteBook.GetIsbn());
//write out the results of the validity.
Console.WriteLine(string.Format("Your book {0} a valid ISBN",
isValid ? "has" : "doesn't have"));
Console.ReadLine();
}
}
以下是发生的事情:
this.isbnNum
。CheckDigit
只是任何给定字符串的验证器。它确定发送的参数是否是有效的ISBN号。它将返回一个布尔。我们发送了isbn.GetIsbn()
,这是用户输入的内容。CheckIsbn()
返回的bool很好地显示在控制台中的用户的句子中。所以真的有2个主要类 - isbn
和CheckDigit
。其他Main(string[] args)
可以从您的代码中删除。
这是entire console app in one file。粘贴到您的应用程序中,您可以看到正在发生的事情。
这是您正在寻找的帮助吗?无论哪种方式,请留下评论,我们可以为您整理出来。
<强>更新强>
CheckIsbn
实际上只做一件事 - 返回第9个字符是X还是其他数字。它不会像现在这样修改用户的ISBN。如果您想维护该格式(删除破折号,空格),以及修改输入ISBN,则可以将ISBN指定为out
参数。如果您想要用户输入的ISBN,请重新定义您的方法,以保留方法CheckIsbn
内所做的任何更改:
public static bool CheckIsbn(out string isbn)