[ Foro de C++ ]

Problema con programa de archivo o fichero en c++

07-Apr-2020 22:34
Invitado (Hugo)
0 Respuestas

Buenas, tengo un problema con un programa en lenguaje C++, sobre Archivos secuenciales o también se les conoce como ficheros. Puedo crear mi fichero y añadirle datos, ya en el programa no me deja correr la función de añadir mas registro, aquí anexo el texto del programa por si alguien puede ayudarme, lo agradecería. mi correo es huguito1807@hotmail.com
código del programa:


/* Mi problema es que al iniciar el programa crea el fichero con los datos que quiero
pero cuando llamo la funcion de añadir (donde quiero añadir un registro nuevo) directamente
no me corre la funcion, que problema tengo? */
#include <iomanip>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

typedef struct{
	char id[5], nombre[30], sexo[2];
	int edad, cont;
	float estatura,peso,GP;
}EMPLEADO;

int j=0,i=1,r=0,v,comparacion;
char hola[30],z[10],caracter[10];
//float z=0;
void insertar();
void consulta1();
void consulta2();
void añadir();
void menu_secundario();
void menu();

int main(){
  menu();
}

void menu() {
  cout << "\t\t  BIENVENIDO AL SISTEMA\n\t  INGRESE LOS DATOS DEL EMPLEADO\nPARA MEDIR LOS PROCENTAJES DE GRASA CORPORAL\n\t +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+";
  cout<<"\n\t\t\t\t  MENÚ"<<endl;
  cout<<"1) Ingresar empleados al sistema"<<endl;
  cout<<"2) Añadir Nuevos Empleados"<<endl;
  cout<<"3) Consulta de informacion por número de cuenta"<<endl;
  cout<<"4) Salir del sistema"<<endl;
	cout<<"Ingrese un valor: ";
  scanf("%i",&v);
   system("clear");
  cout<<""<<endl;
  switch(v){
   case 1:
      insertar(); 
   break;
   case 2:
      añadir(); 
   break;
   case 3: 
      consulta1();
   break;  
   case 4: cout<<"Gracias por acceder al Sistema";
   break;
   default: printf("El numero ingresado es incorrecto");
	} 

}


void insertar(){
  float IMC=0;
  char M[]="M",m[]="m",F[]="F",f[]="f";
  FILE *ptrP;
  EMPLEADO p1;
   if ((ptrP = fopen("informacion.dat", "w")) == NULL) 
   {
	 	 cout << "El archivo no pudo abrirse" << endl;
	   exit(1);
	 } 
   else 
   {
      cout<<"- - - - Ingresar empleados al Sistema - - - - "<<endl;
		  cout<<"\n¿Cuantos empleados desea ingresar en el sistema?: ";
      cin>>j;
      cout<<""<<endl;
      while(i<=j){
       
       cout << "\n\t\t  Empleado #"<<i<<endl;
       cout << "Número de cuenta del empleado [][][]: ";
			 cin >> p1.id;
       cout << "Nombre del empleado: ";
			 cin >> p1.nombre;
       cout << "Sexo del empleado M o F: ";
			 cin >> p1.sexo;
       cout << "Edad del empleado: ";
			 cin >> p1.edad;
       cout << "Estatura del empleado en Metros: ";
			 cin >> p1.estatura;
       cout << "Peso del empleado en Kilogramos: ";
			 cin >> p1.peso;

       IMC = (p1.peso)/(p1.estatura * p1.estatura);
       if(strcmp(p1.sexo,M) ==0||strcmp(p1.sexo,m)==0)
       {
         p1.GP =(1.2*IMC)+(0.23*p1.edad)-(10.8*1)-5.4;
       };
       if(strcmp(p1.sexo,F)==0||strcmp(p1.sexo,f)==0)
        {
          p1.GP =(1.2*IMC)+(0.23*p1.edad)-5.4;
        };
       fprintf(ptrP,"%s %s %s %i %.2f %.2f %.2f\n",p1.id,p1.nombre,p1.sexo,p1.edad,p1.estatura,p1.peso,p1.GP);
       //                      caracter == p1.GP;
       i++;
		   }
		  fclose(ptrP);
   	}
  menu_secundario();
}

