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

Publicado por Murilo R. Esplugues 30/11/2004

[ Hits: 12.036 ]

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

Python com CouchDB usando couchdbkit

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

inserção

Gerar backups de banco de dados MySQL

Banco de dados int Python


  

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