diff --git a/content/b2/Restaurant/index.md b/content/b2/Restaurant/index.md new file mode 100644 index 0000000..8441ed7 --- /dev/null +++ b/content/b2/Restaurant/index.md @@ -0,0 +1,253 @@ +--- +title: "Restaurant" +date: 2024-01-05T23:38:48+01:00 +authors: ["Lenny", "Clément"] +--- + +# Introduction + +Le restaurant **Chez Lenny** ouvre ses portes et accueillera à partir de ce soir +les différents Schtroumpfs pour célébrer la fin du premier semestre, la nouvelle +année 2024, et surtout, la fin des examens ! + +Pour cela, le chef Lenny te demande de l'aider à gérer tout ce beau monde ! +On veut pouvoir proposer à un maximum de Schtroumpfs les magnifiques plats +concoctés par le meilleur chef de la ville. + +Pour cela, voici l'architecture que tu dois suivre : + +``` +. +├── README.md +├── Smurfaurant/ +│   ├── Service.cs +│   ├── Smurfaurant.cs +│   ├── Smurfaurant.csproj +│   ├── Smurf.cs +│   └── Table.cs +└── Smurfaurant.sln +``` + +# Quel service est-il ? + +Chaque client a des plats préférés en fonction de l'entrée, du plat ou du +dessert. De plus, pour chaque table, on va associé un service auquel les clients +sont actuellement. Pour cela nous allons utiliser l'énumérateur suivant dans le +fichier `Service.cs`: + +```csharp +public enum Service +{ + Entry, + Main, + Dessert +} +``` + +# Les clients + +## Caractéristiques de nos clients + +Comme dit précédement, les clients de notre restaurant sont nos merveilleux +Schtroumpfs. Différentes informations sont nécessaires pour les reconnaître. + +Dans le fichier `Smurf.cs`, tu vas devoir implémenter une classe `Smurf` qui a +comme attributs : + +- une chaîne de caractères privée `_name` pour le nom du Schtroumpf ; +- un tableau sous la forme de "jagged array" de chaîne de caractères privé + `_favouriteMeal` qui correspond au top 2 des entrées, plats et desserts du + client. + +Une propriété va se rajouter à ces attributs : + +- un nombre flottant public `Money` qui correspond à son porte-monnaie, + accompagné de son getter public et de son setter public; + +Pour initialiser ces attributs et cette propriété, tu dois implémenter le +constructeur de la classe : + +```csharp +/// +/// Prototype de la classe Smurf +/// +public Smurf(string name, float money, string[] entry, string[] main, string[] dessert); +``` + +## Récupérer des informations de nos clients + +À un moment donné, nous allons vouloir connaître les plats préférés de nos +clients en fonction du service actuel. Pour cela, nous allons utiliser la +méthode suivante : + +```csharp +/// +/// Renvoie la liste des plats préférés du client en fonction du service actuel +/// +public string[] IsFavoriteMeal(Service service); +``` + +# Les tables de notre restaurant + +## Informations de la table + +Dans le fichier `Table.cs`, les tables de notre restaurant vont contenir les +informations suivantes : + +- un entier privé `_capacity` qui comprend le nombre de chaises autour de la + table, intialisée à 0 au début et qui à comme maximum 4 ; +- un tableau de `Smurf` privé `_chairs` qui présente les personnes assises + autour de la table ; +- un nombre flottant privé `_total` qui représente la note qui devra être payée + à la fin ; +- un énumérateur `Service` privé `_service` qui représente le service auquel + la table est actuellement (initialement à la valeur `Entry`). + +Pour accompagner les attributs, il nous faut un constructeur à la classe : + +```csharp +/// +/// Prototype de la classe Table +/// +public Table(Smurf[] chairs); +``` + +## Manipuler les données de la table + +Les serveurs du restaurant vont vouloir augmenter la note à payer à la fin du +service. Pour cela, nous allons créer la méthode suivante : + +```csharp +/// +/// Augmente le total de la table de `amount` euros +/// +public void AddCost(float amount); +``` + +À la fin du service, nous allons vouloir connaître la note totale de la table. +Pour cela, nous allons utiliser la méthode suivante : + +```csharp +/// +/// Récupère le total de la table +/// +public float GetSum(); +``` + +Les Schtroumpfs, étant très capricieux et très superstitieux, veulent être assis +à la chaise numérotée par leur nombre préféré. Pour cela, nous allons placer +les clients à leur place favorite. Attention, le dernier client aura la priorité +sur sa chaise. La personne qui vient de perdre sa place prendra la première +place qu'elle trouve. + +```csharp +/// +/// Place le client à la place souhaitée +/// +public void PlaceSmurf(Smurf smurf, int place); +``` + +La méthode `ClearTable()` sera appelée lorsque les clients de la table partiront +du restaurant. Pour cela, il faudra remettre en place la table et ses +caractéristiques. + +```csharp +/// +/// Remet en place une table et ses caractéristiques +/// +private void ClearTable(); +``` + +Lorsque les Schtroumpfs auront faim, ils vont pouvoir appelés eux-mêmes leur +repas avec un système ingénieux en C# ! Pour cela, pour chaque client de la +table, on va vérifier ses plats favoris avec la méthode `IsFavoriteMeal()` à +partir du service actuel. Il vous faudra rajouter dans la note de la table +le premier plat qui arrive depuis le menu sachant que le client doit pouvoir +payé son plat. + +```csharp +/// +/// Choisis un plat adéquat et modifie les entrées et les sorties d'argent +/// +private void ChoseMeal(Dictionnary menu); +``` + +On va vouloir faire passer au service suivant sur la table en question. Pour +cela, tu pourras appeler la méthode `ChoseMeal()`. Attention, si les clients +arrivent au dessert, tu devras retourner la note de la table et remettre la +table en place pour accueillir des nouveaux clients. + +Si les clients ne sont pas encore arrivés au dessert, tu peux renvoyer 0. + +```csharp +/// +/// Passe au prochain service +/// +public float NextService(Dictionnary menu); +``` + +# Et enfin, le restaurant en lui même ! + +## Informations sur le restaurant + +Passons à la dernière partie, celle la plus importante, l'implémentation +de notre restaurant lui-même ! Pour cela, dans le fichier `Smurfaurant.cs`, tu +devras créer les attributs suivants dans la classe `Resto` : + +- une file de `Smurf` privée `_queue` qui correspond à la queue pour rentrer + dans le restaurant ; +- un entier privé `_nbCustomers` donnant le nombre de clients dans le + restaurant ; +- un nombre entier privé `_capacity` pour la capacité maximale dans le + restaurant ; +- une liste de `Table` privée `_tables` représentant les tables de + l'établissement. + +De plus, nous avons deux propriétés importantes de notre restaurant, le menu et +les bénéfices engendrées par l'établissement : + +- un dictionnaire privé `Menu` ayant pour clé le nom des plats en chaîne de caractères + et comme valeur leur prix en nombre flottant ; accompagné par son getter et + son setteur publics ; +- un nombre flottant privé `Benefits` correspondant à l'argent gagné durant la + journée. + +Accompagnant ces informations, il nous faut un constructeur pour la classe : + +```csharp +/// +/// Prototype de la classe Resto +/// +public Resto(int nbTables, Dictionary menu); +``` + +## Les différentes méthodes de notre restaurant + +Un groupe d'une dizaine de Schtroumpfs arrivent au restaurant ! Il nous faut +vite les placer dans le restaurant pour éviter d'allonger la queue. Pour cela, +nous allons créer la fonction `AddGroup()` qui placera la liste de clients +donnée en paramètres dans la salle, même avec des inconnus ! Tu pourras placer +des clients dès que tu trouves de la place dans la salle. + +Attention à la capacité du restaurant ! Tu peux renvoyer une `ArgumentException` +si l'ajout du groupe excède la capacité. + +```csharp +/// +/// Place une liste de Schtroumpfs dans le restaurant +/// +public void AddGroup(List group); +``` + +La méthode suivante permet de faire rentrer de nouveaux clients dans le +restaurant si des tables se libèrent. + +```csharp +public void NextService(); +``` + +--- + +Bravo jeune combattant ! Tu as terminé le TP, n'hésite pas à nous donner des +retours par rapport à celui-ci ! Bon courage pour ton examen, que la force soit +avec toi ! diff --git a/content/b2/Restaurant/resources/images/.gitkeep b/content/b2/Restaurant/resources/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/content/b2/Restaurant/resources/ref/.gitkeep b/content/b2/Restaurant/resources/ref/.gitkeep new file mode 100644 index 0000000..e69de29