Control de plagas en artículos científicos

//Creación del módulo del archivo de encabezado.h

const int MaxLen = 200//Puede almacenar hasta 200 información de contacto.

char fName[20]= " tel . dat ";//Archivo de disco: nombre de archivo de la libreta de direcciones

int Len//Variable global, el número total de contactos actuales en el libreta de direcciones

//1 Diseño de la estructura de datos de la libreta de direcciones

estructura typedef número de teléfono

{

nombre char[20] ;// nombre

int grupo; //Grupo: 1. Amigos 2. colega 3. Familia 4. Otros

char home[15];//número de teléfono particular

char mobile phone[15]; //mobile phone

char email[20]; / /Correo electrónico

char add[20]; //Dirección

char memo[20] //Observaciones

}Teléfono;

// Estructura de matriz de punteros, utilizada para ordenar.

índice de estructura typedef

{

int len//longitud de la matriz

tel * tel[MaxLen] //matriz de punteros,

}Índice;

//Mostrar módulo xuanshi.cpp

Lista vacía (tel [], índice lianx ren);// Según el puntero en lianxren La clasificación de la matriz muestra todos los contactos.

void Oferta diaria (void); //Imprimir título

void Oferta diaria (void); //Imprimir pie de página

void PrintOne (Tel r, int) I); //Imprime únicamente la información del contacto R con número de serie I.

Desactivar impresión (número de teléfono); //Imprimir encabezado e información de contacto.

anillo negativo nulo (); //Interfaz de bienvenida

menú int (void); //Menú principal, muestra el menú de primer nivel: Ver libreta de direcciones (1), actualizar dirección libreta (2), libreta de direcciones de respaldo (3), salida (0).

int menu 2(void); //Actualiza el submenú de la libreta de direcciones, mostrando: agregar contactos (21), editar contactos (22), eliminar contactos (23), regresar al menú principal (20) .

//Módulo de procesamiento de archivos wenjiancl.cpp

void New(número de teléfono[], índice * lianx ren); //Agregar contacto. Agregado a la primera posición vacía de la matriz. Después de eso, debes reordenar

void Edit(Tel tel[], Index * lianx ren); //Editar el contacto. Necesita reordenar

void Delete(Tel tel[], Index * lianx ren); //Eliminar el contacto. Eliminación lógica, asignando solo nombres a cadenas vacías. Es necesario reordenarlo después de eliminarlo.

void input (Tel *r, Tel tel[], int menu); //Introduce los datos del contacto e identifícalo a través del menú: añade (11) o modifica (13).

int chongcha(char *name, Tel tel[], char *original); //Comprueba el peso. Antes de agregar o editar empleados, verifique si hay nombres duplicados.

int Select(); //Selecciona el número de serie del contacto para evitar errores.

int Load(Tel tel[], Índice * lianx ren); //Leer. Lea el archivo de la libreta de direcciones fName en la memoria. Categoría

int Guardar(Tel Tel[]); //Guardar. Guarde la libreta de direcciones en el disco con el nombre fName (variable global). La eliminación física se realiza en este momento: un contacto con una cadena vacía indica que el contacto se ha eliminado y no se almacenará en el archivo de la libreta de direcciones.

int Copy(void); //Hacer copia de seguridad de la libreta de direcciones. Copie el archivo de la libreta de direcciones.

void pingypaix(phone[], index * lianx ren); //Ordenar por orden de sonido.

void Xuan paixi(Index * p); //Seleccione la clasificación de la matriz de punteros

//Módulo de archivo principal zhuwenjian.cpp

# include & ltstdio.h & gt

#incluye & ltstdlib.h & gt

#incluye & ltconio.h & gt

#incluye & ltstring.h & gt

#Contiene "chuangyong. h"

#Contiene "xuanshi.cpp"

#Contiene "wenjiancl.cpp"

int principal ()

