Agenda de cadastros com tratamento de erros

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

[ Hits: 6.132 ]

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

Pyconv - Conversor de codificação de caracteres

Converte valor de Bytes 2 Kbyte 2 Mbyte

Converte imagens em JPG

Manipulação de arquivos CSV - OO

Inversor de Links


  

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