---
# System prepended metadata

title: Applicatif

---

# Applicatif 

# Contraintes à gérer dans l'applicatif
1. Une horaire de départ doit être inférieure à une horaire d'arrivée.
2. Un billet ne peut pas prendre comme départ ou arrivée une gare qui n'a pas de ligne ou d'horaire correspondante à ses lignes.
3. le type SERIAL peut incrémenter l'horaire 1 avec un id 17. Contraingnant pour l'insertion.
4. On ajoute un attribut ville à transport, hotel et taxis -> on les propose lorsque la ville de la gare d'arrivée du billet correspond à la ville du service (à mettre sur l'uml)


# Interface
Contrainte : pas de division de l'interface, juste des fonctionnalités.
Nombre d'options : 9

- option "afficher les billets" du client propose de modifier le billet 

- option "inscrire un voyageur" Si nouveau voyageur prendre ses informations -> propose régulier ou occasionnel

- option "chercher un trajet":
1. proposer des villes
2. choisir les gares de départ et d'arrivée 
3. choisir horaires, dates, prix min et prix max, durée 
4. afficher les trajets disponibles avec l'accès au détail des arrêts (soient les correspondances)
5. indiquer le nombre de place dans les trains proposés

| OK, ne prend pas encore en compte les dates. |
---

- option "réserver un billet"
1. proposer l'assurance, les taxis, les hôtels et les transports, la première (on augmente le prix ) ou seconde classe
2. selon la classe appliquer une méthode sur le prix
3. si il est client régulier alors une réduction possible (methode)
4. quel est le moyen de paiement ?

- Option 'détail d'une gare' : taxis, hotels, transport, trains au départ de cette gare

- Option 'creer une nouvelle ligne'
1. Décider des gares traversées par la ligne (on crée des arrêts)
2. Décider l'ordre de traversé de ces lignes
| Ce que je fais demain aprem est en commentaire sur le script|
---

- Option 'ajouter un train'
1. Choisir la ligne sur lequel le train va circuler
2. Choisir parmi les gares raversées, quels sont les arrêts
3. Déterminer les horaires associées à chaque arrêt
4. Déterminer so calendrier (régulier)

- Option 'Statistiques'
1. taux de remplissage des trains 
2. gares les plus fréquentées
3. les lignes les plus empruntées
4. Nombre moyen de voyageur dans chaque train

- Option 'Exception'
1. ajouter des calendriers exceptionnels
|sûrement une erreur de synaxe dans le delete pourtant en ligne de commande c'est ok + erreur try except|

# Attention
- tester sur Python3 : *python3 script*

# Répartition

menu.py

## Lucas
inscrire_voyageur.py
afficher_billets.py
 
## Laurine
détail_gare.py 
ajouter_train.py

## Sacha
chercher_trajet.py
reserver_billet.py
statistiques.py

## Anaïs
exception.py
nouvelle_ligne.py

## Retours
### Afficher billet
afficher tous les billets avant de demander le numéro
erreurs :
qd on clique sur oui,
si le billet n'existe pas

### Chercher trajet
* numéro gare départ - gare arrivée
* (si pas de trajet dispo, pas de réservation de billet)
* Gérer la date dans la recherche de trajet
* (Afficher le nombre de places dispo dans un train, ne pas permettre de réserver si le train est complet.)


### Créer une nouvelles lignes
Faire les différentes fonctionnalités en plusieurs options (gare, arret, ligne)

Fonction créer gare.

Proposer la création des arrets après la ligne.


### Ajouter train
Calendrier à simplifier
tester si bdd vides (arret)

### Global
Ajouter la gestion des vues lors de n'importe quel ajout de données.

### Détail gare
À finir d'implémenter.

## Calendrier exceptionnel
Faire une jointure pour afficher les horaires ou trains qui sont liés