Barista
Projet “Café-Barista Terminal”
Contexte
Tu gères un micro-café depuis le terminal. Pas d’ingrédients, pas de recettes : juste des boissons prêtes (expresso, allongé, chocolat chaud, thé, etc.) avec un stock d’unités et un prix. Tu prends des commandes, tu vérifies le stock, tu encaisses, tu imprimes un petit ticket ASCII, et tu peux reprendre une session grâce à une sauvegarde.
Objectifs d’apprentissage
-
Extraire les concepts essentiels d’un texte et produire un diagramme de classes UML simple.
-
Concevoir un flux de commande minimal (choix boissons → vérif stock → encaissement → ticket).
-
Mettre en place une persistance basique pour stock et caisse.
-
Réaliser une interface CLI claire et minimaliste.
Fonctionnalités attendues
-
Catalogue et stock
-
Un catalogue de boissons (au moins 4) avec pour chacune : nom, prix, stock (entier).
-
Le stock représente des unités prêtes à vendre (ex. 1 chocolat chaud = 1 unité).
-
-
Menu principal au démarrage
-
Reprendre une session (si un fichier de sauvegarde existe).
-
Nouvelle partie (réinitialise catalogue/stock/caisse à des valeurs de départ).
-
Quitter.
-
-
Prise de commande
-
Lister les boissons disponibles avec prix et stock restant.
-
Permettre de sélectionner 1 ou plusieurs boissons (quantités).
-
Si stock insuffisant pour une boisson, refuser la commande (ou proposer de réduire la quantité) avec un message clair.
-
Calculer le total de la commande.
-
-
Encaissement et ticket
-
Saisir un montant payé et afficher la monnaie à rendre.
-
Décrémenter le stock uniquement après validation du paiement.
-
Générer un ticket ASCII minimal (date/heure, liste des boissons/quantités, total, “merci”).
-
-
Consultation et gestion
-
Afficher à tout moment :
-
Catalogue (nom, prix, stock).
-
Résumé caisse (montant cumulé depuis le début de la session).
-
-
Option simple de réapprovisionnement d’une boisson (ajouter N unités).
-
-
Persistance
-
Sauvegarder dans un fichier local (même dossier que le script, format libre : JSON recommandé).
-
La sauvegarde doit permettre de reprendre avec le même stock, la même caisse, et le même catalogue.
-
-
Fin et reprise
-
On peut sauvegarder et quitter à tout moment.
-
Au redémarrage, Reprendre charge l’état précédent.
-
Livrables
-
Diagramme de classes UML (image).
-
Code PHP (plusieurs fichiers
.php).
Scénarios d’acceptation (à montrer en démo)
-
Vente OK : commander 2 expressos → stock d’expresso baisse de 2, ticket généré, caisse augmente du montant exact.
-
Rupture : demander 5 chocolats chauds alors qu’il en reste 3 → refus clair (ou proposition de 3 maximum), pas d’encaissement.
-
Réapprovisionnement : ajouter du stock à une boisson en rupture → vente désormais possible.
-
Sauvegarde/Reprise : quitter puis relancer → mêmes valeurs de stock et de caisse qu’avant l’arrêt.
Contraintes techniques
-
PHP CLI (≥ 8.x).
-
Entrées/sorties via terminal (listes numérotées, montants avec deux décimales).
-
Fichier de sauvegarde dans le même dossier (ex.
barista.json).
