Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: TUDO AZUL....
Por ZIPPO
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Murilo R. Esplugues em 30/11/2004    [ 6480 hits ]

Login: mre, 145509 pontos

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


Descrição

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.

[ Download: fone.py ]   [ Enviar nova versão ]

[ 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
   Script Linux recomendado Conexão python com Mysql
   Script Linux recomendado Gerar backups de banco de dados MySQL
   Script Linux recomendado Banco de dados int Python
   Script Linux recomendado Python com CouchDB usando couchdbkit
   Script Linux recomendado inserção

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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.