{

Anillo yin ();

int select = 0;

tel tel[MaxLen] // Máximo almacena 200 contactos.

Index lianxren //Matriz de punteros ordenados por orden de voz

Load(phone & amplianx ren //Leer información del archivo de la libreta de direcciones

/ /Recorre los menús para que los usuarios elijan.

Haga {

if(select<10 || select==20) // Elemento del menú principal < 10, o devuelva 20 desde el submenú. Luego se muestra el menú principal.

select = Menu();

else if(select & gt20 & amp& amp select & lt30) //Seleccione el elemento del submenú 2 y continúe mostrando el submenú 2.

select = menu 2();

Cambiar (seleccionar)

{

Caso 1://Ver comunicaciones en orden alfabético registro.

Lista (teléfono, lianx ren);

printf(" \ n \ n \ tPresione cualquier tecla para continuar..."); ); //Esperar a que el usuario vea la pantalla con claridad, conio.h

Pausa;

Caso 21: //Añadir un contacto.

Nuevo(Teléfono&lianxren);

Pausa;

Caso 22: //Editar Contacto

Editar(Teléfono& amplianx ren);

Pausa;

Caso 23: //Eliminar contacto

Eliminar (teléfono & amplianx ren);

Pausa;

Caso 20: //Volver al menú principal

Pausa;

Caso 3: //Hacer copia de seguridad de la libreta de direcciones

Sistema ( "cls" ); //Si no hay un submenú, primero borre el menú anterior stdlib.h

Guardar (teléfono); //Es posible que el usuario haya actualizado. Primero guarde el número de teléfono actual en el archivo de la libreta de direcciones.

copiar();

Break;

Caso 0: //Salir del programa

Break; > }

}Y (select!=0);

Guardar (teléfono); // Antes de salir del sistema, almacene los datos de la memoria en el archivo de la libreta de direcciones.

Devuelve 0;

}

//módulo de menú xuanshi.cpp. Independiente de otros módulos del programa. El código de menú devuelto corresponde a la acción.

//Sección de bienvenida

Anillo Yin no válido ()

