Logo Studenta

Agenda con Listas Enlazadas

¡Este material tiene más páginas!

Vista previa del material en texto

Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 2	
Contenido 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 3	
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 programa, 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 suma 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 procesador optimice 
tiempos de ejecución y atención de procesos/operaciones. 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 4	
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. 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 5	
Desarrollo 
 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 6	
Al iniciar la ejecución de la aplicación muestra un menú de opciones 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. 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 7	
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 evitando “basura” en el programa. 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 8	
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 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 9	
 
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 control 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. 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 10	
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: 
 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 11	
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. 
 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 12	
En caso de no encontrarse el dato en la agenda se le notifica 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. 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 13	
Opción 3: Listar los registros de la agenda 
Para listar los registros debemos teclear el número 3 en el menú principal, la pantalla resultante nos muestra los elementos actuales 
de la agenda: 
 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 14	
 
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 ZAMORA 
Muestre el listado de los elementos actuales de la agenda. 
 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 15	
 Ingresar la información. 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 16	
 Mostrar la agenda con los elementos nuevos. 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 17	
 Eliminar el registro de apellido Zamora. 
 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 18	
 Enlistar los elementos actuales de la agenda. 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 19	
 
 
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 
#include<string.h> 
#include<ctype.h> 
 
 
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; 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 20	
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); 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 21	
 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 = anterior->siguiente; 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 22	
 } 
 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); 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 23	
 while(reco != NULL && strcmp(reco->Apat,apser) < 0) 
 { 
 ante = reco; 
 reco = reco->siguiente; 
 } 
 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(); 
 } 
 
 } 
 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 24	
 
 
} 
 
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 = recorre->siguiente; 
 } 
 getch(); 
 } 
 
} 
 
void menu() 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 25	
{ 
 system("cls"); 
 printf("Bienvenido, a continuaci%cn se 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 agenda\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; 
 } 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 26	
 } 
 if(opc > 4) 
 { 
 printf("Opci%cn inv%clida, vuelve a intentarlo. \nERROR 401: Forbiden", 162, 160); 
 getch(); 
 } 
 
 }while(opc != 4); 
} 
Titulo	del	Documento	 	 Versión	 Fecha	
Agenda	con	Listas	Enlazadas	 1.0	 Marzo	2014	
	
	
Universidad	del	Valle	de	México	Campus	Roma	 	 Profesor:	Francisco	Nazario	
	
	 27	
 
Conclusiones 
 
Después de la codificación del programa, la ejecución y el ejercicio efectuado se validó la funcionalidad del mismo y se 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úsqueda de elementos.

Continuar navegando