Sei sulla pagina 1di 7

Implementacin de Archivos en C++ Fichero tpersona.

h
#ifndef TPERSONA_H #define TPERSONA_H #include <iostream> using namespace std; //Se implementa una clase Tpersona con la informacin de cada persona, correspondiente a la que se //almacenara en el fichero plano. class TPersona { private: int Cedula; string Apellidos; string Nombres; int Edad; public: TPersona(); void setCedula(int ced); void setApellidos(string ape); void setNombres(string nom); void setEdad(int eda); int getCedula(); string getNombres(); string getApellidos(); int getEdad(); ~TPersona(); }; #endif // TPERSONA_H

Fichero tpersona.cpp
#include "tpersona.h" Tpersona::TPersona(){ //Se asignan los valores iniciales que tendrn los atributos de la clase TPersona. Cedula=0; Apellidos=""; Nombres=""; Edad=0; } //Se implementan los mtodos modificadores para asignar los valores de que tendrn los atributos de la clase. void TPersona::setCedula(int ced){ Cedula=ced; } void TPersona::setApellidos(string ape){ Apellidos=ape; } void TPersona::setNombres(string nom){ Nombres=nom;

} void TPersona::setEdad(int eda){ Edad=eda; } //Se implementan los mtodos selectores para obtener los valores de los atributos de la clase. int TPersona::getCedula(){ return Cedula; } string TPersona::getNombres(){ return Nombres; } string TPersona::getApellidos(){ return Apellidos; } int TPersona::getEdad(){ return Edad; } TPersona::~TPersona(){ }

Fichero tarchper.h
#ifndef TARCHPER_H #define TARCHPER_H #include <iostream> #include <fstream>//Librera que proporciona las funciones y mtodos necesaria para el manejo ficheros. #include <string.h> //Librera para utilizar la funcin getline. #include "tpersona.h" using namespace std; class TArchPer{ private: string Nombre; ifstream Ent; //Declaracin de atributos de tipo fichero para ficheros lectura (entrada). ofstream Sal; //Declaracin de atributos de tipo fichero para ficheros escritura (salida). public: TArchPer(); void setNombre(string nom); //Mtodo modificador para asignar el nombre del fichero. string getNombre(); //Mtodo selector para obtener el nombre del fichero. bool AbrirLec(); //Mtodo que valida que el fichero fue abierto para lectura. bool AbrirEsc(); //Mtodo que valida que el fichero fue abierto para escritura. int Convertir(string cad); //Mtodo que convierte una cadena de caracteres a entero. void Guardar(TPersona* Per); //Mtodo para guardar en el archivo la informacin de la clase TPersona. bool Leer(TPersona* Per); //Mtodo que lee los datos almacenados en el archivo. //Mtodo que recorre el archivo y calcula el promedio de edad de las personas almacenadas en l. float promedad(); int maxedad(); //Mtodo que recorre el archivo y retorna la mxima edad de las personas almacenadas. int minedad(); //Mtodo que recorre el archivo y retorna la mnima edad de las personas almacenadas. void CerrarLec(); //Mtodo que cierra el archivo si esta abierto para lectura. void CerrarEsc(); //Mtodo que cierra el archivo si esta abierto para escritura.

~TarchPer(); //Mtodo destructor de la clase. }; #endif // TARCHPER_H

Fichero tarchper.cpp
#include "tarchper.h" #include <stdlib.h> TArchPer::TArchPer(){ Nombre=""; } void TArchPer::setNombre(string nom){ Nombre=nom; } string TArchPer::getNombre(){ return Nombre; } bool TArchPer::AbrirLec(){ CerrarLec(); //Se cierra el archivo si esta abierto para lectura. Ent.open(Nombre.c_str()); //Se abre el archivo para lectura y el nombre se pasa como c_str puntero (char*). if(Ent.is_open()) //Valida que el archivo fue correctamente abierto para lectura. return true; //Se devuelve verdadero si se pudo abrir. else return false; } bool TArchPer::AbrirEsc(){ CerrarLec(); //Se cierra el archivo si esta abierto para lectura. //Se abre el archivo para escritura y el nombre se pasa como c_str puntero (char*). Sal.open(Nombre.c_str(),ios::app); //ios::app indique se va a aadir informacin al fichero. if(Sal.is_open()) //Valida que el archivo fue correctamente. return true; //Se devuelve verdadero si se pudo abrir. else return false; } int TArchPer::Convertir(string cad){ //Se utiliza el mtodo atoi para convertir una cadena de caracteres a entero, para convertir nmeros reales //puede usas atof(cad.c_str()). return atoi(cad.c_str()); } void TArchPer::Guardar(TPersona* Per){ Sal<<Per->getCedula()<<"\n"; //Guarda en el archivo la cedula. Sal<<Per->getApellidos()<<"\n"; //Guarda en el archivo los apellidos. Sal<<Per->getNombres()<<"\n"; //Guarda en el archivo los nombres. Sal<<Per->getEdad()<<"\n"; //Guarda en el archivo la edad. } bool TArchPer::Leer(TPersona* Per){ string ced,ape,nom,eda;