void consulta1(){
  FILE *ptrP;
  EMPLEADO p1;
  if ((ptrP = fopen("informacion.dat", "r")) == NULL){
	 cout << "El archivo no pudo abrirse" << endl;
	 exit(1);
  } 
  else 
  {
   cout<<" - - - - Consulta de informacion por número de cuenta - - - - "<<endl;
   cout<<"\nIngrese el número de cuenta del empleado a buscar: ";
   cin>>hola;
	 rewind(ptrP);
   int cont = 1;
   cout<<"\n----------------------------------------------------------------------------------\n";
   cout<<"| "
   <<left<<setw(8)<<"Código"<< "| " 
   <<left<<setw(20)<<"Nombre del Empleado"<< "| "
   <<left<<setw(5)<<"Sexo"<<"| "
   <<left<<setw(5)<<"Edad"<< "| "
   <<left<<setw(9)<<"Estatura"<<"| "
   <<left<<setw(5)<<"Peso "<<"| "
   <<left<<setw(14)<<"% Grasa Corporal"<<"|";
   cout<<"\n----------------------------------------------------------------------------------\n";
	 while (cont <= j) 
   {
		  fscanf(ptrP,"%s %s %s %i %f %f %f\n",p1.id,p1.nombre,p1.sexo,&p1.edad,&p1.estatura,&p1.peso,&p1.GP);
			  if (strcmp(p1.id, hola) == 0) 
      {
			  cout<<"| "
        <<left<<setw(7)<<p1.id<<"| "
        <<left<<setw(20)<<p1.nombre<<"| "  
        <<left<<setw(5)<<p1.sexo<<"| "
        <<left<<setw(5)<<p1.edad<<"| "
        <<left<<setw(9)<<p1.estatura<<"| "
        <<left<<setw(5)<<p1.peso<<"| "
        <<right<<setw(15)<<p1.GP<<"%"<<"|";
        cout<<"\n----------------------------------------------------------------------------------\n";
			}
		  cont++;
		}
		fclose(ptrP);
	}
  menu_secundario();
}

void añadir(){
  float IMC=0;
  char M[]="M",m[]="m",F[]="F",f[]="f";
  FILE *ptrP;
  EMPLEADO p1;
  ptrP = fopen("informacion.dat", "a");

  cout<<"- - - - Ingresar mas empleados al Sistema - - - - "<<endl;
	cout<<"\n¿Cuantos empleados desea ingresar en el sistema?: ";
  cin>>j;
  cout<<""<<endl;
  while(i<=j)
  {
     cout << "\n\t\t  Empleado #"<<i<<endl;
     cout << "Número de cuenta del empleado [][][]: ";
		 cin >> p1.id;
     cout << "Nombre del empleado: ";
		 cin >> p1.nombre;
     cout << "Sexo del empleado M o F: ";
		 cin >> p1.sexo;
     cout << "Edad del empleado: ";
     cin >> p1.edad;
     cout << "Estatura del empleado en Metros: ";
		 cin >> p1.estatura;
     cout << "Peso del empleado en Kilogramos: ";
     cin >> p1.peso;

     IMC = (p1.peso)/(p1.estatura * p1.estatura);
     if(strcmp(p1.sexo,M) ==0||strcmp(p1.sexo,m)==0)
     {
         p1.GP =(1.2*IMC)+(0.23*p1.edad)-(10.8*1)-5.4;
     };
     if(strcmp(p1.sexo,F)==0||strcmp(p1.sexo,f)==0)
     {
         p1.GP =(1.2*IMC)+(0.23*p1.edad)-5.4;
     };
      fprintf(ptrP,"%s %s %s %i %.2f %.2f %.2f\n",p1.id,p1.nombre,p1.sexo,p1.edad,p1.estatura,p1.peso,p1.GP);
       i++;
	}
	 fclose(ptrP);
   menu_secundario();
}

void menu_secundario(){
  cout<<"\n¿Desea continuar en el sistema? 1 es Si || 2 es No: ";
  cin>>r;
  system("clear");
  switch(r){
    case 1: menu(); break;
    case 2: cout<<"Gracias por acceder al Sistema"; break;
    default: printf("El numero ingresado es incorrecto");
  }
}


 




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...