// --- Méthodes --- /// <summary> /// Affiche un calendrier couleur sur la console. /// </summary> /// <param name="calendrier">le calendrier à afficher</param> /// <param name="dateÀSurligner">la date à surligner, null si non fournie</param> public static void Afficher(this ICalendrier calendrier, Date dateÀSurligner = null) { // String avec le mois et l'année pour en connaître sa longueur qui variera // selon la longueur du mois. Comme on connaît la longueur de l'arrière-plan de // l'entête, on peut s'assurer qu'elle aura toujours un centrage uniforme : string moisAnnée = $"{calendrier.Mois} {calendrier.Année}"; int longueurBackground = 20; Write(" "); // Affichage de l'entête : BackgroundColor = DarkYellow; ColorWriteLine(Black, moisAnnée.PadLeft(((longueurBackground - moisAnnée.Length) / 2) + moisAnnée.Length).PadRight(longueurBackground)); ResetColor(); // Array de jours qui correspondent aux valeurs des jours de l'enum JourDeLaSemaine... int[] jours = { 7, 1, 2, 3, 4, 5, 6 }; // ... pour en afficher les deux premières lettres de leur contenu en string : foreach (int jour in jours) { ColorWrite(DarkYellow, $" {((JourDeLaSemaine)jour).ToString().Substring(0, 2)}"); } WriteLine(); // Affichage du calendrier, avec la date entrée surlignée, si celle-ci est spécifiée en // paramètre : for (int rangée = 0; rangée < NbRangées; ++rangée) { for (int colonne = 0; colonne < NbColonnes; ++colonne) { if (calendrier[rangée, colonne] != 0) { if (calendrier.Localiser( dateÀSurligner, out int rangéeDate, out int colonneDate) && rangée == rangéeDate && colonne == colonneDate) { Write(" "); BackgroundColor = Green; ColorWrite(Black, "{0, 2}", calendrier[rangée, colonne]); ResetColor(); } else { Write("{0, 3}", calendrier[rangée, colonne]); } }
// Implémentation de IEquatable : public bool Equals(ICalendrier calendrier) => Année == calendrier.Année && Mois == calendrier.Mois;
// --- Méthodes --- // Implémentation de IComparable : public int CompareTo(ICalendrier calendrier) => new Date(Année, Mois, 1).ComparerAvec( new Date(calendrier.Année, calendrier.Mois, 1));
static void Main(string[] args) { Title = "LireDate"; Date date; // La date à reçevoir string strArg = string.Join(" ", args); // Les arguments convertis en texte if (args.Length == 0) { if (!LireDate("Date à analyser", "1000-01-01", "3000-12-31", out date)) { return; } } else { if (!TryParse(strArg, out date)) { MessageErreur($"Date invalide : {strArg}"); return; } } WriteLine(); // Affichage IFormattable : Afficher(" Format G", $"{date:G}"); Afficher(" Format -", $"{date:-}"); Afficher(" Format L", $"{date:L}"); Afficher(" Format S", $"{date:S}", couleurValeur: Magenta); Afficher(" Format .", $"{date:.}", couleurValeur: Magenta); Afficher(" Format /", $"{date:/}", couleurValeur: Magenta); var message = $"\nDate = {date}"; // Message à afficher message += $"\n\nNB : Cette date est "; if (date.EstTrèsSpéciale) { message += "très spéciale"; } else if (date.EstSpéciale) { message += "spéciale"; } else { message += "sans particularité numérologique."; } message += $"\nPS : L'année {date.Année} "; message += date.Année.EstBissextile() ? "est" : "n'est pas"; message += " bissextile."; MessageOk(message); // Afficher si Noël, jour de l'an, St-Jean-Baptiste ou pas, et le jour de l'année : ColorWriteLine(DarkYellow, $" \n\n Jour de l'an : {date.EstJourDeLAn.OuiNon()}"); ColorWriteLine(DarkYellow, $" St-Jean : {date.EstStJean.OuiNon()}"); ColorWriteLine(DarkYellow, $" Noël : {date.EstNoël.OuiNon()}"); ColorWriteLine(Magenta, $" Jour numéro : {date.JourDeLAnnée}"); ColorWriteLine(Blue, $" Jour semaine : {date.JourDeLaSemaine}"); try { ColorWriteLine(Cyan, $" Dans 3 mois : {date.Cloner().ModifierMois(n => n + 3)}"); } catch (ArgumentOutOfRangeException) { MessageErreur($" Dans 3 mois : date impossible"); } WriteLine(""); // Afficher le calendrier : Calendrier calendrier = new Calendrier(date.Année, date.MoisTypé); calendrier.Afficher(date); WriteLine(""); // Utiliser ICalendrier : Debug.Assert(calendrier is object); Debug.Assert(calendrier is Calendrier); Debug.Assert(calendrier is ICalendrier); ICalendrier ical = default(ICalendrier); Debug.Assert(ical == null); Poursuivre(); }