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

Soyez le premier à donner votre avis sur cette source.

Vue 7 861 fois - Téléchargée 609 fois

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

Ajouter un commentaire

Commentaires

Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
11
Voila, comme promis, ma source est mise. Voir http://www.pythonfrance.com/codes/CARNET-ADRESSE_42877.aspx
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
11
Salut

Bon, pour commencer, on a pas le fichier "utilisateur.dbs" or il le faut pour créé un nouveau profil :( !!! Je suppose qu'il faut au début créé un fichier vierge nommé comme précédament ! Quand j'ai fait ça, ça à marcher, mais ensuite, je n'est pas très bien compris l'interface : J'ai rentrer un nom test, puis j'ai fait afficher, et la, j'avais une fenêtre avec mon mot de passe, mon identifiant et la localisation du fichier de sauvegarde ????? Je ne met pas de note parce que j'attend que tu nous apporte des précisions voir une modification du code mais ça vaut 3 !!! Néanmoins, tu à utilisé les "tkFileDialog" et les "try/except" ce qui est en soit une preuve que tu as voullu faire un projet qui tiennes la route.

Je suis moi même entrain de faire un script similaire. Dans 1 à 2 semaines, je devrais la mettre sur le site. Voila bon courrage
______
Aéra
Messages postés
43
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
17 avril 2015

Il y a une petite erreur au niveau de la création d'un nouveau profil je te conseille donc d'y jeter un oeil de plus tu aurais pu t'appliquer un peu plus au niveau de l'interface car personnellement je la trouve un peu désuete.

Voilà pour mes critiques à toi de voir ce que tu en penses sinon je te met 4/10.

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.