Agregar cumpleaños

Purpose (do/learn; why this/here): Extend the ADT by adding a date ADT, adapting the contact ADT to accept it, and adding more helper blocks.

Can we cut all the commented out text on this page? --MF, 22/7/19

MARY: change the DATE ADT to use the correct ADT format. --MF, 5/23/20

BRIAN: as a low priority (that is, after ALL the solutions for all units and all optional projects are done), you want to add a "parse a date" TIF. --MF, 5/23/20

En esta página, desarrollarás un tipo de dato abstracto (TDA) para almacenar y acceder a fechas, y adaptarás tu tipo de dato abstracto de contacto para usarlo para almacenar el cumpleaños de cada contacto.
contacto con nombre: ... cumpleaños: (fecha (julio) (9) (2005))

A medida que agregamos más complejidad a los contactos (cumpleaños, dirección del trabajo, etc.), la ubicación de cada dato (como el número de teléfono) dentro de un contacto puede cambiar. Aquí es donde ayuda un tipo de dato abstracto. Si tuvieras que mover el número de teléfono a medida que refinas tu tipo de dato abstracto de contacto, podrías arreglar cada bloque que usa el número de teléfono, o si tienes un tipo de dato abstracto, podrías simplemente arreglar el único selector que elige el número de teléfono de la lista. Con ese único cambio, todos los demás bloques que usen ese selector obtendrán los datos que necesitan automáticamente.

AAP-1.D.5

Observa que el nombre, la dirección y el texto son cadenas, pero la fecha de nacimiento es una lista. Puedes combinar elementos de diferentes tipos de una lista.

  1. Crea un tipo de dato abstracto para administrar tres datos para cada fecha: mes, día y año.
    1. Crea un constructor fecha que acepte estos datos como entrada y luego reporte una fecha como una lista de tres elementos.
      fecha (julio) (9) (2005) reporta {Julio, 9, 2005}
    2. Escribe tres bloques selector para recuperar los datos específicos (mes, día o año) de la fecha ingresada.
      mes de la fecha: () reporta Julio día de la fecha: () reporta 9 año de la fecha: () reporta 2005
    3. Depura cualquier problema con el constructor o los selectores.
  2. Integra tu tipo de dato abstracto de fecha en el tipo de dato abstracto de contacto.
    • Edita la definición del bloque del constructor contacto para aceptar una fecha de nacimiento como una lista usando el constructor fecha.
      contacto con nombre: (Betsy) dirección: (123 Main St., Nueva York NY 10001) teléfono: (212-555-1234) fecha de nacimiento: (fecha (julio) (9) (2005)) reporta {Betsy, 123 Main St ., Nueva York NY 10001, 212-555-1234, {9 de julio de 2005}}
    • Crea un selector fecha de nacimiento del contacto para recuperar la fecha de nacimiento del contacto ingresado.
      fecha de nacimiento del contacto: (contacto con nombre: (Betsy) dirección: (123 Main St., Nueva York NY 10001) teléfono: (212-555-1234) fecha de nacimiento: (fecha (julio) (9) (2005))) reporta {9 de julio de 2005}
    • Adapta tu botón "Agregar contacto" para ingresar este nuevo tipo de contacto en tu lista.

      Añadir contactos con cumpleaños

      Puedes usar varios bloques de preguntas y respuestas junto con variables de programa.

      Otra forma es usar abstracción y crear otro ayudante,preguntar fecha de nacimiento que reporta una lista de las respuestas del usuario a estas indicaciones:

      • ¿Cuál es el mes de nacimiento del contacto?
      • ¿Cuál es el día de nacimiento del contacto?
      • ¿Cuál es el año de nacimiento del contacto?
      contacto con nombre: (pedir nombre) dirección: (pedir dirección) teléfono: (pedir teléfono) fecha de nacimiento: (pedir fecha de nacimiento)

  3. Guarda tu trabajo
  4. Depura. Borra tu lista de contactos y agrega algunos contactos nuevos con cumpleaños. Soluciona cualquier problema.