formato de nomina
alguien por favor ayudeme nesecito hacer un formato de nomina con lineas y demas no se como realizarlo
gracias por su colaboracion
att. Camila
gracias por su colaboracion
att. Camila
este archivo solo copia lo y lo pasas a el bloc de notas lo guardas como txt despues desde el programa de turbo c++ lo abres y lo guardas como cpp espero te sirva casi todas las funciones van explicadas si tienes alguna duda contatame
ojala te sirva el codigo se despide victor amnuel reyes de jesus orilla del monte, veracruz mexico hay si puedes mandarme algun codigo me lo mandas
/****************************************************************************
ejemplo de programa en el cual se manejan archivos
Programa de una nomina sencilla
Autor: Victor Manuel Reyes de Jesus O. del monte
fecha de creacion 6 de marzo de 2002
Aplicacion:
Manejo de archivos de disco en modo acceso directo
Empleo y analisis de las principales funciones con archivos de datos:
- Altas
- Bajas
- Consultas(listado, busqueda lineal)
- Modificaciones
- Ordenacion de registros(inmersion)
- reportes (hacia impresora)
****************************************************************************/
//Inclusion de librerias necesarias para el programa
#include<io.h>
#include<fcntl.h>
#include<sysstat.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#include<errno.h>
//en esta parte del programa aremos la declaracion de la estructura (registro)
//y las constantes elementales dentro de nuestro programa asi como
//la variable para el control de archivo
const lonemp=31;
const lonfec=11;
const lonrfc=16;
struct reg_nomina
{ char empleado[lonemp];
char edad;
char fecha[lonfec];
char rfc[lonrfc];
char puesto[lonrfc];
float sueldo,compen,otras_per,prestamo,otras_ded,sal_normal,sal_extra,tot_percep,ded_imss,ded_ispt,ded_sindical,tot_deduc,neto,efectivo,vales;
char dias, extras;
} var_nomina;
/*definicionde funciones propias del usuario necesarias para el programa*/
void mensaje(char x,char y,char *s)
{ gotoxy(x,y);
cputs(s);
}
void pausa(char x,char y, char *s)
{ gotoxy(x,y);
textattr(9 + ((10) << 6));
cputs(s);
getch();
}
void color (int let, int fon)
{ textcolor(let);
textbackground(fon);
}
void cuadros (char x1,char y1,char x2,char y2,char s[9])
{ char c;
gotoxy(x1,y1);putch(s[0]);
gotoxy(x2,y1);putch(s[2]);
gotoxy(x2,y2);putch(s[4]);
gotoxy(x1,y2);putch(s[6]);
for (c=x1+1;c<x2;c++)
{ gotoxy(c,y1);
putch(s[1]);
gotoxy(c,y2);
putch(s[5]);
}
for (c=y1+1;c<y2;c++)
{ gotoxy(x1,c);
putch(s[7]);
gotoxy(x2,c);
putch(s[3]);
}
}
//funcion que permite hacer preguntas en las cuales el usuario puede
//responder un SI o un NO y devuelve la respuesta que dio el usuario
char sino(char x,char y,char *s)
{ char ch;
gotoxy(x,y);
cprintf("%s (S/N):",s);
ch='A';
while (ch!='S' && ch!='N')
{ gotoxy(wherex(),y);
ch=toupper(getch());
}
return ch;
}
//abre el archivo de disco en modo readwrite y lo prepara para recibir datos
void abrir(int *archivo)
{ *archivo=open("nomina.eje",O_CREAT | O_BINARY | O_RDWR,S_IREAD | S_IWRITE);
if (*archivo<1)
{ printf("Error al abrir el archivon");
exit(0);
}
}
//cierra el archivo de disco
void cerrar (int archivo)
{ close(archivo);
}
//limpia el archivo eliminando todos los registros del archivo
void limpiar (int archivo)
{ chsize(archivo,0);
}
/*agrega un nuevo registro al archivo de disco, segun los datos almacenados
previamente en la variable de registro var_nomina*/
void agregar(int archivo)
{ lseek(archivo,0,SEEK_END);
write(archivo,&var_nomina,sizeof(reg_nomina));
}
/*busca un registro en el archivo, la busqueda puede ser lineal por
empleado, si el registro se encuentra devuelve la posicion y coloca
los datos en la variable de registro var_nomina, si no devuelve -1*/
int buscar(int archivo,char emp[lonemp])
{ lseek(archivo,0,SEEK_SET);
strcpy(var_nomina.empleado,"");
while(!eof(archivo) && strcmp(var_nomina.empleado,emp)!=0)
read(archivo,&var_nomina,sizeof(reg_nomina));
if(strcmp(var_nomina.empleado,emp)==0)
return (tell(archivo)/sizeof(reg_nomina))-1;
else
return -1;
}
//lista los datos mas importantes de todos los registros del archivo de disco
void listar(int archivo)
{ char renglon;
clrscr();
printf("Nombre del empleado Edad R.F.C. Puesto Sueldon");
lseek(archivo,0,SEEK_SET);
renglon=2;
while(!eof(archivo))
{ read(archivo,&var_nomina,sizeof(reg_nomina));
printf("%-20s %2d %-8s %-12s %-10s %9.2fn",var_nomina.empleado,var_nomina.edad, var_nomina.fecha, var_nomina.rfc, var_nomina.puesto,var_nomina.sueldo);
renglon++;
if (renglon==23)
{ pausa(1,25,"Pulse una tecla para continuar con el listado.....");
clrscr();
printf("Nombre del empleado Edad Ingreso R.F.C. Puesto Sueldon");
}
}
}
//elimina un registro del archivo de disco, segun la posicion que se indique
void eliminar(int archivo,int nreg)
{ int c,totreg;
lseek(archivo,0,SEEK_END);
totreg=tell(archivo)/sizeof(reg_nomina);//obtiene el total de registros en discos
c=nreg+1;
while (c<totreg)
{ lseek(archivo,c*sizeof(reg_nomina),SEEK_SET);
read(archivo,&var_nomina,sizeof(reg_nomina));
lseek(archivo,(c-1)*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
c++;
}
chsize(archivo,(totreg-1)*sizeof(reg_nomina));
}
/*regrava un registro del archivo de disco, segun el numero que se indique
y los datos que se encuentren en la variable de registro var_nomina*/
void regrabar(int archivo, int nreg)
{ lseek(archivo,nreg*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
}
//calcula la nomina segun los datos que existan en el archivo de disco
void calcular(int archivo)
{ int nb=-sizeof(reg_nomina);
lseek(archivo,0,SEEK_SET);
while(!eof(archivo))
{ read(archivo,&var_nomina,sizeof(reg_nomina));
var_nomina.sal_normal=var_nomina.sueldo*var_nomina.dias;
var_nomina.sal_extra=var_nomina.sueldo/8*2*var_nomina.extras;
var_nomina.tot_percep=var_nomina.sal_normal+var_nomina.sal_extra+var_nomina.compen+var_nomina.otras_per;
var_nomina.ded_imss=var_nomina.tot_percep*.05;
var_nomina.ded_ispt=var_nomina.tot_percep*.035;
var_nomina.ded_sindical=var_nomina.tot_percep*.025;
var_nomina.tot_deduc=var_nomina.ded_imss+var_nomina.ded_ispt+var_nomina.ded_sindical+var_nomina.prestamo+var_nomina.otras_ded;
var_nomina.neto=var_nomina.tot_percep-var_nomina.tot_deduc;
var_nomina.efectivo=var_nomina.neto*.75;
var_nomina.vales=var_nomina.neto*.25;
lseek(archivo,nb,SEEK_CUR);
write(archivo,&var_nomina,sizeof(reg_nomina));
}
}
//muestra la nomina actual segun los calculos y datos ingresados
void mostrar_nomina(int archivo)
{ char renglon;
clrscr();
printf("Nobre del empleado R.F.C. Tot. Per. Tot. Ded Neto Per. Efectivo Valesn");
lseek(archivo,0,SEEK_SET);
renglon=2;
while (!eof(archivo))
{ read(archivo,&var_nomina,sizeof(reg_nomina));
printf("%-20s %-12s %9.2f %9.2f %9.2f %9.2f %9.2fn",var_nomina.empleado,var_nomina.rfc,var_nomina.tot_percep,var_nomina.tot_deduc,var_nomina.neto,var_nomina.efectivo,var_nomina.vales);
renglon++;
if (renglon == 23)
{ pausa(1,25,"Pulse una tecla para continuar con la nomina...");
clrscr();
printf("Nobre del empleado R.F.C. Tot. Per. Tot. Ded Neto Per. Efectivo Valesn");
}
}
}
//oredena los registros por medio del campo empleado los ordena
//alfabeticamente, usando el metodo de inmersion
void ordenar_empleado(int archivo)
{ int c,i,totreg;
struct reg_nomina reg;
totreg=(filelength(archivo)/sizeof(reg_nomina));
c=1;
while(c<totreg)
{ i=c;
lseek(archivo,(c-1)*sizeof(reg_nomina),SEEK_SET);
read (archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
while (i>0 && strcmp(var_nomina.empleado,reg.empleado)<0)
{ lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
write(archivo,®,sizeof(reg_nomina));
i--;
lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
read(archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
}
c++;
}
}
//ordena los registros por medio del campo neto utilizando el metodo de
// inmersion
void ordenar_neto(int archivo)
{ int c,i,totreg;
struct reg_nomina reg;
totreg=(filelength(archivo)/sizeof(reg_nomina));//obtine el total de registros en el, archivo
c=1;
while(c<totreg)
{ i=c;
lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
read(archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
while (i>0 && var_nomina.neto,reg.neto)
{ lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
write(archivo,®,sizeof(reg_nomina));
i--;
lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
read(archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
}
c++;
}
}
//*********AHORA EL PROGRAMA PRINCIPAL*************//
void main(void)
{ char emp[lonemp];
char op;
int pos;
int arc_nomina;
abrir(&arc_nomina);
do
{ textmode(BW80);
fflush(stdin);
color(14,0); clrscr();
cuadros(1,1,80,24,"ÉÍ»²¼ÍȲ");
cuadros(15,2,65,5,"Ú-¿³Ù-À³");
mensaje(19,3,"*****Ejemplo de programa de nomina*****");
mensaje(33,4,"MENU PRINCIPAL");
mensaje(5,7,"Elija una de las siguientes opciones:");
color(10,0);
mensaje(10,9,"A.- Limpiar el archivo de disco");
mensaje(10,10,"B.- Agregar un nuevo empleado");
mensaje(10,11,"C.- Buscar un registro de empleado por nombre");
mensaje(10,12,"D.- Listar los trabajadores existentes");
mensaje(10,13,"E.- Eliminar un registro del arreglo");
mensaje(10,14,"F.- Modificar un registro del arreglo");
mensaje(10,15,"G.- Calcular la nomina actual");
mensaje(10,16,"H.- Ordenar la nomina por nombre");
mensaje(10,17,"I.- Ordenar la nomina por el neto a percebir");
mensaje(10,18,"J.- Mostrar los datos de la nomina actual");
mensaje(10,19,"K.- Salir del programa");
mensaje(5,21,"Elija su opcion...");
op=toupper(getche());
color(15,4);
clrscr();
cuadros(1,1,80,24,"Ú-¿³Ù-À³");
switch(op)
{ case 'A':mensaje(25,2,"*** Limpiar el archivo ***");
op=sino(10,5,"Seguro de que quiere limpiar el archivo");
if (op == 'S')
{ mensaje(25,20,"Limpiando el archivo...");
limpiar(arc_nomina);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'B':mensaje(25,2,"*** agregar nuevo registro ***");
mensaje(5,5,"Nombre del empleado.....");
gets(var_nomina.empleado);
mensaje(5,6,"Fecha de ingreso........");
gets(var_nomina.fecha);
mensaje(5,7,"R.F.C...................");
gets(var_nomina.rfc);
mensaje(5,8,"Puesto a ocupar.........");
gets(var_nomina.puesto);
mensaje(5,9,"Edad....................");
scanf("%d",&var_nomina.edad);
mensaje(5,10,"Sueldo diario..........");
scanf("%f",&var_nomina.sueldo);
mensaje(5,11,"Dias trabajados........");
scanf("%d",&var_nomina.dias);
mensaje(5,12,"Horas extras...........");
scanf("%d",&var_nomina.extras);
mensaje(5,13,"Compensacion...........");
scanf("%f",&var_nomina.compen);
mensaje(5,14,"Otras percepciones.....");
scanf("%f",&var_nomina.otras_per);
mensaje(5,15,"Prestamo...............");
scanf("%f",&var_nomina.prestamo);
mensaje(5,16,"Otras deducciones......");
scanf("%f",&var_nomina.otras_ded);
gotoxy(25,20);
cprintf("Agregando el empleado %s",var_nomina.empleado);
agregar(arc_nomina);
pausa(1,25," Pulse una tecla para continuar...");
break;
case 'C':mensaje(25,2,"*** Buscar en el registro por nombre");
mensaje(10,5,"Escriba el empleado a buscar:");
gets(emp);
pos=buscar(arc_nomina,emp);
if (pos==-1)
{ gotoxy(25,20);
cprintf("el nombre %s no se encuentra en el archivo",emp);
}
else
{ gotoxy(25,20);
pos=pos+1;
cprintf("El nombre %s se encuentra en el registro %d",emp,pos);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'D':clrscr();
listar(arc_nomina);
pausa(1,25,"Pulsa una tecla para seguir...");
break;
case'E':mensaje(25,2,"*** Eliminar registro ***");
mensaje(10,5,"Escriba el empleado a eliminar:");
gets(emp);
pos=buscar(arc_nomina,emp);
if (pos==-1)
{ gotoxy(25,20);
cprintf("El nombre %s no existe en el archivo",emp);
}
else
{ eliminar(arc_nomina,pos);
gotoxy(25,20);
cprintf("El nombre %s ha sido eliminado con exito",emp);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'F':mensaje(25,2,"*** Modificar registro ***");
mensaje(10,5,"Escriba el empleado a modificar:");
gets(emp);
pos=buscar(arc_nomina,emp);
if (pos==-1)
{ gotoxy(25,20);
cprintf("el nombre %s no existe en el arreglo", emp);
}
else
{
mensaje(5,7,"Nombre del empleado.....");
gets(var_nomina.empleado);
mensaje(5,8,"Fecha de ingreso........");
gets(var_nomina.fecha);
mensaje(5,9,"R.F.C...................");
gets(var_nomina.rfc);
mensaje(5,10,"Puesto a ocupar.........");
gets(var_nomina.puesto);
mensaje(5,11,"Edad....................");
scanf("%d",&var_nomina.edad);
mensaje(5,12,"Sueldo diario..........");
scanf("%f",&var_nomina.sueldo);
mensaje(5,13,"Dias trabajados.......");
scanf("%d",&var_nomina.dias);
mensaje(5,14,"Horas extras..........");
scanf("%d",&var_nomina.extras);
mensaje(5,15,"Compensacion..........");
scanf("%f",&var_nomina.compen);
mensaje(5,16,"Otras percepciones....");
scanf("%f",&var_nomina.otras_per);
mensaje(5,17,"Prestamo..............");
scanf("%f",&var_nomina.prestamo);
mensaje(5,18,"Otras deducciones.....");
scanf("%f",&var_nomina.otras_ded);
regrabar(arc_nomina,pos);
gotoxy(25,22);
cprintf("El nombre de la posicion %d ha sido modificado",pos,var_nomina.empleado);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'G':mensaje(25,2,"*** Calcular la nomina ***");
calcular(arc_nomina);
pausa(1,25,"Pulse una tecla para continuar...");
break;
case'H':mensaje(25,2,"*** Ordenando por empleado ***");
ordenar_empleado(arc_nomina);
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'I':mensaje(25,2,"*** Ordenando por neto a percivir ***");
ordenar_neto(arc_nomina);
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'J':clrscr();
mostrar_nomina(arc_nomina);
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'K':cerrar(arc_nomina);
color(7,0);
clrscr();
exit(0);
break;
default: mensaje(25,20,"!Error, opcion incorrecta");
pausa(1,25,"Pulse una tecla para seguir...");
break;
}
}
while(1);
}
ojala te sirva el codigo se despide victor amnuel reyes de jesus orilla del monte, veracruz mexico hay si puedes mandarme algun codigo me lo mandas
/****************************************************************************
ejemplo de programa en el cual se manejan archivos
Programa de una nomina sencilla
Autor: Victor Manuel Reyes de Jesus O. del monte
fecha de creacion 6 de marzo de 2002
Aplicacion:
Manejo de archivos de disco en modo acceso directo
Empleo y analisis de las principales funciones con archivos de datos:
- Altas
- Bajas
- Consultas(listado, busqueda lineal)
- Modificaciones
- Ordenacion de registros(inmersion)
- reportes (hacia impresora)
****************************************************************************/
//Inclusion de librerias necesarias para el programa
#include<io.h>
#include<fcntl.h>
#include<sysstat.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#include<errno.h>
//en esta parte del programa aremos la declaracion de la estructura (registro)
//y las constantes elementales dentro de nuestro programa asi como
//la variable para el control de archivo
const lonemp=31;
const lonfec=11;
const lonrfc=16;
struct reg_nomina
{ char empleado[lonemp];
char edad;
char fecha[lonfec];
char rfc[lonrfc];
char puesto[lonrfc];
float sueldo,compen,otras_per,prestamo,otras_ded,sal_normal,sal_extra,tot_percep,ded_imss,ded_ispt,ded_sindical,tot_deduc,neto,efectivo,vales;
char dias, extras;
} var_nomina;
/*definicionde funciones propias del usuario necesarias para el programa*/
void mensaje(char x,char y,char *s)
{ gotoxy(x,y);
cputs(s);
}
void pausa(char x,char y, char *s)
{ gotoxy(x,y);
textattr(9 + ((10) << 6));
cputs(s);
getch();
}
void color (int let, int fon)
{ textcolor(let);
textbackground(fon);
}
void cuadros (char x1,char y1,char x2,char y2,char s[9])
{ char c;
gotoxy(x1,y1);putch(s[0]);
gotoxy(x2,y1);putch(s[2]);
gotoxy(x2,y2);putch(s[4]);
gotoxy(x1,y2);putch(s[6]);
for (c=x1+1;c<x2;c++)
{ gotoxy(c,y1);
putch(s[1]);
gotoxy(c,y2);
putch(s[5]);
}
for (c=y1+1;c<y2;c++)
{ gotoxy(x1,c);
putch(s[7]);
gotoxy(x2,c);
putch(s[3]);
}
}
//funcion que permite hacer preguntas en las cuales el usuario puede
//responder un SI o un NO y devuelve la respuesta que dio el usuario
char sino(char x,char y,char *s)
{ char ch;
gotoxy(x,y);
cprintf("%s (S/N):",s);
ch='A';
while (ch!='S' && ch!='N')
{ gotoxy(wherex(),y);
ch=toupper(getch());
}
return ch;
}
//abre el archivo de disco en modo readwrite y lo prepara para recibir datos
void abrir(int *archivo)
{ *archivo=open("nomina.eje",O_CREAT | O_BINARY | O_RDWR,S_IREAD | S_IWRITE);
if (*archivo<1)
{ printf("Error al abrir el archivon");
exit(0);
}
}
//cierra el archivo de disco
void cerrar (int archivo)
{ close(archivo);
}
//limpia el archivo eliminando todos los registros del archivo
void limpiar (int archivo)
{ chsize(archivo,0);
}
/*agrega un nuevo registro al archivo de disco, segun los datos almacenados
previamente en la variable de registro var_nomina*/
void agregar(int archivo)
{ lseek(archivo,0,SEEK_END);
write(archivo,&var_nomina,sizeof(reg_nomina));
}
/*busca un registro en el archivo, la busqueda puede ser lineal por
empleado, si el registro se encuentra devuelve la posicion y coloca
los datos en la variable de registro var_nomina, si no devuelve -1*/
int buscar(int archivo,char emp[lonemp])
{ lseek(archivo,0,SEEK_SET);
strcpy(var_nomina.empleado,"");
while(!eof(archivo) && strcmp(var_nomina.empleado,emp)!=0)
read(archivo,&var_nomina,sizeof(reg_nomina));
if(strcmp(var_nomina.empleado,emp)==0)
return (tell(archivo)/sizeof(reg_nomina))-1;
else
return -1;
}
//lista los datos mas importantes de todos los registros del archivo de disco
void listar(int archivo)
{ char renglon;
clrscr();
printf("Nombre del empleado Edad R.F.C. Puesto Sueldon");
lseek(archivo,0,SEEK_SET);
renglon=2;
while(!eof(archivo))
{ read(archivo,&var_nomina,sizeof(reg_nomina));
printf("%-20s %2d %-8s %-12s %-10s %9.2fn",var_nomina.empleado,var_nomina.edad, var_nomina.fecha, var_nomina.rfc, var_nomina.puesto,var_nomina.sueldo);
renglon++;
if (renglon==23)
{ pausa(1,25,"Pulse una tecla para continuar con el listado.....");
clrscr();
printf("Nombre del empleado Edad Ingreso R.F.C. Puesto Sueldon");
}
}
}
//elimina un registro del archivo de disco, segun la posicion que se indique
void eliminar(int archivo,int nreg)
{ int c,totreg;
lseek(archivo,0,SEEK_END);
totreg=tell(archivo)/sizeof(reg_nomina);//obtiene el total de registros en discos
c=nreg+1;
while (c<totreg)
{ lseek(archivo,c*sizeof(reg_nomina),SEEK_SET);
read(archivo,&var_nomina,sizeof(reg_nomina));
lseek(archivo,(c-1)*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
c++;
}
chsize(archivo,(totreg-1)*sizeof(reg_nomina));
}
/*regrava un registro del archivo de disco, segun el numero que se indique
y los datos que se encuentren en la variable de registro var_nomina*/
void regrabar(int archivo, int nreg)
{ lseek(archivo,nreg*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
}
//calcula la nomina segun los datos que existan en el archivo de disco
void calcular(int archivo)
{ int nb=-sizeof(reg_nomina);
lseek(archivo,0,SEEK_SET);
while(!eof(archivo))
{ read(archivo,&var_nomina,sizeof(reg_nomina));
var_nomina.sal_normal=var_nomina.sueldo*var_nomina.dias;
var_nomina.sal_extra=var_nomina.sueldo/8*2*var_nomina.extras;
var_nomina.tot_percep=var_nomina.sal_normal+var_nomina.sal_extra+var_nomina.compen+var_nomina.otras_per;
var_nomina.ded_imss=var_nomina.tot_percep*.05;
var_nomina.ded_ispt=var_nomina.tot_percep*.035;
var_nomina.ded_sindical=var_nomina.tot_percep*.025;
var_nomina.tot_deduc=var_nomina.ded_imss+var_nomina.ded_ispt+var_nomina.ded_sindical+var_nomina.prestamo+var_nomina.otras_ded;
var_nomina.neto=var_nomina.tot_percep-var_nomina.tot_deduc;
var_nomina.efectivo=var_nomina.neto*.75;
var_nomina.vales=var_nomina.neto*.25;
lseek(archivo,nb,SEEK_CUR);
write(archivo,&var_nomina,sizeof(reg_nomina));
}
}
//muestra la nomina actual segun los calculos y datos ingresados
void mostrar_nomina(int archivo)
{ char renglon;
clrscr();
printf("Nobre del empleado R.F.C. Tot. Per. Tot. Ded Neto Per. Efectivo Valesn");
lseek(archivo,0,SEEK_SET);
renglon=2;
while (!eof(archivo))
{ read(archivo,&var_nomina,sizeof(reg_nomina));
printf("%-20s %-12s %9.2f %9.2f %9.2f %9.2f %9.2fn",var_nomina.empleado,var_nomina.rfc,var_nomina.tot_percep,var_nomina.tot_deduc,var_nomina.neto,var_nomina.efectivo,var_nomina.vales);
renglon++;
if (renglon == 23)
{ pausa(1,25,"Pulse una tecla para continuar con la nomina...");
clrscr();
printf("Nobre del empleado R.F.C. Tot. Per. Tot. Ded Neto Per. Efectivo Valesn");
}
}
}
//oredena los registros por medio del campo empleado los ordena
//alfabeticamente, usando el metodo de inmersion
void ordenar_empleado(int archivo)
{ int c,i,totreg;
struct reg_nomina reg;
totreg=(filelength(archivo)/sizeof(reg_nomina));
c=1;
while(c<totreg)
{ i=c;
lseek(archivo,(c-1)*sizeof(reg_nomina),SEEK_SET);
read (archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
while (i>0 && strcmp(var_nomina.empleado,reg.empleado)<0)
{ lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
write(archivo,®,sizeof(reg_nomina));
i--;
lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
read(archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
}
c++;
}
}
//ordena los registros por medio del campo neto utilizando el metodo de
// inmersion
void ordenar_neto(int archivo)
{ int c,i,totreg;
struct reg_nomina reg;
totreg=(filelength(archivo)/sizeof(reg_nomina));//obtine el total de registros en el, archivo
c=1;
while(c<totreg)
{ i=c;
lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
read(archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
while (i>0 && var_nomina.neto,reg.neto)
{ lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
write(archivo,&var_nomina,sizeof(reg_nomina));
write(archivo,®,sizeof(reg_nomina));
i--;
lseek(archivo,(i-1)*sizeof(reg_nomina),SEEK_SET);
read(archivo,®,sizeof(reg_nomina));
read(archivo,&var_nomina,sizeof(reg_nomina));
}
c++;
}
}
//*********AHORA EL PROGRAMA PRINCIPAL*************//
void main(void)
{ char emp[lonemp];
char op;
int pos;
int arc_nomina;
abrir(&arc_nomina);
do
{ textmode(BW80);
fflush(stdin);
color(14,0); clrscr();
cuadros(1,1,80,24,"ÉÍ»²¼ÍȲ");
cuadros(15,2,65,5,"Ú-¿³Ù-À³");
mensaje(19,3,"*****Ejemplo de programa de nomina*****");
mensaje(33,4,"MENU PRINCIPAL");
mensaje(5,7,"Elija una de las siguientes opciones:");
color(10,0);
mensaje(10,9,"A.- Limpiar el archivo de disco");
mensaje(10,10,"B.- Agregar un nuevo empleado");
mensaje(10,11,"C.- Buscar un registro de empleado por nombre");
mensaje(10,12,"D.- Listar los trabajadores existentes");
mensaje(10,13,"E.- Eliminar un registro del arreglo");
mensaje(10,14,"F.- Modificar un registro del arreglo");
mensaje(10,15,"G.- Calcular la nomina actual");
mensaje(10,16,"H.- Ordenar la nomina por nombre");
mensaje(10,17,"I.- Ordenar la nomina por el neto a percebir");
mensaje(10,18,"J.- Mostrar los datos de la nomina actual");
mensaje(10,19,"K.- Salir del programa");
mensaje(5,21,"Elija su opcion...");
op=toupper(getche());
color(15,4);
clrscr();
cuadros(1,1,80,24,"Ú-¿³Ù-À³");
switch(op)
{ case 'A':mensaje(25,2,"*** Limpiar el archivo ***");
op=sino(10,5,"Seguro de que quiere limpiar el archivo");
if (op == 'S')
{ mensaje(25,20,"Limpiando el archivo...");
limpiar(arc_nomina);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'B':mensaje(25,2,"*** agregar nuevo registro ***");
mensaje(5,5,"Nombre del empleado.....");
gets(var_nomina.empleado);
mensaje(5,6,"Fecha de ingreso........");
gets(var_nomina.fecha);
mensaje(5,7,"R.F.C...................");
gets(var_nomina.rfc);
mensaje(5,8,"Puesto a ocupar.........");
gets(var_nomina.puesto);
mensaje(5,9,"Edad....................");
scanf("%d",&var_nomina.edad);
mensaje(5,10,"Sueldo diario..........");
scanf("%f",&var_nomina.sueldo);
mensaje(5,11,"Dias trabajados........");
scanf("%d",&var_nomina.dias);
mensaje(5,12,"Horas extras...........");
scanf("%d",&var_nomina.extras);
mensaje(5,13,"Compensacion...........");
scanf("%f",&var_nomina.compen);
mensaje(5,14,"Otras percepciones.....");
scanf("%f",&var_nomina.otras_per);
mensaje(5,15,"Prestamo...............");
scanf("%f",&var_nomina.prestamo);
mensaje(5,16,"Otras deducciones......");
scanf("%f",&var_nomina.otras_ded);
gotoxy(25,20);
cprintf("Agregando el empleado %s",var_nomina.empleado);
agregar(arc_nomina);
pausa(1,25," Pulse una tecla para continuar...");
break;
case 'C':mensaje(25,2,"*** Buscar en el registro por nombre");
mensaje(10,5,"Escriba el empleado a buscar:");
gets(emp);
pos=buscar(arc_nomina,emp);
if (pos==-1)
{ gotoxy(25,20);
cprintf("el nombre %s no se encuentra en el archivo",emp);
}
else
{ gotoxy(25,20);
pos=pos+1;
cprintf("El nombre %s se encuentra en el registro %d",emp,pos);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'D':clrscr();
listar(arc_nomina);
pausa(1,25,"Pulsa una tecla para seguir...");
break;
case'E':mensaje(25,2,"*** Eliminar registro ***");
mensaje(10,5,"Escriba el empleado a eliminar:");
gets(emp);
pos=buscar(arc_nomina,emp);
if (pos==-1)
{ gotoxy(25,20);
cprintf("El nombre %s no existe en el archivo",emp);
}
else
{ eliminar(arc_nomina,pos);
gotoxy(25,20);
cprintf("El nombre %s ha sido eliminado con exito",emp);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'F':mensaje(25,2,"*** Modificar registro ***");
mensaje(10,5,"Escriba el empleado a modificar:");
gets(emp);
pos=buscar(arc_nomina,emp);
if (pos==-1)
{ gotoxy(25,20);
cprintf("el nombre %s no existe en el arreglo", emp);
}
else
{
mensaje(5,7,"Nombre del empleado.....");
gets(var_nomina.empleado);
mensaje(5,8,"Fecha de ingreso........");
gets(var_nomina.fecha);
mensaje(5,9,"R.F.C...................");
gets(var_nomina.rfc);
mensaje(5,10,"Puesto a ocupar.........");
gets(var_nomina.puesto);
mensaje(5,11,"Edad....................");
scanf("%d",&var_nomina.edad);
mensaje(5,12,"Sueldo diario..........");
scanf("%f",&var_nomina.sueldo);
mensaje(5,13,"Dias trabajados.......");
scanf("%d",&var_nomina.dias);
mensaje(5,14,"Horas extras..........");
scanf("%d",&var_nomina.extras);
mensaje(5,15,"Compensacion..........");
scanf("%f",&var_nomina.compen);
mensaje(5,16,"Otras percepciones....");
scanf("%f",&var_nomina.otras_per);
mensaje(5,17,"Prestamo..............");
scanf("%f",&var_nomina.prestamo);
mensaje(5,18,"Otras deducciones.....");
scanf("%f",&var_nomina.otras_ded);
regrabar(arc_nomina,pos);
gotoxy(25,22);
cprintf("El nombre de la posicion %d ha sido modificado",pos,var_nomina.empleado);
}
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'G':mensaje(25,2,"*** Calcular la nomina ***");
calcular(arc_nomina);
pausa(1,25,"Pulse una tecla para continuar...");
break;
case'H':mensaje(25,2,"*** Ordenando por empleado ***");
ordenar_empleado(arc_nomina);
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'I':mensaje(25,2,"*** Ordenando por neto a percivir ***");
ordenar_neto(arc_nomina);
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'J':clrscr();
mostrar_nomina(arc_nomina);
pausa(1,25,"Pulse una tecla para seguir...");
break;
case'K':cerrar(arc_nomina);
color(7,0);
clrscr();
exit(0);
break;
default: mensaje(25,20,"!Error, opcion incorrecta");
pausa(1,25,"Pulse una tecla para seguir...");
break;
}
}
while(1);
}
hola te enviaron el formato de nomina?? te agradezco me lo envies. yo tambien necesito uno.
gracias
Andrea
gracias
Andrea
No es de ese programa, pero ahi trara mas o menmos de lo mismo.
Saludos....estoy usando estructuras.
tengo una estructura para dar entrada a n
i=para dar entrada a n personas
struct persona[\' \'],temp;
{
int matricula;
char nom[30];
int edad;
}
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
if p[j].matricula> p[k].matricula){
temp=p[j];
p[j]=p[k];
p[k]=temp;
}
este codigo ordena por matricula
eata bien??? creo que si
como le haria para ordenarlo por nombre
Gracais por la ayuda
Saludos....estoy usando estructuras.
tengo una estructura para dar entrada a n
i=para dar entrada a n personas
struct persona[\' \'],temp;
{
int matricula;
char nom[30];
int edad;
}
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
if p[j].matricula> p[k].matricula){
temp=p[j];
p[j]=p[k];
p[k]=temp;
}
este codigo ordena por matricula
eata bien??? creo que si
como le haria para ordenarlo por nombre
Gracais por la ayuda
