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.
- 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 objetodatetime.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 objetosContacto
.
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 objetoContacto
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.