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; }
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); }