Programación de desarrollo universitario, consulte a un maestro
#include?lt;stdio.hgt;
#include?lt;string.hgt;
#include?lt;malloc.hgt; p>
p>
ARCHIVO?*fp;
char?nombre de archivo[50]?=?{""};
typedef?struct?message?{
char?nombre[16];
char?teléfono[16];
char?correo electrónico[24]; ?dirección[24] ;
int?código postal;
estructura?mensaje?*siguiente;
}?*LinkList, *pNode;
void? ReadData(pNodo?p)?{
printf("\tNombre?:?");
scanf("s",p-gt;nombre) ;
printf("\tNúmero de teléfono?:?");
scanf("s", p-gt;teléfono);
printf(" \tNúmero de correo electrónico?:?");
scanf("s",p-gt;correo electrónico);
printf("\tDirección?:?");
scanf("s",p-gt;dirección);
printf("\tCódigo postal?:?");
scanf("d",amp ; p-gt;código postal);
}
void?ShowLine(int?n)?{
int?i;
for(i?=?0;?i?lt;?n;? i)
printf("*");
printf("\n");< / p>
}
void?ShowData(pNode?p)?{
printf("-16s", p-gt; nombre);
printf("-16s", p-gt; teléfono);
printf("-24s", p-gt; correo electrónico);
printf("-24s" , p-gt; dirección);
printf("-8d\n", p-gt; código postal);
}
void?ShowAll( Lista de enlaces); ?head)?{
pNode?p;
ShowLine(88);
for(p?=?head-gt;next;?p ; ?p?=?p-gt;siguiente)
ShowData(p);
ShowLine(88);
}
LinkList?GetEmptyList()?{
LinkList?head?=?(pNode)malloc(sizeof(struct?message));
head-gt;
head-gt;nombre[0]?=?0;
head-gt;dirección[0]?=?0;
cabeza
-gt;código postal?=?0;
head-gt;teléfono[0]?=?0;
head-gt;correo electrónico[0]?=?0;
return?head;
}
void?Addmember(LinkList?head)?{?//?Agregar en orden creciente por teléfono, que se puede utilizar para crear una nueva lista enlazada
pNode?q, p?=?(pNode)malloc(sizeof(struct?message));
q?= ?cabeza;
while(q-gt;siguiente)?{
if(strcmp(q-gt;siguiente-gt;teléfono, p-gt ;teléfono)?== ?0)?{
ShowData(p);
printf("\t*****?Este número de teléfono ya existe.
\n");
return;
}
if(strcmp(q-gt;next-gt;teléfono,p-gt;teléfono)? gt;?0)?{
p-gt;siguiente?=?q-gt;siguiente;
q-gt;siguiente?=?p;
regresar;
}
}
q-gt; siguiente?=?p;
p-gt; =?NULL;
}
pNode?SearchName(LinkList?head, char?name[])?{
pNode?p;
if(head?==?NULL)?return?NULL;
for(p?=?head-gt;next;?p;?p?=?p-gt;next) ?{
if(strcmp(p-gt; nombre, nombre)?==?0)?{
ShowData(p);
¿regresar? p;
}
}
return?NULL;
}
pNode?SearchTelephone(LinkList? head, char?telephone[])?{
pNode?p;
if(head?==?NULL)?return?NULL;
para (p?=?head-gt;siguiente;?p;?p?=?p-gt;siguiente)?{
if(strcmp(p-gt;teléfono,teléfono)?==? 0)?{
ShowData(p);
return?p;
}
}
return?NULL;
}
void?ModifyListName(LinkList?head)?{
pNode?p;
char?name [24];
printf("\t¿El nombre de la persona que se está modificando?:?"
scanf("s", nombre
p?=?SearchName(head, nombre);
if(p?==?NULL)?printf("\tXXXXX?¡No se encontró ningún registro llamado s!\n", nombre);< / p>
más?{
ShowData(p);
ReadData(p);
}
}< / p>
void?ModifyListTelephone(LinkList?head)?{
pNode?p;
char?telephone[16];
printf( " \t¿Número de teléfono modificado?:?");
scanf("s",teléfono);
p?=?BuscarTeléfono(cabeza,teléfono);
p>
if(p?==?NULL)?printf("\t****?¡No se encontró ningún registro con el número de teléfono!\n",teléfono);<
/p>
más?{
ShowData(p);
ReadData(p);
}
}
void?ModifyList(LinkList?head)?{
int?select;
¿hacer?{
printf("\t1, Modificar por nombre, 2. Modificar por número de teléfono, 0, return\n");
printf("\tPor favor seleccione: ");
scanf("d", amp ; seleccionar);
cambiar(seleccionar)?{
caso?1?:?ModifyListName(head);
caso?2?:?ModifyListTelephone ( cabeza);
}
} while(select);
}
int?EraseTelephone(LinkList?head, char? teléfono [])?{?//?Eliminar el nodo cuyo número de teléfono es teléfono
int?an;
pNode?p, q;
if ( head-gt; next?==?NULL)?{
printf("\tEl libro de números está vacío.
\n");
return?0;
}
for(p?=?head;?p-gt;next;?p?= ?p-gt;siguiente)?{
if(strcmp(p-gt;next-gt;teléfono,teléfono)?==?0)?{
ShowData(p
printf("\t1.Delete,?0.No eliminar?:?");
scanf("d",amp;an);
if(an?==?1)?{
q?=?p-gt;siguiente;
p-gt;siguiente?=?q-gt ; siguiente;
gratis(q);
retorno?1;
}
más?retorno?0;
}
}
printf("\t*****? ¡No se encontró ningún registro con el número de teléfono!\n",teléfono);
return?0;
}
void?LoadData(LinkList?head)?{?//?Transferir el contenido del archivo a la memoria
pNodo ?p, tmp;
int?an, bandera
if(nombre de archivo[0]?==?'\0')?{
printf ("\t¿El nombre del archivo de datos a transferir?:?");
scanf("s", nombre de archivo);
}
else?{
printf("\t¿Cargar archivos? 1. ¿Sí, 0 no lo es?:", nombre de archivo
scanf("d", amp; an) ;
if(an?==?1)?{
fp?=?fopen(nombre de archivo, "rb");
if(fp? ==?NULL )?{
printf("\tXXXXX? Error al abrir el archivo s.\n", nombre de archivo
return
}
}
else?{
printf("\tFilename?:?");
scanf("s", nombre de archivo );
fp?=?fopen(nombre de archivo, "rb");
if(fp?==?NULL)?{
printf(" \tXXXXX? No se pudo abrir el archivo s.
\n", nombre de archivo);
return;
}
}
}
if(head -gt; ¿siguiente?==?NULL)?{
p?=?head;
tmp?=?(pNode)malloc(sizeof(struct?message));
while(fread((void?*)tmp,sizeof(struct?message),1,fp)?==?1)?{
p-gt;next?= ?tmp;
p?=?p-gt;siguiente;
tmp?=?(pNode)malloc(sizeof(struct?message));
}
fclose(fp);
p-gt; siguiente?=?NULL
gratis(tmp); return
}
printf("\t1. Agregar, 2. ¿Sobrescribir?:?"
scanf("d", amp; an); );
if(an?==?1)?{
tmp?=?(pNode)malloc(sizeof(struct?message));
while(fread(tmp, sizeof(struct?message),1,fp)?==?1)?{
flag?=?1;
for(p? =?head;?p-gt;siguiente?amp;amp;?flag;?p?=?p-gt;siguiente)?{
if(strcmp(p-gt;next-gt; teléfono,tmp-gt;teléfono)?==?0)?{
printf("\t*****?Debido a que el número de teléfono es el mismo, esta información no se agrega:\n ");
ShowData(tmp);
bandera?=?0;
descanso;
}
if( strcmp(p-gt;siguiente-gt;teléfono,tmp-gt;teléfono)?gt;?0)?{
tmp-gt;siguiente?=?p-gt;siguiente ;
p-gt; siguiente?=?tmp;
bandera?=?0;
descanso
} p>
}
if(bandera)?{
p-gt; siguiente?=?tmp
tmp-gt; ?NULL;
}
tmp?=?(pNode)malloc(sizeof(struct?message));
}
fclose(fp) ;
gratis(tmp);
retorno;
}
if(an?==?2) ?{ p>
p?=?head-gt;siguiente;
mientras(p)?{
tmp?=?p;
p?=?p-gt;siguiente;
gratis(tmp);
}
p?=?head;
tmp?=?(pNode)malloc(sizeof(struct?message));
while(fread(tmp, sizeof(struct?message)) , 1, fp)?==?1)?{
p-gt; siguiente?=?tmp;
p?=?p-gt;siguiente;
tmp?=?(pNode)malloc(sizeof(struct?message));
}
free(tmp);
p- gt ;siguiente?=?NULL;
fclose(fp);
}
}
void?SaveData(LinkList?head ) ?{?//?Guardar memoria en el archivo
int?an;
char?mode[5];
pNode?p;
if(nombre de archivo[0]?==?0)?{
printf("\t¿Por favor ingrese el nombre del archivo?:?");
scanf(" s ", nombre de archivo);
fp?=?fopen(nombre de archivo, "wb");
if(fp?==?NULL)?{
printf("\tXXXXX? Error al abrir el archivo s.\n", nombre de archivo);
return
}
for(p?=? head- gt; siguiente;?p;?p?=?p-gt;siguiente)
fwrite(p, sizeof(struct?message),1,fp);
fclose( fp);
return
}
else?{
printf("\t1. Sobrescribir archivo s\n2 Agregar archivo s\n3. Nuevo\n4. Ninguna operación devuelve\n", nombre de archivo, nombre de archivo);
printf("\t¿Por favor seleccione?:?");
scanf. ( "d",amp; an);
if(an?lt;?1?||?an?gt;?3)?return;
if(an? = =?3)?{
printf("\t¿Por favor ingrese el nombre del archivo?:?");
scanf("s", nombre de archivo);
fp?=?fopen(nombre de archivo, "wb");
if(fp?==?NULL)?{
printf("\tXXXXX?Error al abrir el archivo s.
\n", nombre de archivo);
return;
}
for(p?=?head-gt; siguiente; ?p; ?p?= ?p-gt; siguiente)
fwrite(p, sizeof(struct?message), 1, fp
fclose(fp); ;
}
else?{
if(an?==?1)?strcpy(mode, "wb");
else?if(an?==?2)?strcpy(modo, "ab");
fp?=?fopen(nombre de archivo, "wb");
if(fp?==?NULL)?{
printf("\tXXXXX? No se pudo abrir el archivo s.
\n", nombre de archivo);
return;
}
for(p?=?head-gt; siguiente; ?p; ?p?= ?p-gt; siguiente)
fwrite(p, sizeof(struct?message), 1, fp
fclose(fp); ;
}
}
}
void?Sort(LinkList?head)?{?//?Ordenar por nombre creciente
pNode?p, q, pt;
if(head?==?NULL)?return;
p?=?head;
while(p-gt; siguiente)?{
q?=?p-gt; siguiente-gt; siguiente;
while(q-gt; siguiente) ?{
if(strcmp(p-gt;next-gt;teléfono, q-gt;next-gt;teléfono)?gt;?0)?{
pt? =?p-gt;siguiente;
p-gt;siguiente?=?q-gt;siguiente;
q-gt;siguiente?=?q-gt;siguiente- gt; siguiente;
p-gt; siguiente?=?pt;
}
más?q?=?q-gt; siguiente;
}
p?=?p-gt; siguiente
}
}
void?FreeList(LinkList?head)?{
pNode?p?=?head, q;
while(p)?{
q?= ?p;
p?=?p-gt; siguiente;
libre(q); p>
void?menu(LinkList?head)?{
int?choice;
do?{
printf("┌─── ─────────────────────────────┐\n");
printf("│?│\ n ");
printf("│?¿Bienvenido al software de gestión de libretas de direcciones?│\n");
printf("│?│\n");
printf("│Escribir│\n");
printf("│?│\n");
printf("└────── ─ ─────────────────────────┙\n");
printf("\n\n\n\ n ");
printf("\t1, Nuevo\n");
printf("\t2, Explorar\n");
printf ( "\t3, Modificar\n");
printf("\t4, Agregar\n");
printf("\t5, Ordenar\n"); p>
printf("\t6, cargar\n");
printf("\t7, guardar\n");
> printf("\t0, salir\n");
printf("\n\t¿Por favor seleccione?:?";
scanf("d", amp; elección );
cambiar(elección)?{
caso?1?:?Addmember(head);?break;
caso?2?:? (cabeza);?break;
case?3?:?ModifyList(head);?break;
case?4?:?Addmember(head);?break; /p>
caso?5?:?Sort(head);?break;
case?6?:?LoadData(head);?break;
case ? 7?:?SaveData(head);?break;
}
} while(choice);
}
int ? principal()?{
LinkList?head?=?GetEmptyList();
menú(head);
FreeList(head);
¿regresar?0;
}