2010-08-29 5 views
0

J'essaie de faire un programme qui vérifie le numéro ISBN et voit s'il a le bon chiffre de contrôle, s'il n'a pas le chiffre de contrôle, il va en ajouter un. J'ai une idée de comment cela fonctionnera Je n'arrive pas à comprendre comment le coder comme dans les classes héritant les uns des autres. Ceci est un exemple en classe qui ne va pas être noté, c'est juste pour nous familiariser avec l'obtention de nos conceptions à un programme de travail. Voici ce que j'ai jusqu'à présent à l'esprit c'est un programme de console simple.Valider un 10 chiffres ISBN Numéro ERD Inclus

alt text

code mis à jour

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 

Ceci est le code de contrôle à deux chiffres du professeur fourni en classe, nous avons juste à engrener pour l'obtenir pour travailler. Je sais que cela va dans la classe des chiffres de contrôle ce que je ne sais pas est de savoir comment l'intégrer dans le code.

code mis à jour

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

Répondre

1

On dirait que la classe est CheckDigit les règles commerciales validateur pour les numéros ISBN.

Dans ce cas:

public static class CheckDigit 
{ 
    public static bool CheckIsbn(string isbn) 
    { 
     //implementation as in your question. 
    } 
} 

écrire maintenant une nouvelle application (ici, il est une application console) qui utilise à la fois de vos classes.

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

Voici ce qui se passe:

  • nous créons une nouvelle instance de isbn/livre. Son constructeur a la commande Console.Readline pour demander à l'utilisateur d'entrer. Il stocke ensuite l'entrée de l'utilisateur dans this.isbnNum.
  • notre nouvelle classe statique CheckDigit est simplement un validateur d'une chaîne donnée. Il détermine si l'argument envoyé est un numéro ISBN valide. Ça va retourner un bool. Nous l'avons envoyé le isbn.GetIsbn(), qui est ce que l'utilisateur a entré.
  • le bool retourné à partir du CheckIsbn() est affiché joliment dans une phrase pour l'utilisateur dans la console.

Donc vraiment il y a 2 classes principales - isbn et CheckDigit. L'autre Main(string[] args) peut être retiré de votre code. Il s'agit du entire console app in one file. Collez dans votre application, et vous pouvez voir ce qui se passe.

Est-ce l'aide que vous recherchiez? De toute façon, laissez un commentaire, et nous pouvons le faire trier pour vous.

Mises à jour:

  • Le CheckIsbn vraiment seulement 1 chose - si le rendement 9ème caractère est un X ou un autre numéro. Il ne modifie pas l'ISBN de l'utilisateur, tel qu'il se présente aujourd'hui.Si vous souhaitez conserver cette mise en forme (suppression des tirets, des espaces) et modifier l'ISBN en entrée, vous pouvez spécifier l'ISBN en tant que paramètre out.

Redéfinir votre méthode comme si vous voulez que l'ISBN est entré par l'utilisateur, de conserver les modifications apportées dans la méthode CheckIsbn:

public static bool CheckIsbn(out string isbn) 
+0

Je ne comprends pas tout à fait tout cela encore pouvez-vous expliquer il ressemble plus à ce qui se passe exactement dans les classes après que l'utilisateur a entré le numéro isbn. comme cette classe obtient cette information puis la passe à l'autre pour faire quelque chose. merci –

+0

Fondamentalement, la classe isbn est l'objet qui contient le numéro isbn (fourni à l'application en quelque sorte), d'où le nom d'objet "myFavoriteBook", et "new isbn()" créant une nouvelle instance de cette classe .... class est créé, nous devons utiliser le validateur pour voir si l'isbn est réellement valide, par conséquent, "CheckDigit.CheckIsbn" qui appelle une méthode dans la classe CheckDigit (classe séparée de l'isbn), et passe l'argument isbn comme argument renvoie un booléen représentant si oui ou non il est valide .... À ce stade, nous écrivons simplement le résultat à la console ... Est-ce que cela aide à tout effacer? – Brett

+0

Oui, je vous remercie, les gars, je vais garder cela ouvert pendant un moment pour que je puisse poser plus de questions si j'en ai besoin si tout va bien. Je vais coder ce soir et voir si je ne peux pas le faire fonctionner, je pourrais poster un nouveau code ce soir si je commence à avoir des problèmes depuis que je suis nouveau à ce sujet. –

Questions connexes