420-SF2-RE – Exemple : classe Personne

Ce qui suit correspond pour l'essentiel à ce que nous avons fait ensemble en classe.

Classe Personne

Le code de cette classe suit :

using System;

namespace zcs
{
   class Personne
   {
      const short ÂGE_MIN = 0,
                  ÂGE_MAX = 140;
      const short ÂGE_DÉFAUT = ÂGE_MIN;
      const string NOM_DÉFAUT = "INCONNU(E)";
      static bool EstÂgeValide(short candidate) =>
         Algos.EstEntreInclusif(candidate, ÂGE_MIN, ÂGE_MAX);
      static bool EstNomValide(string candidate) =>
         candidate.Length > 0;
      private short âge;
      public short Âge
      {
         get => âge;
         private set
         {
            âge = EstÂgeValide(value) ? value : ÂGE_DÉFAUT;
         }
      }
      private string nom;
      public string Nom
      {
         get => nom;
         private init
         {
            nom = EstNomValide(value)? value: NOM_DÉFAUT;
         }
      }
      public Personne(string nom, short âge)
      {
         Nom = nom;
         Âge = âge;
      }
   }
}

Classe Algos

Le code de cette classe suit :

using System;

namespace zcs
{
   class Algos
   {
      public static bool EstEntreInclusif(int val, int min, int max) =>
         min <= val && val <= max;
   }
}

Classe Program

Le programme principal suit :

using System;
using zcs;

int nbPersonnes = LireNbPersonnes();
Personne[] pers = LirePersonnes(nbPersonnes);

for(int i = 0; i != pers.Length; ++i)
{
   Console.WriteLine($"Personne {i} : {pers[i].Nom} qui a {pers[i].Âge} ans");
}

Console.WriteLine($"Le plus long nom est {TrouverPersonnePlusLongNom(pers).Nom}");
Console.WriteLine($"Âge moyen : {CalculerÂgeMoyen(pers)}");


/*
Affichera l'âge moyen des personnes
 */

static float CalculerÂgeMoyen(Personne[] pers)
{
   int cumul = 0;
   foreach(Personne p in pers)
   {
      cumul += p.Âge;
   }
   //for(int i = 0; i != pers.Length; ++i)
   //{
   //   cumul += pers[i].Âge;
   //}
   return (float)cumul / pers.Length;
}

// précondition : pers.Length != 0
static Personne TrouverPersonnePlusLongNom(Personne[] pers)
{
   Personne p = pers[0];
   for(int i = 1; i < pers.Length; ++i)
   {
      if(p.Nom.Length < pers[i].Nom.Length)
      {
         p = pers[i];
      }
   }
   return p;
}

static int LireNbPersonnes()
{
   Console.Write("Combien de personnes? ");
   int nbPersonnes = int.Parse(Console.ReadLine());
   while(nbPersonnes <= 0)
   {
      Console.Write("Attendu : entier strictement positif. Combien de personnes? ");
      nbPersonnes = int.Parse(Console.ReadLine());
   }
   return nbPersonnes;
}

static Personne[] LirePersonnes(int nbPersonnes)
{
   Personne[] personnes = new Personne[nbPersonnes];
   for (int i = 0; i != personnes.Length; ++i)
   {
      personnes[i] = LirePersonne();
   }
   return personnes;
}

static Personne LirePersonne()
{
   string nom = LireNom();
   short âge = LireÂge();
   return new Personne(nom, âge);
}

static string LireNom()
{
   Console.Write("Nom? ");
   string nom = Console.ReadLine();
   while(!Personne.EstNomValide(nom))
   {
      Console.Write("Attendu : chaîne non-vide. Nom? ");
      nom = Console.ReadLine();
   }
   return nom;
}

static short LireÂge()
{
   Console.Write("Âge? ");
   short âge = short.Parse(Console.ReadLine());
   while (!Personne.EstÂgeValide(âge))
   {
      Console.Write("Attendu : entier valide ... Âge? ");
      âge = short.Parse(Console.ReadLine());
   }
   return âge;
}

Valid XHTML 1.0 Transitional

CSS Valide !