using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PieceUsineCorrThib { public class EnginDePièces { public const char LF = '\u000A';// caractère de retour à la ligne public const int MAX_TAB_PIECE = 100; // Tableau contenant les decriptifs de pièces public static bool veutContinuer() { bool résultat; bool réponseOK; char réponse; résultat = false; // inutile, mais demandé par C# réponseOK = false; // passera à VRAI dès que l'opérateur saisi est accepté // et permettra la sortie de la boucle. do { réponse = Char.ToUpper(Lire.Caractere(LF + "Voulez-vous continuer (O ou N) ?")); if (réponse == 'O') { résultat = true; réponseOK = true; } else if (réponse == 'N') { résultat = false; réponseOK = true; } } while (!réponseOK); // arrêt quand la réponse est OK (O, o, N ou n). return résultat; } // fin veutContinuer public static void RemplirTableauPiece(out EnregPièce[] piece_tableau, out int indi) { piece_tableau = new EnregPièce[MAX_TAB_PIECE]; indi = 0; do { //piece_tableau[indi] = SaisirPièce(ref piece_tableau[indi]); SaisirPièce(ref piece_tableau[indi]); indi++; } while (veutContinuer()); } internal static void SaisirPièce(ref EnregPièce unepiece) { // Déclarations // EnregPièce pièceSaisie = new EnregPièce(); // initialisation de la structure pièceSaisie // Titre Console.Write("Saisie d'un descriptif de pièce." + LF); Console.Write("--------------------------------" + LF); // Identifiant unepiece.Id = Lire.Chaine("Entrez l'identifiant"); // on fait confiance à l'utilisateur pour le format // Couleur unepiece.couleurPièce = SaisirCouleur("Choisissez la couleur pièce (Jaune, Vert, Bleu, Rouge, Orange, Mauve)"); // Numéro de série unepiece.numeroSerie = Lire.Entier("Entrez le n° de série de la pièce (Voir au dos de la pièce)"); // on fait confiance à l'utilisateur pour le format // Date unepiece.DateFab = SaisirDate(); // Forme et dimensions unepiece.dimension.forme = SaisieForme("Donnez la forme de la pièce (Cubique, Cylindrique, Sphérique)"); switch (unepiece.dimension.forme) { case forme.Cubique: unepiece.dimension.cote = Lire.Double("Votre pièce à une forme Cubique, quelle est la longueur d'un côté?"); break; case forme.Sphérique: unepiece.dimension.rayon = Lire.Double("Votre pièce à une forme Sphérique, quel est son rayon?"); break; case forme.Cylindrique: unepiece.dimension.rayon = Lire.Double("Votre pièce est Cylindrique, quel est son rayon?"); unepiece.dimension.hauteur = Lire.Double("et quelle sa hauteur?"); break; default: Console.ReadLine(); break; } //return unepiece; } private static couleur SaisirCouleur(String invite) { Boolean ok = false; String s; couleur val = (couleur)0; do // cette boucle obtient une chaine correcte { Console.Write(invite + " : "); s = Console.ReadLine(); // je transforme la chaine au format attendu s = Char.ToUpper(s[0]) + s.Substring(1, s.Length - 1).ToLower(); if (Enum.TryParse(s, out val)) // je récupère la valeur associée à la chaine { ok = true; } else { Console.WriteLine("Saise erronée, veuillez recommencer"); } } while (!ok); return val; } private static date SaisirDate() { date dateRetournée; // déclaration d'une variable de type 'structurée' date // Saisie du nom du jour dateRetournée.NomJour = SaisieNomJour("Donnez le jour de la semaine (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)"); // Saisie du jour dateRetournée.jourChiffre = Lire.Entier("Donnez le n° du Jour (de 1 à 30/31 "); // Saisie du mois dateRetournée.Mois = SaisieMois("Donnez le mois"); // Saisie de l'année dateRetournée.Annee = Lire.Entier("Donnez l'année"); return dateRetournée; } private static moisAnnée SaisieMois(string invite) { Boolean ok = false; String s; moisAnnée Mois = (moisAnnée)0; do // cette boucle obtient une chaine correcte { Console.Write(invite + " : "); s = Console.ReadLine(); // je transforme la chaine au format attendu s = Char.ToUpper(s[0]) + s.Substring(1, s.Length - 1).ToLower(); if (Enum.TryParse(s, out Mois)) // je récupère la valeur associée à la chaine { ok = true; } else { Console.WriteLine("Saise erronée, veuillez recommencer"); } } while (!ok); return Mois; } private static jourSemaine SaisieNomJour(string invite) { Boolean ok = false; String s; jourSemaine NomJour = (jourSemaine)0; do // cette boucle obtient une chaine correcte { Console.Write(invite + " : "); s = Console.ReadLine(); // je transforme la chaine au format attendu s = Char.ToUpper(s[0]) + s.Substring(1, s.Length - 1).ToLower(); if (Enum.TryParse(s, out NomJour)) // je récupère la valeur associée à la chaine { ok = true; } else { Console.WriteLine("Saise erronée, veuillez recommencer"); } } while (!ok); return NomJour; } private static forme SaisieForme(string invite) { Boolean ok = false; String s; forme forme = (forme)0; do // cette boucle obtient une chaine correcte { Console.Write(invite + " : "); s = Console.ReadLine(); // je transforme la chaine au format attendu s = Char.ToUpper(s[0]) + s.Substring(1, s.Length - 1).ToLower(); if (Enum.TryParse(s, out forme)) // je récupère la valeur associée à la chaine { ok = true; } else { Console.WriteLine("Saise erronée, veuillez recommencer"); } } while (!ok); return forme; } private static double SaisieRayon(string invite) { double leRayon; leRayon = Lire.Double("Donnez le rayon de la pièce"); return leRayon; } internal static void AfficherTableauPiece(EnregPièce[] Tableaupiece, int indice) { int cpteur; //compteur de piece cpteur = indice++; // indice de parcours Console.WriteLine("Vous avez saisi " + cpteur + " pièce(s). Tapez entrée pour voir toutes les caractéristiques saisies."); Console.ReadLine(); indice = 0; //init indice while (indice < cpteur) { Console.WriteLine("Identifiant : " + Tableaupiece[indice].Id + " || Numéro de série : " + Tableaupiece[indice].numeroSerie + " || Couleur : " + Tableaupiece[indice].couleurPièce + " || Date de fabrication : " + Tableaupiece[indice].DateFab.NomJour + " " + Tableaupiece[indice].DateFab.jourChiffre + " " + Tableaupiece[indice].DateFab.Mois + " " + Tableaupiece[indice].DateFab.Annee); Console.WriteLine("\nType : " + Tableaupiece[indice].dimension.forme); switch (Tableaupiece[indice].dimension.forme) { case forme.Sphérique: Console.WriteLine(" avec un rayon de " + Tableaupiece[indice].dimension.rayon); break; case forme.Cylindrique: Console.WriteLine(" avec un rayon de " + Tableaupiece[indice].dimension.rayon + " et une hauteur de " + Tableaupiece[indice].dimension.hauteur); break; case forme.Cubique: Console.WriteLine(" avec un côté de " + Tableaupiece[indice].dimension.cube); break; default: Console.ReadLine(); break; } indice++; } } } }