getline(Ent,ced); //Si se ha llegado al final del archivo retorna false porque no puede leer mas objetos de la clase TPersona. if(Ent.eof()){ return false; } else{ //Si no, lee del archivo cada lnea correspondiente a la informacin de la persona y la pasa a los mtodos //modificadores de la clase TPersona para mostrarla. getline(Ent,ape); getline(Ent,nom); getline(Ent,eda); Per->setCedula(Convertir(ced)); Per->setApellidos(ape); Per->setNombres(nom); Per->setEdad(Convertir(eda)); return true; } } float TArchPer::promedad(){ int cant=0; float suma=0; TPersona* Per=new TPersona(); if(AbrirLec()){ while(!Ent.eof()){ if(Leer(Per)){ cant++; suma=suma + Per->getEdad(); } } CerrarLec(); } delete Per; if(cant>0) return suma/cant; else return 0; } int TArchPer::maxedad(){ int max=0; TPersona* Per=new TPersona(); if(AbrirLec()){ while(!Ent.eof()){ if(Leer(Per)) if(Per->getEdad()>max){ max=Per->getEdad(); } } CerrarLec(); } delete Per; return max; } int TArchPer::minedad(){ int min=1000; TPersona* Per=new TPersona(); if(AbrirLec()){

while(!Ent.eof()){ if(Leer(Per)) if(Per->getEdad()<min){ min=Per->getEdad(); } } CerrarLec(); } delete Per; return min; } void TArchPer::CerrarLec(){ if(Ent.is_open()) Ent.close(); } void TArchPer::CerrarEsc(){ if(Sal.is_open()) Sal.close(); } TArchPer::~TArchPer(){ CerrarEsc(); CerrarLec(); }

Fichero main.cpp
#include <iostream> #include "tarchper.h" #include <stdlib.h> using namespace std; void Mostrar(TPersona* Per){ cout<<"Cedula: "<<Per->getCedula()<<"\n"; cout<<"Apellidos: "<<Per->getApellidos()<<"\n"; cout<<"Nombres: "<<Per->getNombres()<<"\n"; cout<<"Edad: "<<Per->getEdad()<<"\n"; cout<<"----------------------------\n"; } string PedirCad(){ //Asegura que la cadena leda no este vaca. string cad; do{ getline(cin,cad); }while(cad.length()==0 || cad.compare("\n")==0); return cad; } void Llenar(TPersona* Per){ int ced,eda; string ape,nom; cout<<"Digite cedula: "; cin>>ced;

cout<<"Digite apellidos: "; ape=PedirCad(); cout<<"Digite nombres: "; nom=PedirCad(); cout<<"Digite edad: "; cin>>eda; Per->setCedula(ced); Per->setApellidos(ape); Per->setNombres(nom); Per->setEdad(eda); } int menu(){ int opcion = 0; cout << "_______________________________________________________\n"; cout << "\n IMPLEMENTACION DE ARCHIVOS - OPCION DEL MENU \n"; cout << "_______________________________________________________\n \n"; cout << "\n1. Agregar\n"; cout << "2. Listar\n"; cout << "3. Promedio edad\n"; cout << "4. Mayor edad\n"; cout << "5. Menor edad\n"; cout << "6. Salir\n"; cout << "_______________________________________________________\n"; do{ cout << "\nSeleccione una opcion del 1 al 6: "; cin >> opcion; }while(opcion <= 0 || opcion > 6); return opcion; } int main(){ int opc; TArchPer AP; AP.setNombre("personas1.txt"); TPersona* Per=new TPersona(); do{ opc=menu(); switch(opc){ case 1:system("cls"); Llenar(Per); AP.AbrirEsc(); AP.Guardar(Per); AP.CerrarEsc(); break; case 2:system("cls"); if(AP.AbrirLec()){ while(AP.Leer(Per)){ Mostrar(Per); } AP.CerrarLec(); } break; case 3:system("cls"); cout<<"\n\nPromedio de edad: "<<AP.promedad()<<"\n";break; case 4:system("cls"); cout<<"\n\nMayor edad: "<<AP.maxedad()<<"\n";break; case 5:system("cls"); cout<<"\n\nMenor edad: "<<AP.minedad()<<"\n";break;

} }while(opc!=6); delete Per; return 0; }

Potrebbero piacerti anche