# -*- encoding:utf-8 -*-

# Mini-système de base de données fonctionnant avec un dictionnaire
# pouvant être sauvegardé dans un fichier externe
# Clé : Nom de la personne
# Valeur: Tuple constitué de (age, taille)

# Définition des fonctions nécessaires:

def ajouter(table):
    """
    ajouter(dict table) --> None.
    Ajoute une nouvelle entrée à la base de données <table>
    au format {Nom1: (Age1, Taille1), Nom2: (Age2, Taille2),...}
    aussi longtemps que l'utilisateur le désire. Les données Nom, Age et Taille
    sont récupérées par la fonction elle-meme.
    """

    nom = input("Entrez le nom d'une nouvelle personne ou <Enter> pour terminer: ")

    while nom != "":
    
    # Récupérer l'age de l'élève (type: int) ainsi que sa taille

    # (type: float) et placer le tuple (age, taille) dans le

    # dictionnaire "table" indexé par le nom

def consulter(table):
    """
    consulter(dict table) --> None.
    Aussi longtemps que l'utilisateur le désire, cette fonction
    extrait un élément de la base de données <table> à
    partir de sa clef et affiche le résultat au format:
    
    Nom: {nomPersonne} - age: {agePersonne} ans - taille: {taillePersonne} m.
    
    Si la requete est non fructueuse, la fonction retourne le messsage:
    
    *** Nom inconnu! ***
    """
    
    nom = input("Entrez le nom d'une personne ou <Enter> pour terminer: ")

    while nom != "":

        # Si le nom de l'élève appartient au dictionnaire "table",

        # récupérer son âge ansi que sa taille et afficher le résultat de

        # la requête au format "Nom: Laetitia Casta - âge: 22 ans -

        # taille: 1.82 m"

        # Si le nom n'appartient pas au dictionnaire, affichier un message

        # d'erreur

def sauvegarder(table):
    """
    sauvegarder(dict table) --> None.
    Sauvegarde les éléments de la base de données <table>
    dans un fichier au format <Nom@Age#Taille>.
    """

    nomFichier = input("Entrez le nom du fichier de sauvegarde: ")

    # Créer et ouvrir le fichier dans lequel va se faire la sauvegarde


    # Parcourir le dictionnaire table entier, converti au préalable en
    # liste de tuples et écrire chaque entrée de la base de
    # données au format "Nom@Age#Taille" sur une ligne du fichier

    # Fermer le fichier de sauvegarde

    

def remplir(table):
    """
    remplir(dict table) --> None.
    Remplit la base de données <table>
    à partir de données situées dans un fichier externe.
    """

    flag = 1

    nomFichier = input("Entrez le nom du fichier de sauvegarde: ")

    while flag:

        try:
            fichier = open(nomFichier, 'r', encoding = 'Utf-8')

        except:
            print("*** Fichier inexistant ***")
            nomFichier = input("Entrez un nom de fichier valide: ")

        else:
            flag = 0

    ligne = fichier.readline()  # prochaine ligne à traiter

    while ligne != "":
    # Sachant que chaque ligne du fichier ouvert est au format

    # "Nom@Age#Taille":

    # 1) Convertissez la prochaine ligne à traiter

    # en une liste de sous-chaînes [Nom, Age#Taille]

    # 2) Récupérez la cle "Nom" et la valeur "Age#Taille" de la liste

    # 3) Convertissez la valeur "Age#Taille" en une liste de

    # sous-chaînes [Age, Taille]

    # 4) Placez le tuple (age, taille) dans le dictionnaire indexé par

    # le nom après avoir converti l'âge et la taille au bon format

    # 5) Fermer le fichier une fois l'opération terminée

# Corps principal du programme:

# Variable globale au programme:

table = {}                                                                  # dictionnaire contenant les données de la base
operation = {'A': ajouter, 'C': consulter, 'S':sauvegarder, 'R':remplir}    # dictionnaire contrôlant le flux d'excution

# Utilisation du programme:
action = input("""Choisissez:
(R)écupérer une base de données préexistante sauvegardée dans un fichier
(A)jouter des données à la base de données courante
(C)onsulter la base de données courante
(S)auvegarder la base de données courante dans un fichier
(T)erminer: """).upper()
while action != 'T':
    operation[action](table)
    action = input("Choisissez: (A)jouter - (C)onsulter - (S)auvegarder - (R)emplir - (T)erminer: ").upper()           
