Advertisement
LightProgrammer000

Agenda de Contatos Profissional

Dec 14th, 2021
851
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.09 KB | None | 0 0
  1. """
  2. Python: 3
  3. Project: Agenda interativa
  4. Estrutura de dados: Dicionario
  5.  
  6. * Observacoes
  7. Obs(1): Comentar todas as linhas de uma vez ⇨ ctrl + /
  8. Obs(2): Forma de declaracao alternativa: AGENDA = dict()
  9. Obs(3): Lista = []
  10. Obs(4): Tupla = ()
  11. Obs(5): Conjunto = {}
  12. """
  13.  
  14. # Importacoes
  15. from os import system
  16.  
  17. ##############
  18. # DICIONARIO #
  19. ##############
  20.  
  21. # Forma de declaracao comum
  22. AGENDA = {}
  23.  
  24. ###########
  25. # METODOS #
  26. ###########
  27.  
  28. # Mostrar contatos da agenda
  29. def mostrarContatos():
  30.     print("{}".format("\n\033[01;32m### CONTATOS ### \033[01;37m"))
  31.  
  32.     # Estrutura de decisao: Analisar quantidade de contatos da agenda
  33.     if len(AGENDA) > 0:
  34.  
  35.         # i -> Contato
  36.         for i in AGENDA:
  37.             print("\n# {}: {}".format("ID", i))
  38.  
  39.             # j -> [telefone] [email] [endereco]
  40.             for j in AGENDA[i]:
  41.                 print("# {}: {}".format(j, AGENDA[i][j]))
  42.     else:
  43.         print("{}".format("\033[01;32m# Agenda nao possui contatos\033[01;37m"))
  44.  
  45.     print("{}".format("\033[01;32m###\033[01;37m" * 15))
  46.  
  47. # Buscando contatos especificos
  48. def buscarContatos(nome):
  49.  
  50.     try:
  51.         print("\n# {} {}".format("ID: ", nome))
  52.  
  53.         for i in AGENDA[nome]:
  54.             print("# {}: {}".format(i, AGENDA[nome][i]))
  55.  
  56.         print("{}".format("\033[01;32m#\033[01;37m" * 45))
  57.  
  58.     except KeyError:
  59.         print("{}".format("\033[01;31m# Contato invalido\033[01;37m"))
  60.  
  61. # Incluindo contatos
  62. def incluirEditarContato(contato, telefone, email, endereco):
  63.  
  64.     # Adicionando ao dicionario no estilo Hard Code
  65.     AGENDA[contato] = {
  66.         "telefone": telefone,
  67.         "email": email,
  68.         "endereco": endereco
  69.     }
  70.  
  71.     # Metodo: Salvar no arquivo database.csv
  72.     save()
  73.     print("\n\033[01;36m# Contato '{}' adicionado/editado com sucesso \033[01;37m".format(contato))
  74.  
  75. # Excluir contato
  76. def excluirContato(contato):
  77.  
  78.     try:
  79.         AGENDA.pop(contato)
  80.         print("\n\033[01;31m# Contato '{}' excluido com sucesso \033[01;37m".format(contato))
  81.  
  82.         # Metodo: Salvar no arquivo database.csv
  83.         save()
  84.  
  85.     except KeyError as e:
  86.         print("{}".format("\033[01;31m# Contato invalido\033[01;37m"))
  87.  
  88. # Exportando contatos em TXT
  89. def exportarContatosTXT():
  90.  
  91.     try:
  92.         # w: Reescrever os contatos na agenda
  93.         with open("agenda.txt", "w") as arquivo:
  94.  
  95.             for i in AGENDA:
  96.                 arquivo.write("\n\n{}: {}".format("# Contato", i))
  97.  
  98.                 for j in AGENDA[i]:
  99.                     arquivo.write("\n{}: {}".format(j, AGENDA[i][j]))
  100.  
  101.         print("{}".format("\033[01;32m# Agenda exportada com sucesso\033[01;37m"))
  102.  
  103.     except Exception as e:
  104.         print("{}".format("\033[01;31m# Exportacao invalida\033[01;37m"))
  105.  
  106. # Exportando contatos em CSV
  107. def exportarContatosCSV():
  108.  
  109.     try:
  110.         with open("exportar.csv", "w") as arquivo:
  111.  
  112.             for i in AGENDA:
  113.                 arquivo.write("\n{}".format(i))
  114.  
  115.                 for j in AGENDA[i]:
  116.                     arquivo.write(",{}".format(AGENDA[i][j]))
  117.  
  118.         # Shell Script
  119.         system("cat exportar.csv | grep -i ' ' > tmp.csv;"
  120.                "rm -rf exportar.csv;"
  121.                "mv tmp.csv exportar.csv")
  122.  
  123.     except Exception as e:
  124.         print("{}".format("\033[01;31m# Exportacao invalida\033[01;37m"))
  125.  
  126. # Exportando contatos em CSV
  127. def exportarDatabase():
  128.  
  129.     try:
  130.         with open("database.csv", "w") as arquivo:
  131.  
  132.             for i in AGENDA:
  133.                 arquivo.write("\n{}".format(i))
  134.  
  135.                 for j in AGENDA[i]:
  136.                     arquivo.write(",{}".format(AGENDA[i][j]))
  137.  
  138.         # Shell Script
  139.         system("cat database.csv | grep -i ' ' > tmp.csv;"
  140.                "rm -rf database.csv;"
  141.                "mv tmp.csv database.csv")
  142.  
  143.     except Exception as e:
  144.         print("{}".format("\033[01;31m# Exportacao invalida\033[01;37m"))
  145.  
  146.     """
  147.    # Codigo Alternativo
  148.    try:
  149.        # w: Reescrever os contatos na agenda
  150.        with open(exportar + ".csv", "w") as arquivo:
  151.  
  152.            for i in AGENDA:
  153.                arquivo.write("{},{},{},{}\n".format(i, AGENDA[i]["telefone"], AGENDA[i]["email"], AGENDA[i]["endereco"]))
  154.  
  155.        print("{}".format("\033[01;32m# Agenda exportada com sucesso\033[01;37m"))
  156.  
  157.    except Exception as e:
  158.        print("{}".format("\033[01;31m# Exportacao invalida\033[01;37m"))
  159.    """
  160.  
  161. # Importar contatos avulsos
  162. def importarContatos(importar):
  163.  
  164.     try:
  165.         with open(importar + ".csv", "r") as arq:
  166.  
  167.             # Estrutura de repeticao: Leitura de linhas de uma arquivo em lista
  168.             for i in arq.readlines():
  169.  
  170.                 # Transformacao em lista com delimitador de ","
  171.                 info = i.strip().split(",")
  172.  
  173.                 # Chamada de metodo para importar contato
  174.                 incluirEditarContato(info[0], info[1], info[2], info[3])
  175.  
  176.     except Exception as e:
  177.         print("{}".format("\033[01;31m# Importacao invalida\033[01;37m"))
  178.  
  179. ###################
  180. # METODOS SUPORTE #
  181. ###################
  182.  
  183. # Entrada de dados em detalhes sobre o contato
  184. def entradaDadosContato():
  185.  
  186.     print("")
  187.     telefone = input("{}".format("\033[01;34m# Telefone: \033[01;37m"))
  188.     email = input("{}".format("\033[01;34m# Email: \033[01;37m"))
  189.     endereco = input("{}".format("\033[01;34m# Endereco: \033[01;37m"))
  190.  
  191.     return telefone, email, endereco
  192.  
  193. # Carregar o banco de dados 'database.csv'
  194. def load():
  195.  
  196.     try:
  197.         with open("database.csv", "r") as arq:
  198.  
  199.             # Estrutura de repeticao: Leitura de linhas de uma arquivo em lista
  200.             for i in arq.readlines():
  201.  
  202.                 # Transformacao em lista com delimitador de ","
  203.                 info = i.strip().split(",")
  204.  
  205.                 # Incluindo no Dicionario
  206.                 AGENDA[info[0]] = {
  207.                     "telefone": info[1],
  208.                     "email": info[2],
  209.                     "endereco": info[3]
  210.                 }
  211.  
  212.         # Mensagem de confirmacao
  213.         print("{} {} contatos".format("Database adicionado com sucesso", len(AGENDA)))
  214.  
  215.     except Exception as e:
  216.         print("Erro inesperado")
  217.         print(e)
  218.  
  219. # Salvar estado atual da agenda no arquivo 'database.csv'
  220. def save():
  221.     exportarDatabase()
  222.     pass
  223.  
  224. ################################
  225. # METODOS DE CONTROLE DE FLUXO #
  226. ################################
  227.  
  228. # Menu interativo
  229. def menu():
  230.     system("clear")
  231.     print("{}".format("\033[01;31m### MENU ###\033[01;37m"))
  232.     print("{}".format("=" * 50))
  233.     print("{}".format("\033[01;32m[1] Mostrar contatos da agenda\033[01;37m"))
  234.     print("{}".format("\033[01;33m[2] Buscar contato\033[01;37m"))
  235.     print("{}".format("\033[01;34m[3] Incluir contato\033[01;37m"))
  236.     print("{}".format("\033[01;35m[4] Editar contato\033[01;37m"))
  237.     print("{}".format("\033[01;36m[5] Excluir contato\033[01;37m"))
  238.     print("{}".format("\033[01;37m[6] Exportar contatos em arquivo [txt]\033[01;37m"))
  239.     print("{}".format("\033[01;31m[7] Exportar contatos em arquivo [csv]\033[01;37m"))
  240.     print("{}".format("\033[01;32m[8] Importar contatos em arquivo [csv]\033[01;37m"))
  241.     print("{}".format("\033[01;33m[0] Saida\033[01;37m"))
  242.     print("{}".format("=" * 50))
  243.  
  244.     # Entrada de opcoes
  245.     opc = input("{}".format("\033[01;34m# Opc.: \033[01;37m"))
  246.     system("clear")
  247.  
  248.     # Estruturas de decisoes: Opcoes de MENU
  249.     if opc == "0":
  250.         exit(1)
  251.  
  252.     # Mostrar contatos da agenda
  253.     elif opc == "1":
  254.         mostrarContatos()
  255.  
  256.     # Buscar contato
  257.     elif opc == "2":
  258.         print("\n{}".format("\033[01;32m### BUSCANDO ###\033[01;37m"))
  259.         buscarContatos(input("\n{}".format("\033[01;34m# Contato: \033[01;37m")))
  260.  
  261.     # Incluir contato
  262.     elif opc == "3":
  263.         print("\n{}".format("\033[01;32m### Incluir Contato ###\033[01;37m"))
  264.         contato = input("\n{}".format("\033[01;34m# Contato: \033[01;37m"))
  265.  
  266.         try:
  267.             if AGENDA[contato]:
  268.                 print("\033[01;34m{}\033[01;37m".format("# Contato existente"))
  269.  
  270.         except KeyError:
  271.             print("\033[01;35m{}\033[01;37m".format("# Incluir dados do novo contato"))
  272.  
  273.             # Metodo: Inclusao dos detalhes do contato
  274.             telefone, email, endereco = entradaDadosContato()
  275.             incluirEditarContato(contato, telefone, email, endereco)
  276.  
  277.     # Editar contato
  278.     elif opc == "4":
  279.         print("\n{}".format("\033[01;32m### Editando Contato ###\033[01;37m"))
  280.         contato = input("\n{}".format("\033[01;34m# Contato: \033[01;37m"))
  281.  
  282.         try:
  283.             if AGENDA[contato]:
  284.                 print("\033[01;34m{}\033[01;37m".format("# Editando dados do contato"))
  285.  
  286.                 # Metodo: Edicao dos detalhes do contato
  287.                 telefone, email, endereco = entradaDadosContato()
  288.                 incluirEditarContato(contato, telefone, email, endereco)
  289.  
  290.         except KeyError:
  291.             print("\033[01;34m{}\033[01;37m".format("# Contato inexistente"))
  292.  
  293.     # Excluir contato
  294.     elif opc == "5":
  295.         print("\n{}".format("\033[01;32m### Excluindo Contato ###\033[01;37m"))
  296.         excluirContato(input("\n{}".format("\033[01;34m# Contato: \033[01;37m")))
  297.  
  298.     # Exportando contatos em arquivo TXT
  299.     elif opc == "6":
  300.         print("\n{}".format("\033[01;32m### Exportando Contato ###\033[01;37m"))
  301.         exportarContatosTXT()
  302.  
  303.     # Exportando contatos em arquivo CSV
  304.     elif opc == "7":
  305.         print("\n{}".format("\033[01;32m### Exportando Contato ###\033[01;37m"))
  306.         exportarContatosCSV()
  307.  
  308.     # Importando contatos em arquivo CSV
  309.     elif opc == "8":
  310.         print("\n{}".format("\033[01;32m### Importando Contatos ###\033[01;37m"))
  311.         importarContatos(input("{}".format("# Nome do arquivo: ")))
  312.  
  313.     # Pause de retorno de menu
  314.     input("\n{}".format("\033[01;36m<< Press Enter >>\033[01;37m"))
  315.  
  316. # Metodo principal
  317. def main():
  318.  
  319.     # Carregar contatos
  320.     load()
  321.     while True:
  322.         try:
  323.             menu()
  324.  
  325.         except Exception as e:
  326.             print("{}".format("\033[01;31m Erro inesperado \033[01;37m"))
  327.  
  328.         finally:
  329.             pass
  330.  
  331. # Inicializacao do programa
  332. if __name__ == '__main__':
  333.     main()
  334.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement