[SRC] [C++] (Archivo de TEXTO) MiniAgenda

Iniciado por .:BlackCoder:., 29 Julio 2010, 03:59 AM

0 Miembros y 1 Visitante están viendo este tema.

.:BlackCoder:.

Wenas... Aca dejo un code de una MiniAgenda que estuve haciendo, guarda Un nombre y un numero que en este caso es una edad pero el cambio para que guarde un tlf es minimo... Gracias a littlehorse y Leo Gutierrez por sus consejos  :xD:

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

class Agenda{
        char name[30];
        int age;
    public:
        int contar();
        void extraer(Agenda* Persona);
        void ordenar(Agenda* Persona);
        void agregaralfi(const char* nombre, int edad);
        const char* getname();
        int getage();
        void set(char*,int);
};

int main(int argc, char *argv[])
{
    int op;
    do{
        cout<<"1.Ingresar una persona a la agenda"<<endl;
        cout<<"2.Ver todas las personas de la agenda"<<endl;
        cout<<"3.Ordenar agenda"<<endl;
        cout<<"4. Salir"<<endl;
        cin>>op;
       
        if (op == 1){
            char aux[30];
            int ageaux;
            cin.ignore();
            cout<<"Ingrese el nombre: ";
            cin.getline(aux,30);
            cout<<"Ingrese la edad: ";
            cin>>ageaux;
            Agenda persona;
            persona.agregaralfi((const char*)aux,ageaux);
        }
        else if (op == 2){
            Agenda *persona;
            int x=persona->contar();
            if (x > 0){
                persona= new Agenda [x];
                persona->extraer(persona);
                for (int i=0;i<x;i++)
                    cout<<persona[i].getname()<<persona[i].getage()<<endl;
            }
            else if (x==0)
            cout<<"No hay personas"<<endl;
            else
            cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;

            delete[] persona;
        }
        else if (op == 3){
            Agenda *persona;
            int x=persona->contar();
            if (x > 0){
                persona= new Agenda [x];
                persona->extraer(persona);
                persona->ordenar(persona);
                for (int i=0;i<x;i++){
                    cout<<persona[i].getname()<<persona[i].getage()<<endl;
                    persona[i].agregaralfi(persona[i].getname(),persona[i].getage());
                }
            }
            else if (x==0) cout<<"La agenda no tiene personas"<<endl;
            else cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
        }
        cout<<"\n\n\n";
    }while (op != 4);
   
    cin.get();
    return EXIT_SUCCESS;
}

void Agenda::extraer(Agenda* Persona){
    ifstream ent("Agenda.txt");
    if (!ent){
        cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
        return;
    }
    for (int i=0;i<contar();i++){
        ent.getline(Persona[i].name,30,':');
        ent>>Persona[i].age;
        ent.ignore();
    }
    ent.close(); 
}

int Agenda::contar(){
    ifstream ent("Agenda.txt");
      if (!ent){
        return -1;
    }
    int c=0;
    while (ent) if (ent.get() == '\n') c++;
    ent.close();
    return c;
}

void Agenda::ordenar(Agenda* Persona){
    int c=contar();
    ofstream sal("Agenda.txt");
    sal.close();
    for (int i=0;i<c-1;i++)
        for (int j=i+1;j<c;j++)
        if (strcmp(Persona[i].getname(), Persona[j].getname()) > 0){
            Agenda AUX=Persona[i];
            Persona[i]=Persona[j];
            Persona[j]=AUX;
        }
}

void Agenda::agregaralfi(const char* nombre, int edad){
    ofstream sal("Agenda.txt", ios::out | ios::app | ios::ate);
    if (!sal) exit(1);
    sal.setf(ios::left);
    sal.width(29);
    sal<<nombre<<':'<<edad<<endl;
    sal.close();
}

void Agenda::set(char nombre[], int edad){
    strcpy(this->name,nombre);
    this->age=edad;   
}

const char* Agenda::getname(){
    return this->name;
    }

int Agenda::getage(){
    int x=this->age;
    return x;
    }


Estare ausente un tiempo pero cuando vuelva vere las criticas y/u observaciones... Saludos....

PD: Alguien por ahi lo hizo con sobrecarga de operadores y me dijo que lo queria postear (ayer), le dije que esperara un poco hasta que yo creara el post y aca esta... Do it  :xD
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




leogtz

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <cstdlib>
using std::cout;
using std::endl;
using std::cin;
using std::ifstream;
using std::ostream;
using std::istream;
class Agenda
{
    // Interfaz pública:
    public:
    inline unsigned int contarPersonas(void);
    inline std::string getname(void) const
    {
        return name;
    }
    inline unsigned int getage(void) const
    {
        return age;
    }
    void ordenar(void);
    void set(const std::string&, unsigned int&);
    friend ostream& operator<<(ostream&, const Agenda&);
    friend istream& operator>>(istream&, Agenda&);

    private:
    std::string name;
    unsigned int age;
};
unsigned int Agenda::contarPersonas(void)
{
    ifstream entrada("Agenda.txt", std::ios::in);

    if(!entrada.good())
    exit(EXIT_FAILURE);

    unsigned int contador = 0;
    while(!entrada.eof())
    {
        if(entrada.get() == '\n')
        contador++;
    }
    entrada.close();
    return contador;
}
void  Agenda::ordenar(void)
{
    if(contarPersonas() <= 1)                       // No hacer nada.
    return;
    std::string *names = new std::string[ contarPersonas() ];
    ifstream entrada("Agenda.txt", std::ios::out);

    if(!entrada.good())
    {
        std::cerr << "Error abriendo archivo.";
        exit(1);
    }

    char temporal[100];
    unsigned int i = 0;
    while(!entrada.getline(temporal, 100).eof())
        names[i++] = temporal;
    entrada.close();

    unsigned int max = contarPersonas();

    std::ofstream salida("Agenda.txt", std::ios::out);

    for(i = 0; i < max; i++)
    for(unsigned int j = 0; j < max; j++)
    if(names[i] < names[j])
    {
        std::string aux = names[i];
        names[i] = names[j];
        names[j] = aux;
    }
    // Volcar al archivo :
    for(i = 0; i < max; i++)
    salida << names[i] << endl;
    salida.close();

    delete[] names;

}
void Agenda::set(const std::string& name, unsigned int& age)
{
    this->name = name;
    this->age = age;
}
ostream& operator<<(ostream& salida, const Agenda& persona)
{
    ifstream entrada("Agenda.txt", std::ios::in);

    if(!entrada.good())
    exit(1);

    char temporal[100];
    salida << endl;
    while(!entrada.getline(temporal, 100).eof())
    salida << temporal << endl;
    entrada.close();
    return salida;
}
istream& operator>>(istream& entrada, Agenda& persona)
{
    cout << "Ingrese el nombre : ";
    entrada.ignore();
    getline(entrada, persona.name);
    cout << "Ingrese la edad : ";
    entrada >> persona.age;
    //entrada >> persona.age;
    return entrada;
}
int main(void)
{
    unsigned int op;
    do
    {
        cout << endl << "1.Ingresar una persona al archivo" << endl;
        cout << "2.Ver todas las personas del archivo" << endl;
        cout << "3.Ordenar" << endl;
        cout << "4.Salir" << endl;
        cin >> op;
        Agenda persona;
        if(op == 1)
        {
            cin >> persona;
            std::ofstream file;
            file.open("Agenda.txt", std::ios::app);
            file << persona.getname() << ' ' << persona.getage() << endl;
            file.close();
        } else if (op == 2)
        {
            cout << persona;
            cout << "\n\n->" << persona.contarPersonas() << " actualmente.\n";
        } else if(op == 3)
        {
            persona.ordenar();
        }
    } while (op != 4);
    return 0;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com