Dev - C++ - Ayuda con Proyecto de Archivos Binarios.

 
Vista:
sin imagen de perfil

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.

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder