//INITIALISATION DE LA MISSION// /// <summary> /// Ici sont chargés les fichiers XML et instanciés les objets de la classe "Mission" /// </summary> public GestionMission() { InitializeComponent(); try { xmlDoc.Load(@"..\\..\\..\\sauvegarde1.xml"); M.chargerXml(xmlDoc, M); xmlDoc2.Load(@"..\\..\\..\\sauvegarde2.xml"); M.chargerXml2(xmlDoc2, M); M.Calendar.MiseAJour();//Pour remettre les pendules à l'heure Maj(new Object(), new EventArgs()); } catch { MessageBox.Show("Initialisation Mission", "", MessageBoxButtons.OK, MessageBoxIcon.Information); // Initialisation des paramètres de base pour une mission CalendrierMartien c = new CalendrierMartien(); List<Activite> VieCourante_act = new List<Activite>(); Activite manger = new Activite("Eating"); Activite dormir = new Activite("Sleeping"); Activite divertissement = new Activite("Entertainment"); Activite privé = new Activite("Private"); Activite ctrlSante = new Activite("Health control"); Activite actmedical = new Activite("Medical act"); VieCourante_act.Add(manger); VieCourante_act.Add(dormir); VieCourante_act.Add(divertissement); VieCourante_act.Add(privé); VieCourante_act.Add(ctrlSante); VieCourante_act.Add(actmedical); CategorieActivite VieCourante = new CategorieActivite("Living", VieCourante_act); List<Activite> Science_act = new List<Activite>(); Activite exploCost = new Activite("Exploration Space suit"); Activite exploVeh = new Activite("Exploration Vehicule"); Activite briefing = new Activite("Briefing"); Activite debriefing = new Activite("Debriefing"); Activite Expint = new Activite("Inside experiment"); Activite Expext = new Activite("Outside experiment"); Science_act.Add(exploCost); Science_act.Add(exploVeh); Science_act.Add(briefing); Science_act.Add(debriefing); Science_act.Add(Expint); Science_act.Add(Expext); CategorieActivite Science = new CategorieActivite("Science", Science_act); List<Activite> Maintenance_act = new List<Activite>(); Activite nettoyage = new Activite("Cleaning"); Activite LSSair = new Activite("LSS air system"); Activite LSSeau = new Activite("LSS water system"); Activite LSSnour = new Activite("LSS food system"); Activite powsyst = new Activite("Power systems"); Activite comb = new Activite("Space suit"); Activite autre = new Activite("Other"); Maintenance_act.Add(nettoyage); Maintenance_act.Add(LSSair); Maintenance_act.Add(LSSeau); Maintenance_act.Add(LSSnour); Maintenance_act.Add(powsyst); Maintenance_act.Add(comb); Maintenance_act.Add(autre); CategorieActivite Maintenance = new CategorieActivite("Maintenance", Maintenance_act); List<Activite> Communication_act = new List<Activite>(); Activite RecMess = new Activite("Sending message"); Activite EncMess = new Activite("Receiving message"); Communication_act.Add(RecMess); Communication_act.Add(EncMess); CategorieActivite Communication = new CategorieActivite("Communication", Communication_act); List<Activite> Reparation_act = new List<Activite>(); Activite LSS = new Activite("LSS"); Activite communication = new Activite("Communication"); Activite propSyst = new Activite("Propulsion systems"); Activite habitation = new Activite("Habitat"); Activite vehicule = new Activite("Vehicule"); Reparation_act.Add(LSS); Reparation_act.Add(powsyst); Reparation_act.Add(communication); Reparation_act.Add(propSyst); Reparation_act.Add(habitation); Reparation_act.Add(comb); Reparation_act.Add(vehicule); CategorieActivite Reparation = new CategorieActivite("Reparation", Reparation_act); List<Activite> Emergency_act = new List<Activite>(); Activite urgence = new Activite("Emergency"); Emergency_act.Add(urgence); CategorieActivite Urgence = new CategorieActivite("Emergency"); //Journée type par défaut : for (int i = 1; i < 501; i++) { Jour j = new Jour(i); j.AddAct(new Activite("Sleeping", new Heure(0, 0), new Heure(7, 0), "Un repos bien mérité !")); j.AddAct(new Activite("Eating", new Heure(7, 0), new Heure(8, 0), "Manger c'est important")); j.AddAct(new Activite("Private", new Heure(8, 0), new Heure(12, 0), "")); j.AddAct(new Activite("Eating", new Heure(12, 0), new Heure(14, 0), "Manger c'est important")); j.AddAct(new Activite("Private", new Heure(14, 0), new Heure(19, 0), "")); j.AddAct(new Activite("Eating", new Heure(19, 0), new Heure(21, 0), "Manger c'est important")); j.AddAct(new Activite("Private", new Heure(21, 0), new Heure(23, 0), "")); j.AddAct(new Activite("Sleeping", new Heure(23, 0), new Heure(24, 40), "Un repos bien mérité !")); c.AddJours(j); } //Ajout du calendrier et des activités à la mission : M.Calendar = c; M.AddCategorie(VieCourante); M.AddCategorie(Science); M.AddCategorie(Maintenance); M.AddCategorie(Communication); M.AddCategorie(Reparation); M.AddCategorie(Urgence); // Initialisation des astronautes : List<Astronaute> ListAtr = new List<Astronaute>(); Astronautes InitAstr = new Astronautes(); InitAstr.ShowDialog(); M.ListAstr = InitAstr.Astro(); InitAstr.BringToFront(); } timer1.Start(); dureMission.Maximum = 500; trackBar1.Maximum = 9; //Permet l'affichage des jours de 50 en 50 trackBar1_Scroll(new Object(), new EventArgs()); //Pour différencier les jours d'un scroll à l'autre }
/// <summary> /// Vérifie la cohérence des informations rentrées dans les champs au niveau 3 /// Enregistre les modifications s'il n'y a pas d'erreur /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ConfirmerNiv3_Click(object sender, EventArgs e) { bool[] tab = M.Calendar.Jours[int.Parse(NduJNiv3.Text) - 1].TabHoraires; //Tableau de disponibilité des activités du jour bool[] erreurs = { true, false, false, false,true }; //Tableau d'erreurs Jour jourj = M.Calendar.Jours[int.Parse(NduJNiv3.Text) - 1]; Activite act = new Activite(""); if (TitreNiv3.Text == "Modifier une activité") { act = (Activite)ConfirmerNiv3.Tag; changerUnePlageHoraire(act, jourj.TabHoraires, true); } //Vérification de la sélection d'un astronautes if (listeAstronautes.CheckedItems.Count == 0) { erreurs[4] = false; } for (int i = 0; i < tab.Length; i++) { if (tab[i]) { erreurs[1] = true; } } //Vérification de la sélection d'une activité if (ItemSelect.Text != "") { erreurs[3] = true; } //Si l'heure (minutes comprises) de fin est antérieure à l'heure (minutes comprises) de début if (HDebut.Text != "" && MinDebut.Text != "" && HFin.Text != "" && MinFin.Text != "" && (int.Parse(HDebut.Text) * 6 + int.Parse(MinDebut.Text) / 10 <= int.Parse(HFin.Text) * 6 + int.Parse(MinFin.Text) / 10 - 1)) { erreurs[2] = true; for (int i = int.Parse(HDebut.Text) * 6 + int.Parse(MinDebut.Text) / 10; i < int.Parse(HFin.Text) * 6 + int.Parse(MinFin.Text) / 10 ; i++) { if (!tab[i])//Si tab[i] est false, alors au moins un des emplacements demandés n'est pas disponible { erreurs[0] = false; } } } if (erreurs[0] && erreurs[1] && erreurs[2] && erreurs[3] && erreurs[4]) //Si pas d'erreurs { List<Astronaute> liA = new List<Astronaute>(); for (int i = 0; i < listeAstronautes.Items.Count; i++) { if (listeAstronautes.Items[i].Checked == true) { for (int j = 0; j < M.ListAstr.Count; j++) { if (M.ListAstr[j].Nom == listeAstronautes.Items[i].Text) { if (i == j) { liA.Add(M.ListAstr[j]); } } } } } if (TitreNiv3.Text == "Modifier une activité") { act.Nom = ItemSelect.Text; act.Debut = new Heure(int.Parse(HDebut.Text), int.Parse(MinDebut.Text)); act.Fin = new Heure(int.Parse(HFin.Text), int.Parse(MinFin.Text)); act.TexteDescriptif = texteDescriptif.Text; act.ListAstronaute = liA; act.Gps = new Lieu(NomLieu.Text, new Point(int.Parse(CoordX.Text), int.Parse(CoordY.Text))); } else //Création d'une activité et ajout à la liste pour le jour concerné { act = new Activite(ItemSelect.Text, new Heure(int.Parse(HDebut.Text), int.Parse(MinDebut.Text)), new Heure(int.Parse(HFin.Text), int.Parse(MinFin.Text)), texteDescriptif.Text, liA, new Lieu(NomLieu.Text, new Point(int.Parse(CoordX.Text), int.Parse(CoordY.Text)))); jourj.ListeActivites.Add(act); } changerUnePlageHoraire(act, jourj.TabHoraires, false); //L'activité occupe maintenant la plage horaire CreerBoutons(int.Parse(NduJNiv3.Text)); //On crée le bouton associé Niveau3.Hide(); Niveau2.Show(); if (int.Parse(NumeroJour.Text) < int.Parse(JourCourantMission.Text)) { CreerActivite.Enabled = false; } else { CreerActivite.Enabled = true; } } //En cas d'erreur, on affiche des messages spécifiques et il est impossible d'enregistrer l'activité else if (!erreurs[4]) { MessageBox.Show("Veuillez sélectionner au moins un astronaute", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (!erreurs[3]) { MessageBox.Show("Veuillez sélectionner une activité", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (!erreurs[2]) { MessageBox.Show("La plage horaire selectionnée n'est pas valide", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (!erreurs[1]) { MessageBox.Show("Aucune plage horaire disponible dans la journée, supprimez d'abord des activités", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (!erreurs[0]) { MessageBox.Show("La plage horaire selectionnée n'est pas disponible", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
/// <summary> /// Parcours l'ensemble des activités du jour et attribue la disponibilité des crénaux (true ou false) /// Cette fonction permet aux activités de ne pas se chevaucher /// </summary> /// <param name="act"></param> /// <param name="tab">tableau contenant les disponibilités des crénaux</param> /// <param name="disponible"></param> private void changerUnePlageHoraire(Activite act, bool[] tab, bool disponible) { for (int i = act.Debut.Heures * 6 + act.Debut.Minutes / 10; i < act.Fin.Heures * 6 + act.Fin.Minutes / 10; i++) { tab[i] = disponible; } }
//Lecture XML et génération objets public void chargerXml(XmlDocument xmlDoc, Mission M) { XmlNodeList nodelistCalendrier = xmlDoc.GetElementsByTagName("Calendrier_Martien"); //On crée une liste de tous les éléments dans tout le document qui portent le nom de Calendrier_Martien CalendrierMartien c = new CalendrierMartien(); foreach (XmlNode nodeCalendrier in nodelistCalendrier) //Pour tout les noeuds présents dans notre liste d'élements (ici on a juste un élément) { c.Debut = DateTime.Parse(nodeCalendrier.SelectSingleNode("Début").InnerText); //La date de début du calendrier est égale à ce qui est contenu dans le seul noeud portant le nom début c.Fin = DateTime.Parse(nodeCalendrier.SelectSingleNode("Fin").InnerText); c.Last= DateTime.Parse(nodeCalendrier.SelectSingleNode("Last").InnerText); c.Day = int.Parse(nodeCalendrier.SelectSingleNode("Jour").InnerText); c.Heure = int.Parse(nodeCalendrier.SelectSingleNode("Heure").InnerText); c.Minute = int.Parse(nodeCalendrier.SelectSingleNode("Minute").InnerText); c.Seconde = int.Parse(nodeCalendrier.SelectSingleNode("Seconde").InnerText); XmlNodeList nodelistJours = nodeCalendrier.SelectNodes("Liste_Jour"); foreach (XmlNode nodeJour in nodelistJours) { XmlNodeList nodelistJour = nodeJour.SelectNodes("Jour"); foreach (XmlNode jour in nodelistJour) { string CompteRendu = ""; int num = 0; bool[] tabHoraires = new bool[148]; Jour j = new Jour(CompteRendu, num, tabHoraires); j.CompteRendu = jour.SelectSingleNode("Compte_Rendu").InnerText; j.Numero = int.Parse(jour.SelectSingleNode("Numéro").InnerText); j.Sortie = bool.Parse(jour.SelectSingleNode("Sortie").InnerText); List<Activite> listeActivites = new List<Activite>(); XmlNodeList nodelistActivite = jour.SelectNodes("Liste_Activité"); foreach (XmlNode nodeActivite in nodelistActivite) { XmlNodeList nodelisteActivite = nodeActivite.SelectNodes("Activité"); foreach (XmlNode Activite in nodelisteActivite) { Heure debut = new Heure(0, 0); Heure fin = new Heure(0, 0); Lieu gps = new Lieu(); List<Astronaute> listAstronaute = new List<Astronaute>(); Activite a = new Activite(""); a.Nom = Activite.SelectSingleNode("Nom").InnerText; debut.Heures = int.Parse(Activite.SelectSingleNode("Heure_Debut").InnerText); fin.Heures = int.Parse(Activite.SelectSingleNode("Heure_Fin").InnerText); debut.Minutes = int.Parse(Activite.SelectSingleNode("Minute_Debut").InnerText); fin.Minutes = int.Parse(Activite.SelectSingleNode("Minute_Fin").InnerText); a.Debut = new Heure(debut.Heures, debut.Minutes); a.Fin = new Heure(fin.Heures, fin.Minutes); gps = Lieu.Parse(Activite.SelectSingleNode("Lieu")); a.Gps = gps; List<Astronaute> listAstr = new List<Astronaute>(); XmlNodeList nodelistAstronaute = Activite.SelectNodes("Liste_Astronaute"); foreach (XmlNode nodeAstronaute in nodelistAstronaute) { string nomAst = ""; int id = 0; XmlNodeList nodeAstronautee = nodeAstronaute.SelectNodes("Astronaute"); foreach (XmlNode nodeAstro in nodeAstronautee) { id = int.Parse(nodeAstro.SelectSingleNode("Id").InnerText); nomAst = nodeAstro.SelectSingleNode("Nom").InnerText; Astronaute ast = new Astronaute(id, nomAst); listAstr.Add(ast); } } a.ListAstronaute = listAstr; a.TexteDescriptif = Activite.SelectSingleNode("Texte_Descriptif").InnerText; listeActivites.Add(a); } } j.ListeActivites = listeActivites; XmlNodeList nodelistTabHoraire = jour.SelectNodes("Tableau_Horaire"); foreach (XmlNode nodeListeLibre in nodelistTabHoraire) { XmlNodeList nodelistLibre = nodeListeLibre.SelectNodes("Libre"); int i = 0; foreach (XmlNode nodeLibre in nodelistLibre) { tabHoraires[i] = bool.Parse(nodeLibre.InnerText); i++; } } j.TabHoraires = tabHoraires; c.Jours.Add(j); } } } M.Calendar = c; }
public void AddAct(Activite A) { _listeActivites.Add(A); }
public void RemoveAct(Activite A) { _listeActivites.Remove(A); }
// lecture xml et generation objets public void chargerXml(XmlDocument xmlDoc, Mission M) { XmlNodeList nodelistMission = xmlDoc.GetElementsByTagName("Mission"); List<Astronaute> listAstronautes = new List<Astronaute>(); List<CategorieActivite> listCategorieActivite = new List<CategorieActivite>(); foreach (XmlNode nodeMission in nodelistMission) { XmlNodeList nodelistAstronautes = nodeMission.SelectNodes("Liste_Astronaute"); foreach (XmlNode nodeAstronautes in nodelistAstronautes) { XmlNodeList nodelistAstronaute = xmlDoc.GetElementsByTagName("Astronaute"); string nom = ""; int id = 0; foreach (XmlNode nodeAstronaute in nodelistAstronaute) { id = int.Parse(nodeAstronaute.SelectSingleNode("Id").InnerText); nom = nodeAstronaute.SelectSingleNode("Nom").InnerText; Astronaute a = new Astronaute(id, nom); M._listAstronautes.Add(a); } } XmlNodeList nodelistCategorieActivite = nodeMission.SelectNodes("Liste_Catégorie_Activité"); foreach (XmlNode nodeCategorieActivite in nodelistCategorieActivite) { XmlNodeList nodelisteCategorieActivite = nodeCategorieActivite.SelectNodes("Catégorie_Activité"); foreach (XmlNode nodeCategoriedActivite in nodelisteCategorieActivite) { string nom = ""; List<Activite> listActivite = new List<Activite>(); nom = nodeCategoriedActivite.SelectSingleNode("NomCatégorie").InnerText; XmlNodeList nodelistActivite = nodeCategoriedActivite.SelectNodes("Liste_Activité"); foreach (XmlNode nodeActivite in nodelistActivite) { string nome = ""; XmlNodeList nodelisteActivite = nodeActivite.SelectNodes("Activité"); foreach (XmlNode nodeActivitee in nodelisteActivite) { nome = nodeActivitee.SelectSingleNode("NomActivité").InnerText; Activite act = new Activite(nome); listActivite.Add(act); } } CategorieActivite c = new CategorieActivite(nom, listActivite); M.AddCategorie(c); } } } M.Listcat = Listcat; }