Autor Tema: Programa sistema de archivos C++ guardar buscar registros quicksort cplusplus  (Leído 4734 veces)

Ornelas420

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola chavos! Tengo una duda respecto a una función en mi código que no me deja dormir...

Resulta que estoy armando un programa de sistema de archivos que maneja los registros de productos para una tienda de zapatos. Cada registro guarda en el archivo la distancia en bytes, el nombre, la descripción, talla, color y código. Además, se generan 2 índices, uno primario (código y referencia/distancia en bytes) y otro secundario (color y código). El problema es que en la búsqueda de colores, solamente me encuentra el primer registro del índice secundario, cosa que no hace la búsqueda por código. Le he dado vueltas al código ya varios días y no le encuentro el problema, espero puedan ayudarme :(

Adjunto los códigos de mi proyecto:

main.cpp
Código: [Seleccionar]

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdio>
#include <time.h>
#include <string.h>
#include "extra.h"
#include "metodos.h"

using namespace std;

char Menu()
{
    char menu_choice;
    char opc;
    Titulo_Encabezado();

    cout << "\n\t   [ M E N U ] \n" << endl;
    cout << "   A) AGREGAR REGISTRO" << endl;
    cout << "   B) BUSCAR REGISTRO" << endl;
    cout << "   C) ORDENAR INDICES" << endl;
    cout << "   D) |X| SALIR |X|" << endl;
    cout << "  Ingresa tu opcion: "; fflush(stdin); cin >> menu_choice; opc = toupper(menu_choice);
    cout << endl;
    return opc;

}

int main()
{
    inicioArchivo();
    for (;;)
    {
        switch(Menu())
        {
            case 'A':
                {
                    agregarRegistro();
                    system("pause"); break;
                }
            case 'B':
                {
                    buscarRegistro();
                    system("pause"); break;
                }

            case 'C':
                {
                    ordenarImprimirIndiceP();
                    system("pause"); break;
                }
            case 'D':
                {
                    cout << "\t Saliendo del programa!" << endl;
                    system("pause");
                    return 0;
                    break;
                }
        }
    }
    return 0;
}


« Última modificación: 26 de Junio 2018, 19:19 por Ogramar »

Ornelas420

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ayuda con programa de sistema de archivos [C++]
« Respuesta #1 en: 08 de Abril 2018, 10:50 »
Los demás códigos del proyecto xd ya no me deja ponerlo todo de una.

listaligada.h
Código: [Seleccionar]

#ifndef LISTALIGADA_H
#define LISTALIGADA_H
#include <fstream>
#include <iostream>
#include "indices.h"
#include "metodos.h"

using namespace std;

class NODO
{
    private:
        NODO* sig;
        IndiceP dato;

    public:
        NODO() { sig = NULL; }
        NODO(const IndiceP& e) : sig(NULL), dato(e) {}

        IndiceP getDato() { return dato; }
        void setDato(const IndiceP& e) { dato = e; }

        NODO* getSig() { return sig; }
        void setSig(NODO* p)  { sig = p; }
};

class ListaLigada
{
    private:
        NODO* ancla;

    public:
        ListaLigada() { ancla = NULL; }
        ~ListaLigada() { eliminartodo(); }

        NODO* primero() {return ancla;}
        NODO* ultimo()
        {
            if (vacia())
                return NULL;
            NODO* aux = ancla;
            while (aux->getSig() != NULL)
                aux = aux->getSig();

            return aux;
        }
        NODO* anterior(NODO* pos)
        {
            if (vacia() || pos == ancla)
                return nullptr;

            NODO* aux = ancla;
            do
            {
                if (aux->getSig()==pos)
                    return aux;
                aux = aux->getSig();
            } while (aux != ancla);
            return nullptr;
        }
        NODO* siguiente(NODO* pos)
        {
            if (vacia() || pos == NULL)
                return nullptr;
            return pos->getSig();
        }
        NODO* encuentra(string elem)
        {
            if (vacia())
                return nullptr;
            NODO* aux = ancla;
            while (aux!=NULL && aux->getDato().llave_primaria != elem)
                aux = aux->getSig();
            return aux;
        }
        string recupera(NODO* pos)
        {
            if (vacia() || pos==NULL)
            {
                cout << "\n Datos insuficientes." << endl;
                return 0;
            } string elem;
            elem = (string) pos->getDato().llave_primaria;
            return elem;
        }


        bool valido(NODO* pos)
        {
            NODO* aux = ancla;
            while (aux!=NULL)
            {
                if (aux==pos)
                    return true;
                aux = aux->getSig();
            }
            return false;
        }
        bool vacia()
        {
            if (ancla==NULL)
                return true;
            return false;
        }
        void insertar(NODO* pos, IndiceP elemento)
        {
            if (pos != NULL && !valido(pos))
                cout << "\n ERROR! Posicion invalida." << endl;

            NODO* aux = new NODO(elemento);

            if (aux==NULL)
                cout << "\n Memoria insuficiente." << endl;
            if (pos==NULL)
            {
                aux->setSig(ancla);
                ancla = aux;
            }
            else
            {
                aux->setSig(pos->getSig());
                pos->setSig(aux);
            }
        }
        void eliminar(NODO* pos)
        {
            if (vacia() || pos == NULL)
            {
                cout << "\n Datos insuficientes." << endl;
                return;
            }
            if (pos==ancla)
                ancla = ancla->getSig();
            else
                anterior(pos)->setSig(pos->getSig());

            delete pos;
        }
        void eliminartodo()
        {
            NODO* aux;
            while (ancla!=NULL)
            {
                aux = ancla;
                ancla = ancla->getSig();
                delete aux;
            }
        }

        void imprimeIndiceRAM()
        {
            if (vacia())
            {
                cout << "\n Datos insuficientes." << endl;
                return ;
            }
            NODO* aux = ancla;
            while (aux!=NULL)
            {
                cout << "  - CODIGO     : " << aux->getDato().getLlaveP() << endl;
                cout << "  - REFERENCIA : " << aux->getDato().referencia << endl;
                aux = aux->getSig();
            }
        }
        void cargaIndice()
        {
            ifstream leerIndiceP("IndiceAux1.txt");

            if (!leerIndiceP.good())
                cout << "\n Ha ocurrido un error en la apertura del archivo o no se encuentra. Saliendo del programa . . . " << endl;
            else
            {
                char llave[10], referencia[10];
                while (!leerIndiceP.eof())
                {
                    IndiceP indice;
                    leerIndiceP.getline(llave,20,DELIM_CAR); trim(llave,' ');
                    leerIndiceP.getline(referencia,20,DELIM_CAR); trim(referencia,' ');

                    indice.setLlaveP(llave); indice.referencia = atoi(referencia);

                    llave[0]='\0'; referencia[0]='\0';
                    if (leerIndiceP.eof()) {break;}
                    insertar(ultimo(),indice);
                }
            }
            cout << "\t El indice primario ha sido cargado." << endl;
            leerIndiceP.close();
        }

        void intercambia(NODO* a, NODO* b)
        {
            IndiceP aux = a->getDato();
            a->setDato(b->getDato());
            b->setDato(aux);
        }
        void quickSortAscend() { quickSort(primero(),ultimo()); }
        void quickSort(NODO* izq, NODO* der)
        {
            if (izq == der)
                return;
            NODO* i = izq;
            NODO* j = der;

            while (i!=j)
            {
                while(i != j && i->getDato().getLlaveP() <= der->getDato().getLlaveP())
                    i = i->getSig();

                while(i != j && i->getDato().getLlaveP() >= der->getDato().getLlaveP())
                    j = anterior(j);

                if (i!=j)
                    intercambia(i,j);
            }
            if (i != der)
                intercambia(i, der);
            if (izq != i)
                quickSort(izq,anterior(i));
            if (i != der)
                quickSort(i->getSig(), der);
        }
        void NuevoIndex()
        {
            cargaIndice(); quickSortAscend();
            ofstream newfile("IndiceP.txt");
            NODO* aux = ancla;
            while (aux!=NULL)
            {
                newfile << aux->getDato().getLlaveP() << DELIM_CAR << aux->getDato().referencia << endl;
                aux = aux->getSig();
            }
            newfile.close();
        }
};

#endif // LISTALIGADA_H


listaligada2.h
Código: [Seleccionar]

#ifndef LISTALIGADA2_H
#define LISTALIGADA2_H
#include <fstream>
#include <iostream>
#include "indices.h"
#include "metodos.h"

using namespace std;

class NODO2
{
    private:
        NODO2* sig;
        IndiceS dato;

    public:
        NODO2() { sig = NULL; }
        NODO2(const IndiceS& e) : sig(NULL), dato(e) {}

        IndiceS getDato() { return dato; }
        void setDato(const IndiceS& e) { dato = e; }

        NODO2* getSig() { return sig; }
        void setSig(NODO2* p)  { sig = p; }
};

class ListaLigada2
{
    private:
        NODO2* ancla;

    public:
        ListaLigada2() { ancla = NULL; }
        ~ListaLigada2() { eliminartodo(); }

        NODO2* primero() {return ancla;}
        NODO2* ultimo()
        {
            if (vacia())
                return NULL;
            NODO2* aux = ancla;
            while (aux->getSig() != NULL)
                aux = aux->getSig();

            return aux;
        }
        NODO2* anterior(NODO2* pos)
        {
            if (vacia() || pos == ancla)
                return nullptr;

            NODO2* aux = ancla;
            do
            {
                if (aux->getSig()==pos)
                    return aux;
                aux = aux->getSig();
            } while (aux != ancla);
            return nullptr;
        }
        NODO2* siguiente(NODO2* pos)
        {
            if (vacia() || pos == NULL)
                return nullptr;
            return pos->getSig();
        }
        NODO2* encuentra(string elem)
        {
            if (vacia())
                return nullptr;
            NODO2* aux = ancla;
            while (aux!=NULL && aux->getDato().getColor() != elem)
                aux = aux->getSig();
            return aux;
        }
        string recupera(NODO2* pos)
        {
            if (vacia() || pos==NULL)
            {
                cout << "\n Datos insuficientes." << endl;
                return 0;
            } string elem;
            elem = (string) pos->getDato().llave;
            return elem;
        }


        bool valido(NODO2* pos)
        {
            NODO2* aux = ancla;
            while (aux!=NULL)
            {
                if (aux==pos)
                    return true;
                aux = aux->getSig();
            }
            return false;
        }
        bool vacia()
        {
            if (ancla==NULL)
                return true;
            return false;
        }
        void insertar(NODO2* pos, IndiceS elemento)
        {
            if (pos != NULL && !valido(pos))
                cout << "\n ERROR! Posicion invalida." << endl;

            NODO2* aux = new NODO2(elemento);

            if (aux==NULL)
                cout << "\n Memoria insuficiente." << endl;
            if (pos==NULL)
            {
                aux->setSig(ancla);
                ancla = aux;
            }
            else
            {
                aux->setSig(pos->getSig());
                pos->setSig(aux);
            }
        }
        void eliminar(NODO2* pos)
        {
            if (vacia() || pos == NULL)
            {
                cout << "\n Datos insuficientes." << endl;
                return;
            }
            if (pos==ancla)
                ancla = ancla->getSig();
            else
                anterior(pos)->setSig(pos->getSig());

            delete pos;
        }
        void eliminartodo()
        {
            NODO2* aux;
            while (ancla!=NULL)
            {
                aux = ancla;
                ancla = ancla->getSig();
                delete aux;
            }
        }

        void imprimeIndiceRAM()
        {
            if (vacia())
            {
                cout << "\n Datos insuficientes." << endl;
                return ;
            }
            NODO2* aux = ancla;
            while (aux!=NULL)
            {
                cout << "  - CODIGO  : " << aux->getDato().llave << endl;
                cout << "  - COLOR   : " << aux->getDato().getColor() << endl;
                aux = aux->getSig();
            }
        }
        void cargaIndice()
        {
            ifstream leerIndiceS("IndiceAux2.txt");

            if (!leerIndiceS.good())
                cout << "\n Ha ocurrido un error en la apertura del archivo o no se encuentra. Saliendo del programa . . . " << endl;
            else
            {
                char llave[10], color[15];
                while (!leerIndiceS.eof())
                {
                    IndiceS indice;
                    leerIndiceS.getline(color,10,DELIM_CAR); trim(color,' ');
                    leerIndiceS.getline(llave,20,DELIM_CAR); trim(llave,' ');
                    indice.setColor(color); indice.llave = llave;

                        llave[0]='\0'; color[0]='\0';
                        if (leerIndiceS.eof()) {break;}
                        insertar(ultimo(),indice);

                }
            }
            cout << "\t El indice secundario ha sido cargado." << endl;
            leerIndiceS.close();
        }

        void intercambia(NODO2* a, NODO2* b)
        {
            IndiceS aux = a->getDato();
            a->setDato(b->getDato());
            b->setDato(aux);
        }
        void quickSortAscend() { quickSort(primero(),ultimo()); }
        void quickSort(NODO2* izq, NODO2* der)
        {
            if (izq == der)
                return;
            NODO2* i = izq;
            NODO2* j = der;

            while (i!=j)
            {
                while(i != j && i->getDato().getColor() <= der->getDato().getColor())
                    i = i->getSig();

                while(i != j && i->getDato().getColor() >= der->getDato().getColor())
                    j = anterior(j);

                if (i!=j)
                    intercambia(i,j);
            }
            if (i != der)
                intercambia(i, der);
            if (izq != i)
                quickSort(izq,anterior(i));
            if (i != der)
                quickSort(i->getSig(), der);
        }
        void NuevoIndex()
        {
            cargaIndice(); quickSortAscend();
            ofstream newfile("IndiceS.txt");
            NODO2* aux = ancla;
            while (aux!=NULL)
            {
                newfile << aux->getDato().color<< DELIM_CAR << aux->getDato().llave  << endl;
                aux = aux->getSig();
            }
            newfile.close();
        }
};
#endif //LISTALIGADA2_H


Ornelas420

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ayuda con programa de sistema de archivos [C++]
« Respuesta #2 en: 08 de Abril 2018, 10:50 »

indices.h
Código: [Seleccionar]

#ifndef INDICES_H
#define INDICES_H

using namespace std;

struct IndiceP
{
    char llave_primaria[6];
    long int referencia;

    void setLlaveP(char* cadena_codigo)
    {
        strcpy(llave_primaria,cadena_codigo);
    }

    string getLlaveP()
    {
        string LlaveP;
        LlaveP = llave_primaria;
        return LlaveP;
    }
};

struct IndiceS
{
    string llave; char color[15];

    void setColor(char* cadena_color)
    {
        strcpy(color,cadena_color);
    }

    string getColor()
    {
        string colorI;
        colorI = color;
        return colorI;
    }

};

#endif  // INDICES_H


metodos.h
Código: [Seleccionar]

#ifndef METODOS_H
#define METODOS_H
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdio>
#include <time.h>
#include <string.h>
#include <string>
#include "extra.h"
#include "indices.h"
#include "listaligada.h"
#include "listaligada2.h"

using namespace std;

char file_name[20];
char buffer[TamMaxREG+1];
char resp, r;
long int disby;
int long_reg;

struct zapato
{
    char codigo[6];
    char nombre[30];
    char descripcion[128];
    char talla[5];
    char color[15];
    char categoria[5];
}item, obj;

void inicioArchivo()
{
    int file_choice;

    cout << "\t Que es lo que desea hacer? " << endl;
    cout << "\t 1)   CREAR archivo" << endl;
    cout << "\t 2)   ABRIR archivo" << endl;
    cout << "\t - Ingresa la opcion: "; fflush(stdin); cin >> file_choice;
    cout << endl << endl;

    switch(file_choice)
    {
        case 1:
            {
                cout << "\t Escribe el nombre del archivo a crear: "; fflush(stdin); cin.getline(file_name,20);
                ofstream crear(file_name);
                if (crear.fail())
                {

                }
                else
                    cout << "\n\n El archivo ha sido creado con exito. Continua el programa . . .  " << endl;

                cin.get();
                break;
            }

        case 2:
            {
                cout << "\t Escribe el nombre del archivo que deseas abrir: "; fflush(stdin); cin.getline(file_name,20);
                ifstream abrir(file_name);
                if (!abrir.good())
                {
                    cout << "\n\n Ha ocurrido un error en la apertura del archivo o no se encuentra. Saliendo del programa . . . " << endl;
                    exit(1);
                }
                else
                    cout << "\n\n El archivo ha sido cargado con exito. Continua el programa . . .  " << endl;

                cin.get();
                break;
            }
    }
}

void crear_Codigo(char cadena1[6],char cadena2[5],int numb)
{
    char c1[1] = {'M'}, c2[1] = {'-'};
    char c3[4]; itoa(numb,c3,10);
    strncat(cadena1, c1,1); strncat(cadena1, c3, 3);
    strncat(cadena1,c2,1); strncat(cadena1,cadena2,1);
}

void ordenarImprimirIndiceP()
{
    ListaLigada Lista1; ListaLigada2 Lista2;
    Lista1.NuevoIndex(); Lista1.~ListaLigada();
    Lista2.NuevoIndex(); Lista2.~ListaLigada2();
}


void agregarRegistro()
{
    IndiceP newIndex; IndiceS newIndex2;
    ListaLigada Lista; ListaLigada2 Lista2;
    ofstream archivo(file_name, ios::app);
    ofstream IndicePrimario("IndiceAux1.txt", ios::app);
    ofstream IndiceSecundario("IndiceAux2.txt", ios::app);

    cout << "\n\t   ...::: AGREGAR REGISTRO :::... \n\n" << endl;
    cout << "\t Escribe los datos que se te piden. " << endl;
    do
    {

        buffer[0] = {'\0'};
        item.nombre[0] = {'\0'};
        item.descripcion[0] = {'\0'};
        item.codigo[0] = {'\0'};
        item.descripcion[0] = {'\0'};
        item.talla[0] = {'\0'};
        item.categoria[0] = {'\0'};

        cout << "\n\t   - Nombre      : "; fflush(stdin); cin.getline(item.nombre,30); conver_Mayus(item.nombre);
        trim(item.nombre,' '); campo_a_buffer(buffer,item.nombre);
        cout << "\t   - Descripcion : "; fflush(stdin); cin.getline(item.descripcion,128); conver_Mayus(item.descripcion);
        trim(item.descripcion,' '); campo_a_buffer(buffer,item.descripcion);
        cout << "\t   - Talla       : "; fflush(stdin); cin.getline(item.talla,5);
        trim(item.talla,' '); campo_a_buffer(buffer,item.talla);
        cout << "\t   - Color       : "; fflush(stdin); cin.getline(item.color,15); conver_Mayus(item.color);
        trim(item.color,' '); campo_a_buffer(buffer,item.color);
        cout << "\t   - Categoria   : (1. Tacon, 2.Agujetas y mocasines, 3. Botas, 4. Botines)" << endl;
        cout << "\t     Selecciona un numero: "; fflush(stdin); cin.getline(item.categoria,5);

        crear_Codigo(item.codigo, item.categoria, generaNumRandom());

        cout << "\t   - CODIGO      : " << item.codigo << endl;
        campo_a_buffer(buffer,item.codigo);

        newIndex.setLlaveP(item.codigo); newIndex2.llave = newIndex.getLlaveP();
        newIndex.referencia = archivo.tellp(); disby = archivo.tellp(); newIndex2.setColor(item.color);

        IndicePrimario << newIndex.getLlaveP() << '|' << newIndex.referencia <<  '|';
        IndiceSecundario << newIndex2.getColor() << '|' << newIndex2.llave << '|';

        archivo.seekp(0,archivo.end);
        long_reg = strlen(buffer);
        archivo << disby << DELIM_CAD; archivo.write(buffer,long_reg); archivo << endl;

        cout << "\t Deseas seguir registrando productos? S/N: "; fflush(stdin); cin >> r; resp = toupper(r);
        cout << endl;
    } while (resp=='S');
    ordenarImprimirIndiceP();
    archivo.close(); IndicePrimario.close(); IndiceSecundario.close();
}

bool buscarRegistro()
{
    char search_key[10];  bool encontrado = false;
    char x; int i; long int refer; int bopc;
    ifstream leerIndiceP("IndiceP.txt"); ifstream leerIndiceS("IndiceS.txt");
    cout << "\n\t   ...::: BUSCAR REGISTRO :::... \n\n" << endl;
    cout << "   1) Busqueda por CODIGO." << endl;
    cout << "   2) Busqueda por COLOR." << endl;
    cout << "  - Selecciona el tipo de busqueda a realizar: "; cin >> bopc;
    switch(bopc)
    {
        case 1:
            {
                cout << "\n   - Escribe el codigo a buscar: "; fflush(stdin); cin.getline(search_key,20); conver_Mayus(search_key);
                trim(search_key,' ');
                if (!leerIndiceP.good())
                    cout << "\n Ha ocurrido un error en la apertura del archivo o no se encuentra. Saliendo del programa . . . " << endl;
                else
                {
                    char llave[10], referencia[10];
                    while (!leerIndiceP.eof())
                    {
                        IndiceP indice;  i=0;
                        do
                        {
                            leerIndiceP.read((char*)&x,1);
                            if (x!=DELIM_CAR)
                            {
                                llave[i] = x;
                                i++;
                            }
                        } while (x!=DELIM_CAR && !leerIndiceP.eof());
                        llave[i]='\0';
                        leerIndiceP.getline(referencia,20); trim(referencia,' ');

                        indice.setLlaveP(llave); indice.referencia = atoi(referencia);
                        llave[0]='\0'; referencia[0]='\0';

                        if (indice.getLlaveP()==search_key)
                        {
                            char y; int j = 0; char refers[6];
                            refer = indice.referencia;
                            ifstream leerMain(file_name);
                            obj.nombre[0] = {'\0'}; obj.descripcion[0] = {'\0'};
                            obj.codigo[0] = {'\0'}; obj.color[0] = {'\0'};
                            obj.talla[0] = {'\0'}; obj.categoria[0] = {'\0'};
                            refers[0] = '\0';
                            leerMain.seekg(refer);
                            do
                            {
                                leerMain.read((char*)&y,1);
                                if (y!=DELIM_CAR)
                                {
                                    refers[j]=y;
                                    j++;
                                }
                            } while(y!=DELIM_CAR && !leerMain.eof());
                            refers[j]='\0'; j=0;
                            do
                            {
                                leerMain.read((char*)&y,1);
                                if (y!=DELIM_CAR)
                                {
                                    obj.nombre[j]=y;
                                    j++;
                                }
                            } while(y!=DELIM_CAR && !leerMain.eof());
                            obj.nombre[j]='\0'; char showname[30];
                            strcat(showname,obj.nombre); trim(showname,' ');

                            leerMain.getline(obj.descripcion,100,DELIM_CAR); trim(obj.descripcion,' ');
                            leerMain.getline(obj.talla,10,DELIM_CAR); trim(obj.talla,' ');
                            leerMain.getline(obj.color,20,DELIM_CAR); trim(obj.color,' ');
                            leerMain.getline(obj.codigo,10,DELIM_CAR); trim(obj.codigo,' ');

                            cout << "\n\t   - Nombre      : " << showname << endl;
                            cout << "\t   - Descripcion : " << obj.descripcion << endl;
                            cout << "\t   - Talla       : " << obj.talla << endl;
                            cout << "\t   - Color       : " << obj.color <<  endl;
                            cout << "\t   - CODIGO      : " << obj.codigo << endl;
                            cout << "\n\t Registro encontrado con EXITO!" << endl;

                            showname[0]='\0';
                            leerMain.close();  encontrado = true;
                        } if (leerIndiceP.eof()) {break;}

                    } leerIndiceP.close(); if (encontrado==false) {cout << "\n\t Registro no encontrado. Regresando al menu . . . " << endl;}
                     return encontrado;
            }
        }
        case 2:
            {
                cout << "   - Escribe el color a buscar: "; fflush(stdin); cin.getline(search_key,10); conver_Mayus(search_key);
                trim(search_key,' ');
                if (!leerIndiceS.good())
                    cout << "\n Ha ocurrido un error en la apertura del archivo o no se encuentra. Saliendo del programa . . . " << endl;
                else
                {
                    char colour[15]; char llave[10];
                    while (!leerIndiceS.eof())
                    {
                        IndiceS indice; i=0;

                        do
                        {
                            leerIndiceS.read((char*)&x,1);
                            if (x!=DELIM_CAR)
                            {
                               colour[i]=x;
                               i++;
                            }
                        } while (x!=DELIM_CAR && !leerIndiceS.eof()); colour[i]='\0'; i=0;
                        leerIndiceS.getline(llave,20); trim(llave,' ');
                        indice.setColor(colour); string nstr(llave); indice.llave = nstr;
                        llave[0]='\0'; colour[0]='\0';

                        if (indice.getColor() == search_key)
                        {
                            char y; int j = 0; char refers[6];
                            ifstream leerMain(file_name);
                            obj.nombre[0] = {'\0'}; obj.descripcion[0] = {'\0'};
                            obj.codigo[0] = {'\0'}; obj.color[0] = {'\0'};
                            obj.talla[0] = {'\0'}; obj.categoria[0] = {'\0'};
                            refers[0] = '\0';

                            do
                            {
                                leerMain.read((char*)&y,1);
                                if (y!=DELIM_CAR)
                                {
                                    refers[j]=y;
                                    j++;
                                }
                            } while(y!=DELIM_CAR && !leerMain.eof()); refers[j]='\0'; j=0;
                            do
                            {
                                leerMain.read((char*)&y,1);
                                if (y!=DELIM_CAR)
                                {
                                    obj.nombre[j]=y;
                                    j++;
                                }
                            } while (y!=DELIM_CAR && !leerMain.eof());
                            obj.nombre[j]='\0'; char showname[30];
                            strcat(showname,obj.nombre); trim(showname,' ');

                            leerMain.getline(obj.descripcion,100,DELIM_CAR); trim(obj.descripcion,' ');
                            leerMain.getline(obj.talla,10,DELIM_CAR); trim(obj.talla,' ');
                            leerMain.getline(obj.color,20,DELIM_CAR); trim(obj.color,' ');
                            leerMain.getline(obj.codigo,10,DELIM_CAR); trim(obj.codigo,' ');

                            if (strcmp(search_key,obj.color) == 0)
                            {
                                cout << "\n\t   - Nombre      : " << showname << endl;
                                cout << "\t   - Descripcion : " << obj.descripcion << endl;
                                cout << "\t   - Talla       : " << obj.talla << endl;
                                cout << "\t   - Color       : " << obj.color <<  endl;
                                cout << "\t   - CODIGO      : " << obj.codigo << endl;
                                cout << "\n\t Registro encontrado con EXITO!" << endl;
                                encontrado = true;
                                obj.categoria[0]='\0'; obj.nombre[0]='\0';
                                obj.color[0]='\0'; obj.descripcion[0]='\0';
                                obj.codigo[0]='\0'; obj.talla[0]='\0';
                            }

                            showname[0]='\0';
                            leerMain.close();
                        } if(leerIndiceS.eof()) {break;}

                    } leerIndiceS.close(); if (encontrado==false) {cout << "\n\t Registro no encontrado. Regresando al menu . . . " << endl;}
                    return encontrado;
                }
            }
    }
}
#endif // METODOS_H_INCLUDED



extra.h
Código: [Seleccionar]

#ifndef EXTRA_H
#define EXTRA_H
#define DELIM_CAD "|"
#define DELIM_CAR '|'
#define TamMaxREG 512
#define campo_a_buffer(br, cad) strcat(br, cad); strcat(br, DELIM_CAD);

using namespace std;

void Titulo_Encabezado() /* Función que imprime los datos principales del alumno en el encabezado del programa */
{
    system("cls");
    cout << "\t\t  ------------------------------------------------------------------------------  " << endl;
    cout << "\t\t |                       Estructuras de Datos II: Practica 2                    | " << endl;
    cout << "\t\t |                    Maestra: Graciela Lara Lopez - Seccion D08                | " << endl;
    cout << "\t\t |                 ...::: Sistema de Archivos - PIKOLINOS :::...                | " << endl;
    cout << "\t\t  ------------------------------------------------------------------------------  " << endl;
    cout << "\t\t |            Alumno: Jose Andres Ornelas Ayala     - Codigo: 216787973         | " << endl;
    cout << "\t\t |            Alumno: Jorge Miguel Nunies Fernandez - Codigo: 215862793         | " << endl;
    cout << "\t\t  ------------------------------------------------------------------------------  " << endl;
}

void conver_Mayus(char palabra[TamMaxREG]) /* Función que nos convierte cualquier cadena de caracteres a mayusculas */
{
    for (unsigned int i=0; i<strlen(palabra); i++)
        palabra[i]=toupper(palabra[i]);
}


int generaNumRandom() /* Función que nos genera un número aleatorio de 3 cifras */
{
    int number;
    srand(time(NULL));
    number = rand() % (100-999);
    if (number < 100)
        number = number + 100;
    return number;
}

char* trim(char *s, char c) /* Función que nos completa los espacios vacíos de un arreglo de caracteres con el caracter nulo "\0" */
{
    int i;
    for(i = strlen(s) - 1 ; i >= 0 && s[i] == c ; i--);
        s[++i] = '\0';
    for(i = 0 ; s[i] && s[i] == c ; i++);
        if(i)
            memmove(s , s + i , strlen(s) - i + 1);
    return s;
}

#endif // EXTRA_H_INCLUDED


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".