sistema de gestión de información de empleados en lenguaje c
#include "stdio.h" /*Biblioteca de funciones de entrada y salida estándar*/
#include "stdlib .h" /*Biblioteca de funciones estándar*/
#include "string.h" /*Biblioteca de funciones de cadenas*/
#include "conio.h" /*Función de operación de pantalla biblioteca* /
#definir encabezado 1 " - ZGGZ - \n "
# definir encabezado 2 " | número | nombre | jbgz | jj | kk | yfgz | sk | sfgz | \n "
# definir encabezado 3 " |-|-|-|-|-|-|-|-|-| \ n "
# definir FORMATO " - 8s | -10s | 8.2f | 8.2f | 8.2f | 8.2f | 8.2f | n "
#Definición de datos p- gt; num, p-> ; jbgz, p- gt; jj, p- gt; kk, p- gt; p- gt; p- gt; p>
#Definición N 60
int save flag = 0 /*Si es necesario guardar la variable de bandera*/
/*Definir estructuras de datos relacionadas con los empleados* /
Estructura Typedef empleado/* marcado como empleado*/
{
char num: ");
scanf("d ", amp select);
If(select==1) /*Consulta por número*/
{
stringinput(searchinput, 10, "Enter el número de empleado existente: ");
p=Locate(tp, n, searchinput, " num "); /*Encuentra el elemento cuyo valor es searchinput en la matriz tp y devuelve el valor del subíndice del elemento de matriz*/ p>
If (p!=-1) /*Si se encuentra el registro*/
{
imprimir encabezado();
imprimir datos( TP: ");
scanf("d ", ampsel);
if(sel==1)
{
stringinput(findmess, 10, "Ingrese el número de empleado existente: ");
p=Locate(tp, n, findmess, " num "); getchar();
Si (p! =-1)
{
for(I = p 1; I ltn; I ) /*Eliminar este registro, los registros posteriores avanzarán*/
{
strcpy(tp[i-1]). número,tp[i]. número);
strcpy(tp[i-1]). Nombre, tp[i]. Nombre);
tp[i-1]. jbgz=tp[i]. jbgz
tp[i-1]. jj=tp[i]. jj;
tp[i-1]. kk=tp[i]. kk;
tp[i-1]. yfgz=tp[i]. yfgz
tp[i-1]. jbgz=tp[i].
sk;
tp[i-1]. sfgz=tp[i]. sfgz
}
printf(" \ n == gt; ¡Eliminación exitosa! \ n ");
n-; getchar();
Guardar bandera = 1;
}
Otro
nofind();
getchar();
}
Else if(sel==2) /*Primero, consulta el valor del subíndice del elemento de la matriz donde se encuentra el registro por nombre*/ p>
{
stringinput(findmess, 15, "Ingrese el nombre del empleado existente: ");
p=Locate(tp, n, findmess, " nombre ");
getchar();
si (p!=-1)
{
for(I = p 1 ; i ltn; I ) / *Eliminar este registro, los registros posteriores avanzarán*/
{
strcpy(tp[i-1]). número,tp[i]. número);
strcpy(tp[i-1]). Nombre, tp[i]. Nombre);
tp[i-1]. jbgz=tp[i]. jbgz
tp[i-1]. jj=tp[i]. jj;
tp[i-1]. kk=tp[i]. kk;
tp[i-1]. yfgz=tp[i]. yfgz
tp[i-1]. jbgz=tp[i]. sk;
tp[i-1]. sfgz=tp[i]. sfgz
}
printf(" \ n = = = = = gt; ¡Eliminación exitosa! \ n "
n-;
getchar();
Guardar bandera = 1;
}
Otro
nofind();
getchar();
}
Devuelve n;
}
/*Modificar el registro. Primero consulte el registro según el número de empleado ingresado y luego solicite al usuario que modifique valores distintos del número. Este número no se puede modificar*/
void Modify(ZGGZ tp[], int n)
{
char find mess[20];
int p = 0;
if (n lt=0)
{ system(" cls ");
printf(" \ n = = = = = gt; ¡No hay registro de empleado! \n ");
getchar();
Regresar;
}
System("cls");
printf("Modificar registro de empleado");
Disp(tp, n);
stringinput(findmess, 10 , "Ingrese el número de empleado existente:"); /*Ingrese y verifique el número*/
p=Locate(tp, n, findmess, "num"); el valor del subíndice */
If (p!=-1) /* If P! =-1, lo que indica que se ha encontrado el elemento de la matriz*/
{
printf("Number: s,\n ", tp[p].num); p>
printf("Nombre: s,", tp[p].
Nombre);
stringinput(tp[p]. Nombre, 15, "Ingrese nuevo nombre: "
printf("jbgz: 8.2f,", tp[p]); .jbgz);
tp[p]. jbgz = entrada numérica(" jbgz:");
printf("Jiangjin: 8.2f,", tp[p].jj);
tp[p]. jj=numberinput("Jiangjin:");
printf("koukuan:8.2f,",tp[p].kk);
tp[p]. kk = entrada numérica("kou Kuan:");
tp[n]. yfgz=tp[n]. jbgz tp[n]. jj-tp[n]. kk;
tp[n]. sk=tp[n]. yfgz * 0.12;
tp[n]. sfgz=tp[n]. yfgz-tp[n]. sk;
printf(" \ n = = = = = gt; ¡Modificación exitosa!\n ");
getchar(); , n);
getchar();
Guardar bandera = 1;
}
Otros
{ No encontrar();
getchar();
}
Regresar
}
/* Insertar registro: consulte la posición del elemento de la matriz que se insertará según el número de empleado y luego inserte un nuevo elemento de la matriz después del número.
*/
int Insert(ZGGZ tp[], int n)
{
char ch, num[10], s[10]; s[] guarda el número antes de la posición del punto de inserción, num[] guarda el número del nuevo registro ingresado*/
ZGGZ newinfo
int flag=0, i=0, kkk = 0;
sistema("cls");
Disp(tp, n);
mientras(1)
{ stringinput (s, 10, "Ingrese la posición de inserción después del número:");
flag = 0; I = 0
while(IltN) /*Consulta si; el número existe, flag=1 indica que el número existe*/
{
if(strcmp(tp[i].num, s)== 0){ kkk = I ; bandera = 1; romper; }
i;
}
if(bandera==1)
romper; si el número existe, ingrese un nuevo registro antes de insertar*/
Otro
{ getchar();
printf(" \ n = = = = = gt; El número s no existe, ¿inténtalo de nuevo? (y/n): ", s);
scanf("c ", ampch);
if(ch= =' y'||ch=='Y ')
{Continuar;}
Otro
{ return n;}
}
}
/*La operación de entrada de los siguientes registros nuevos es la misma que Add () */
while(1)
{ stringinput (num, 10, "Ingrese el nuevo número de empleado: ");
I = 0; flag = 0
while(IltN) /*Consulta si; el número existe, flag =1 indica que el número existe*/
{
if(strcmp(tp[i].num, num)== 0){ flag = 1 ; romper; } p>
i;
}
if(flag==1)
{
getchar();
p>
printf(" \ n = = = = = gt; Lo siento, el número s ya existe, ¿inténtalo de nuevo? (y/n): ", num); /p>
scanf(" c ", ampch);
if(ch=='y'||ch=='Y ')
{Continuar;}
Otros
{ return n;}
}
Otros
Descanso;
}
strcpy(newinfo.num, num);/*Copia la cadena num a newinfo.num */
stringinput(newinfo.name, 15, "Nombre:" );
nueva información . jbgz = number input(" jbgz:");/*Ingrese y verifique jbgz*/
newinfo.jj=numberinput("Jiangjin:"); /*Ingrese y verifique Jiangjin*/
nueva información kk = number input(" kou Kuan: "); /*Ingrese y verifique la deducción*/
n
ew info . yfgz = nueva información . jbgz nueva información .jj-nueva información kk;/*calcular yfgz*/
nueva información .sk = nueva información .yfgz * 0.12;/*calcular sk*/
nueva información. sfgz = nueva información. yfgz-nueva información sk;
Guardar bandera = 1; Si es 1, guarde */
for(I = n-1;i gtkkkI-)/*Mover una posición de elemento hacia adelante desde el último elemento de la organización*/
{ strcpy (tp[i 1]). número,tp[i]. num);
strcpy(tp[i 1]. Nombre, tp[i]. Nombre);
tp[i 1]. jbgz=tp[i]. jbgz
tp[i 1]. jj=tp[i]. jj;
tp[i 1]. kk=tp[i]. kk;
tp[i 1]. yfgz=tp[i]. yfgz
tp[i 1]. sk=tp[yo]. sk;
tp[i 1]. sfgz=tp[i]. sfgz
}
strcpy(tp[kkk 1].num,new info.num);/*Insertar un nuevo registro después de la posición del elemento kkk*/
strcpy(tp[kkk 1]. nombre, nueva información . nombre);
tp[kkk 1]. jbgz = nueva información . jbgz;
tp[kkk 1]. jj = newinfo.jj
tp[kkk 1]. kk = nuevainfo.kk
tp[kkk 1]. yfgz = nueva información .yfgz;
tp[kkk 1]. sk = newinfo.sk
tp[kkk 1].
sfgz = nueva información . sfgz;
n;
Disp(tp, n);
printf(" \ n \ n "); >
getchar();
Return n;
}
/*Estadísticas salariales de los empleados en todos los niveles de la empresa*/
void Tongji(ZGGZ tp[], int n)
{
int count10000=0, count5000=0, count2000=0, count0 = 0
int I = 0;
if (n lt=0)
{ system(" cls ");
printf(" \ n = = = = = gt; ¡No es un registro de empleado! \n ");
getchar();
Regresar;
}
Sistema("cls ");
Disp(tp, n
I = 0
mientras(iltn)
{ p>
if(tp[i].sfgz gt= 10000){ cuenta 10000; I = I 1; continuar;}/*salario real> 10000*/
if( tp[i] .sfgz gt= 5000){ cuenta 5000;I = I 1;continuar;}/* 5000 lt;=salario real
if(tp[i].sfgz gt= 2000){ contar 2000;I = I 1; continuar }/* 2000 lt; = salario real
if(tp[i].sfgz lt2000){ contar 0; salario real < 2000 */
}
printf("\n -Tongji results-\ n ");
printf(" sfgz gt; = 10000 : d (ren )\n ", cuenta 10000);
printf(" 5000 lt; = sfgz lt10000: d(cualquiera)\n ", cuenta 5000);
printf (" 2000 lt ;= sfgz lt5000: d (cualquiera)\n ", cuenta 2000
printf (" sfgz lt; 2000: d (cualquiera)\n ", cuenta 0 ); p>
printf("-\ n ");
printf(" \ n \ nPresione cualquier tecla para regresar");
}
/*Utilice el método de clasificación de burbujas para ordenar en orden descendente según el campo de salario real, de mayor a menor*/
void Sort(ZGGZ tp[], int n)
{
int i=0, j=0, bandera = 0;
ZGGZ newinfo
if (n lt=0)
{ system(" cls ");
printf(" \ n = = = = = gt; ¡No es un registro de empleado! \n ");
getchar();
Retorno;
}
Sistema("cls");
Disp(tp,n);/*Mostrar todos los registros antes de ordenar*/
for(I
= 0; i ltn; i )
{
bandera = 0;
for(j = 0; j ltn-1; j )
if((tp[j].sfgz lttp[j 1].sfgz))
{ bandera = 1;
strcpy(newinfo.num, tp[j ].num); /*Usa la variable de estructura newinfo para intercambiar elementos de matriz*/
strcpy(newinfo.name, tp[j].name);
newinfo.jbgz= tp[j]. jbgz
newinfo.jj=tp[j]. jj;
newinfo.kk=tp[j]. kk;
newinfo.yfgz=tp[j]. yfgz
newinfo.sk=tp[j]. sk;
newinfo.sfgz=tp[j]. sfgz
strcpy(tp[j].num, tp[j 1].num);
strcpy(tp[j].nombre, tp[j 1].nombre) ;
tp[j]. jbgz=tp[j 1]. jbgz
tp[j]. jj=tp[j 1]. jj;
tp[j]. kk=tp[j 1]. kk;
tp[j]. yfgz=tp[j 1]. yfgz
tp[j]. sk=tp[j 1]. sk;
tp[j]. sfgz=tp[j 1]. sfgz
strcpy(tp[j 1]. num, nueva información . num);
strcpy(tp[j 1]. nombre, nueva información . nombre
tp[j 1]. jbgz = nueva información . jbgz;
tp[j 1]. jj = nuevainfo.jj
tp[j 1]. kk = newinfo.kk
tp[j 1]. yfgz = nueva información .yfgz;
tp[j 1]. sk = newinfo.sk
tp[j 1]. sfgz = new info . sfgz;
}
if(flag = = 0)break; /*Si flag = 0, significa que no hay intercambio y la clasificación se ha completado. */ p>
}
Disp(tp,n);/*Mostrar todos los registros ordenados*/
Guardar bandera = 1;
printf (" \ n = = = = = gt; ¡Clasificación completada!\n ");
}
/*Guardar los datos.
Si el usuario modifica los datos sin realizar específicamente esta operación, se le pedirá que guarde los datos al salir del sistema*/
void Save(ZGGZ tp[], int n)
{
ARCHIVO * fp
int I = 0;
fp=fopen("c:\\zggz","WB");/ *Método de solo escritura para abrir el archivo binario*/
If(fp==NULL) /*No se puede abrir el archivo*/
{
printf(" \ n = = = = = gt; ¡Error al abrir el archivo! \n ");
getchar();
Regresar;
}
for( I = 0;iltn;i)
{
if(fwrite(amp;TP[I], tamaño de (zggz), 1, FP) == 1)/* Escriba un registro o un elemento de matriz de estructura en el archivo a la vez*/
{
Continuar;
}
Otro
p>{
Romper;
}
}
if (i gt0)
{
getchar();
printf(" \ n \ n = = = = = gt; guardado del archivo completado, el número total de registros guardados es: d\n ", I) ;
getchar();
Guardar bandera = 0;
}
Otros
{ system( " cls ");
printf("¡El enlace actual está vacío, no se guardan registros de empleados! \ n ");
}
fclose(FP); /*Cerrar el archivo*/
}
void main() p>
{
ZGGZ gz[N];/*Definir la estructura ZGGZ*/
ARCHIVO * fp/*Puntero de archivo*/
int select/*Guardar la variable de resultado de la selección*/ p>
char ch/* Guardar (y, Y, N, N)*/
int count = 0 /*El número; de registros (o elementos) en el archivo guardado*/ p>
fp=fopen("C:\\zggz", "a b");
/*Abra el archivo binario c :\zggz agregando, que se puede leer y escribir.
Si el archivo no existe, se creará*/
if(fp==NULL)
{
printf(" \ n = = = = = gt; ¡No se puede abrir el archivo!\n ");
Salir(0);
}
Y (!feof(fp))
{
if(fread( amp; Gz [count], sizeof (zggz), 1, FP) == 1)/*Leer los registros salariales de los empleados uno a la vez desde el file*/
count ;
}
fclose(FP); /*Cerrar el archivo*/
printf(" \ n = = gt; El archivo se abrió correctamente, el número total de registros es: d.\n ", count);
getchar();
menu();
mientras(1 )
{
Sistema("cls");
menú();
printf("\nIngrese su selección (0 ~ 9): "); /*Mostrar información del mensaje*/
scanf("d ", amp select);
if( select==0)
p>
{
If(saveflag==1) /*Si los datos del array se modifican pero no se guardan, el flag es 1 */
{ getchar() ;
printf(" \ n == gt; ¿Guardar el registro modificado en el archivo? (Sí/No):);
scanf("c ", ampch );
if(ch=='y'||ch=='Y ')
Guardar (gz, count);
}
}
p>printf(" \ n = = = gt; ¡Gracias por la utilidad!"); getchar();
Interrupción
}
Cambiar (seleccionar)
{
Caso 1: count=Add(gz, count); /*Agregar registro de salario de empleado*/
Caso 2: count=Del(gz, count); p>
Caso 3: Corán (gz, contar); /*Consultar registro de salario de empleado*/
Caso 4: Modificar (gz, contar /*Modificar registro de salario de empleado); */
Caso 5: Conteo = insert (gz, conteo);/*Insertar registro de salario del empleado*/
Caso 6: Tongji (gz, conteo); /*Estadísticas de registros de salarios de empleados*/
Caso 7: Sort(gz, count) count) break; /* Ordenar registros de salarios de empleados*/
Caso 8: Guardar (gz); , count); /*Guardar registros de salario de los empleados*/
Caso 9: System("cls"); Disp(gz, count); p>
Predeterminado: Error(); getchar(); Break; /*Error de clave, debe ser 0-9*/
}
}
}