Gestion d'un club de Tennis Le jeune et dynamique club de tennis de Crillon le Brave (le plus beau village au monde) engage plusieurs équipes dans différentes compétitions. Il souhaite disposer d'un logiciel lui permettant de gérer: - la composition des équipes - le suivi des résultats obtenus Les règles de gestion sont les suivantes : Chaque équipe n'est engagée que pour une seule compétition. Une équipe est composée exclusivement de membres du club qui ont été sélectionnés par le capitaine de l'équipe pour toute la durée de la compétition. Un membre peut faire partie de plusieurs équipes si les dates de rencontre ne se chevauchent pas. Une compétition est qualifiée de "Simple" lorsque chaque match n'oppose que 2 joueurs (un contre un) et elle est qualifiée de "Multi" lorsqu'il y a à la fois des matchs "Simple" et des matchs de "Double" (2 joueurs contre 2 joueurs). Par exemple : La compétition nommée "Coupe Vincensini" comporte 2 matchs "Simple Homme", 2 matchs "Simple Femme" et un "Double Mixte". (Il faut noter qu'au tennis, il n'existe pas de "Double Femme"). Chaque compétition se déroule sur un nombre de journées connu à l'avance (ex : 5 journées pour la "coupe Vincensini"). Lors d'une journée (rencontre), tous les matchs prévus par le format de la compétition doivent être joués. Lors d'une rencontre, chaque match de "Simple" remporte 1 point et chaque match de "Double" remporte 2 points. SLAM2 _ Programmation c# (Gestion club tennis) page 1
Une analyse du problème a permis de structurer les classes suivantes. Structure des classes correspondantes Classe CLUB Propriétés LesEquipes : LesMembres Collection d'équipes Collection de Membres Méthodes GetNbEquipe() : entier // Retourne le nombre d'équipes engagées GetNbMembres() : entier // Retourne le nombre total de membres AddEquipe(UneEquipe : Equipe) : // Ajoute une équipe AddCompetMulti(UneCompet : CompetitionMulti) AddCompetSimple(UneCompet : CompetitionSimple) SuppCompet (NumCompet : entier) Classe EQUIPE Propriétés Num_equipe : Nom_Equipe Nom_Capitaine LaCompetition LesJoueurs LesJournees entier chaîne(20) chaîne(20) Competition Collection de membres Collection de journées Méthodes GetNbJoueurs() : entier // Retourne le nombre de personnes dans l'équipe AddJoueur(UnJoueur : Membre) :// Ajoute un membre en vérifiant si son // classement est compatible avec le classement maxi de la compétition AddJournee(UneJournee : Journee) GetResultatTotal() : chaîne(3) // Retourne le nombre de points de l'équipe SuppJoueur(NumJoueur : entier) // Supprime le joueur dont le N est passé en paramètre SuppJoueur(Position : entier) // Supprime le joueur en fonction de sa position VerifEquipe() : booléen // Retourne vrai si l'équipe est en nombre suffisant Classe MEMBRE Propriétés NumMembre : NomMembre PrenomMembre Sexe DateNaissance AdresseRue CodePostal Ville TelephoneFixe TelephonePortable Classement chaîne(5) chaîne(20) chaîne(20) chaîne(1) Date chaîne(40) chaîne(20) chaîne(20) chaîne(10) chaîne(10) chaîne(3) SLAM2 _ Programmation c# (Gestion club tennis) page 2
Méthodes GetNbreMatchsJoues(): entier // Retourne le nombre de matchs joués GetNbreMatchsPerdus(): entier // Retourne le nombre de matchs perdus GetNbreMatchsGagne(): entier // Retourne le nombre de matchs remportés Classe COMPETITION Propriétés NumCompetition: NomCompetition Niveau NbreJoueursMini NombreJournees ClassementMaxi entier chaîne(20) chaîne(20) // Régional, Départemental, National, entier entier entier Méthodes GetClassementMaxi() : chaîne(3) //Retourne le classement maxi autorisé pour la compétition GetNbreJournees() : entier // Retourne le nombre de journées pour cette compétition Classe COMPETITION_MULTI hérite de COMPETITION Propriétés NbreSimpleF NbreSimpleH NbreDoubleMixte NbreDoubleH : entier : entier : entier : entier Méthodes GetNbrePointsCompet() : entier // Retourne le nombre de points total pour cette compétition Classe COMPETITION_SIMPLE hérite de COMPETITION Propriétés NbreSimpleF NbreSimpleH : entier : entier Méthodes GetNbrePointsCompet() : entier // Retourne le nombre de points total pour cette compétition Classe JOURNEE Propriétés Num_journee: Date Lieu LesResultats entier Date chaîne(20) Collection de Resultats SLAM2 _ Programmation c# (Gestion club tennis) page 3
Méthodes GetResultatJournee() : chaîne(3) // Retourne le score final d'une journée (ex: 4/2) GetGagne() : booléen // Vrai si l'équipe à gagné VerifResultats() : booléen // Vérifie si tous les matchs ont été joués Classe RESULTAT Propriétés Num_match: entier LesParticipants Collection de Membres (1 ou 2) Decision caractère (V ou D) Score chaîne(15) Méthodes GetDecision() : Chaîne(1) // V pour Victoire D pour Défaite GetScore() : Chaîne(15) // Score de la rencontre ex: 6/3 6/2 Travail à faire : Il vous est demandé de développer dans une application permettant la gestion des équipes engagées dans le club de Crillon le Brave. On utilisera donc une seule instance de la classe CLUB. L'interface que vous devez construire doit permettre la gestion des équipes (affichage de la composition, ajout ou suppression de joueurs, ). Elle doit également permettre la gestion des résultats obtenus par chaque équipe (saisie, affichage, contrôle, ). Pour rendre les données persistantes, on utilisera la sérialisation binaire dans un fichier. Au démarrage de l'application, les données seront chargées (désérialiser) à partir du fichier. A la fermeture de l application, les données devront être sérialisées. Les programmes développés en langage c# utiliseront les classes décrites ci-dessus. SLAM2 _ Programmation c# (Gestion club tennis) page 4
Pour répondre au besoin de cette application nous avons développé l interface graphique cidessus. Puis nous avons écris les fonctions qui sont derrière les boutons avec le code suivant : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace SLAM2_TD_Tennis public partial class FAdherent : Form // Déclaration des variable commune à la feuille Membre UnMembre; int i = 0; char Op = 'F'; public void transfere() UnMembre = (Membre)MG.ClubCrillon.LesMembres[i]; ZTNumero.Text = UnMembre.NumMembre.ToString(); ZTNom.Text = UnMembre.NomMembre; ZTPrenom.Text = UnMembre.PrenomMembre; public void transfere2() Membre UnMembre = new Membre(Convert.ToInt32(ZTNumero.Text), ZTNom.Text, ZTPrenom.Text); SLAM2 _ Programmation c# (Gestion club tennis) page 5
MG.ClubCrillon.LesMembres[i] = UnMembre; //Active zone de texte public void Activation() ZTNom.ReadOnly = false; ZTNumero.ReadOnly = false; ZTPrenom.ReadOnly = false; // Efface zone de texte public void Effacer() ZTNom.Text = ""; ZTNumero.Text = ""; ZTPrenom.Text = ""; // Desactive zone de texte public void Desactivation() ZTNom.ReadOnly = true; ZTNumero.ReadOnly = true; ZTPrenom.ReadOnly = true; public FAdherent() InitializeComponent(); private void label1_click(object sender, EventArgs e) private void BTPrem_Click(object sender, EventArgs e) // On se positionne sur le premier enregistremment s'il existe i = 0; if (MG.ClubCrillon.LesMembres.Count > 0) transfere(); private void BTSuiv_Click(object sender, EventArgs e) // On se déplace vers l'avant i++; if (i < MG.ClubCrillon.LesMembres.Count) transfere(); else i--; SLAM2 _ Programmation c# (Gestion club tennis) page 6
private void BTPrec_Click(object sender, EventArgs e) // On se déplace vers l'arrière if (i > 0) i--; transfere(); private void BTDern_Click(object sender, EventArgs e) if (MG.ClubCrillon.LesMembres.Count > 0) i = MG.ClubCrillon.LesMembres.Count - 1; transfere(); private void FAdherent_Load(object sender, EventArgs e) // Appel à la procedure Prem_click BTPrem_Click(sender, e); private void button1_click(object sender, EventArgs e) // Activation de la zone de texte Activation(); Effacer(); // Affiche les panels PanelAction.Visible = false; PanelValidation.Visible = true; PanelDeplacer.Visible = false; Op = 'N'; private void BTModifier_Click(object sender, EventArgs e) // Activation de la zone de texte Activation(); // Affiche les panels PanelAction.Visible = false; PanelValidation.Visible = true; PanelDeplacer.Visible = false; Op = 'M'; private void BTValider_Click(object sender, EventArgs e) // Transfere des zone de texte transfere2(); // Affiche les panels PanelDeplacer.Visible = true; PanelValidation.Visible = false; PanelAction.Visible = true; // Desactive zone de texte Desactivation(); SLAM2 _ Programmation c# (Gestion club tennis) page 7
private void BTAnnuler_Click(object sender, EventArgs e) private void BTSupprimer_Click(object sender, EventArgs e) DialogResult rep = MessageBox.Show("Etes vous sur de vouloir supprimer ce membre?", "Demande de confirmation", MessageBoxButtons.YesNo); if (rep == DialogResult.Yes) MG.ClubCrillon.LesMembres.RemoveAt(i); transfere(); BTPrem_Click(sender, e); Ensuite il y a les classes : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace SLAM2_TD_Tennis public static class MG public static Club ClubCrillon = new Club(); //**************************************** //***************Class Club*************** //**************************************** [Serializable] public class Club // Collection LesEquipes public ArrayList LesEquipes = new ArrayList(); // Collection LesMembres public ArrayList LesMembres = new ArrayList(); // Constructeurs public Club() // Méthodes public int GetNbEquipe() SLAM2 _ Programmation c# (Gestion club tennis) page 8
public int GetNbMembres() public void AddEquipe() public void AddCompetMulti() public void AddCompetSimple() public void AddCompetSimple(int NomCompet) //****************************************** //***************Class Equipe*************** //****************************************** [Serializable] public class Equipe // Collection LesJoueurs public ArrayList LesJoueurs = new ArrayList(); // Collection LesJournees public ArrayList LesJournees = new ArrayList(); int num_equipe; public int Num_equipe get return num_equipe; set num_equipe = value; string nom_equipe; public string Nom_Equipe get return nom_equipe; set nom_equipe = value; string nom_capitaine; public string Nom_Capitaine get return nom_capitaine; set nom_capitaine = value; SLAM2 _ Programmation c# (Gestion club tennis) page 9
Competition lacompetition; internal Competition LaCompetition get return lacompetition; set lacompetition = value; // Constructeurs public Equipe() // Méthodes public int GetNbJoueurs() public void AddJoueur() public void AddJournee() public string GetResultatTotal() return "void"; public void SuppJoueur(int NumJoueur) public void SuppJoueurs(int Position) public bool VerifEquipe() return true; //****************************************** //***************Class Membre*************** //****************************************** [Serializable] public class Membre int nummembre; public int NumMembre SLAM2 _ Programmation c# (Gestion club tennis) page 10
get return nummembre; set nummembre = value; string nommembre; public string NomMembre get return nommembre; set nommembre = value; string prenommembre; public string PrenomMembre get return prenommembre; set prenommembre = value; string sexe; public string Sexe get return sexe; set sexe = value; DateTime datenaissance; public DateTime DateNaissance get return datenaissance; set datenaissance = value; string adresserue; public string AdresseRue get return adresserue; set adresserue = value; string codepostal; public string CodePostal get return codepostal; set codepostal = value; string ville; public string Ville get return ville; set ville = value; string telephonefixe; SLAM2 _ Programmation c# (Gestion club tennis) page 11
public string TelephoneFixe get return telephonefixe; set telephonefixe = value; string telephoneportable; public string TelephonePortable get return telephoneportable; set telephoneportable = value; string classement; public string Classement get return classement; set classement = value; // Constructeurs public Membre(int pnummembre, string pnom, string pprenom) NomMembre = pnom; NumMembre = pnummembre; PrenomMembre = pprenom; // Méthodes public int GetNbreMatchsJoues() public int GetNbreMatchsPerdus() public int GetNbreMatchsGagne() //*********************************************** //***************Class Competition*************** //*********************************************** [Serializable] public class Competition int numcompetition; public int NumCompetition get return numcompetition; set numcompetition = value; SLAM2 _ Programmation c# (Gestion club tennis) page 12
string nomcompetition; public string NomCompetition get return nomcompetition; set nomcompetition = value; string niveau; public string Niveau get return niveau; set niveau = value; int nbrejoueursmini; public int NbreJoueursMini get return nbrejoueursmini; set nbrejoueursmini = value; int nombrejournees; public int NombreJournees get return nombrejournees; set nombrejournees = value; int classementmaxi; public int ClassementMaxi get return classementmaxi; set classementmaxi = value; // Constructeurs public Competition() // Méthodes public string GetClassementMaxi() return "void"; public int GetbreJournees() //***************************************************** //***************Class Competition_Multi*************** //***************************************************** SLAM2 _ Programmation c# (Gestion club tennis) page 13
[Serializable] public class Competition_Multi : Competition int nbresimplef; public int NbreSimpleF get return nbresimplef; set nbresimplef = value; int nbresimpleh; public int NbreSimpleH get return nbresimpleh; set nbresimpleh = value; int nbredoubleixte; public int NbreDoubleixte get return nbredoubleixte; set nbredoubleixte = value; int nbredoubleh; public int NbreDoubleH get return nbredoubleh; set nbredoubleh = value; // Constructeurs public Competition_Multi() // Méthodes public int GetNbrePointsCompet() //****************************************************** //***************Class Competition_Simple*************** //****************************************************** [Serializable] public class Competition_Simple : Competition int nbresimplef; public int NbreSimpleF get return nbresimplef; set nbresimplef = value; SLAM2 _ Programmation c# (Gestion club tennis) page 14
int nbresimpleh; public int NbreSimpleH get return nbresimpleh; set nbresimpleh = value; // Constructeurs public Competition_Simple() // Méthodes public int GetNbrePointsCompet() //******************************************* //***************Class Journee*************** //******************************************* [Serializable] public class Journee // Collection LesResultats public ArrayList LesResultats = new ArrayList(); int num_journee; public int Num_journee get return num_journee; set num_journee = value; DateTime date; public DateTime Date get return date; set date = value; string lieu; public string Lieu get return lieu; set lieu = value; // Constructeurs public Journee() SLAM2 _ Programmation c# (Gestion club tennis) page 15
// Méthodes public string GetResultatJournee() return "void"; public bool GetGagne() return true; public bool VerifResultats() return true; //******************************************** //***************Class Resultat*************** //******************************************** [Serializable] public class Resultat // Collection LesParticipants public ArrayList LesParticipants = new ArrayList(); int num_match; public int Num_match get return num_match; set num_match = value; string score; public string Score get return score; set score = value; char decision; public char Decision get return decision; set decision = value; // Constructeurs public Resultat() // Méthodes public char GetDecision() return 'V'; SLAM2 _ Programmation c# (Gestion club tennis) page 16
public string GetScore() return "void"; SLAM2 _ Programmation c# (Gestion club tennis) page 17