Répertoire téléphonique avec "multi-compte"

Description

Comme le titre du code l'indique, ce prog sert de répertoire téléphonique. Pour ma part je me suis inspirer de la présentation de msdieme qui a déjà poster il y a pas mal de temps son programme. J'ai trouver l'idées interessante donc j'ai essayer.
Je l ai pas mal tester, je n'ai pas trouver de problèmes pour le moment.
Si vous en trouver un faite le moi savoir en me laissant un commentaire.

PS: j ai commencer a programmer en septembre qd j ai commencer l année scolaire donc soyez indulgeant svp :p

Source / Exemple :


# -*- coding: utf-8 -*-
#REPERTOIRE TELEPHONIQUE

from Tkinter import *
from tkMessageBox import showwarning, showinfo
from tkFileDialog import asksaveasfilename

#===FONCTION===

#---Fonction servant à l'identification et à la création de l'utilisateur---

def identification():
    global donnee_utilisateur
    
    try:
        fichier=open("utilisateur.dbs","r")         #Ouverture du fichier contenant les données des différents utilisateurs
    except:
        showwarning("ERREUR", "Aucun utilisateur n'est enregistrer!")
        
    if entree_utilisateur.get()=="" or entree_code.get()=="":
        showwarning("ERREUR", "Veuillez remplir tous les champs")
        
    else:
        #Création de la liste des utilisateur ainsi que de leur code
        liste_utilisateur=fichier.readlines()
        
        if entree_utilisateur.get()+"\n" in liste_utilisateur:
            posi_utilisateur=liste_utilisateur.index(entree_utilisateur.get()+"\n")
            if entree_code.get()+"\n"==liste_utilisateur[posi_utilisateur+1]:
                
                #initialisation des données de l'utilisateur
                #contient le chemin d'accès au fichier répertoire de l'utilisateur
                donnee_utilisateur=liste_utilisateur[posi_utilisateur+2]
                fen.quit()
        else:
            showwarning("ERREUR", "Le nom d'identification ou le mot de passe sont incorect.\nVeuillez recommencer ou quitter!")
            

            
    fichier.close()
    

def nouveau():
    """ Fonction servant a la création d'un
        nouveau profil d'utilisateur """
    
    fichier=open("utilisateur.dbs","r")     #Ouverture du fichier utilisateur en mode lecture
    if entree_utilisateur.get()=="" or entree_code.get()=="":
        showwarning("ERREUR", "Veuillez remplir tous les champs")

    else:
        liste_utilisateur=fichier.readlines()   #Création de la liste des données des différents utilisateurs
        if entree_utilisateur.get()+"\n" in liste_utilisateur:
            showwarning("ERREUR", "Ce nom d'utilisateur est déjà utiliser")
        else:
            fichier.close()                     #Fermeture du fichier si le nom d'utilisateur n'est pas encore utiliser pour
            fichier=open("utilisateur.dbs","a") #ensuite l'ouvrir en mode ajout
            #Ajout des données du nouvel utilisateur
            fichier.write(entree_utilisateur.get()+"\n")
            fichier.write(entree_code.get()+"\n")
            chemin_fichier=asksaveasfilename(parent=fen, filetypes = [("Repertoire", "*.dbs")], title="Enregistrer sous...")
            fichier.write(chemin_fichier+"\n")

    fichier.close()

#---Fonction servant après l'identification de l'utilisateur---

def ajouter():
    """ Fonction servant a ajouter un
        contact au répertoire"""

    #Traitement du chemin du fichier de l'utilisateur
    #pour 'supprimer' le retour à la ligne de fin    
    chemin_fichier=""
    for elem in donnee_utilisateur:
        if elem!='\n':
            chemin_fichier+=elem

    if entree_prenom.get()=="" or entree_nom.get()=="" or entree_numero.get()=="":
        showwarning("ERREUR", "Veuillez remplir tous les champs")

    else:
        fichier=open(chemin_fichier,"a")    #Ouverture du fichier de l'utilisateur contenant son répertoire
        #Ajout des données du contact
        fichier.write(str(entree_prenom.get())+"\n")
        fichier.write(str(entree_nom.get())+"\n")
        fichier.write(str(entree_numero.get())+"\n")
        text_prenom.set("")
        text_nom.set("")
        text_numero.set("")
        fichier.close()
    actualiser()
    

def afficher():
    """ Fonction servant a afficher les contacts
        dans l'ordre dans lequel il ont été ajouter au répertoire"""
    global posi_liste
    
    try:
        text_prenom.set(liste[posi_liste])
        text_nom.set(liste[posi_liste+1])
        text_numero.set(liste[posi_liste+2])
        posi_liste+=3
    except:
        text_prenom.set("Fin du répertoire")
        text_nom.set("Fin du répertoire")
        text_numero.set("Fin du répertoire")
        
        posi_liste=0

