
Ayuda con Proyecto de Archivos Binarios.
Publicado por Dario (1 intervención) el 07/04/2020 04:04:45
Saludos cordiales comunidad ,
Tengo varias dudas e inconvenientes con este pequeño proyecto que me encuentro realizando , el primero de ellos es que aun no tengo entendido el por que mi programa sobrescribe los datos en mi archivo .dat , es decir inicio el programa lleno varios registros salgo al menú elijo la opción leer datos y todo bien hasta ahí pero al momento de volver a la opción llenar registro e ingresar varios de estos y de ahi nuevamente ir a la opción leer datos solo me aparece el ultimo registro que ingrese y los demás se eliminan .
Estuve leyendo y me parece que este problema se soluciona haciendo uso de fseek ,fsell para poderme ubicar en el archivo que esta creado pero en realidad no estoy seguro .
Realmente estoy confundido , espero que alguien me pueda ayudar con este problema .
Por otro lado estoy abierto a escuchar que forma es mas fácil y eficiente de guardar mis datos usando c++ .
Gracias de antemano.
Tengo varias dudas e inconvenientes con este pequeño proyecto que me encuentro realizando , el primero de ellos es que aun no tengo entendido el por que mi programa sobrescribe los datos en mi archivo .dat , es decir inicio el programa lleno varios registros salgo al menú elijo la opción leer datos y todo bien hasta ahí pero al momento de volver a la opción llenar registro e ingresar varios de estos y de ahi nuevamente ir a la opción leer datos solo me aparece el ultimo registro que ingrese y los demás se eliminan .
Estuve leyendo y me parece que este problema se soluciona haciendo uso de fseek ,fsell para poderme ubicar en el archivo que esta creado pero en realidad no estoy seguro .
Realmente estoy confundido , espero que alguien me pueda ayudar con este problema .
Por otro lado estoy abierto a escuchar que forma es mas fácil y eficiente de guardar mis datos usando c++ .
Gracias de antemano.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//archivos binarios
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<conio.h>
#ifdef _WIN32
#define CLEAR "cls"
#elif defined(unix)||defined(__unix__)||defined(__unix)||defined(__APPLE__)||defined(__MACH__)
#define CLEAR "clear"
#else
#error "SO no soportado para limpiar pantalla"
#endif
using namespace std;
struct regis_estudiantes{
char nombre_estudiante[50];
float nota_1;
float nota_2;
float promedio;
};
regis_estudiantes cargar_estudiantes(){
regis_estudiantes estudiantes;
string nombre;
cout<<"\t\t\tINGRESO DE DATOS\n ";
cout<<"ingrese el nombre del estudiante: " ; getline(cin,nombre);
strcpy(estudiantes.nombre_estudiante,nombre.c_str());
cout<<"ingrese la nota 1: ";cin>>estudiantes.nota_1;cin.ignore();
cout<<"ingrese la nota 2: ";cin>>estudiantes.nota_2;cin.ignore();
estudiantes.promedio=(estudiantes.nota_1+estudiantes.nota_2)/2;
cout<<"promedio del estudiante: "<<estudiantes.promedio<<"\n";
return estudiantes;
}
void ingresar_datos(){
FILE* archivo_estudiantes;
archivo_estudiantes=fopen("ESTUDIANTES.dat","wb");
string bandera="si";
regis_estudiantes estudiantes_aux;
while(bandera!="no"){
estudiantes_aux=cargar_estudiantes();
fwrite(&estudiantes_aux,sizeof(regis_estudiantes),1,archivo_estudiantes);
cout<<"deseea ingresar mas datos si/no: ";
getline(cin,bandera);
}
cout<<"registro ingresado exitosamente";
fclose(archivo_estudiantes);
getch();
}
void leer_estudiantes(){
cout<<"\t\t\tLISTA DE ESTUDIANTES\n ";
FILE* archivo_estudiante=fopen("ESTUDIANTES.dat","rb");
regis_estudiantes aux_estudiantes;
fread(&aux_estudiantes,sizeof(regis_estudiantes),1,archivo_estudiante);
while(!feof(archivo_estudiante)){
cout<<"\nNOMBRE: " <<aux_estudiantes.nombre_estudiante<<endl;
cout<<" \nNOTA 1: "<<aux_estudiantes.nota_1<<endl;
cout<<"\nNOTA 2: "<<aux_estudiantes.nota_2<<endl;
cout<<"\nPromedio: "<<aux_estudiantes.promedio<<endl;
fread(&aux_estudiantes,sizeof(regis_estudiantes),1,archivo_estudiante);
}
fclose(archivo_estudiante);
cout<<"\nSE HA COMPLETADO LA LECTURA DEL ARCHIVO";
getch();
}
int main(){
int op=0;
do{
cout<<"\t\t\t\tMENU DE OPCIONES\n";
cout<<"1.LLENAR REGISTRO\n";
cout<<"2.LISTA DE ESTUDIANTES\n";
cout<<"3.Salir\n";
cout<<": ";
cin>>op;
cin.ignore();
system(CLEAR);
switch(op){
default:cout<<"opcion incorrecta";
break;
case 1:ingresar_datos();
break;
case 2:leer_estudiantes();
break;
case 3:
break;
}
system(CLEAR);
}while(op!=3);
}
Valora esta pregunta


0