La única intención de este hilo es aprender de ustedes mediante sus correcciones a mi código. Ustedes son mis profesores. Gustaría que hagan preguntas de por que he hecho esto y por que he hecho aquello, que me hagan pensar y ver otras alternativas a lo que he hecho. Las buenas practicas, lo que debería de evitar y los fallos garrafales también son bienvenidos, obviamente. Siéntete libre de ser el profesor mas duro de mediavida.
El código es totalmente funcional, otra cosa de la que soy muy consciente es que sea eficiente y este escrito de forma correcta.
Todo el código (mas abajo esta fragmentado en sus funciones):
Para poner en practica la programación orientada a objetos he creado una pequeña 'aplicación' que funciona como un libro de contactos. He utilizado Python y la base de datos SQLite3.
La creación de la tabla que contiene dos columnas las cuales son PERSON_ID, NAME, PHONE_NUMBER.
import sqlite3 connection = sqlite3.connect('book.db') pointer = connection.cursor() #Creación de la tabla de CONTACTS. Si no existe. pointer.execute("CREATE TABLE IF NOT EXISTS CONTACTS (PERSON_ID INTEGER PRIMARY KEY, NAME VARCHAR(50), PHONE_NUMBER INTEGER)")
Unicamente consta de una clase llamada book_contacts con 4 métodos en su interior que tienen las siguientes tareas.
- Visualizar los contactos ya existentes:
class book_contacts(): def show_contacts(self): connection.row_factory = sqlite3.Row rows = pointer.execute("SELECT * FROM CONTACTS") a = "ID:" b = "NAME:" c = "PHONE NUMBER:" for row in rows: print(f"{a} {row[0]}, {b} {row[1]}, {c} {row[2]}") print("\n")
- Añadir nuevos contactos:
def add_contacts(self): name = input("\nName: ") phone_number = int(input("Phone number: ")) pointer.execute("""INSERT INTO CONTACTS (NAME, PHONE_NUMBER) VALUES (?, ?)""", (name, phone_number)) connection.commit() print("\n") print("New contact added!\n")
- Borrar un contacto en especifico el cual se accede a el mediante su ID.
def delete_contacts(self): delete_id = int(input("ID to delete: ")) pointer.execute("DELETE FROM CONTACTS WHERE PERSON_ID=?", (delete_id,)) connection.commit() print("\nContact deleted!\n")
- Y el ultimo de ellos es para borrar todos los contactos de la base de una vez.
def delete_all_contacts(self): print("\n") pointer.execute("DELETE FROM CONTACTS;",) connection.commit() print("All contacts deleted!") print("\n")
Al ejecutar el código se puede hacer uso de los métodos mediante números que van del 1 hasta el 4. Son simples condiciones que estan dentro de una función que a la vez siempre se esta ejecutando.
book = book_contacts() print("Welcome to your contacts book!\n") #Conjunto de opciones: condicionales que determinan el output segun el input del usuario. def menu(): user_options = [1, 2, 3, 4] print("1 - Show my contacts") print("2 - Add a new contact") print("3 - Delete an existing contact") print("4 - Delete all contacts") option_selected = None while option_selected not in user_options: option_selected = int(input("\nPlease select an option by number: ")) if option_selected == 1: print("\n") book.show_contacts() elif option_selected == 2: # print("\n") book.add_contacts() elif option_selected == 3: print("\n") book.delete_contacts() elif option_selected == 4: print("\n") y_n = input("You are going to delete all your contacts, you sure? [Y/N] ").lower() if y_n == "y": book.delete_all_contacts() else: print("\n") print("Task cancelled!\n") menu() while True: menu()
Una observación con la que lidie durante estos 2 dias y no logré resolver es referido a las IDs. Al eliminar un contacto que tenga digamos ID=1 esta no queda liberada a uno nuevo que haya añadido por lo tanto queda inutilizada.
¡Gracias por vuestra atención!