Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "Marathon.h"
- #include <fstream>
- #include <string.h>
- #include <cstdlib>
- using namespace std;
- Maraton::Maraton(char FicheroOrigen[], char FicheroDestino[])
- {
- numAtletas = 0; // Iniciamos el numero de Atletas a 0
- fich.open(FicheroOrigen, ios::in | ios::out | ios::binary); // Abrimos el fichero de ENTRADA DE DATOS
- if(fich.fail()) // Si el fichero no existe, debo crearlo
- {
- fich.close();
- fich.clear(); // Borramos el error
- fich.open(FicheroDestino, ios::out | ios::binary); // Creacion del fichero
- fichero.write((char *)&numAtletas, sizeof(int)); // Escribimos el numAtletas=0
- }
- else // Si el fichero existe, continuamos...
- {
- fichero.open(FicheroDestino, ios::in | ios::out | ios::binary); // Creamos el fichero de SALIDA DE DATOS
- fichero.seekg(sizeof(int), ios::beg); // Con esto dejamos un hueco del tamaño de un entero, al principio del fichero
- Atleta Temp;
- while(!fich.eof()) // Mientras no lleguemos al final del fichero
- {
- int numAtletasPais=0;
- fich.read((char *)&numAtletasPais, sizeof(int));
- // Leemos el numero de Atletas de un País, y repetimos tantas veces como diga
- for(int i=0; i<numAtletasPais; i++)
- {
- fich.read((char *)&Temp, sizeof(Atleta)); // Leemos
- fichero.write((char *)&Temp, sizeof(Atleta)); // Escribimos
- numAtletas++; // Incrementamos
- }
- }
- fichero.seekp(0, ios::beg); // Nos colocamos al principio del fichero
- fichero.write((char *)&numAtletas, sizeof(int));
- // Escribimos el numero de Atletas que hemos contabilizado
- }
- }
- void Maraton::consultar(cadena pais)
- {
- system("cls");
- int i=0;
- Atleta Atleta_Temp;
- cadena Pais_Temp;
- fichero.seekg(sizeof(int), ios::beg); // Me posiciono después del Numero de Atletas
- if(strcmp(pais,"*")!=0)
- {
- for(i=0; i<numAtletas; i++)
- {
- fichero.read((char *)&Atleta_Temp, sizeof(Atleta));
- strcpy(Pais_Temp, Atleta_Temp.pais);
- if(strcmp(strupr(Pais_Temp),strupr(pais))==0)
- {
- cout << "Dorsal: " << Atleta_Temp.dorsal << endl;
- cout << "Pais: " << Atleta_Temp.pais << endl;
- cout << "Nombre: " << Atleta_Temp.nombre << endl;
- cout << "Apellidos: " << Atleta_Temp.apellidos << endl;
- cout << "Marca: " << Atleta_Temp.marca << endl;
- cout << "Posicion: " << Atleta_Temp.posicion << endl;
- cout << endl;
- }
- }
- }
- else
- {
- for(i=0; i<numAtletas; i++)
- {
- fichero.read((char *)&Atleta_Temp, sizeof(Atleta));
- cout << "Dorsal: " << Atleta_Temp.dorsal << endl;
- cout << "Pais: " << Atleta_Temp.pais << endl;
- cout << "Nombre: " << Atleta_Temp.nombre << endl;
- cout << "Apellidos: " << Atleta_Temp.apellidos << endl;
- cout << "Marca: " << Atleta_Temp.marca << endl;
- cout << "Posicion: " << Atleta_Temp.posicion << endl;
- cout << endl;
- }
- }
- }
- void Maraton::insertar(Atleta s)
- {
- fichero.seekg(sizeof(int), ios::beg); // Nos colocamos despues del numero de Atletas
- int i=0;
- bool encontrado=false;
- Atleta Atleta_Temp, Atleta_Temp2;
- while(i<numAtletas && !encontrado)
- {
- fichero.read((char *)&Atleta_Temp, sizeof(Atleta));
- if(Atleta_Temp.dorsal == s.dorsal)
- encontrado = true;
- else
- i++;
- }
- if(!encontrado)
- {
- bool introducido=false;
- int j=numAtletas+1;
- Atleta V_Atleta[numAtletas+1];
- fichero.seekg(sizeof(int), ios::beg);
- for(i=0; i<numAtletas; i++) // i=9
- fichero.read((char *)&V_Atleta[i], sizeof(Atleta));
- ///////////////////////////////////////////////////////////////////////
- while(!introducido)
- {
- if(strcmp(strupr(V_Atleta[i].pais), strupr(s.pais))==0)
- {
- for( ; j>=i; j--)
- {
- cout << "HOla" << endl;
- Atleta_Temp2 = V_Atleta[j-1];
- V_Atleta[j] = Atleta_Temp2;
- }
- V_Atleta[i] = s;
- numAtletas++;
- introducido=true;
- }
- else
- i--;
- }
- for(i=0; i<numAtletas; i++)
- cout << V_Atleta[i].dorsal << endl;
- /*fichero.seekg(0, ios::beg);
- fichero.write((char *)&numAtletas, sizeof(int));
- for (int k=0; k<numAtletas; k++)
- fichero.write((char *)&numAtletas, sizeof(int));
- */
- }
- }
- void Maraton::modificar(int dor)
- {
- }
- void Maraton::eliminar(int dor)
- {
- }
- void Maraton::mostrarClasificacion()
- {
- }
- Maraton::~Maraton()
- {
- fich.close(); // Cerramos el fichero de ENTRADA DE DATOS
- fichero.close(); // Cerramos el fichero de SALIDA DE DATOS
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement