Проверьте 10-значный номер ISBN ERD включены - PullRequest
0 голосов
/ 29 августа 2010

Я пытаюсь создать программу, которая проверит номер ISBN и проверит, имеет ли он правильную контрольную цифру, если он не имеет контрольной цифры, он добавит ее.У меня есть идея, как это будет работать, я просто не могу понять, как его кодировать, как в классах, наследуемых друг от друга.Это пример в классе, который не будет оценен, это просто ознакомит нас с получением наших проектов для работающей программы.вот что я имею в виду, это простая консольная программа.

alt text

Код обновлен

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);
    }

1 Ответ

1 голос
/ 29 августа 2010

Похоже, класс 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();
    }
}

Вот что происходит:

  • мы создаем новый экземпляр isbn / book. Его конструктор имеет команду Console.Readline, чтобы запросить ввод у пользователя. Затем он сохраняет запись пользователя в this.isbnNum.
  • наш новый статический класс CheckDigit - это просто валидатор любой заданной строки. Он определяет, является ли переданный аргумент действительным номером ISBN. Это вернет бул. Мы отправили ему isbn.GetIsbn(), что и было введено пользователем.
  • bool, возвращаемый из CheckIsbn(), красиво отображается в предложении для пользователя в консоли.

Так что на самом деле есть 2 основных класса - isbn и CheckDigit. Другие Main(string[] args) могут быть удалены из вашего кода.

Вот консольное приложение в одном файле . Вставьте в свое приложение, и вы увидите, что происходит.

Это помощь, которую вы искали? В любом случае, оставьте комментарий, и мы сможем разобраться с ним.

Обновление:

  • CheckIsbn на самом деле делает только 1 вещь - возвращает, является ли 9-й символ X или каким-либо другим числом. Он не изменяет ISBN от пользователя в его нынешнем виде. Если вы хотите сохранить это форматирование (удаляя тире, пробелы) и иным образом изменить входной ISBN, то вы можете указать ISBN в качестве параметра out.

Переопределите ваш метод следующим образом, если вы хотите, чтобы введенный пользователем номер ISBN сохранял любые изменения, сделанные в методе CheckIsbn:

public static bool CheckIsbn(out string isbn) 
...