Uso del diseño de cursos en lenguaje C: sistema de gestión de salarios de empleados (programación utilizando una matriz de estructura y una lista vinculada respectivamente)
#includelt;stdio.hgt;
#define NUM 100
void input()
;void search() p>
p>
;void search_num();
void dele()
;void dele_name();
void dele_num( )
void modi()
void modi_num()
void salida()
void stat()
;void fun()
void run();
struct emploee /*estructura de datos del empleado*/
{
char no[5];
char nombre[8];
char sexo[3];
int edad
int; salar;
}emp[NUM], newemp;
main()
{int x;
printf(" 1. Ingresar registros de empleados\n");
printf(" 2. Consultar registros de empleados\n");
printf(" 3. Modificar registros de empleados\n"); p>
p>
printf(" 4. Eliminar registros de empleados\n");
printf(" 5. Imprimir registros de empleados\n"); printf(" 6. Investigar situación salarial\n");
printf(" 7. Agregar registro de empleado\n");
printf(" 8. Finalizar uso\n");
printf(" 0. Salga del sistema\n");
printf("\n"); Bienvenido al sistema de gestión de salarios de los empleados ***\n");
printf("Por favor seleccione (0-8):\n");
scanf("d" ,amp;x);
cambiar(x)
{
caso 1: entrada(); : buscar(); romper;
caso 3: modi(); romper
caso 4: borrar(); (); romper;
p>
caso 6: stat(); romper
caso 7: ejecutar(); 8: divertido(); romper;
predeterminado: printf("\n ¡Incorrecto!");
}
}
entrada nula()
{
ARCHIVO *fp; >
int n, i;
if ((fp=fopen("emp","wb"))==NULL)
{
imprimirf
("No se puede crear el archivo emp\n");
exit(1);
}
printf("Ingrese el número de empleados:");
p>
scanf("d",amp; n);
printf("Formato de entrada: número de empleado, nombre, sexo, edad, salariolt; Entergt;\ n");
for(i=0;ilt;n;i) /* Bucle para obtener n registros de empleados*/
{
printf( "El désimo empleado:",i 1 );
scanf("sssdd", emp[i].no, emp[i].name, emp[i].sex,
amp; emp[i]. edad, amp; emp[i].
}
for(i=0; ilt; n; i) /* Escriba n registros de empleados en el archivo* /
fwrite(amp; emp[i], sizeof(struct emploee), 1, fp
fclose(fp); p>
} p>
/************************Módulo de estadísticas********** ************** *****/
void stat( )
{
ARCHIVO *fp;
int n, num;
p>if((fp=fopen("emp","rb"))==NULL)
{
printf("No se puede abrir el archivo emp\n" );
exit(1);
}
printf("Salario: ");
scanf("d" , amp; num);
printf("Número de registro número de empleado nombre género edad salario\n");
for(n=0; fread(amp; emp, sizeof( struct emploee), 1, fp); n )
if (emp[n].salargt; =num)
printf("6d6s9s4s5d6d\n", n 1, emp[ n].no, emp[n].nombre, emp[n].sexo,
emp[n].edad, emp[ n].salar);
fclose( fp);
}
/**************** ****Eliminar módulo********* **********/
void dele()
{
int x;
while(1 )
{
printf("\n\n\t\tEliminar submenú\n"); p>
printf("\t\t* ********\n");
printf("\t\t 1. Eliminar registros por número de empleado\n" );
printf("\ t\t 0. Regresar al menú principal\n");
printf("\t\t******** ****\n");
printf( "\t Seleccione (0-1):");
scanf("d",amp;x);
cambiar(x)
{
caso 1: dele_num(); romper;
predeterminado: printf("\nIncorrecto!"); ;
}
}
void dele_num()
{
ARCHIVO *fp;
int i, j, n;
char num[5]
if((fp=fopen("emp", "rb"))==NULL )
{
printf("No se puede abrir el archivo emp\n");
exit(1); p>
printf("Antes de la eliminación:\n");
printf("Número de registro número de empleado nombre sexo edad salario\n"); 0; fread(amp; emp[n], sizeof(struct empleado), 1, fp n )
printf("6s6s9s4s5d6d\n", n 1, emp[n].no, emp); [n].name, emp[n].sex,
emp[n].age, emp[n].salar /*n es el número de registros en el archivo emp*/<); /p>
printf("Número de empleado que se eliminará: ");
scanf("s", num
for(i=0;(strcmp( emp[i ].no,num)!=0amp;amp;ilt;n);i )
if(igt;=n)
{
printf( "\tEmpleados sin número de empleado\n", num);
exit(2);
}
fclose(fp);
p>
fp=fopen("emp", "w ");
if(n==1) /*Se ha eliminado un registro*/
{
fclose(fp);
salir(3);
}
for(j=0; jlt;i;j)
fwrite(amp; emp[j], sizeof(struct emploee), 1, fp
for(j=i 1; jlt; n); ; j)
fwrite(amp; emp[j], sizeof(struct emploee), 1, fp
printf("Después de la eliminación:\n"); p>
fseek (fp, 0, SEEK_SET);
printf("Número de registro número de empleado nombre sexo edad salario\n"); fread(amp; emp[ i], sizeof(struct empleado), 1, fp);
printf("6s6s9s4s5d6d\n", i 1, emp[i].no, emp[i] ].nombre, emp[ i].sexo,
emp[i].edad, emp[i].salar
fclose(fp); p>}
/************
**********Modificar módulo************************/
void modi() p>
{
int x;
mientras(1)
{
printf("\n\n\ t\tmodificador Menú\n");
printf("\t\t************************\n" );
printf("\t\t1. Modificar por número de empleado\n");
printf("\t\t0. Volver al menú principal\n");
printf("\t\t************************\n");
printf("\tPor favor seleccione (0- 1): ");
scanf("d",amp;x);
switch(x)
{
caso 1: modi_num(); break;
predeterminado: printf("\nError de entrada!"); p>if(x==0 )break;
}
}
void modi_num()
{
ARCHIVO *fp;
int i, j;
char num[5];
if((fp=fopen("emp", "rb "))==NULL )
{
printf("No se puede abrir el archivo emp\n");
exit(1); p>
} p>
printf("Número de empleado a modificar: ");
scanf("s", num
for( i=0; fread(amp; emp[i], sizeof(struct emploee), 1, fp )
if(!strcmp(emp[i].no, num))break;
if (feof(fp))
{
printf("\tEmpleado sin número de empleado\n", num);
exit(2) ;
}
printf("Número de registro número de empleado nombre sexo edad salario\n"); n", i 1, emp[i].no, emp[i].nombre, emp[i].sexo,
emp[i].edad, emp[i].salar);
printf("Formato de entrada: número de empleado nombre género edad salariolt; Entergt; \n");
printf("registro dth: ", i 1); p> scanf ("sssdd", newemp.no, newemp.name, newemp.sex, amp; newemp.age,
amp; newemp.salar); /*Obtener nuevos registros de empleados*/ p>
fseek(fp, -(long)sizeof(struct emploee), SEEK_CUR);
/*El puntero del archivo apunta al comienzo del registro modificado*/
fwrite(amp; newemp,sizeof(struct empleado),1,fp
); /*Sobrescribir el registro actual con newemp*/
printf("Después de la modificación:\n");
fseek(fp, 0, SEEK_SET); modificación Datos del archivo*/
printf("Número de registro número de empleado nombre género edad salario\n"
for(i=0; fread(amp; emp[i], sizeof(struct emploee), 1, fp)!=0; i )
printf("6d6s9s4s5d6d\n", i 1, emp[i].no, emp[i].nombre, emp[ i].sexo,
emp[i].edad, emp[i].salar
fclose(fp); >
/******************************Módulo de consulta************* ***** *****/
búsqueda nula( )
{
int x;
while(1 )
{
printf("\n\n\t\tComprobar submenú\n");
printf("\t\t*** *** ****************\n");
printf("\t\t 1. Consulta por número de empleado\n");
printf("\t\t 0.Volver al menú principal\n");
printf("\t\t************ ****** **\n");
printf("\tPor favor seleccione (0-1):");
scanf("d",amp; x);
p>switch(x)
{
caso 1: search_num(); ("\n ¡Mal!" );
}
if(x==0) descanso;
}
}
void search_num()
{
ARCHIVO *fp
int i
char num; /p>
if ((fp=fopen("emp","rb"))==NULL)
{
printf("No se puede abrir el archivo emp\n ");
exit(1);
}
printf("Número de empleado a consultar: ");
scanf ("s", num) ;
for(i=0;fread(amp;emp[i],sizeof(struct emploee),1,fp);i)
if(!strcmp(emp[ i].no, num)) break;
if(feof(fp))
{
printf("\ tNo se encontró dicha persona\n ");
exit(2);
}
printf("Número de registro número de empleado nombre sexo edad salario\n"
printf("6d6s9s4s5d6d\n",i 1,emp[i].no,emp[i].nombre,emp[i].sexo,
);emp[i].edad, emp[i].salar
fclose(fp
}
/****); ***************Módulo de salida************************/
salida nula( )
{int i;
ARCHIVO *fp;
if((fp=fopen("emp", "r"))==NULL) p>
{printf("No se puede abrir el archivo emp\n");
exit(0);
}
printf(" Número de registro Número de empleado, nombre, sexo, edad, salario\n");
for(i=0; fread(amp; emp[i], sizeof(struct emploee), 1, fp)! =0; i )
{
printf("6d6s9s4s5d6d\n",i 1,emp[i].no,emp[i].nombre,emp[i]. sexo,
emp[i].edad, emp[i].salar
}
fclose(fp); >}
/******************Módulo adicional********************* ****/
void run()
{
ARCHIVO *fp
int n, i, j; /p>
if((fp= fopen("emp","ab "))==NULL)
{printf("No se puede abrir el archivo emp\n");
exit(0);
}
printf("Número de empleados a agregar: ");
scanf("d", amp ; n);
for (i=0; ilt; n; i)
{ printf("Formato de entrada: número de empleado, nombre, sexo, edad, salariolt; entergt; \n");
printf(" Registro de empleado: ");
scanf("sssdd", newemp.no, newemp.name, newemp.sex, amp; newemp. age,
amp; newemp.salar) ;
/*Obtener un registro de empleado*/
fwrite(amp; newemp, sizeof(struct emploee), 1, fp);
/*Se escribirá el registro del empleado en el archivo */
}
fclose(fp); p>}
/****** *************Módulo de visualización******************/
diversión vacía()
{printf("\t\t*************************** ***************** \n");
printf("\t\t* *\n");
imprimirf(
"\t\t* *\n");
printf("\t\t* ¡Gracias por usar! *\n");
printf("\t \t * *\n");
printf("\t\t* *\n");
printf("\t\t****** ** **********************************\n");
}