Projeto de programação

Proposta para um Projeto de Programação

Agora que exploraste os fundamentos do Python, desde a sintaxe básica até às bibliotecas populares, é hora de consolidar os teus conhecimentos com um projeto prático. Este capítulo irá guiar-te na criação de um projeto de programação que integra os vários conceitos que aprendeste ao longo do livro.

Descrição do Projeto

Vamos desenvolver uma aplicação simples de gestão de contactos. Esta aplicação permitirá ao utilizador:

  • Adicionar novos contactos
  • Mostrar a lista de contactos existentes
  • Atualizar contactos
  • Remover contactos

A aplicação será baseada em consola e usará listas e dicionários para armazenar os dados. Vamos aplicar estruturas de decisão, ciclos, funções e manipulação de ficheiros para garantir que a nossa aplicação é funcional e fácil de utilizar.

Estrutura do Projeto

  1. Introdução à Gestão de Contactos
  2. Configuração Inicial
  3. Adicionar Contactos
  4. Mostrar Contactos
  5. Atualizar Contactos
  6. Remover Contactos
  7. Guardar e Carregar Contactos a partir de um Ficheiro
  8. Conclusão

Introdução à Gestão de Contactos

Antes de nos debruçarmos sobre o código, é importante planear o que queremos que a nossa aplicação faça. Aqui está um exemplo de como os dados serão armazenados:

contactos = [
    {"nome": "João Silva", "telefone": "912345678", "email": "joao.silva@example.com"},
    {"nome": "Maria Oliveira", "telefone": "987654321", "email": "maria.oliveira@example.com"}
]

Cada contacto será um dicionário com campos para o nome, telefone e email.

Configuração Inicial

Vamos começar por criar a estrutura básica da nossa aplicação. Abre o teu ambiente de desenvolvimento preferido e cria um novo ficheiro chamado gestao_contactos.py.

def mostrar_menu():
    print("Escolha uma opção:")
    print("1. Adicionar Contacto")
    print("2. Mostrar Contactos")
    print("3. Atualizar Contacto")
    print("4. Remover Contacto")
    print("5. Guardar e Sair")

def main():
    contactos = []
    
    while True:
        mostrar_menu()
        escolha = input("Opção: ")
        
        if escolha == '1':
            adicionar_contacto(contactos)
        elif escolha == '2':
            mostrar_contactos(contactos)
        elif escolha == '3':
            atualizar_contacto(contactos)
        elif escolha == '4':
            remover_contacto(contactos)
        elif escolha == '5':
            guardar_contactos(contactos)
            break
        else:
            print("Opção inválida, por favor tente novamente.")

if __name__ == "__main__":
    main()

Adicionar Contactos

A função para adicionar um novo contacto irá pedir ao utilizador para inserir o nome, telefone e email, e depois adicionará este contacto à lista de contactos.

def adicionar_contacto(contactos):
    nome = input("Nome: ")
    telefone = input("Telefone: ")
    email = input("Email: ")
    novo_contacto = {"nome": nome, "telefone": telefone, "email": email}
    contactos.append(novo_contacto)
    print("Contacto adicionado com sucesso!")

Mostrar Contactos

Esta função irá passar por todos os contactos na lista e mostrá-los no ecrã.

def mostrar_contactos(contactos):
    if not contactos:
        print("Não existem contactos.")
        return
    for i, contacto in enumerate(contactos):
        print(f"{i + 1}. Nome: {contacto['nome']}, Telefone: {contacto['telefone']}, Email: {contacto['email']}")

Atualizar Contactos

Para atualizar um contacto, vamos permitir ao utilizador escolher o contacto pelo índice e depois atualizar o nome, telefone e email.

def atualizar_contacto(contactos):
    mostrar_contactos(contactos)
    index = int(input("Número do contacto para atualizar: ")) - 1
    
    if 0 <= index < len(contactos):
        nome = input("Novo Nome: ")
        telefone = input("Novo Telefone: ")
        email = input("Novo Email: ")
        contactos[index]["nome"] = nome
        contactos[index]["telefone"] = telefone
        contactos[index]["email"] = email
        print("Contacto atualizado com sucesso!")
    else:
        print("Número de contacto inválido.")

Remover Contactos

Vamos criar uma função que remove um contacto da lista com base no índice fornecido pelo utilizador.

def remover_contacto(contactos):
    mostrar_contactos(contactos)
    index = int(input("Número do contacto para remover: ")) - 1
    
    if 0 <= index < len(contactos):
        contactos.pop(index)
        print("Contacto removido com sucesso!")
    else:
        print("Número de contacto inválido.")

Guardar e Carregar Contactos a partir de um Ficheiro

Para guardar os contactos, vamos usar ficheiros em formato JSON. Isto permitirá que o utilizador guarde e carregue os contactos sempre que iniciar a aplicação.

import json

def guardar_contactos(contactos):
    with open('contactos.json', 'w') as ficheiro:
        json.dump(contactos, ficheiro)
    print("Contactos guardados com sucesso!")

def carregar_contactos():
    try:
        with open('contactos.json', 'r') as ficheiro:
            contactos = json.load(ficheiro)
        return contactos
    except FileNotFoundError:
        return []

# Atualiza a função main para carregar contactos no início
def main():
    contactos = carregar_contactos()
    
    while True:
        mostrar_menu()
        escolha = input("Opção: ")
        
        if escolha == '1':
            adicionar_contacto(contactos)
        elif escolha == '2':
            mostrar_contactos(contactos)
        elif escolha == '3':
            atualizar_contacto(contactos)
        elif escolha == '4':
            remover_contacto(contactos)
        elif escolha == '5':
            guardar_contactos(contactos)
            break
        else:
            print("Opção inválida, por favor tente novamente.")

Conclusão

Parabéns! Criaste uma aplicação funcional de gestão de contactos que permite adicionar, mostrar, atualizar, remover e guardar contactos. Este projeto consolidou vários conceitos fundamentais de Python, proporcionando uma experiência prática e útil. Continua a explorar e a expandir os teus conhecimentos, experimentando adicionar novas funcionalidades à aplicação.

Fim
<< Testes unitários Índice