// public Formule formuleRetenue {get; set;} //Constructeur public Reservation(Table _table, string _nomClient, int _numClient, DateTime _dateReservation, int _nbConvives, Formule _formuleRetenue) { Table = _table; NomClient = _nomClient; NumClient = _numClient; DateReservation = _dateReservation; NbConvives = _nbConvives; FormuleRetenue = _formuleRetenue; }
public Formule retourneFormule(int noFormule) { Formule form = new Formule(); int i = 0; while (i < formules.Count) { if (noFormule == i + 1) { form = formules[i]; } i++; } return(form); }
public void creationReservationXml() { //chargement du document XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); //recherche du noeud "reservation" XmlNodeList itemNodes = doc.SelectNodes("//Restaurant/Reservations/Reservation"); List<int> _noTable = new List<int>(); List<string> _nomClient = new List<string>(); List<int> _numClient = new List<int>(); List<int> _nbConvive = new List<int>(); List<string> _nomFormule = new List<string>(); List<DateTime> _dateResa = new List<DateTime>(); //parcourt tous les noeuds "reservation" du document foreach (XmlNode itemNode in itemNodes) { XmlNode noTable = itemNode.SelectSingleNode("tableResa"); XmlNode nomClient = itemNode.SelectSingleNode("nomClient"); XmlNode numClient = itemNode.SelectSingleNode("numClient"); XmlNode dateResa = itemNode.SelectSingleNode("dateResa"); XmlNode nbConvive = itemNode.SelectSingleNode("nbConvive"); XmlNode nomFormule = itemNode.SelectSingleNode("formuleResa"); if (nomClient != null) { _nomFormule.Add(nomFormule.InnerText); int numclient = int.Parse(numClient.InnerText); _numClient.Add(numclient); _nomClient.Add(nomClient.InnerText); int notable = int.Parse(noTable.InnerText); _noTable.Add(notable); int nbconvive = int.Parse(nbConvive.InnerText); _nbConvive.Add(nbconvive); DateTime dateresa = Convert.ToDateTime(dateResa.InnerText); _dateResa.Add(dateresa); } } //CREATION RESERVATIONS DANS LE PROGRAMME for (int i = 0; i < _nomClient.Count(); i++) { Reservation newResa = new Reservation() ; Formule formuleChoisie=new Formule(); int j=0; while (j<formules.Count) { for (int k = 0; k < formules.Count; k++) { if (_nomFormule[i].Equals(formules[k].NomFormule)) { formuleChoisie=formules[k]; } } j++; } j = 0; while (j < tables.Count) { if (j==_noTable[i]) { if (tables[j].NbPlaceMax==4) { TableCarree tableResa = new TableCarree(); tableResa=tables[j] as TableCarree; newResa = new Reservation(tableResa, _nomClient[i], _numClient[i], _dateResa[i], _nbConvive[i], formuleChoisie); } else { if (tables[j].NbPlaceMax == 6) { TableRectangulaire tableResa = new TableRectangulaire(); tableResa = tables[j] as TableRectangulaire; newResa = new Reservation(tableResa, _nomClient[i], _numClient[i], _dateResa[i], _nbConvive[i], formuleChoisie); } else { TableRonde tableResa = new TableRonde(); tableResa = tables[j] as TableRonde; newResa = new Reservation(tableResa, _nomClient[i], _numClient[i], _dateResa[i], _nbConvive[i], formuleChoisie); } } } j++; } this.reservations.Add(newResa); } }
public void creationFormulesXml() { //le logiciel lit le fichier xml correspondant au restaurant XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); //Lecture des informations nomFormule et TableRequise de chaque formule du fichier XML XmlNodeList itemNodes = doc.SelectNodes("//Restaurant/Formules/Formule"); List<string> _nomFormule = new List<string>(); List<bool> _tableRequise = new List<bool>(); foreach (XmlNode itemNode in itemNodes) { XmlNode nomFormule = itemNode.SelectSingleNode("nomFormule"); XmlNode tableRequise = itemNode.SelectSingleNode("tableRequise"); if ((nomFormule != null) && (tableRequise != null)) { _nomFormule.Add(nomFormule.InnerText); bool tablereq = bool.Parse(tableRequise.InnerText); _tableRequise.Add(tablereq); } } //Lecture des durées de préparations et de présence clients pour chaque formule du fichier XML XmlNodeList dureePrepaNodes = doc.SelectNodes("//Restaurant/Formules/Formule/dureePreparation"); List<int> _hDureePrepa = new List<int>(); List<int> _minDureePrepa = new List<int>(); List<int> _secDureePrepa = new List<int>(); foreach (XmlNode dureeNode in dureePrepaNodes) { XmlNode hDureePrepa = dureeNode.SelectSingleNode("heure1"); XmlNode minDureePrepa = dureeNode.SelectSingleNode("min1"); XmlNode secDureePrepa = dureeNode.SelectSingleNode("sec1"); if ((hDureePrepa != null) && (minDureePrepa != null) && (secDureePrepa != null)) { int hdp = int.Parse(hDureePrepa.InnerText); _hDureePrepa.Add(hdp); int mdp = int.Parse(minDureePrepa.InnerText); _minDureePrepa.Add(mdp); int sdp = int.Parse(secDureePrepa.InnerText); _secDureePrepa.Add(sdp); } } XmlNodeList dureePresenceNodes = doc.SelectNodes("//Restaurant/Formules/Formule/dureePresenceClient"); List<int> _hDureePresence = new List<int>(); List<int> _minDureePresence = new List<int>(); List<int> _secDureePresence = new List<int>(); foreach (XmlNode dureePNode in dureePresenceNodes) { XmlNode hDureePresence = dureePNode.SelectSingleNode("heure2"); XmlNode minDureePresence = dureePNode.SelectSingleNode("min2"); XmlNode secDureePresence = dureePNode.SelectSingleNode("sec2"); if ((hDureePresence != null) && (minDureePresence != null) && (secDureePresence != null)) { int hdpc = int.Parse(hDureePresence.InnerText); _hDureePresence.Add(hdpc); int mdpc = int.Parse(minDureePresence.InnerText); _minDureePresence.Add(mdpc); int sdpc = int.Parse(secDureePresence.InnerText); _secDureePresence.Add(sdpc); } } //CREATION DES FORMULES //elles se créent à partir de la lecture du fichier xml, comme ça le logiciel s'adapte à chaque restaurant for (int i = 0; i < _nomFormule.Count(); i++) { TimeSpan dureePreparation = new TimeSpan(_hDureePrepa[i], _minDureePrepa[i], _secDureePrepa[i]); TimeSpan dureePresenceClient = new TimeSpan(_hDureePresence[i], _minDureePresence[i], _secDureePresence[i]); Formule formule = new Formule(_nomFormule[i], dureePreparation, dureePresenceClient, _tableRequise[i]); this.formules.Add(formule); } }
public void newOccupationTableXml(DateTime dateDeDebut, Formule formuleChoisie, int indiceTable) { DateTime datefincuisto = new DateTime(); datefincuisto = dateDeDebut + formuleChoisie.DureePreparation; //Modification du fichier XML: Ajout de la réservation XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); //Comptage du nombre de tables en fonction de chaque type(carrées, rectangulaires et rondes) XmlNodeList tablecarreeNodes = doc.SelectNodes("//Restaurant/Tables/TableCarees/TableCaree"); XmlNodeList tablerectNodes = doc.SelectNodes("//Restaurant/Tables/TableRectangulaires/TableRectangulaire"); XmlNodeList tablerondeNodes = doc.SelectNodes("//Restaurant/Tables/TableRondes/TableRonde"); int nbTableCarree = 0; int nbTableRect = 0; int nbTableRonde = 0; foreach (XmlNode tablecaree in tablecarreeNodes) { nbTableCarree++; } foreach (XmlNode tablerect in tablerectNodes) { nbTableRect++; } foreach (XmlNode tableronde in tablerondeNodes) { nbTableRonde++; } if (indiceTable < nbTableCarree) { int j = 0; while (j < tablecarreeNodes.Count) { if (j==indiceTable) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); tablecarreeNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } else { if(indiceTable<nbTableRect+nbTableCarree) { int j = 0; while (j < tablerectNodes.Count) { if (j == (indiceTable-nbTableCarree)) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); tablerectNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } else { int j = 0; while (j < tablerondeNodes.Count) { if (j == (indiceTable - (nbTableRect+nbTableCarree))) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); tablerondeNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } } //XmlNodeList cuistoNodes = doc.SelectNodes("//Restaurant/Tables/Table"); //XmlNodeList noCuistoNodes = doc.SelectNodes("//Restaurant/Cuisiniers/Cuisinier/noCuisto"); //string noCuisto = n.ToString(); }
}// fin creationTablesXml public void creationReservationXml() { //chargement du document XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); //recherche du noeud "reservation" XmlNodeList itemNodes = doc.SelectNodes("//Restaurant/Reservations/Reservation"); List <int> _noTable = new List <int>(); List <string> _nomClient = new List <string>(); List <int> _numClient = new List <int>(); List <int> _nbConvive = new List <int>(); List <string> _nomFormule = new List <string>(); List <DateTime> _dateResa = new List <DateTime>(); //parcourt tous les noeuds "reservation" du document foreach (XmlNode itemNode in itemNodes) { XmlNode noTable = itemNode.SelectSingleNode("tableResa"); XmlNode nomClient = itemNode.SelectSingleNode("nomClient"); XmlNode numClient = itemNode.SelectSingleNode("numClient"); XmlNode dateResa = itemNode.SelectSingleNode("dateResa"); XmlNode nbConvive = itemNode.SelectSingleNode("nbConvive"); XmlNode nomFormule = itemNode.SelectSingleNode("formuleResa"); if (nomClient != null) { _nomFormule.Add(nomFormule.InnerText); int numclient = int.Parse(numClient.InnerText); _numClient.Add(numclient); _nomClient.Add(nomClient.InnerText); int notable = int.Parse(noTable.InnerText); _noTable.Add(notable); int nbconvive = int.Parse(nbConvive.InnerText); _nbConvive.Add(nbconvive); DateTime dateresa = Convert.ToDateTime(dateResa.InnerText); _dateResa.Add(dateresa); } } //CREATION RESERVATIONS DANS LE PROGRAMME for (int i = 0; i < _nomClient.Count(); i++) { Reservation newResa = new Reservation(); Formule formuleChoisie = new Formule(); int j = 0; while (j < formules.Count) { for (int k = 0; k < formules.Count; k++) { if (_nomFormule[i].Equals(formules[k].NomFormule)) { formuleChoisie = formules[k]; } } j++; } j = 0; while (j < tables.Count) { if (j == _noTable[i]) { if (tables[j].NbPlaceMax == 4) { TableCarree tableResa = new TableCarree(); tableResa = tables[j] as TableCarree; newResa = new Reservation(tableResa, _nomClient[i], _numClient[i], _dateResa[i], _nbConvive[i], formuleChoisie); } else { if (tables[j].NbPlaceMax == 6) { TableRectangulaire tableResa = new TableRectangulaire(); tableResa = tables[j] as TableRectangulaire; newResa = new Reservation(tableResa, _nomClient[i], _numClient[i], _dateResa[i], _nbConvive[i], formuleChoisie); } else { TableRonde tableResa = new TableRonde(); tableResa = tables[j] as TableRonde; newResa = new Reservation(tableResa, _nomClient[i], _numClient[i], _dateResa[i], _nbConvive[i], formuleChoisie); } } } j++; } this.reservations.Add(newResa); } } //fin creationReservationXML
/* public void ajoutCuisto(int noCuisto) { Cuisinier cuisto = new Cuisinier(noCuisto); brigade.Add(cuisto); nbCuistoTotal = brigade.Count; nbCuistoDispo++; //Verifie que le cuisto est crée Console.WriteLine(cuisto); Console.ReadLine(); }*/ public bool verifierCuisiniersDispo(int nbConvives, DateTime dateDeDebut, Formule formuleChoisie) //ca marche pas, pas la foi de le faire { // On regarde combien de cuisiniers sont disponibles DateTime dateDeFin = dateDeDebut + formuleChoisie.DureePreparation; int nbDispo = 0; List<int> cuistoDispo= new List<int>(); for (int i = 0; i < brigade.Count; i++) //on regarde les cuisiniers un par un { if (brigade[i].PlanningCuisto.Count==0) { nbDispo++; cuistoDispo.Add(i); } else { int k = 0; while (k < brigade[i].PlanningCuisto.Count)//on regarde toutes les heures où les cuisiniers peuvent être occupés { int comparaisonDebut = DateTime.Compare(dateDeDebut, brigade[i].PlanningCuisto[k].DateDebutOccupee); int comparaisonFin = DateTime.Compare(dateDeFin, brigade[i].PlanningCuisto[k].DateFinOccupee); if ((comparaisonDebut < 0 && comparaisonFin < 0) || (comparaisonDebut > 0 && comparaisonFin > 0))//la date n'est pas la même { nbDispo++; cuistoDispo.Add(i); } else { if ((comparaisonDebut < 0 && comparaisonFin > 0) || (comparaisonDebut > 0 && comparaisonFin < 0)) { nbDispo++; cuistoDispo.Add(i); } } k++; } } } if (nbConvives>nbDispo) { Console.WriteLine("La cuisine est occupée, la reservation n'est pas possible. Veuillez essayer à un autre horaire"); return false; } else { Console.WriteLine("Il y a assez de cuisiniers disponibles pour effectuer la réservation"); //Création de l'occupation du cuisinier attribué à la réservation for (int n = 0; n < cuistoDispo.Count; n++) { DateTime datefincuisto = new DateTime(); datefincuisto = dateDeDebut + formuleChoisie.DureePreparation; Occupation occCuisto = new Occupation(dateDeDebut, datefincuisto); this.Brigade[n].PlanningCuisto.Add(occCuisto); //Modification du fichier XML: Ajout de la réservation XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); XmlNodeList cuistoNodes = doc.SelectNodes("//Restaurant/Cuisiniers/Cuisinier"); XmlNodeList noCuistoNodes = doc.SelectNodes("//Restaurant/Cuisiniers/Cuisinier/noCuisto"); string noCuisto= n.ToString(); int j = 0; while (j<noCuistoNodes.Count) { if (noCuistoNodes[j].InnerText == noCuisto) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); cuistoNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } return true; } }
public void validerResa(Table table, DateTime dateResa, int nbconvive, Formule formuleChoisie) { Console.WriteLine("Quel est le nom du client pour la réservation?"); string nomResa=Console.ReadLine(); Console.WriteLine("Quel est le numéro du client?"); string noClient = Console.ReadLine(); int numClient = int.Parse(noClient); int i=0; string noTable=""; int notable=0; //Recherche du numéro de la table while (i<tables.Count) { if (tables[i]==table) { noTable = i.ToString(); notable = i; } i++; } //Recherche du nom de la formule choisie int j = 0; string nomFormule = ""; while (j < formules.Count) { if (formules[j] == formuleChoisie) { nomFormule = formules[j].NomFormule.ToString(); } j++; } //Création de la réservation dans le programme Reservation newResa = new Reservation(table, nomResa, numClient, dateResa, nbconvive, formuleChoisie); reservations.Add(newResa); //Création de l'occupation de la table réservée DateTime datefinresa = new DateTime(); datefinresa = dateResa + formuleChoisie.DureePresenceClient; Occupation occTable = new Occupation(dateResa, datefinresa); tables[notable].PlanningResa.Add(occTable); //Modification du fichier XML: Ajout de la réservation XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); XmlNode resaNodes = doc.SelectSingleNode("//Restaurant/Reservations"); XmlNode noeudBase = doc.CreateElement("Reservation"); XmlNode tableNode = doc.CreateElement("tableResa"); tableNode.InnerText = noTable; noeudBase.AppendChild(tableNode); resaNodes.AppendChild(noeudBase); XmlNode nomClientNode = doc.CreateElement("nomClient"); nomClientNode.InnerText = nomResa; noeudBase.AppendChild(nomClientNode); XmlNode numClientNode = doc.CreateElement("numClient"); numClientNode.InnerText = noClient; noeudBase.AppendChild(numClientNode); XmlNode dateNode = doc.CreateElement("dateResa"); string date = dateResa.ToString(); dateNode.InnerText = date; noeudBase.AppendChild(dateNode); XmlNode nbConviveNode = doc.CreateElement("nbConvive"); nbConviveNode.InnerText = nbconvive.ToString(); noeudBase.AppendChild(nbConviveNode); XmlNode formuleNode = doc.CreateElement("formuleResa"); formuleNode.InnerText = nomFormule; noeudBase.AppendChild(formuleNode); doc.Save("restaurant.xml"); //sauvegarder les occupations dans le xml (classes table et cuisiniers) Console.WriteLine("La réservation a été réalisée avec succès!"); }
public bool jumelage(DateTime dateDeDebut, int nbconvive, Formule formuleChoisie, Cuisine C) { DateTime dateDeFin = dateDeDebut + formuleChoisie.DureePresenceClient; int i = 0; while (i < tables.Count) //on parcoure la liste des tables { int k = 0; if (tables[i].Jumelable == true) //on verifie si la premiere table est jumelable { while (k < tables[k].PlanningResa.Count) //on verifie qu'elle est dispo { int comparaisonDebut1 = DateTime.Compare(dateDeDebut, tables[i].PlanningResa[k].DateDebutOccupee); int comparaisonFin1 = DateTime.Compare(dateDeFin, tables[i].PlanningResa[k].DateFinOccupee); //l'heure de la résa n'est pas comprise dans le temps pendant lequel la table est occup int j = i + 1; if ((comparaisonDebut1 < 0 && comparaisonFin1 < 0) || (comparaisonDebut1 > 0 && comparaisonFin1 > 0)) //la date n'est pas la même { while (j < tables.Count) //on parcourt une deuxieme fois la liste pour trouver une deuxieme table jumelable et dispo { if (tables[j].Jumelable == true) //on verifie si la deuxième table est jumelable { int l = 0; while (l < tables[l].PlanningResa.Count) //on verifie qu'elle est dispo { int comparaisonDebut2 = DateTime.Compare(dateDeDebut, tables[j].PlanningResa[l].DateDebutOccupee); int comparaisonFin2 = DateTime.Compare(dateDeFin, tables[j].PlanningResa[l].DateFinOccupee); if ((comparaisonDebut2 < 0 && comparaisonFin2 < 0) || (comparaisonDebut2 > 0 && comparaisonFin2 > 0)) //la date n'est pas la même { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return(true); } } else { if ((comparaisonDebut2 < 0 && comparaisonFin2 > 0) || (comparaisonDebut2 > 0 && comparaisonFin2 < 0)) //la date est la même mais l'horraire n'est pas simultané { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return(true); } } else { Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return(false); } } l++; } } j++; } } else { if ((comparaisonDebut1 < 0 && comparaisonFin1 > 0) || (comparaisonDebut1 > 0 && comparaisonFin1 < 0)) //la date est la même mais les horaires ne se mélangent pas { if (tables[j].Jumelable == true) //on verifie si la deuxième table est jumelable { int m = 0; while (m < tables[m].PlanningResa.Count) //on verifie qu'elle est dispo { int comparaisonDebut2 = DateTime.Compare(dateDeDebut, tables[j].PlanningResa[m].DateDebutOccupee); int comparaisonFin2 = DateTime.Compare(dateDeFin, tables[j].PlanningResa[m].DateFinOccupee); if ((comparaisonDebut2 < 0 && comparaisonFin2 < 0) || (comparaisonDebut2 > 0 && comparaisonFin2 > 0)) //la date n'est pas la même { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return(true); } } else { if ((comparaisonDebut2 < 0 && comparaisonFin2 > 0) || (comparaisonDebut2 > 0 && comparaisonFin2 < 0)) //la date est la même mais l'horraire n'est pas simultané { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return(true); } } else { Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return(false); } } k++; } } } } } k++; } i++; } Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return(false); }
//voir si la reservation est possible public bool verifierResa(DateTime dateDeDebut, int nbconvive, Formule formuleChoisie, Cuisine C) { DateTime dateDeFin = dateDeDebut + formuleChoisie.DureePresenceClient; //pour l'instant on regarde si il y a une table dispo pour cette horaire int i = 0; int heureDebut = dateDeDebut.Hour; int min = dateDeDebut.Minute; int mois = dateDeDebut.Month; int jour = dateDeDebut.Day; int nbMaxPlaceTable = rechercheNombrePlaceMax(); if (nbconvive <= nbMaxPlaceTable) //on regarde si les convives rentrent sur une seule table { while (i < tables.Count) //on parcoure la liste des tables { if (tables[i].NbPlaceMax >= nbconvive) //on regarde si la table peut accueillir toute les personnes { int k = 0; while (k < tables[i].PlanningResa.Count)//parcoure la liste des occupations { int comparaisonDebut = DateTime.Compare(dateDeDebut, tables[i].PlanningResa[k].DateDebutOccupee); int comparaisonFin = DateTime.Compare(dateDeFin, tables[i].PlanningResa[k].DateFinOccupee); //l'heure de la résa n'est pas comprise dans le temps pendant lequel la table est occup if ((comparaisonDebut < 0 && comparaisonFin < 0) || (comparaisonDebut > 0 && comparaisonFin > 0))//la date n'est pas la même { bool cuisiniersDispo; Console.WriteLine("Reservation possible sur la table " + i); cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { tables[i].newOccupationTableXml(dateDeDebut, formuleChoisie, i); validerResa(tables[i], dateDeDebut, nbconvive, formuleChoisie); return(true); } } else { if ((comparaisonDebut < 0 && comparaisonFin > 0) || (comparaisonDebut > 0 && comparaisonFin < 0)) { bool cuisiniersDispo; Console.WriteLine("Reservation possible sur la table " + i); cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { tables[i].newOccupationTableXml(dateDeDebut, formuleChoisie, i); validerResa(tables[i], dateDeDebut, nbconvive, formuleChoisie); return(true); } } else { Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return(false); } } k++; } } i++; } } else // le nombre de convive ne rentre pas sur une seule table --> jumelage { if (nbconvive < nbMaxPlaceTable + 4) { Console.WriteLine("La fonction jumelage n'est pas aboutie. Le nombre de convives maximum accepté est " + nbMaxPlaceTable); Console.WriteLine("Recommencez en tapant sur ENTREE."); //jumelage(dateDeDebut, nbconvive, formuleChoisie, C); return(false); } else { Console.WriteLine(@"La reservation n'est pas possible. Le restaurant n'accepte pas autant de personnes sur une même table. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return(false); } } Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return(false); }
//ca marche pas, pas la foi de le faire /* public void ajoutCuisto(int noCuisto) { Cuisinier cuisto = new Cuisinier(noCuisto); brigade.Add(cuisto); nbCuistoTotal = brigade.Count; nbCuistoDispo++; //Verifie que le cuisto est crée Console.WriteLine(cuisto); Console.ReadLine(); }*/ public bool verifierCuisiniersDispo(int nbConvives, DateTime dateDeDebut, Formule formuleChoisie) { // On regarde combien de cuisiniers sont disponibles DateTime dateDeFin = dateDeDebut + formuleChoisie.DureePreparation; int nbDispo = 0; List<int> cuistoDispo= new List<int>(); for (int i = 0; i < brigade.Count; i++) //on regarde les cuisiniers un par un { if (brigade[i].PlanningCuisto.Count==0) { nbDispo++; cuistoDispo.Add(i); } else { int k = 0; while (k < brigade[i].PlanningCuisto.Count)//on regarde toutes les heures où les cuisiniers peuvent être occupés { int comparaisonDebut = DateTime.Compare(dateDeDebut, brigade[i].PlanningCuisto[k].DateDebutOccupee); int comparaisonFin = DateTime.Compare(dateDeFin, brigade[i].PlanningCuisto[k].DateFinOccupee); if ((comparaisonDebut < 0 && comparaisonFin < 0) || (comparaisonDebut > 0 && comparaisonFin > 0))//la date n'est pas la même { nbDispo++; cuistoDispo.Add(i); } else { if ((comparaisonDebut < 0 && comparaisonFin > 0) || (comparaisonDebut > 0 && comparaisonFin < 0)) { nbDispo++; cuistoDispo.Add(i); } } k++; } } } if (nbConvives>nbDispo) { Console.WriteLine("La cuisine est occupée, la reservation n'est pas possible. Veuillez essayer à un autre horaire"); return false; } else { Console.WriteLine("Il y a assez de cuisiniers disponibles pour effectuer la réservation"); //Création de l'occupation du cuisinier attribué à la réservation for (int n = 0; n < cuistoDispo.Count; n++) { DateTime datefincuisto = new DateTime(); datefincuisto = dateDeDebut + formuleChoisie.DureePreparation; Occupation occCuisto = new Occupation(dateDeDebut, datefincuisto); this.Brigade[n].PlanningCuisto.Add(occCuisto); //Modification du fichier XML: Ajout de la réservation XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); XmlNodeList cuistoNodes = doc.SelectNodes("//Restaurant/Cuisiniers/Cuisinier"); XmlNodeList noCuistoNodes = doc.SelectNodes("//Restaurant/Cuisiniers/Cuisinier/noCuisto"); string noCuisto= n.ToString(); int j = 0; while (j<noCuistoNodes.Count) { if (noCuistoNodes[j].InnerText == noCuisto) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); cuistoNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } return true; } }
static void Main(string[] args) { DateTime maintenant = DateTime.Now; //CREATION DE LA CUISINE Cuisine C = new Cuisine(); //CREATION DE LA SALLE Salle restau = new Salle(); //LECTURE DU FICHIER XML restau.creationFormulesXml(); restau.creationTablesXml(); C.lecureXMLCuisto(); restau.creationReservationXml(); //test sérialisation //DateTime dateresa=new DateTime(2015, 05, 15, 21, 00, 00); //restau.validerResa(restau.tables[0], dateresa, 2, restau.formules[0]); //Console.WriteLine(C); //Console.ReadLine(); int choix = 0; bool menu = true; do { switch (choix) { case 0: Console.Clear(); Console.WriteLine(@"Bonjour et bienvenue ! Que souhaitez-vous réaliser? 1- Consulter tout le planning de réservations 2- Ajouter une réservation 3- Consulter les réservations correspondant à une date donnée 4- Consulter les réservations correspondant à une date et une heure données * Pour quitter le programme: 99 * Entrez le chiffre correspondant à l'action que vous souhaitez réaliser"); bool ok = false; while (ok == false) { try { choix = int.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Veuillez entrer un chiffre s'il vous plait."); ok = false; } } break; //AJOUTER UN CUISINIER case 1: Console.Clear(); Console.WriteLine("Voici le planning des réservations: \n\n"); restau.affichePlanningResa(); //bool format = false; //string chaine; //do //{ // Console.WriteLine("Vous souhaitez ajouter un cuisinier. Quel est le numéro de ce cuisinier?"); // chaine = Console.ReadLine(); // format = chaine.All(Char.IsDigit); // // Renvoie true si la saisie de l'utilisateur est bien un entier, false dans les autres cas // if (format == false) // { // Console.WriteLine("Veuillez saisir uniquement des chiffres, svp."); // } //} //while (format == false); //int noCuisto = int.Parse(chaine); //C.ajoutCuisto(noCuisto); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0; break; case 2: Console.Clear(); DateTime dateResa = new DateTime();; int nbConvive=new int(); int formuleChoisie=new int(); TimeSpan heureResa= new TimeSpan(); ok = false; Console.WriteLine("Vous souhaitez entrer une réservation. \nEntrez la date sous le format AAAA/MM/JJ:"); while (ok==false) { try { dateResa = DateTime.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Le format n'est pas bon veuillez recommencer la saisie."); ok = false; } } ok = false; Console.WriteLine("Entrez l'heure sous le format hh:mm:"); while (ok == false) { try { heureResa = TimeSpan.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Le format n'est pas bon veuillez recommencer la saisie."); ok = false; } //TimeSpan max = new TimeSpan(22, 59, 00); //bool heureService = false; //do //{ // try // { // heureResa = TimeSpan.Parse(Console.ReadLine()); // heureService = true; // } // catch (Exception) // { // Console.WriteLine("L'heure de réservation n'est pas correcte. Veuillez recommencer."); // heureService = false; // } // } while (heureResa>max || heureService==false); } dateResa = dateResa + heureResa; Console.WriteLine("Entrez le nombre de personne souhaitant manger dans le restaurant"); ok = false; while (ok == false) { try { nbConvive = int.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Le format n'est pas bon veuillez recommencer la saisie."); ok = false; } } Formule formuleResa = new Formule(); bool pb = false; do { if (pb==true) { Console.WriteLine("La formule n'a pas été trouvée"); } Console.WriteLine("Entrez le numéro de la formule retenue: \nVoici la liste de celles ci."); restau.afficheFormule(); ok = false; while (ok == false) { try { formuleChoisie = int.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Entrez un numéro s'il vous plait."); ok = false; } } formuleResa = restau.retourneFormule(formuleChoisie); //--> permet de retouver la formule par rapport au numéro rentré if (heureResa > formuleResa.HoraireLimiteService) { Console.WriteLine("Malheureusement, cette formule n'est plus servie à cette heure-ci. Veuillez recommencer"); } else { if (formuleResa.DureePreparation != null) { restau.verifierResa(dateResa, nbConvive, formuleResa, C); } pb = true; } } while (formuleResa.DureePreparation == null); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0;// permet de retourner au menu break; case 3: Console.Clear(); restau.afficheResaDate(); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0;// permet de retourner au menu break; case 4: Console.Clear(); restau.afficheResaDateHeure(); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0;// permet de retourner au menu break; case 99: menu = false; break; default: Console.Clear(); Console.WriteLine("Le chiffre saisi n'est pas présent dans le menu. \nAppuyez sur une touche pour recommencer"); Console.ReadLine(); choix = 0; break; }//fin switch } while (menu == true); }
public void newOccupationTableXml(DateTime dateDeDebut, Formule formuleChoisie, int indiceTable) { DateTime datefincuisto = new DateTime(); datefincuisto = dateDeDebut + formuleChoisie.DureePreparation; //Modification du fichier XML: Ajout de la réservation XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); //Comptage du nombre de tables en fonction de chaque type(carrées, rectangulaires et rondes) XmlNodeList tablecarreeNodes = doc.SelectNodes("//Restaurant/Tables/TableCarees/TableCaree"); XmlNodeList tablerectNodes = doc.SelectNodes("//Restaurant/Tables/TableRectangulaires/TableRectangulaire"); XmlNodeList tablerondeNodes = doc.SelectNodes("//Restaurant/Tables/TableRondes/TableRonde"); int nbTableCarree = 0; int nbTableRect = 0; int nbTableRonde = 0; foreach (XmlNode tablecaree in tablecarreeNodes) { nbTableCarree++; } foreach (XmlNode tablerect in tablerectNodes) { nbTableRect++; } foreach (XmlNode tableronde in tablerondeNodes) { nbTableRonde++; } if (indiceTable < nbTableCarree) { int j = 0; while (j < tablecarreeNodes.Count) { if (j == indiceTable) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); tablecarreeNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } else { if (indiceTable < nbTableRect + nbTableCarree) { int j = 0; while (j < tablerectNodes.Count) { if (j == (indiceTable - nbTableCarree)) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); tablerectNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } else { int j = 0; while (j < tablerondeNodes.Count) { if (j == (indiceTable - (nbTableRect + nbTableCarree))) { XmlNode noeudBase = doc.CreateElement("occupations"); XmlNode occupationNode = doc.CreateElement("dateDebutOccupee"); tablerondeNodes[j].AppendChild(noeudBase); string dateDebut = dateDeDebut.ToString(); occupationNode.InnerText = dateDebut; noeudBase.AppendChild(occupationNode); XmlNode occupation2Node = doc.CreateElement("dateFinOccupee"); string dateFin = datefincuisto.ToString(); occupation2Node.InnerText = dateFin; noeudBase.AppendChild(occupation2Node); doc.Save("restaurant.xml"); } j++; } } } //XmlNodeList cuistoNodes = doc.SelectNodes("//Restaurant/Tables/Table"); //XmlNodeList noCuistoNodes = doc.SelectNodes("//Restaurant/Cuisiniers/Cuisinier/noCuisto"); //string noCuisto = n.ToString(); }// fin newOcupationTableXml
public bool jumelage(DateTime dateDeDebut, int nbconvive, Formule formuleChoisie, Cuisine C) { DateTime dateDeFin = dateDeDebut + formuleChoisie.DureePresenceClient; int i = 0; while (i < tables.Count) //on parcoure la liste des tables { int k = 0; if (tables[i].Jumelable == true)//on verifie si la premiere table est jumelable { while (k < tables[k].PlanningResa.Count) //on verifie qu'elle est dispo { int comparaisonDebut1 = DateTime.Compare(dateDeDebut, tables[i].PlanningResa[k].DateDebutOccupee); int comparaisonFin1 = DateTime.Compare(dateDeFin, tables[i].PlanningResa[k].DateFinOccupee); //l'heure de la résa n'est pas comprise dans le temps pendant lequel la table est occup int j = i + 1; if ((comparaisonDebut1 < 0 && comparaisonFin1 < 0) || (comparaisonDebut1 > 0 && comparaisonFin1 > 0))//la date n'est pas la même { while (j < tables.Count) //on parcourt une deuxieme fois la liste pour trouver une deuxieme table jumelable et dispo { if (tables[j].Jumelable == true)//on verifie si la deuxième table est jumelable { int l = 0; while (l < tables[l].PlanningResa.Count) //on verifie qu'elle est dispo { int comparaisonDebut2 = DateTime.Compare(dateDeDebut, tables[j].PlanningResa[l].DateDebutOccupee); int comparaisonFin2 = DateTime.Compare(dateDeFin, tables[j].PlanningResa[l].DateFinOccupee); if ((comparaisonDebut2 < 0 && comparaisonFin2 < 0) || (comparaisonDebut2 > 0 && comparaisonFin2 > 0)) //la date n'est pas la même { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return true; } } else { if ((comparaisonDebut2 < 0 && comparaisonFin2 > 0) || (comparaisonDebut2 > 0 && comparaisonFin2 < 0)) //la date est la même mais l'horraire n'est pas simultané { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return true; } } else { Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return false; } } l++; } } j++; } } else { if ((comparaisonDebut1 < 0 && comparaisonFin1 > 0) || (comparaisonDebut1 > 0 && comparaisonFin1 < 0)) //la date est la même mais les horaires ne se mélangent pas { if (tables[j].Jumelable == true)//on verifie si la deuxième table est jumelable { int m = 0; while (m < tables[m].PlanningResa.Count) //on verifie qu'elle est dispo { int comparaisonDebut2 = DateTime.Compare(dateDeDebut, tables[j].PlanningResa[m].DateDebutOccupee); int comparaisonFin2 = DateTime.Compare(dateDeFin, tables[j].PlanningResa[m].DateFinOccupee); if ((comparaisonDebut2 < 0 && comparaisonFin2 < 0) || (comparaisonDebut2 > 0 && comparaisonFin2 > 0)) //la date n'est pas la même { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return true; } } else { if ((comparaisonDebut2 < 0 && comparaisonFin2 > 0) || (comparaisonDebut2 > 0 && comparaisonFin2 < 0)) //la date est la même mais l'horraire n'est pas simultané { //ON JUMELE LES TABLES TablesJumelees newjumellee = new TablesJumelees(tables[i], tables[j]); bool cuisiniersDispo; cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { validerResa(newjumellee, dateDeDebut, nbconvive, formuleChoisie); return true; } } else { Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return false; } } k++; } } } } } k++; } i++; } Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return false; }
public void validerResa(Table table, DateTime dateResa, int nbconvive, Formule formuleChoisie) { Console.WriteLine("Quel est le nom du client pour la réservation?"); string nomResa = Console.ReadLine(); Console.WriteLine("Quel est le numéro du client?"); string noClient = Console.ReadLine(); int numClient = int.Parse(noClient); int i = 0; string noTable = ""; int notable = 0; //Recherche du numéro de la table while (i < tables.Count) { if (tables[i] == table) { noTable = i.ToString(); notable = i; } i++; } //Recherche du nom de la formule choisie int j = 0; string nomFormule = ""; while (j < formules.Count) { if (formules[j] == formuleChoisie) { nomFormule = formules[j].NomFormule.ToString(); } j++; } //Création de la réservation dans le programme Reservation newResa = new Reservation(table, nomResa, numClient, dateResa, nbconvive, formuleChoisie); reservations.Add(newResa); //Création de l'occupation de la table réservée DateTime datefinresa = new DateTime(); datefinresa = dateResa + formuleChoisie.DureePresenceClient; Occupation occTable = new Occupation(dateResa, datefinresa); tables[notable].PlanningResa.Add(occTable); //Modification du fichier XML: Ajout de la réservation XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); XmlNode resaNodes = doc.SelectSingleNode("//Restaurant/Reservations"); XmlNode noeudBase = doc.CreateElement("Reservation"); XmlNode tableNode = doc.CreateElement("tableResa"); tableNode.InnerText = noTable; noeudBase.AppendChild(tableNode); resaNodes.AppendChild(noeudBase); XmlNode nomClientNode = doc.CreateElement("nomClient"); nomClientNode.InnerText = nomResa; noeudBase.AppendChild(nomClientNode); XmlNode numClientNode = doc.CreateElement("numClient"); numClientNode.InnerText = noClient; noeudBase.AppendChild(numClientNode); XmlNode dateNode = doc.CreateElement("dateResa"); string date = dateResa.ToString(); dateNode.InnerText = date; noeudBase.AppendChild(dateNode); XmlNode nbConviveNode = doc.CreateElement("nbConvive"); nbConviveNode.InnerText = nbconvive.ToString(); noeudBase.AppendChild(nbConviveNode); XmlNode formuleNode = doc.CreateElement("formuleResa"); formuleNode.InnerText = nomFormule; noeudBase.AppendChild(formuleNode); doc.Save("restaurant.xml"); //sauvegarder les occupations dans le xml (classes table et cuisiniers) Console.WriteLine("La réservation a été réalisée avec succès!"); }//fin validerResa
public Formule retourneFormule(int noFormule) { Formule form=new Formule(); int i = 0; while (i<formules.Count) { if (noFormule==i+1) { form = formules[i]; } i++; } return form; }
}//fin validerResa public void creationFormulesXml() { //le logiciel lit le fichier xml correspondant au restaurant XmlDocument doc = new XmlDocument(); doc.Load("restaurant.xml"); //Lecture des informations nomFormule et TableRequise de chaque formule du fichier XML XmlNodeList itemNodes = doc.SelectNodes("//Restaurant/Formules/Formule"); List <string> _nomFormule = new List <string>(); List <bool> _tableRequise = new List <bool>(); foreach (XmlNode itemNode in itemNodes) { XmlNode nomFormule = itemNode.SelectSingleNode("nomFormule"); XmlNode tableRequise = itemNode.SelectSingleNode("tableRequise"); if ((nomFormule != null) && (tableRequise != null)) { _nomFormule.Add(nomFormule.InnerText); bool tablereq = bool.Parse(tableRequise.InnerText); _tableRequise.Add(tablereq); } } //Lecture des durées de préparations et de présence clients pour chaque formule du fichier XML XmlNodeList dureePrepaNodes = doc.SelectNodes("//Restaurant/Formules/Formule/dureePreparation"); List <int> _hDureePrepa = new List <int>(); List <int> _minDureePrepa = new List <int>(); List <int> _secDureePrepa = new List <int>(); foreach (XmlNode dureeNode in dureePrepaNodes) { XmlNode hDureePrepa = dureeNode.SelectSingleNode("heure1"); XmlNode minDureePrepa = dureeNode.SelectSingleNode("min1"); XmlNode secDureePrepa = dureeNode.SelectSingleNode("sec1"); if ((hDureePrepa != null) && (minDureePrepa != null) && (secDureePrepa != null)) { int hdp = int.Parse(hDureePrepa.InnerText); _hDureePrepa.Add(hdp); int mdp = int.Parse(minDureePrepa.InnerText); _minDureePrepa.Add(mdp); int sdp = int.Parse(secDureePrepa.InnerText); _secDureePrepa.Add(sdp); } } XmlNodeList dureePresenceNodes = doc.SelectNodes("//Restaurant/Formules/Formule/dureePresenceClient"); List <int> _hDureePresence = new List <int>(); List <int> _minDureePresence = new List <int>(); List <int> _secDureePresence = new List <int>(); foreach (XmlNode dureePNode in dureePresenceNodes) { XmlNode hDureePresence = dureePNode.SelectSingleNode("heure2"); XmlNode minDureePresence = dureePNode.SelectSingleNode("min2"); XmlNode secDureePresence = dureePNode.SelectSingleNode("sec2"); if ((hDureePresence != null) && (minDureePresence != null) && (secDureePresence != null)) { int hdpc = int.Parse(hDureePresence.InnerText); _hDureePresence.Add(hdpc); int mdpc = int.Parse(minDureePresence.InnerText); _minDureePresence.Add(mdpc); int sdpc = int.Parse(secDureePresence.InnerText); _secDureePresence.Add(sdpc); } } //CREATION DES FORMULES //elles se créent à partir de la lecture du fichier xml, comme ça le logiciel s'adapte à chaque restaurant for (int i = 0; i < _nomFormule.Count(); i++) { TimeSpan dureePreparation = new TimeSpan(_hDureePrepa[i], _minDureePrepa[i], _secDureePrepa[i]); TimeSpan dureePresenceClient = new TimeSpan(_hDureePresence[i], _minDureePresence[i], _secDureePresence[i]); Formule formule = new Formule(_nomFormule[i], dureePreparation, dureePresenceClient, _tableRequise[i]); this.formules.Add(formule); } }// fin creationFormulesXml
//voir si la reservation est possible public bool verifierResa(DateTime dateDeDebut, int nbconvive, Formule formuleChoisie, Cuisine C) { DateTime dateDeFin = dateDeDebut + formuleChoisie.DureePresenceClient; //pour l'instant on regarde si il y a une table dispo pour cette horaire int i = 0; int heureDebut = dateDeDebut.Hour; int min = dateDeDebut.Minute; int mois = dateDeDebut.Month; int jour = dateDeDebut.Day; int nbMaxPlaceTable=rechercheNombrePlaceMax(); if (nbconvive<=nbMaxPlaceTable) //on regarde si les convives rentrent sur une seule table { while (i < tables.Count) //on parcoure la liste des tables { if (tables[i].NbPlaceMax >= nbconvive) //on regarde si la table peut accueillir toute les personnes { int k = 0; while (k < tables[i].PlanningResa.Count)//parcoure la liste des occupations { int comparaisonDebut = DateTime.Compare(dateDeDebut, tables[i].PlanningResa[k].DateDebutOccupee); int comparaisonFin = DateTime.Compare(dateDeFin, tables[i].PlanningResa[k].DateFinOccupee); //l'heure de la résa n'est pas comprise dans le temps pendant lequel la table est occup if ((comparaisonDebut < 0 && comparaisonFin < 0) || (comparaisonDebut > 0 && comparaisonFin > 0))//la date n'est pas la même { bool cuisiniersDispo; Console.WriteLine("Reservation possible sur la table " + i); cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { tables[i].newOccupationTableXml(dateDeDebut, formuleChoisie, i); validerResa(tables[i], dateDeDebut, nbconvive, formuleChoisie); return true; } } else { if ((comparaisonDebut < 0 && comparaisonFin > 0) || (comparaisonDebut > 0 && comparaisonFin < 0)) { bool cuisiniersDispo; Console.WriteLine("Reservation possible sur la table " + i); cuisiniersDispo = C.verifierCuisiniersDispo(nbconvive, dateDeDebut, formuleChoisie); if (cuisiniersDispo == true) { tables[i].newOccupationTableXml(dateDeDebut, formuleChoisie, i); validerResa(tables[i], dateDeDebut, nbconvive, formuleChoisie); return true; } } else { Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return false; } } k++; } } i++; } } else // le nombre de convive ne rentre pas sur une seule table --> jumelage { if (nbconvive<nbMaxPlaceTable+4) { Console.WriteLine("La fonction jumelage n'est pas aboutie. Le nombre de convives maximum accepté est "+nbMaxPlaceTable); Console.WriteLine("Recommencez en tapant sur ENTREE."); //jumelage(dateDeDebut, nbconvive, formuleChoisie, C); return false; } else { Console.WriteLine(@"La reservation n'est pas possible. Le restaurant n'accepte pas autant de personnes sur une même table. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return false; } } Console.WriteLine("La reservation n'est pas possible. Recommencez en tapant sur ENTREE."); Console.ReadLine(); return false; }
static void Main(string[] args) { DateTime maintenant = DateTime.Now; //CREATION DE LA CUISINE Cuisine C = new Cuisine(); //CREATION DE LA SALLE Salle restau = new Salle(); //LECTURE DU FICHIER XML restau.creationFormulesXml(); restau.creationTablesXml(); C.lecureXMLCuisto(); restau.creationReservationXml(); //test sérialisation //DateTime dateresa=new DateTime(2015, 05, 15, 21, 00, 00); //restau.validerResa(restau.tables[0], dateresa, 2, restau.formules[0]); //Console.WriteLine(C); //Console.ReadLine(); int choix = 0; bool menu = true; do { switch (choix) { case 0: Console.Clear(); Console.WriteLine(@"Bonjour et bienvenue ! Que souhaitez-vous réaliser? 1- Consulter tout le planning de réservations 2- Ajouter une réservation 3- Consulter les réservations correspondant à une date donnée 4- Consulter les réservations correspondant à une date et une heure données * Pour quitter le programme: 99 * Entrez le chiffre correspondant à l'action que vous souhaitez réaliser"); bool ok = false; while (ok == false) { try { choix = int.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Veuillez entrer un chiffre s'il vous plait."); ok = false; } } break; //AJOUTER UN CUISINIER case 1: Console.Clear(); Console.WriteLine("Voici le planning des réservations: \n\n"); restau.affichePlanningResa(); //bool format = false; //string chaine; //do //{ // Console.WriteLine("Vous souhaitez ajouter un cuisinier. Quel est le numéro de ce cuisinier?"); // chaine = Console.ReadLine(); // format = chaine.All(Char.IsDigit); // // Renvoie true si la saisie de l'utilisateur est bien un entier, false dans les autres cas // if (format == false) // { // Console.WriteLine("Veuillez saisir uniquement des chiffres, svp."); // } //} //while (format == false); //int noCuisto = int.Parse(chaine); //C.ajoutCuisto(noCuisto); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0; break; case 2: Console.Clear(); DateTime dateResa = new DateTime();; int nbConvive = new int(); int formuleChoisie = new int(); TimeSpan heureResa = new TimeSpan(); ok = false; Console.WriteLine("Vous souhaitez entrer une réservation. \nEntrez la date sous le format AAAA/MM/JJ:"); while (ok == false) { try { dateResa = DateTime.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Le format n'est pas bon veuillez recommencer la saisie."); ok = false; } } ok = false; Console.WriteLine("Entrez l'heure sous le format hh:mm:"); while (ok == false) { try { heureResa = TimeSpan.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Le format n'est pas bon veuillez recommencer la saisie."); ok = false; } //TimeSpan max = new TimeSpan(22, 59, 00); //bool heureService = false; //do //{ // try // { // heureResa = TimeSpan.Parse(Console.ReadLine()); // heureService = true; // } // catch (Exception) // { // Console.WriteLine("L'heure de réservation n'est pas correcte. Veuillez recommencer."); // heureService = false; // } // } while (heureResa>max || heureService==false); } dateResa = dateResa + heureResa; Console.WriteLine("Entrez le nombre de personne souhaitant manger dans le restaurant"); ok = false; while (ok == false) { try { nbConvive = int.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Le format n'est pas bon veuillez recommencer la saisie."); ok = false; } } Formule formuleResa = new Formule(); bool pb = false; do { if (pb == true) { Console.WriteLine("La formule n'a pas été trouvée"); } Console.WriteLine("Entrez le numéro de la formule retenue: \nVoici la liste de celles ci."); restau.afficheFormule(); ok = false; while (ok == false) { try { formuleChoisie = int.Parse(Console.ReadLine()); ok = true; } catch (Exception) { Console.WriteLine("Entrez un numéro s'il vous plait."); ok = false; } } formuleResa = restau.retourneFormule(formuleChoisie); //--> permet de retouver la formule par rapport au numéro rentré if (heureResa > formuleResa.HoraireLimiteService) { Console.WriteLine("Malheureusement, cette formule n'est plus servie à cette heure-ci. Veuillez recommencer"); } else { if (formuleResa.DureePreparation != null) { restau.verifierResa(dateResa, nbConvive, formuleResa, C); } pb = true; } } while (formuleResa.DureePreparation == null); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0; // permet de retourner au menu break; case 3: Console.Clear(); restau.afficheResaDate(); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0; // permet de retourner au menu break; case 4: Console.Clear(); restau.afficheResaDateHeure(); Console.WriteLine("Appuyez sur une touche afin de retourner au menu"); Console.ReadLine(); choix = 0; // permet de retourner au menu break; case 99: menu = false; break; default: Console.Clear(); Console.WriteLine("Le chiffre saisi n'est pas présent dans le menu. \nAppuyez sur une touche pour recommencer"); Console.ReadLine(); choix = 0; break; } //fin switch } while (menu == true); } // fin main