{

Char A[100]={ "Bienvenido a este boletín libro.

¡Este programa fue escrito por Fei Yao, o(∩_∩)o...! ¡Sube al coche! "};

int i, j, k;

for(I = 0; i<6;i++)

{

printf (" \ n ");

}

puts(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t \ t ");

for(I = 0; a[i]!='\0';i++)

{

if(I = = 49)printf( " \ n \ n \ t \ t ");

printf("%c ",A[I]);

for(j = 0; j & lt10000;j++ )

for(k = 0; k & lt2000;k++)

;

}

Puts ("\ n \ n \ n \ t \ t 07 Wang, Departamento de Ciencias de la Computación, Clase C");

puts(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ a ");

getch();

}

//Menú principal, que muestra el menú de primer nivel: Ver libreta de direcciones (1), actualizar libreta de direcciones (2), hacer copia de seguridad de libreta de direcciones (3), salir (0)

<.p>menú int (no válido)

{

int I;

menú char;

Hacer {

system("cls"); // borrar pantalla, stdlib.h

for(i = 0;i<6;i++)

{

printf(" \ n ");

}

Puts ("\ n * * * * * * *Menú principal* * * * * * * * ") ;

p>

puts(" * * ");

Puts(" * 1. Ver libreta de direcciones* ";

Puts(" * 2. Actualizar libreta de direcciones* " ;

Puts(" * 3. Copia de seguridad de libreta de direcciones * ";

Puts(" * 0.

Salir del programa * ";

puts(" * * ");

puts(" * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ tPor favor seleccione: ");

menu = getche();

Cambiar (menú)

{

Caso "0":

puts("\n\n\t¡Salga del programa!");

menú =Menú-' 0 ';

Break; // Salir del bucle

Caso "1":

Caso "3":

menú = menú-'0';

Pausa;

Caso "2":

menú = menú 2();

Interrupción;

Predeterminado:

puts("\n\n\tEleccion incorrecta!");

menu = ' 9

}

} while(menu == ' 9 '); //Regresar código de menú, '0', '1', 20, 21, 22, 23 y '3' son todos Valor válido

Volver al menú

}

//Actualizar el submenú de la libreta de direcciones, mostrando: Agregar contacto (21), Editar contacto (22). ), eliminar contacto (23), devolver (20)

int Menu2()

{

char menu;

int I ;

do {

system("cls"); // borrar pantalla, stdlib.h

for(I = 0; i<6 ;i++)

{

printf(" \ n ");

}

Puts ("\ n * * * * * *Actualizar dirección libro* * * * * * ");

puts(" * * ");

Puts(" * 1. Agregar contacto * ";

puts(" * * ");

p>

Puts(" * 2. Editar contacto * ";

Puts(" * 3. Eliminar contacto * ";

Puts(" * 0. Volver Menú principal * ";

puts(" * * ");

puts(" * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ tPor favor seleccione: ");

menu = getche( ); // Ingresa un carácter sin eco, no es necesario Presionar la tecla Enter, conio.h

Cambiar (menú)

{

Caso "0" :

Cambiar (" \ n\n\¡Volver al menú principal! ");

Romper; // Salir del bucle

Caso "1":

Caso "2":

Caso "3" ":

Interrupción;

Predeterminado:

puts("\n\n\tElección incorrecta!");

menu = ' 9

}

} while(menu = = ' 9 '); //Para devolver el código del menú, "0", "1", "2 " y "3" son valores válidos.

Menú Volver 2 - '0';

}

//Sección de exploración

Voidlist (tel tel [], index lianxren) // Muestra todos los nodos según el método de clasificación de lianx ren.

{

int I; //i: subíndice de matriz

if(Len==0)

{

printf("\n\tSin contacto");

Devolver;

}

Oferta por día ();

p>

for(I = 0;I<LenI++) //Recorre todos los contactos en orden alfabético, número de serie i+1.

PrintOne( *(lianxren.tel[i]), I+1

dayingbiaowei()

}

; Void dayingbiaotou(void) //Imprimir encabezado

{

printf(" \ n \ n \ tLibro de direcciones * Contacto"); n \ t-");

printf(" \ n \ t %-10s %-6s %-10s %-10s ", "Nombre", "Grupo", "Teléfono residencial", "Móvil teléfono");

printf(" %-10s %-10s %-10s ", "Correo electrónico", "Dirección", "Observaciones");

printf( " \ n \ t-");

}

Void dayingbiaowei(void)//Imprimir pie de página

{

printf (" \ n \ t-\ n ");

}

Void PrintOne(Tel r, int i) //Solo imprime un contacto r con información del número de serie I.

{

If (I!=0) //El contacto va precedido de un número de serie.

printf("\n%6d\t%-10s ", I, r . name);

De lo contrario // no agregue el número de serie antes del contacto.

printf("\n\t%-10s ", r . nombre);

//Grupo: 1. Amigos 2. colega 3. Familia 4. Otros

Cambiar (grupo derecho)

{

Caso 1:

Printf("%-6s", "Friends" ) ;

Descanso;

Caso 2:

Printf("%-6s ", "Colegas"); /p>

Caso 3:

Printf("%-6s", "family");

Pausa;

Valor predeterminado:

Printf("%-6s ", "Otro");

}

printf(" %-10s %-10s %-10s ", r. inicio , r.mobile, r.email);

printf("%-10s%-10s", r.add, r.memo);

}

Void Print(Tel r) //Imprimir encabezado e información de contacto.

{

Oferta por día ();

PrintOne(r, 0); //Solo imprime una persona, no genera el número de serie (la segunda). parámetro es 0).

dayingbiaowei();

}

//Módulo de procesamiento de archivos wenjiancl.cpp

//Parte de procesamiento de archivos

Intload (teltel [], índice * lianxren) // leer. Lea el archivo de la libreta de direcciones fName en la memoria.

Clasificación

{

ARCHIVO * fin

int I = 0;

fin=fopen(fName, " Rb ");

if(!fin)

{

printf("\n\tLa libreta de direcciones no existe, ¡agregue el contacto primero!\n\n\ Presione cualquier tecla para continuar... ");

getch();

Devuelve 0;

}

while(1 )

{

Fred(&tel[i],sizeof(Tel),1,fin);

if(feof(fin))

p>

Romper;

i++;

}

fclose(fin);

len = I ; //Actualizar el número total de personas en la libreta de direcciones

pingypaix (teléfono, lianx ren // Ordenar por orden de sonido

Regresar I;

}

Int Guardar(Tel tel[]) // guardar. Guarde la libreta de direcciones en el disco con el nombre fName (variable global). La eliminación física se realiza en este momento: un contacto con una cadena vacía indica que el contacto se ha eliminado y no se almacenará en el archivo de la libreta de direcciones.

{

ARCHIVO * fout

int i, j; //I: subíndice de matriz de teléfonos, j: número real de personas en la libreta de direcciones (excluyendo Elemento TEL con un nombre vacío).

fout=fopen(fName, "WB");

if (!fout)

{

printf(" \ n \tLa libreta de direcciones no se puede guardar correctamente. Presione cualquier tecla para continuar... ");

getch();

Devuelve 0;

}

//i es el subíndice de la matriz de teléfonos, j es el número real de personas (hay contactos lógicamente eliminados en la matriz de teléfonos y los nombres están vacíos).

for(i=0,j=0;j<Len)

{

//Encuentra un contacto válido y expulsa la lápida (llamada cadena vacía).

mientras( strcmp(tel[i].nombre, " " " == 0)

i++;

fwrite(& tel[i] , tamañode (Tel), 1, fout);

i++;

j++;

}

fclose(fout);

Return j;

}

Int Copy(void) //Copia el archivo de la libreta de direcciones

{

p><. p>FILE *fout, * fin

Tel * p = (Tel *)malloc(sizeof(Tel)); // Almacena datos temporales leídos de la libreta de direcciones

char. nombre[20];

fin=fopen(fNombre, "Rb");

if (! fin)

{

printf("\n\t¡Sin conexión!");

Devuelve 0;

}

Haz {

printf(" \ n \ tIngrese el nombre del archivo de respaldo: ");

scanf("%s ", nombre);

strcat(name.

bak");

fout=fopen(name, "WB");

if (!fout)

printf(" \tNombre o ruta del archivo no válido !\n ");

}mientras(!fout);

mientras(1)

{

fread(p , tamaño de (Tel), 1, fin);

if(feof(fin))

Descanso

fwrite(p, tamaño de (Tel), 1 , fout);

}

printf("\n\t¡Copia de seguridad exitosa!");

Gratis (p);

Return 1;

}

//Parte de operación básica

Voidnew (tel tel [], index * lianxren)//Agregar contacto al primer vacío. posición en la matriz. Después de eso, debe reordenar

{

int t = 0; //Encuentre la primera posición vacía en tel para almacenar. p>

if(Len>=MaxLen)

{

printf("\n\n\tLa libreta de direcciones está llena. ! ");

Return;

}

//Encuentra la primera posición vacía t en tel.

while( strcmp(tel[t]).name, " "! =0 )

t++;

Input(&Telephone[t],Telephone,21);//Agregar persona de contacto (21), ingresar información de contacto

len++; //Contacto agregado por 1

pingypaix (teléfono, lianx ren); //Reordenando

}

Voidededit (tel tel [], index * lianx ren) //El contacto editado debe reordenarse

{

int I;

p>

Lista (teléfono, * lianx ren /); /Modificar según el orden de clasificación de los símbolos fonéticos

if(Len==0) devuelve;

I = Select() ;

print(*(lianx. ren-& gt; tel[I])); //Muestra el contacto que seleccioné por el usuario

Ingrese (lianxren-& gt; número de teléfono. [i], teléfono, 23); /Ingrese la información de contacto (23) al editar

pingypaix (teléfono, lianx ren); //Reordenar

}

Anular eliminación (tel tel [], index *lianx ren)//Eliminar el contacto. Eliminación lógica, asignando solo nombres a cadenas vacías. Es necesario reordenarlo después de eliminarlo.

{

int I;

Selección de carácter; //Elección del usuario: si continúa ingresando información además del nombre.

List(phone, *lianx ren); //Eliminar en orden alfabético

if(Len==0) regresa;

I = Select() ;

print(*(lianx ren-& gt;tel[I])); //Muestra el contacto que seleccioné por el usuario.

printf(" \ n \ t¿Estás seguro de que deseas eliminar a esta persona? (y/n)");

select = getche()

if(select=='Y' || select=='y ')

{

strcpy(lianx ren-& gt; número de teléfono [I]-& gt; name, ""; //Eliminar información de contacto (eliminación lógica): asigne el nombre a una cadena vacía, indicando ninguno.

len-; //Contacto menos 1

pingypaix (teléfono, lianx ren); //Reordenar

}

}

Ingreso nulo (tel * r, tel tel [], int menu)//Ingrese la información de un contacto, el menú reconocerá: agregar (11) o modificar (13).

{

int select

nombre de carácter[20], original[20];

If(menu==21)/ /añadió, originalmente no tenía nombre.

strcpy(original, " ");

De lo contrario //Editor, alguna vez tuvo un nombre

strcpy(original, r-& gt; nombre) ;

printf(" \ n \ n \ tIngrese el nombre del contacto: "

Haga {

scanf("%s ", nombre) ;

} while(chongcha(nombre, tel, original)); //Comprobación de nombre duplicado. Cuando se modifica, puede ser el mismo que el nombre original.

strcpy(r-& gt; nombre, nombre);

printf("\t¿Quieres seguir escribiendo (y/n)?");

select = getche();

if(select=='y' || select=='Y ')

{

//Grupo

Printf("\n\t Grupo (1. Amigos 2. Colegas 3. Familia 4. Otros), ingrese el número de serie:

scanf("%); d ", &(r->grupo));

mientras(r->grupo<1 | | r->grupo>4)

{

printf( " \ n \ tError de entrada. Vuelva a ingresar el número de serie del grupo (1. Amigos 2. Colegas 3. Familia 4. Otros):)"

scanf("%d " ,&(r) ->grupo));

}

printf("\tPhone:");

scanf("%s ", r->Inicio );

printf("\tMóvil:");

scanf("%s ",r->Móvil);

printf("\ tEmail:");

scanf("%s ",r-& gt;Email);

Printf("\tDirección :");

scanf("%s ",r-> agregar);

printf("\tmark:");

scanf("%s ", r-& gt; nota );

}

Else if(menu==21) //Al agregar un contacto (menu=21), sin la entrada del usuario, se establece un valor predeterminado.

{

r->group = 4; //Grupo predeterminado: otro

strcpy(r->home, "";

strcpy(r-& gt; mover, "";

strcpy(r-& gt; buzón, "";

strcpy(r-& gt ;Agregar , "";

strcpy(r-& gt;Nota, "";

}

}

Intchongcha ( char * nombre, tel tel [], char * original) // Buscar duplicados Antes de agregar o editar un contacto, verifique si hay nombres duplicados.

{

int i, j; //i: subíndice de matriz j: el número real de personas, excepto el nombre, es una cadena vacía.

int dup = 0; //Indicador de nombre duplicado: 1 para nombres duplicados, 0 para nombres no duplicados.

if(strcmp(name,original)!=0)//name no es el nombre original.

for(i=0, j = 0; j & ltLen)//Recorrer todos los contactos

{

//Encontrar contactos válidos, desalojar la lápida ( el nombre es una cadena vacía).

mientras( strcmp(tel[i].nombre, " " " == 0)

i++;

If (strcmp (nombre, tel[I] ].name) = = 0)//name no es el nombre original, pero es el mismo nombre en la libreta de direcciones

{

dup = 1;

printf(" \ n \ t nombre! Vuelva a ingresar: ");

Descanso

}

i++;

j++ ;

}

Volver a dup

}

Int Select() //Selecciona el número de serie del contacto a evitar errores

} p>

{

int I = 0;

int c; la entrada es 1 si la entrada es exitosa; de lo contrario, se devuelve 0.

printf(" \ n \ tSeleccione el contacto por número de serie: "); scanf("%d ", & ampI);

while(I<1||I>Len)

{

printf("\n\tError de entrada ! Seleccione un contacto por número de serie :");

if(c == 0)fflush(stdin); //Error de entrada, borre el contenido del búfer de entrada relacionado con el flujo de entrada stdin, stdio. h

c=scanf("%d ", & ampI);

}

Devolver I-1;

}

// Ordenar parte

Void pingy paix (tel tel [], index * lianx ren) // Ordenar por orden de sonido

int i, j / /i: subíndice de matriz j: el número real de personas, excepto el nombre, es una cadena vacía

if( Len==0)

Return; //Inicializa la matriz de punteros de clasificación

lianx ren-& gt; len = 0

for(i=0, j = 0; j & ltLen)

<; p >{

//Buscar un contacto válido y expulsar la eliminación lógica (el nombre es una cadena vacía)

while( strcmp(tel[i].name, " " " = = 0)

i++;

lianx ren-& gt;Teléfono[j]= &Teléfono[I];

j++;

i++;

lianx ren-& gt;len++;

}

//Seleccionar orden

Xuanpaixi (lianx ren) ;

}

void Xuan paixi(Index * p)//Seleccione y ordene la matriz de punteros.

{

int i, j, n = p->>len

int min

Teléfono * temperatura;

p>

if(n==0) return; //No hay contacto, por lo que no es necesario realizar ninguna clasificación.

//Clasificación de selección

for(I = 0;i<n-1;i++)

{

//Elemento mínimo encontrado

min = I;

for(j = I+1; j & ltn; j++)

{

if(strcmp (p->Número de teléfono[j]->Nombre, p->Teléfono[minuto]->Nombre)<0)

min = j;

}

//Intercambia el elemento mínimo min, el primer elemento I de la secuencia desordenada actual.

if (min!=i)

{

temp = p-& gt; teléfono[I];

p- >;tel[I]= p->Teléfono[minuto];

p->;tel[min]= temp;

}

} //Fin de I

}