yFone - Yes, outra agenda telefonica escrita em python! ;- )

Publicado por Murilo R. Esplugues 30/11/2004

[ Hits: 12.159 ]

Homepage: http://www.helpday.blogspot.com/

Download fone.py




yFone é uma agenda telefonônica escrita em python (modo-texto) e utilizando shelve como bd. Com ele você pode adicionar, remover, pesquisar e deletar nomes e telefones de sua lista de contatos.  

É extremamente simples e fácil de utilizar,  ela funcionou bem com uma lista de 500 números e provavelmente suportará bem mais...

Dúvidas, sugestões: mail-me.

  



Esconder código-fonte

#!/usr/bin/env python

# Fonelista (Agenda Telefonica) le, adiciona e apaga informacoes de um 
# banco de dados.  O codigo eh pequeno e de facil entendimento. #Mesmo que nao o usem como uma agenda, ele eh util para mostrar certas funcionalidades da linguagem, como acesso a um pseudo banco de dados e tratamento de erros basico.

# Este programa esta sendo distribuido livremente, voce tem liberdade
# para modifica-lo e distribui-lo contanto que mantenha este aviso, a 
# versao, nome do autor e email.

# Programa: FONELISTA 0.1 - 10/2004
# Autor: Murilo R. Esplugues
# Sugestoes: murilo_esplugues@yahoo.com.br

# 'shelve' eh um objeto do tipo dicionario que possui persitencia, 

import sys, shelve, time


## Caso nao exista tenta criar o arquivo  'contatos.db'.
def abrirDB():
   dbarquivo =  'contatos.db'
   try:
      global db
      db = shelve.open(dbarquivo)
   except IOError:
      print 'Erro ao abrir banco de dados!'
      sys.exit(0)
        print
        print 'Banco de dados', dbarquivo, 'aberto!'
# Listando contatos
def STATUS():
   print '\n' * 5
   COUNT = 0
   LINHAS = 30
   for NAME in db.keys():
      TESTE = len(NAME)
      PONTO = '_'
      SINAL = -(TESTE - 22) * PONTO
                COUNT = COUNT + 1
                if COUNT <= LINHAS:
         print  'Nome:',NAME,SINAL,'Numero:',db[NAME] 
      else:
         more = raw_input('Mais? (s/n): ')
         if more in ['s','S']:
            COUNT = 0
         elif more in ['n','N']:
            break   
         else:
            print 'Opcao nao encontrada!'
            time.sleep(1)
            
   
        print 'Voce tem:',len(db),'registro(s)!'
        print   

## Loop (menu), mantem o loop ate que se pressione a tecla 's' (sair)
def Main():
        ESCOLHA = None
   while ESCOLHA != 's' and ESCOLHA != 'S': 
      print '\n' * 2
           print 'Bem vindo a lista de Contatos'
      ESCOLHA = raw_input("""          
   
         a - Adicionar 
         d - Deletar 
         v - Ver 
              s - Sair
   
              Escolha um opcao: """)
      if ESCOLHA in ['a','A']:
         adicionar()
      elif ESCOLHA in ['d','D']:
         deletar()
      elif ESCOLHA in ['v','D']:
         ver()
      elif ESCOLHA in ['s','S']:
         fecharDB()
      else:
         print 'Opcao nao encontrada'
         time.sleep(1)
         Main()
## Opcao 'v', mostra todo o dicionario, (nomes e telefones), atraves do 'STATUS'
# pode-se tambem procurar por um nome aqui, faz-se o teste com 'db.has_key(VERNOME)'
# para saber se ha o nome nesse banco de dados. 
def ver():
   STATUS()
   if len(db) == 0:
      print 'Sua lista de Contatos esta vazia!'
   else:
      print
      print 's para sair'
      print
      VERNOME = raw_input('Digite o nome que quer ver: ')
      if VERNOME == 's' or VERNOME == 'S':
         print 'Voltando ao menu principal...'
      else:
         if db.has_key(VERNOME):
            MOSTRAR = db[VERNOME]
            print '\n' * 2
            print 'NOME: ',VERNOME, 'FONE: ',MOSTRAR
         else:
            print 'Nome nao encontrado!'
                
