indices.h
#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
#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
#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