Agenda de cadastros com tratamento de erros

Publicado por Walsan Jadson de Lima (última atualização em 03/07/2011)

[ Hits: 6.147 ]

Download agenda_lista.py




Agenda simples que possui as funções básicas (adicionar, excluir, pesquisar e editar contatos), e tratamento de erros para evitar que o usuario quebre o código.

  



Esconder código-fonte

# Walsan Jadson de Lima

# Walsan_JL@hotmail.com

# Agenda para contato (celular e e-mail)



# definindo funcao para testar se o nome eh valido (tem nome e sobrenome)

def ehNome(nome):

        if not ' ' in nome:

                return False

        if nome.index(' ') == 0:

                return False

        if nome.index(' ') == len(nome)-1:

                return False

        return True



assert not ehNome('walsan')

assert not ehNome('walsanjadson')

assert not ehNome(' walsan')

assert not ehNome('Walsan ')

assert not ehNome('123')

assert ehNome('123 345')

assert ehNome('walsan jadson')



# definindo funcao para testar se o email eh valido

def ehEmail(email):

        if not '@' in email:

                return False

        if not '.' in email:

                return False

        # definindo as posicoes do '@' e do '.'

        arroba = email.index('@')

        ponto = email.index('.')



        if ponto < arroba:

                return False

        if arroba == 0:

                return False



        # verificando a quantidade de caracteres do email

        ultimo = len(email)-1



        # verificando se existe alguma coisa depois do ponto

        if ponto == ultimo:

                return False



        # verificando se existe alguma coisa entre '@' e o '.'

        if ponto - arroba == 1:

                return False



        return True



assert not ehEmail('abc')

assert not ehEmail('abc@')

assert not ehEmail('abc@def')

assert not ehEmail('abc@def.')

assert not ehEmail('@def.com')

assert not ehEmail('abc.def@.')

assert not ehEmail('@def.')

assert not ehEmail('abc@.com')

assert ehEmail('a@b.c')

assert ehEmail('walsan@ufpb.com')



# definindo funcao para testar se o celular e valido

def ehCelular(celular):

        if len(celular) != 8:

                return False

        if not celular.isdigit():

                return False

        return True



assert not ehCelular('1234567')

assert not ehCelular('123456a')

assert not ehCelular('1234567a')

assert ehCelular('12345678')

assert ehCelular('99228978')



# definindo uma funcao que adiciona um contato    

def adicionaContato():

        while 1:

                nome= raw_input('\nDigite seu nome: ').upper()

                if ehNome(nome) == True:

                        break

                else:

                        print '\ndigite nome e sobrenome!!!\n'

        while 1:

                celular= raw_input('Digite o seu celular: ')

                if ehCelular(celular) == True:

                        break

                else:

                        print '\nnumero incorreto, digite novamente!!!\n'

        while 1:

                email= raw_input('Digite seu email: ')

                if ehEmail(email) == True:

                        break

                else:

                        print '\nemail invalido, digite novamente!!!\n'



        contato= [nome, celular, email]

        agenda.append(contato)

        print '\nContato adicionado com sucesso.\n'



# definindo funcao para varrer a agenda e procurar um contato

def pesquisarContato():

        if len(agenda) == 0:

                print '\nSua agenda ainda nao possui contatos!!!\n'

        else:

                contador = 1

                nome_do_contato= raw_input('Digite o nome do contato: ').upper()

                for contato in agenda:

                        if nome_do_contato in contato[0]:

                                print '\n        %i'     %contador

                                print 'Nome:       %s'  %contato[0]

                                print 'Celular:    %s'  %contato[1]

                                print 'e-mail:     %s \n'  %contato[2]

                                contador += 1

                if contador == 1:

                        print '\nContato inexistente.\n'



# definindo funcao para editar um contato

def editarContato():    # logoca dessa funcao eh substituir o que estah na agenda pelo que o usuario digitar

        if len(agenda) == 0:

                print '\nSua agenda ainda nao possui contatos!!!\n'

        else:    

                nome= raw_input('Digite o nome do contato: ').upper()

                contador2= 1

                filtro= []

                for contato in agenda:

                        if nome in contato[0]:

                                print '\n         %i'   %contador2

                                print 'Nome:       %s'  %contato[0]

                                print 'Celular:    %s'  %contato[1]

                                print 'e-mail:     %s \n'  %contato[2]

                                contador2 += 1

                                filtro.append(contato)

                if len(filtro) > 0:

                        while 1:

                                try:

                                        pergunta= int(raw_input('Digite o indice do contato a ser editado: '))

                                        if pergunta > contador2 - 1: 

                                                print '\nnumero invalido!!!\n'

                                        else:

                                                break

                                except:

                                        print '\ncaracter invalido!!!\n'

                        contato_editar= (filtro[pergunta-1])

                        endereco= agenda.index(contato_editar)



                        while 1:

                                novo_nome= raw_input('Nome: %s --> '   %contato_editar[0]).upper()

                                if novo_nome == '':      # se o usuario teclar ENTER o nome nao muda

                                        agenda[endereco][0]= contato_editar[0]

                                        break

                                else:

                                        if ehNome(novo_nome) == True:

                                                agenda[endereco][0]= novo_nome

                                                break

                                        else:

                                                print '\nDigite nome e sobrenome!\n'

         

                        while 1:

                                novo_celular= raw_input('Celular: %s --> '   %contato_editar[1])

                                if novo_celular == '':     # se o usuario teclar ENTER o celular nao muda

                                        agenda[endereco][1]= contato_editar[1]

                                        break

                                else:

                                        if ehCelular(novo_celular) == True:

                                                agenda[endereco][1]= novo_celular

                                                break

                                        else:

                                                print '\nCelular invalido, digite novamente!\n'



                        while 1:

                                novo_email= raw_input('email: %s --> '   %contato_editar[2])

                                if novo_email == '':     # se o usuario teclar ENTER o e-mail nao muda

                                        agenda[endereco][2]= contato_editar[2]

                                        break

                                else:   

                                        if ehEmail(novo_email) == True:

                                                agenda[endereco][2]= novo_email

                                                break

                                        else:

                                                print '\nE-mail invalido, digite novamente!\n'



                        print '\nContato editado com sucesso.\n'

                else:

                        print '\nContato inexistente.\n'



