Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Contenido
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 2
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Introducción
El manejo de apuntadores en el lenguaje C++ nos permite agilizar el procesamiento de los datos en las distintas operaciones que se van dando durante la ejecución del p rograma, de igual forma nos permite relacionar o reasignar valores a una variable sin que sea necesario referirnos al nombre de la misma como se ha señalado en cursos anteriores de programación, si sumamos a los apuntadores estructuras de datos y objetos de las mismas tenemos un importante ahorro de có digo lo que facilita el entendimiento de las líneas de código y el cómo viajan los datos durante la ejecución, vista la reutilización de código como una de las mejores prácticas podemos realizar “más con menos ” y así disminuir el tiempo que utilizamos del procesador para realizar las operaciones. Las direcciones de memoria juegan un papel de su ma importancia ya que mediante estas es como realmente se agiliza el manejo de los datos que contienen dichas direcciones de memoria, siendo de mucha ayuda cuando deseamos que el p rocesador optimice tiempos de ejecución y atención de procesos/operaciones.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 3
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Objetivo
Mostrar al lector el uso y manejo de apuntadores para controlar el flujo de información durante la ejecución de la aplicación para una eficiente administración de memoria RAM, lo que deriva en un control y un manejo transparente de los valores, operaciones y resultados que arroja, la declaración, inclusión y los modificadores de las funciones conocidas para incluir la referencia a los apuntadores y “contenedores” a los que “apuntan” este tipo de elementos tan recurrentes.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 4
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Desarrollo
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 5
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Al iniciar la ejecución de la aplicación muestra un menú de opc iones para el usuario, permitiendo elegir entre cuatro opciones: Alta de registro en la agenda Eliminar elemento de la agenda Mostrar elementos de la agenda Salir de la aplicación El usuario debe ingresar el número correspondiente a la opción deseada .
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 6
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Si el usuario ingresa un número que no corresponde a las opciones el programa le notifica mediante un mensaje en pantalla indicando que puede intentar el ingreso de algún número que corresponda a alguna de las opciones del menú:
Este mensaje es constante mientras el usuario no ingrese una opción válida del menú, un punto de seguridad contemplando el correcto manejo de la información y e vitando “basura” en el programa.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 7
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Opción 1: Ingresar registro a la agenda Al ingresar el número 1 en el menú del programa, limpia la pantalla y comienza a solicitar información al usuario la cual será asignada al nuevo registro de la agenda, los valores a ingresar son: Nombre Apellido Paterno Apellido Materno Fecha de nacimiento a 8 posiciones, dos para el día, dos para el mes y las últimas cuatro correspondientes al año Número telefónico a 10 posiciones
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 8
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Dentro de las validaciones al ingresar un registro se considera lo siguiente: 1. Los datos se organizan alfabéticamente al ser ingresados. 2. Los registros tienen como c ontrol para el ordenamiento el Apellido Paterno. 3. Los datos tipo CHAR se almacenan en mayúsculas para el correcto manejo de la información Una vez ingresados los datos del registro la aplicación regresa al menú inicial limpiando la pantalla previamente.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 9
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Opción 2: Eliminar un elemento de la agenda Al ingresar el número 2 en el menú del programa, solicita al usuario el texto referente al apellido paterno que se desea eliminar:
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 10
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
El texto debe ser igual al registrado, la aplicación no valida mayúscula de minúsculas ya que el dato capturado se convierte a mayúsculas y así se realiza la búsqueda del valor, en caso de ser encontrado el dato procede con el borrado de dicho registro y notifica al usuario mediante un mensaje en pantalla.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 11
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
En caso de no enc ontrarse el dato en la agenda se le no tifica al usuario y se le insta a continuar con la ejecución al presionar una tecla:
Solo es requerido que el usuario presione una tecla para continuar con la ejecución del programa.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 12
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Opción 3: Listar los registros de la agenda Para listar los registros debe mos teclear el número 3 en el menú principal, la pantalla resultante nos muestra los elementos actuales de la agenda:
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 13
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Ingrese la siguiente información: Nombre: Jose Apellido P: Guerrero Apellido M: Piesich Fecha de Nac: 11 de Mayo de 1970 Teléfono: 4738192034
Nombre: Erika Apellido P: Zamora Apellido M: Calderon Fecha de Nac: 23 Septiembre de 2011 Teléfono: 8299375560 Muestre la información de la agenda con las adiciones. Elimine el registro del Apellido ZA MORA Muestre el listado de los elementos actuales de la agenda.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 14
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Ingresar la información.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 15
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Mostrar la agenda c on los elementos nuevos.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 16
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Eliminar el registro de apellido Zamora.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 17
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Enlistar los elementos actuales de la a genda.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 18
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
#include #include #include #include #include
int opc, fnac, tel; char nombre[20], apat[20], amat[20];
typedef struct nodo { char Nombre[20]; char Apat[20]; char Amat[20]; int Fnac; int Tel; struct nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 19
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
typedef tipoNodo *Lista; Lista lista = NULL;
void Mayus(char s[]) { int j; for (j=0; j < strlen(s); j++) s[j]=toupper(s[j]); } void agregar() { pNodo nuevo, anterior; nuevo = (pNodo)malloc(sizeof(tipoNodo)); system("cls"); printf("Ingresa el nombre: "); scanf("%s", &nombre); Mayus(nombre); strcpy(nuevo->Nombre,nombre); printf("\nIngresa el apellido Paterno: "); scanf("%s",&apat); Mayus(apat);
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 20
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
strcpy(nuevo->Apat,apat); printf("\nIngresa el apellido Materno: "); scanf("%s", &amat); Mayus(amat); strcpy(nuevo->Amat,amat); printf("\nIngresa la fecha de nacimiento \nej.: 13012014 = 13 de enero de 2014.: "); scanf("%d", &fnac); nuevo->Fnac = fnac; printf("\nIngresa el tel%cfono de contacto a 10 d%cgitos: ", 130, 161); scanf("%d", &tel); nuevo->Tel = tel; //Ordenamiento para cada conjunto de datos que se ingresan if(lista==NULL || strcmp(lista->Apat,nuevo->Apat) > 0) { nuevo->siguiente = lista; lista = nuevo; } else { anterior = lista; while(anterior->siguiente!=NULL && strcmp(anterior->siguiente->Apat,nuevo->Apat) <= 0) { anterior = ante rior->siguiente;
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 21
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
} nuevo->siguiente = anterior->siguiente; anterior->siguiente = nuevo; } } void elimina() { char apser[20]; pNodo reco, ante; reco = lista; ante = NULL; if(reco == NULL) { printf("Lista vac%ca...", 161); getch(); } else { printf("\nIngresa el Apellido paterno que deseas eliminar: "); scanf("%s", &apser); Mayus(apser);
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 22
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
while(reco != NULL && strcmp(reco->Apat,apser) < 0) { ante = reco; reco = reco->s iguiente; } if(reco == NULL || strcmp(reco->Apat,apser) != 0) { printf("\nNo se encontr%c valor"); getch(); return; } else { if(ante == NULL) { lista = reco->siguiente; } else ante->siguiente = reco->siguiente; free(reco); printf("Registro eliminado, presiona una tecla para continuar..."); getch(); } }
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 23
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
} void muestra() { pNodo recorre = lista; if(lista == NULL) { printf("Lista vac%ca...", 161); getch(); }else { printf("Nombre\tAp Paterno\tAp Materno\tFecha Nac\tTel%cfono\n", 130); while(recorre != NULL) { printf("%s\t %s\t\t %s\t\t %d\t %d\n", recorre->Nombre, recorre->Apat, recorre->Amat, recorre->Fnac, recorre->Tel); recorre = reco rre->siguiente; } getch(); } } void menu()
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 24
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
{ system("cls"); printf("Bienvenido, a continuaci%cn s e muestra el men%c de opciones:\n", 162, 163); printf("1.-Agregar elemento a la agenda\n"); printf("2.-Eliminar un registro de la agenda\n"); printf("3.-Mostrar el contenido de la age nda\n"); printf("4.-Salir\n"); }
main() { char resp; do { system("cls"); menu(); scanf("%d", &opc); if(opc > 0 && opc < 4) { switch (opc) { case 1: agregar();break; case 2: elimina();break; case 3: muestra(); break; }
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 25
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
} if(opc > 4) { printf("Opci%cn inv%clida, vuelve a intentarlo. \nERROR 401: Forbiden", 162, 160); getch(); } }while(opc != 4); }
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 26
Titulo del Documento Agenda con Listas Enlazadas
Versión
Fecha
1.0
Marzo 2014
Conclusiones
Después de la codificación del programa, la ejecución y el e jercicio efectuado se validó la funcionalidad del mismo y s e corroboró la utilidad de los apuntadores para un mejor manejo de la información, el paso de parámetros y en este caso en particular el ordenamiento de los elementos conforme se fueron ingresando, el programa no presento errores ni excepciones ya que se contemplaron elementos de seguridad que restringen al usuario en cuanto al menú y la bús queda de elementos.
Universidad del Valle de México Campus Roma
Profesor: Francisco Nazario 27