Version:0.9 StartHTML:0000000105 EndHTML:0000009466 StartFragment:0000000152 EndFragment:0000009432
/******************************************************/
/*************** Isidro Pastor Jorda ******************/
/******************************************************/
/****************** Telematica ************************/
/******************************************************/
/************* Practica 8 Ejercicio 4 *****************/
/******************************************************/
#include <iostream.h>
#include <stdlib.h>
#include <string>
#include <fstream.h>
const int MAXALU = 100;
struct alu
{
string nombre;
string apellido;
float nota;
};
typedef alu Vector[MAXALU];
bool CargarDatos(ifstream & fentrada, alu & dat);
void GrabarDatos(ofstream & fsalida, alu & dat);
int main()
{
ifstream fentrada;
ofstream fsalida;
Vector alumnos;
int opcion, pos,i;
float suma, divisor;
bool salir,seguir;
seguir = true;
salir = false;
pos = 0;
i=0;
fentrada.open("alumnos.dat");
if (!fentrada)
cout << "\n Error al abrir el fichero alumnos.dat\n";
else
{
while (CargarDatos(fentrada, alumnos[i]))
{
i++;
}
fentrada.close();
} // else
pos = i;
do
{
cout << "\n Practica 8 Ejercicio 4 \n";
cout << " 1.- Ver todo el fichero\n";
cout << " 2.- Ver alumnos aprobados\n";
cout << " 3.- Aņadir alumno\n";
cout << " 4.- Calcular la nota media\n";
cout << " 5.- Salir\n";
cout << " Elige una opcion -> ";
cin >> opcion;
cout << endl;
switch (opcion)
{
case 1:
for (i = 0; i < pos; i++)
cout << alumnos[i].nombre << " " << alumnos[i].apellido << " " << alumnos[i].nota << endl;
break;
case 2:
cout << "\n Lista de alumnos aprobados: \n";
for (i = 0; i < pos; i++)
{
if ( (alumnos[i].nota) >= 5)
cout << alumnos[i].nombre << " " << alumnos[i].apellido << endl;
}
break;
case 3: // aņadir alumnos
cin.ignore();
cout << "\n Introduccion de nuevo alumno: \n";
cout << " Introduce el nombre -> ";
getline(cin, alumnos[pos].nombre);
cout << "\n Introduce el apellido -> ";
getline(cin, alumnos[pos].apellido);
do
{
cout << "\n Introduce la nota -> ";
cin >> alumnos[pos].nota;
}
while ( alumnos[pos].nota < 0 || alumnos[pos].nota > 10);
pos++;
break;
case 4: // calculo de la nota media
suma = 0;
divisor = 0;
for (i = 0; i < pos; i++)
{
suma = suma + alumnos[i].nota;
divisor++;
}
cout << "\n La nota media de todos los alumnos es de "<< suma/divisor << endl;
break;
case 5:
salir = true;
break;
default:
cout << "\n Opcion no valida ...... \n";
break;
}// switch
}
while (!salir);
fsalida.open("alumnos.dat");
for ( i = 0; i < pos; i++) // grabaremos datos justo hasta antes de la ultima posicion con datos de nuestro array
{
GrabarDatos(fsalida, alumnos[i]); // llamamos a la funcion que ira escribiendo en el fichero los datos del registro
}
fsalida.close(); // cerramos el fichero ya que no lo vamos a usar mas
system("PAUSE");
return 0;
}
bool CargarDatos(ifstream & fentrada, alu & dat)
{
getline (fentrada, dat.nombre);
getline(fentrada, dat.apellido);
fentrada >> dat.nota;
fentrada.get();
return !(fentrada.eof());
}
void GrabarDatos(ofstream & fsalida, alu & dat)
{
fsalida << dat.nombre << endl;
fsalida << dat.apellido << endl;
fsalida << dat.nota << endl;
return;
}