Trabajo práctico Nº3

Parcial domiciliario: Agenda de contactos

Viernes 26 de junio

Les propongo construir un mini-proyecto parecido al anterior. En este caso, haremos una lista de contactos, también con interfaz de línea de comandos. La idea es que descarguen este código. Tienen que leer el código, para ver lo que ya está hecho, y completar la parte que falta, lo que deben hacer ustedes está marcado en el código con comentarios que dicen # TODO: (significa "por hacer" en inglés, es una costumbre escribirlo así). El sistema completo debería tener las siguientes funcionalidades:

  • Una clase llamada "Contacto".
    Sus variables de instancia son:
    • id: Un número secuencial automático
    • nombre: El nombre del contacto
    • celular: El número de celular del contacto
    • direccion: La dirección del contacto (opcional)
    • ciudad: La ciudad en donde vive el contacto. Si no se proporciona una ciudad, el método iniciador __init__, deberá asignarle la cadena Desconocido.
    • etiquetas: una serie de palabras-clave separadas por espacios. Por ejemplo, un contacto podría tener la etiqueta "trabajo", otro "urquiza" y otro "trabajo urquiza" (si fuera un compañero de trabajo que también es compañero de curso).
    • fecha_nacimiento: la fecha de nacimiento del contacto. En el método iniciador, se pondrá siempre None como fecha de nacimiento.
    Además del método iniciador, debe tener los siguientes métodos:
    • Un método llamado coincide, que reciba como parámetro una cadena, y que retorne True si la cadena forma parte del nombre, de las etiquetas, o de la ciudad; y False de lo contrario.
    • Otro método llamado calcular_edad, que retorne la edad del contacto si es que su fecha de nacimiento está cargada, o None de lo contrario.
    • El método set_fecha_nacimiento, que reciba como parámetro un objeto datetime.date y lo guarde como fecha de nacimiento del contacto.
    • El método cumple_anios, que reciba una fecha, y retorne True si el contacto cumple años ese día, y False si no es así.
    • El método cumple_en, que recibe como parámetro una lista de fechas y retorna True si el contacto cumple años alguno de los días que figuran en la lista, y False si no es así.
  • Una clase llamada "Agenda". Su única variable de instancia es contactos, una lista de objetos Contacto.
    Sus métodos son:
    • nuevo_contacto: Recibe un nombre y un celular. Opcionalmente, puede recibir también una dirección, una ciudad y etiquetas. Crea el nuevo contacto y lo agrega a la lista.
    • _buscar_por_id: Recibe un id, y retorna el objeto Contacto correspondiente, o None si no existiera.
    • modificar_ciudad: Recibe un id y una nueva ciudad, y actualiza la ciudad del contacto.
    • modificar_direccion: Recibe un id y una nueva dirección, y actualiza la dirección del contacto.
    • modificar_etiquetas: Recibe un id y las nuevas etiquetas, y actualiza las etiquetas del contacto.
    • modificar_fecha_nacimiento: Recibe un id y la nueva fecha de nacimiento (día, mes y año), y actualiza la fecha de nacimiento del contacto.
    • buscar: Recibe un "filtro" (cadena de búsqueda) y retorna una lista compuesta por los contactos cuyo nombre, etiquetas, o ciudad coincidan con el filtro recibido.
    • alerta_cumples: recibe un número "n" como parámetro, y retorna una lista de los contactos que cumplen años en los próximos "n" días.
  • Una clase llamada Menu, que contiene una interfaz de usuario básica en línea de comandos, que permita invocar los métodos de "Agenda" y mostrar sus resultados (esta clase ya está completa en el código).

Descargar código para realizar el trabajo


Fecha y formato de entrega

  • Carpeta comprimida en formato zip, conteniendo únicamente el código completo del TP. Nombre del archivo: GS2-TP3-ApellidoNombre.zip
  • Fecha de entrega: Lunes 6 de julio
  • Enviar el archivo por mail a gs2@juansemarquez.com
  • Aquellos estudiantes que no han podido entregar el TP 1 o TP 2, o se les ha pedido que los rehagan, deben entregarlos, como plazo máximo, el mismo día en que entreguen este trabajo. Quienes no alcancen a terminarlo para ese día, pasarán automáticamente a instancias de recuperatorio.

Volver