# definindo funcao para excluir contato

def excluirContato():

        if len(agenda) == 0:

                print '\nSua agenda ainda nao possui contatos!!!\n'

        else:    

                nome= raw_input('Digite o nome do contato: ').upper()

                contador2= 1

                filtro= []

                for contato in agenda:

                        if nome in contato[0]:

                                print '\n         %i'   %contador2

                                print 'Nome:       %s'  %contato[0]

                                print 'Celular:    %s'  %contato[1]

                                print 'e-mail:     %s \n'  %contato[2]

                                contador2 += 1

                                filtro.append(contato)

                if len(filtro) > 0:

                        while 1:

                                try:

                                        pergunta= int(raw_input('Digite o indice do contato a ser excluido: '))

                                        if pergunta > contador2 - 1:

                                                print '\nnumero invalido!!!\n'

                                        else:

                                                break

                                except:

                                        print '\ncaracter invalido!!!\n'

                        agenda.remove(filtro[pergunta-1])

                        print '\nContato excluido com sucesso.\n'

                else:

                        print '\nContato inexistente.\n'

        

# definindo funcao que mostra todos os contatos da agenda

def tudo():

        if len(agenda) == 0:

                print '\nSua agenda ainda nao possui contatos!!!\n'

        else:

                contador3= 1

                for contato in agenda:

                        print '\n         %i'   %contador3

                        print 'Nome:       %s'  %contato[0]

                        print 'Celular:    %s'  %contato[1]

                        print 'e-mail:     %s \n'  %contato[2]

                        contador3 += 1



# definindo uma funcao para salvar a agenda em um documento .txt

def salva():

        abertura= open('agenda_lista.txt','w')

        for contato in agenda:

                abertura.write('%s%s'    %(contato[0],delimitador))

                abertura.write('%s%s'    %(contato[1],delimitador))

                abertura.write('%s\n'    %contato[2]) #nao se coloca o delimitador, pq na leitura seria criado um elemento assim --> ['']

        abertura.close()

   

# definindo funcao para recuperas todos os contatos do arquivo .txt

def ler():

        abertura= open('agenda_lista.txt','r')

        ls= abertura.read().splitlines()

        # ls me eh uma lista, sendo que cada elemento eh uma linha do arquivo

        for contato in ls:

                novo_contato= contato.split(delimitador)

                #novo_contato eh uma lista, sendo que aqui pegamos o elemento de ls e quebramos no delimitaddor

                agenda.append(novo_contato)   





# programa

import time

delimitador= '++'

agenda= []



# quando o programa inicia, ele tenta ler o arquivo .txt, mais se nao exeistir ainda um arquivo .txt 

# ele cria um em branco para poder ser usado no fim do programa

try:

        ler()

except:

        abertura= open('agenda.txt','w')

   abertura.close()

print ' \nOpcoes: '

print '  - (m)  menu'

print '  - (a)  adicionar'

print '  - (p)  pesquisar'

print '  - (ed) editar'

print '  - (ex) excluir'

print '  - (t)  tudo'

print '  - (s)  sair\n'

while 1:

        comando= raw_input('o que deseja fazer? ').upper()

        if comando == 'a'.upper():

                adicionaContato()

        elif comando == 'p'.upper():

                pesquisarContato()

        elif comando == 'ed'.upper():

                editarContato()

        elif comando == 'ex'.upper():

                excluirContato()

        elif comando == 't'.upper():

                tudo()

        elif comando == 's'.upper():

                print '\n Saindo... \n'

                salva()

                time.sleep(1.0)

                break

        elif comando == 'm'.upper():

                print '\n Opcoes: '

                print '  - (m)  menu'

                print '  - (a)  adicionar'

                print '  - (p)  pesquisar'

                print '  - (ed) editar'

                print '  - (ex) excluir'

                print '  - (t)  tudo'

                print '  - (s)  sair\n'   

        else:

                print '\n Opcoes: '

                print '  - (m)  menu'

                print '  - (a)  adicionar'

                print '  - (p)  pesquisar'

                print '  - (ed) editar'

                print '  - (ex) excluir'

                print '  - (t)  tudo'

                print '  - (s)  sair\n'

Scripts recomendados

Hashing Linear

Them para fluxbox

Converte valor de Bytes 2 Kbyte 2 Mbyte

backup all files

Exemplo de armazenamento de registros em arquivo


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts