
Programa archivos binarios en C++
C/Visual C
Publicado el 5 de Enero del 2018 por Alex
3.063 visualizaciones desde el 5 de Enero del 2018
Gestión de trabajadores (altas, bajas y modificaciones) utilizando archivos binarios en C++.
#include <ctype.h>
#include <string.h>
#include <iostream>
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
void intro();
void modif();
void borra();
void consu();
void error();
void promedia();
void espacios(int);
struct
{
char nombre[50];
float parcial_1;
float parcial_2;
float parcial_3;
}datos;
FILE *fichero;
char opc,nom[30];
int tama;
void espacios(int final){
for(int i=1; i<final; i++)
printf(" ");
}
/*verifica como te calificaran*/
void promedia()
{
system("cls");
printf("\n-----------------------------------------------------------------------------\n");
printf("\n-----------------------------------------------------------------------------");
printf("\n-----------------------------------------------------------------------------\n\n\n");
printf(" \nNombre | No. DPI | No. Afiliacion | No. Nit |\n\n\n");
printf("\n-----------------------------------------------------------------------------\n\n");
printf(datos.nombre);
printf("\t%f",datos.parcial_1);
printf("\t%f",datos.parcial_2);
printf("\t%f",datos.parcial_3);
printf("\n\n");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/* grabar registros */
void intro()
{
int s;
char w;
system("cls");
if((fichero=fopen("alt.dat","ab"))==NULL)error();
for(;;)
{
system("cls");
espacios(28);printf("Registrar Trabajador\n");
printf("\n");
printf("Nombre Trabajador :");
gets(datos.nombre);
printf("\n");
printf("\nNumero de DPI :");
scanf("%f",&datos.parcial_1);
printf("\n");
printf("\nNumero de afiliacion :");
scanf("%f",&datos.parcial_2);
printf("\n");
printf("\nNumero de nit :");
scanf("%f",&datos.parcial_3);
printf("\n");
printf("\nDatos correctos (S/N):\n");
opc=toupper(getch()); //Pasar a mayuscula la letra digitada
if(opc=='S'){
promedia();
fwrite(&datos,sizeof(datos),1,fichero);
}
printf("\n");
printf("\nDesea agregar otro Trabajador (S/N):");
w=toupper(getch());
if((w)=='N')break;
}
fclose(fichero);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/* modificar registros*/
void modif()
{
system("cls");
tama=sizeof(datos);
if((fichero=fopen("alt.dat","r+b"))==NULL)error();
espacios(15);printf("Introduce nombre a modificar:");
gets(nom);
system("cls");
while(!feof(fichero))
{
fread(&datos,sizeof(datos),1,fichero);
if(strcmp(datos.nombre,nom)==0)
{
espacios(15);printf("1.- Nombre : %s\n",datos.nombre);
espacios(15);printf("2.- Numero de DPI: %f\n",datos.parcial_1);
espacios(15);printf("3.- Numero de afiliacion: %f\n",datos.parcial_2);
espacios(15);printf("4.- Numero de nit: %f\n",datos.parcial_3);
espacios(15);printf("5.- Salir de las modificaciones:\n");
while(opc!='5')
{
espacios(18);printf("Campo a modificar\n");
opc=getch();
switch(opc)
{
case '1' :printf("Ingrese el nuevo dato: ");
gets(datos.nombre);
break;
case '2' :printf("Ingrese el nuevo dato: ");
scanf("%f",&datos.parcial_1);break;
case '3' :printf("Ingrese el nuevo dato: ");
scanf("%f",&datos.parcial_2);break;
case '4' :printf("Ingrese el nuevo dato: ");
scanf("%f",&datos.parcial_3);break;
case '5' :fseek(fichero,-tama,SEEK_CUR); //Ubica dentro del archivo
//el registro que fue modificado para sobreescribirlo después con fwrite
promedia();
fwrite(&datos,sizeof(datos),1,fichero);break;
default:break;
}
}
break;
}
}
fclose(fichero);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/* borrar registros */
void borra()
{
system("cls");
tama=sizeof(datos);
if((fichero=fopen("alt.dat","r+b"))==NULL)error();
espacios(15);printf("Introduce nombre a borrar:\n ");
gets(nom);
system("cls");
while(!feof(fichero))
{
fread(&datos,sizeof(datos),1,fichero);
if(strcmp(datos.nombre,nom)==0)
{
espacios(15);printf("Nombre : %s\n",datos.nombre);
espacios(15);printf("Numero de DPI : %f\n",datos.parcial_1);
espacios(15);printf("Numero de afiliacion : %f\n",datos.parcial_2);
espacios(15);printf("Numero de nit : %f\n",datos.parcial_3);
espacios(15);printf("Estas seguro de querer borrarlo (S/N)\n");
opc=toupper(getch());
system("cls");
if(opc=='S')
{
strcpy(datos.nombre,"*");
fseek(fichero,-tama,SEEK_CUR); //Solamente actualiza el nombre a *
//Y Sobreescribe de nuevo el registro, esta es
//la marca de borrado.
fwrite(&datos,sizeof(datos),1,fichero);
break;
}
}
}
fclose(fichero);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*consultar un registro*/
void consu()
{
system("cls");
if((fichero=fopen("alt.dat","rb"))==NULL)error();
espacios(15);printf("Introduce nombre a consultar:\n");
gets(nom);
system("cls");
while(!feof(fichero))
{
fread(&datos,sizeof(datos),1,fichero);
if(strcmp(datos.nombre,nom)==0)
{
printf("Nombre : %s\n",datos.nombre);
printf("Numero de DPI : %f\n",datos.parcial_1);
printf("Numero de afiliacion : %f\n",datos.parcial_2);
printf("Numero de nit : %f\n",datos.parcial_3);
printf("Presione una tecla para salir ......");
getch();
break;
}
}
fclose(fichero);
}
/* error en apertura */
void error()
{
system("cls");
printf("Error no puedo abrir el fichero\n");
getch();
exit(0);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
for(;;)
{
system("cls");
espacios(35);printf("Menu principal\n");
espacios(29);printf("1.- Ingresar Trabajadores\n");
espacios(29);printf("2.- Modificar Trabajadores\n");
espacios(29);printf("3.- Borrar Trabajadores\n");
espacios(29);printf("4.- Consultar\n");
espacios(29);printf("5.- Finalizar\n");
espacios(29);printf("Escoge una opcion...\n");
opc=getch();
switch(opc)
{
case '1':intro();break;
case '2':modif();break;
case '3':borra();break;
case '4':consu();break;
case '5':exit(0); //para que termine el ciclo
default: break;
}
}
}
No hay comentarios