## Opcao 'd', serve para deletar um registro da lista de contatos. 
# caso o nome dado esteja incorreto ou nao exista, python mostrara
# uma mensagem de erro, isso eh novamente tratado aqui com 'db.has_key(DELETAR)'
def deletar():
   STATUS()
   if len(db) == 0:
      print 'Sua lista de Contatos esta vazia!'
   else:
      print
      print 's para sair'
      print
      DELETAR = raw_input('Digite o nome que quer apagar: ')
      if DELETAR == 's' or DELETAR == 'S':
         print 'Voltando ao menu principal'
      else:
         STATUS()
         if db.has_key(DELETAR):
            del db[DELETAR]
            STATUS()
            print 'O contato', DELETAR, 'foi apagado com sucesso!'
            
               
## Opcao 'a'. Para adicionar um registro ao banco de dados. 
# Caso o nome exista o registro
# nao sera efetuado, caso o 'nome' tenha mais de 21 letras 
# ele sera rejeitado, isso eh assim para que se possa ter uma 
# saida bonita e organizada do 'STATUS'.
def adicionar():
   print 
              print 's para sair'
   print 
   MAXNAME = 21
   NOME = raw_input('Nome: ')
   if db.has_key(NOME):
      print '\n', NOME,'ja existe'
      time.sleep(1)
   elif NOME in ['','\b']:
      print "Nome em branco nao e permitido"
      time.sleep(1)
   elif NOME == 's' or NOME == 'S':
      print 'Voltando ao menu principal...'
   elif len(NOME) > MAXNAME:
      print 
      print ' Nome pode ter no maximo 21 letras!'
      print ' Experimente usar apenas o primeiro-nome + identificador!'
      print ' Ex: joao-escola'
   else:
      FONE = raw_input('Telefone: ')
      if FONE in ['s','S']:
         print 'Voltando ao menu principal...'
      elif FONE in ['','\b']:
         print 'Telefone em branco nao e permitido'
         time.sleep(1)
      else:
         db[NOME]=FONE
         STATUS()
# Fechando o Db...
def fecharDB():
   db.close()
   print
              print 'Banco de dados fechado!'
   sys.exit()
      
if __name__ == '__main__':
   abrirDB()
   Main()

Scripts recomendados

Cadastro de pacientes - Py3k

Dígito verificador, módulo 11 simples, para uso interno no "postgresql" como

Dump MySQL com relatório de logs por e-mail

inserção

Gerar backups de banco de dados MySQL


  

Comentários
[1] Comentário enviado por fabio em 30/11/2004 - 12:32h

Muito bom! :P

[2] Comentário enviado por mre em 30/11/2004 - 14:01h

Falha Nossa:

em "def Main():" onde se lê:

"elif ESCOLHA in ['v','D']:"

trocar por "elif ESCOLHA in ['v','V']:"

[3] Comentário enviado por Brunonormandia em 07/08/2007 - 20:25h

acontece o seguinte erro ao tentar executar>>

File "agenda.py", line 28
print
^
IndentationError: unexpected indent

como resolver isto?

[4] Comentário enviado por mre em 09/09/2008 - 12:37h

Problema na identação do codigo, tenta executar usando o código fonte.

t+

Murilo R. Esplugues

[5] Comentário enviado por lypy em 27/05/2009 - 23:45h

Ao executar o programa foi retornado dois erros de indentação ; apenas acertei a indentação e salvei o programa e pronto , ele funcionou perfeitamente . O erro foi na linha 136 e 167 , mais ou menos , com o comando print assim :

print
print 's para sair'
print

Apenas ajustei a indentação :
print
print 's para sair'
print

O outro foi exatamente como este mas a informação impressa era outra.
Depois de colocar os comandos print alinhados o programa funcionou.

Adorei esse programa. Simples , fácil .


[6] Comentário enviado por lypy em 27/05/2009 - 23:49h

Ei ! O site parece ter formatado automaticamente o texto . Os 3 primeiros comandos print estão desalinhados . Desta vez coloquei um asterisco no início da linha.

* print
* print 's para sair'
* print

[7] Comentário enviado por lypy em 27/05/2009 - 23:50h

Não adiantou !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts