Agenda de cadastros com tratamento de erros
Publicado por Walsan Jadson de Lima (última atualização em 03/07/2011)
[ Hits: 6.147 ]
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.
# 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'
Converte valor de Bytes 2 Kbyte 2 Mbyte
Exemplo de armazenamento de registros em arquivo
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)