El proyecto consiste en la implementación de una agenda electrónica en lenguaje ensamblador.
A continuación se describen generalidades del proyecto y más adelante, el conjunto de funcionalidades.
RUN.cmd
A continuación se describen las funcionalidades que ofrece el programa.
El programa permitir:
-
Agregar un contacto
ADD NOMBRE_DE_CONTACTO: TELÉFONO;
Si el contacto ya existe, debe mostrarse un mensaje de error.
-
Eliminar un contacto
REMOVE NOMBRE_DE_CONTACTO;
Elimina el contacto identificado por NOMBRE_DE_CONTACTO.
-
Modificar un contacto
UPDATE NOMBRE_DE_CONTACTO: TELÉFONO;
Sustituye el teléfono almacenado para dicho contacto.
-
Mostrar un contacto
SHOW NOMBRE_DE_CONTACTO;
Muestra la información almacenada para el contacto dado.
En cualquiera de los 3 casos anteriores, si el contacto no existe, debe mostrarse un mensaje de error.
-
Listar todos los contactos
LIST;
Debe listar todos los contactos con su(s) campo(s).
Los nombres son una secuencia alfanumérica de uno o más caracteres que puede incluir espacios.
Los nombres de las instrucciones (ADD, LIST, etc.) son palabras reservadas: no pueden ser usadas como nombres de contactos ni grupos.
Los teléfonos son una secuencia de uno o más números: [0-9]+.
La entrada del programa es una secuencia de instrucciones terminadas en punto y coma. Nótese que puede haber más de una instrucción por línea. El usuario en cada momento introduce una línea de texto que será procesada. Si la línea es vacía el programa termina.
Los espacios adicionales deben ignorarse siempre excepto los que están incluidos en el Nombre del contacto.
Si una instrucción no puede ser procesada se debe mostrar un mensaje de ERROR y el programa pasa a esperar la próxima instrucción. Dicho mensaje debe ser lo más descriptivo posible.
Si se intenta eliminar o mostrar un contacto que no ha sido creado se debe visualizar un cartel de error.
El programa es guardar la configuración de una agenda en una ruta especificada por el usuario y cargar configuraciones guardadas por el usuario anteriormente usando su programa.
En este caso, aparecen dos nuevas instrucciones:
SAVE PATH;
y
LOAD PATH;
... donde PATH es una ruta en el disco duro donde almacenar la información.
El programa es capaz de registrar usuarios con contraseñas y mantener una agenda de contactos distinta para cada uno de ellos.
-
Al iniciarse el programa debe permitirse registrar un nuevo usuario o iniciar sesión con un usuario existente.
-
La contraseña no debe mostrarse en pantalla mientras se introduce.
-
Si el usuario existe, su programa debe verificar la contraseña almacenada para dicho usuario y otorgar acceso si coincide. En caso contrario, debe denegar el acceso.
-
Si el usuario no existe, su programa debe crear un usuario con dicho nombre y contraseña, con una nueva agenda vacía.
-
En cualquiera de los casos anteriores, siempre deberá mostrar mensajes descriptivos acerca de lo que ocurre.
-
En cualquier momento de la ejecución del programa debe permitirse al usuario cerrar su sesión mediante la instrucción
LOGOUT;
, limpiar la pantalla y regresar a la pantalla de inicio de sesión. -
Al usuario iniciar sesión nuevamente (sin haber cerrado la aplicación) los contactos guardados en la sesión anterior deben estar presentes. Si usted decide implementar persistencia también, los contactos almacenados de todos los usuarios deben permanecer luego de cerrar el programa.
El programa es capaz de asociar un contacto a un grupo. Notar que un contacto puede estar asociado a más de un grupo.
Se añaden cuatro nuevas instrucciones:
-
Añadir un nuevo grupo
`ADDGROUP NOMBRE_DE_GRUPO;`
-
Eliminar un grupo
`REMOVEGROUP NOMBRE_DE_GRUPO;`
Nótese que eliminar un grupo no borra los contactos asociados al grupo.
-
Añadir contacto a un grupo
`ADDTOGROUP NOMBRE_DE_CONTACTO: NOMBRE_DE_GRUPO;`
-
Listar un grupo
`LISTGROUP NOMBRE_DE_GRUPO;`
Muestra todos los contactos asociados a un grupo.
Al mostrar un contacto también deben aparecer los nombres de los grupos a los que este está asociado (si está asociado a alguno).
Estas operaciones pueden ser utilizadas en los siguientes contextos:
-
Rellenar un grupo
FILL NOMBRE_DE_GRUPO: OPERACIÓN_DE_CONJUNTO
Ejecuta la operación de conjunto y se añaden al grupo los contactos contenidos en el resultado de esta.
-
Listar un grupo
LISTGROUP OPERACIÓN_DE_CONJUNTO;
Ejecuta la operación de conjunto y se listan los contactos contenidos en el resultado de esta. Las operaciones de conjunto que deben ser implementadas son las siguientes.
-
Intersección de grupos
INTERSECT GRUPO_1,…, GRUPO_N;
(N >= 2)
- Unión de grupos
UNION GRUPO_1,…, GRUPO_N;
(N >= 2)
- Diferencia de grupos
DIFFERENCE GRUPO_1,…, GRUPO_N;
(N = 2)
El programa es capaz de realizar búsquedas sobre los contactos.
Se añaden dos nuevas instrucciones:
-
Buscar por nombre
SEARCHNAME CADENA;
-
Buscar por teléfono
SEARCHPHONE CADENA;
-
Deben mostrarse todos los resultados que contengan a
CADENA
como subcadena. Los resultados deben aparecer ordenados lexicográficamente. -
En caso de las operaciones sobre grupos, las búsquedas deben poder recibir como parámetro una operación.
Iván Galbán Smith [email protected]
Raydel E. Alonso Baryolo [email protected]
2nd year Computer Science students, University of Havana