def supprimer():
    
    try:
        """Suppression des données de la 'fiche'
           du repertoire dans la liste"""
        i=liste.index(entree_prenom.get())
        del liste[i:i+3]
        text_prenom.set("")
        text_nom.set("")
        text_numero.set("")

        
    except:
        showwarning("ERREUR", "Ce nom ne figure pas dans votre répertoire")

    #Traitement du chemin du fichier de l'utilisateur
    #pour 'supprimer' le retour à la ligne de fin
    chemin_fichier=""
    for elem in donnee_utilisateur:
        if elem!='\n':
            chemin_fichier+=elem

    fichier=open(chemin_fichier,"w")    #Ouverture du fichier en mode 'réécrire' (créer un nouveau fichier du même nom mais vide)

    for elem in liste:                  #Ajout de la liste au nouveau fichier
        fichier.write(elem+"\n")        #sans les données de la fiche du répertoire
    fichier.close()

        

def actualiser():
    global liste
    liste=[]

    
    #Traitement du chemin du fichier de l'utilisateur
    #pour 'supprimer' le retour à la ligne de fin
    chemin_fichier=""
    for elem in donnee_utilisateur:
        if elem!='\n':
            chemin_fichier+=elem
            
    fichier=open(chemin_fichier,"r")    #Ouverture du fichier en mode lecture
    
    ligne=fichier.readline()            #Parcours du fichier
    while ligne!="":                    #ligne par ligne et suppression
        elem=""                         #du retour a la ligne
        for caract in ligne:            
            if caract!='\n':
                elem=elem+caract
        liste.append(elem)              #Ajout de la ligne après
        ligne=fichier.readline()        #traitement
    fichier.close()
        
    

#===PROGRAMME PRINCIPAL===

#---Fenêtre login---
fen=Tk()
fen.title("Répertoire téléphonique")

can=Canvas(fen)

"Création de la barre de menu"

barre_menu=Menu(fen)
barre_menu.add_command(label="Quitter", command=fen.quit)

"Création des widgets servant a l'identification de l'utilisateur"

Label(can, text="Nom d'utilisateur").grid(row=2, column=2, sticky=E)
entree_utilisateur=Entry(can)
entree_utilisateur.grid(row=2, column=3)

Label(can, text="Code").grid(row=3, column=2, sticky=E)
entree_code=Entry(can)
entree_code.configure(show="*")
entree_code.grid(row=3, column=3)

Button(can, text="Identification", command=identification).grid(row=4, column=1)
Button(can, text="Nouveau profil", command=nouveau).grid(row=4, column=3)

can.grid()

fen.config(menu=barre_menu)

fen.mainloop()
fen.destroy()

#=====================================#

#---Fenêtre utilisateur---

posi_liste=0
actualiser()

fen_utili=Tk()
fen_utili.title("REPERTOIRE TELEPHONIQUE")

"Création de la barre de menu"

barre_menu=Menu(fen_utili)
barre_menu.add_command(label="Quitter", command=fen.quit)

"Création et placement des widgets textes, boutons, canvas et entrées"
can=Canvas(fen_utili)

"Création et mise en place des widgets servant au prénom"
text_prenom=StringVar()
Label(can, text="Prénom").grid(column=2, row=2, sticky=E)
entree_prenom=Entry(can, textvariable=text_prenom)
entree_prenom.grid(column=3, row=2)

"Création et mise en place des widgets servant au nom"
text_nom=StringVar()
Label(can, text="Nom").grid(column=2, row=3, sticky=E)
entree_nom=Entry(can, textvariable=text_nom)
entree_nom.grid(column=3, row=3)

"Création et mise en place des widgets servant au n° de téléphone"
text_numero=StringVar()
Label(can, text="N° de téléphone").grid(column=2, row=4, sticky=E)
entree_numero=Entry(can, textvariable=text_numero)
entree_numero.grid(column=3, row=4)

Button(can, text="Ajouter", command=ajouter).grid(column=1, row=5, sticky=E)
Button(can, text="Actualiser", command=actualiser).grid(column=2, row=5)
Button(can, text="Supprimer", command=supprimer).grid(column=3, row=5)
Button(can, text="Afficher", command=afficher).grid(column=4, row=5)

can.grid()

fen_utili.config(menu=barre_menu)

fen_utili.mainloop()
fen_utili.destroy()

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.