Skip to content

Commit

Permalink
Lectura de Binario
Browse files Browse the repository at this point in the history
  • Loading branch information
Joacoarce committed Nov 23, 2023
1 parent 33f2dad commit 8e5a320
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 77 deletions.
18 changes: 10 additions & 8 deletions Proyecto/libreria/Funciones.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,7 @@ struct actividad{
};
typedef struct actividad Sact;

struct GIMNASIO{
Scliente* clientes;//Hago uso de memoria dinamica porque no se cuantos clientes voy a recibir
Sact* actividades;//se que hay 6 actividades pero usar la memoria dinamica asegura un uso mas general del codigo
Smusc* musculacion;
int CantClases,CantClientes,ClientesMax;
};
typedef struct GIMNASIO Sgym;

//--------------------------------------PARA EL BINARIO----------------------------------------------
struct Inscripcion{
u_int idCurso;
Expand All @@ -64,6 +58,14 @@ struct Asistencias{

};
typedef struct Asistencias Sasis;
struct GIMNASIO{
Scliente* clientes;//Hago uso de memoria dinamica porque no se cuantos clientes voy a recibir
Sact* actividades;//se que hay 6 actividades pero usar la memoria dinamica asegura un uso mas general del codigo
Smusc* musculacion;
int CantClases,CantClientes,ClientesMax;
Sasis* asistencias;
};
typedef struct GIMNASIO Sgym;

//-----------------------------------------FUNCIONES-------------------------------------------------
ini inicializarVariablesFijas(Sgym* Gimnasio);//puedo llamar a esta funcion para "reiniciar el dia"
Expand All @@ -86,7 +88,7 @@ ini ResizeAsistencias(Sasis*& Asist,int &tam,int ntam);
Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio);//deberia usar resize u otros metodos pero tengo una variable que inicia los valores de las actividades con un numero fijo
int ContarCantClientes(ifstream& Archivo);//cuenta las lineas del archivo y devuelve el numero total
Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int cantclientesT);
Archi ChequearDatos(ifstream& Clientes,int*& posErrNom,int*& posErrApe, int*& posErrorTel,int*& posErrorFecha);
//Archi ChequearDatos(ifstream& Clientes,int*& posErrNom,int*& posErrApe, int*& posErrorTel,int*& posErrorFecha);
Archi LeerAsistencias(ifstream& Archivo,Sasis*& Asis,int*cantidadAsis);
void SepararFecha(string fecha, int& dia, int& mes, int& ano);
#endif // FUNCIONES_H
85 changes: 45 additions & 40 deletions Proyecto/libreria/FuncionesImp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,12 +295,12 @@ Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio){

Archivo.clear();//reestablezco el flujo correcto del archivo
Archivo.seekg(0,ios::beg);//envio el puntero que recorre el archivo al inicio
//---------------------VARIABLES NECESARIAS PARA EL ARCHIVO-------------------------
//---------------------VARIABLES NECESARIAS PARA EL ARCHIVO-------------------------
str header,line;//manejo de archivos
char delimiter= ',';//Es un csv entonces por cada coma debe contar un elemento

getline(Archivo,header);//separo el encabezado
//---------------------AUXILIARES----------------------
//---------------------AUXILIARES----------------------
str NomAct,horarios,id;//despues debo castearlos
int i,j,k,l,m,n,o,horariosI;
i=j=k=l=m=n=o=0;
Expand All @@ -319,19 +319,19 @@ Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio){
i++;
}
else if(NomAct.compare("Yoga")==0){
Gimnasio->actividades[1].horarios[j]=stoi(horarios);
Gimnasio->actividades[1].IdClase[j]=stoi(id);
j++;
Gimnasio->actividades[1].horarios[j]=stoi(horarios);
Gimnasio->actividades[1].IdClase[j]=stoi(id);
j++;
}
else if(NomAct.compare("Pilates")==0){
Gimnasio->actividades[2].horarios[k]=stoi(horarios);
Gimnasio->actividades[2].IdClase[k]=stoi(id);
k++;
}
else if(NomAct.compare("Stretching")==0){
Gimnasio->actividades[3].horarios[l]=stoi(horarios);
Gimnasio->actividades[3].IdClase[l]=stoi(id);
l++;
Gimnasio->actividades[3].horarios[l]=stoi(horarios);
Gimnasio->actividades[3].IdClase[l]=stoi(id);
l++;
}
else if(NomAct.compare("Zumba")==0){
Gimnasio->actividades[4].horarios[m]=stoi(horarios);
Expand All @@ -350,9 +350,9 @@ Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio){
}
}else if(horariosI>=7&&horariosI<8||horariosI>=19&&horariosI<=21){
if(NomAct.compare("Musculacion")==0){
Gimnasio->musculacion->horarios[o]=stoi(horarios);
Gimnasio->musculacion->iDClase[o]=stof(id);
o++;
Gimnasio->musculacion->horarios[o]=stoi(horarios);
Gimnasio->musculacion->iDClase[o]=stof(id);
o++;
}
}
}
Expand Down Expand Up @@ -432,40 +432,43 @@ void SepararFecha(string fecha, int& dia, int& mes, int& anio) {
getline(ss, campo, delimitador);
anio = stoi(campo);
}
/*
Archi ChequearDatos(ifstream& Clientes,int*& posErrNom,int*& posErrApe, int*& posErrorTel,int*& posErrorFecha){

}
//Archi ChequearDatos(ifstream& Clientes,int*& posErrNom,int*& posErrApe, int*& posErrorTel,int*& posErrorFecha){
//}
Archi LeerAsistencias(ifstream& Archivo,Sasis*& asistencia,int*cantidadAsis){
if(!Archivo.is_open())
return ErrAbrirArchivo;
// INICIALIZO VARIABLES
int cantAsistencias = 0;
int contadorAsistencias = 0;
Archivo.clear();
Archivo.seekg(0,ios::beg);
//Leo hasta el final el archivo
asistencia=new Asistencias;
while (!Archivo.eof()) {
Archivo.read((char*)&asistencia->idCliente, sizeof(u_int));//uso int y no u_int por como lo declare al tipo de dato
Archivo.read((char*)&asistencia->cantInscriptos, sizeof(u_int));
Inscripcion* registrados= new Inscripcion[asistencia->cantInscriptos];
Inscripcion*Aux=registrados;//mismo tamaño
for(int i=0;i<asistencia->cantInscriptos;i++){
Archivo.read((char*)Aux,sizeof(Inscripcion));
Aux++;//Muevo el puntero a la siguiente pos
//-----------------------------VARIABLES------------------------------------
int i=0;
u_int contadorasis=0;
Sasis* Aux=new Sasis;
while(Archivo.read((char*)&Aux->idCliente,sizeof(u_int))&&!Archivo.eof()){
Archivo.read((char*)&Aux->cantInscriptos,sizeof(u_int));
Inscripcion* Inscriptos=new Inscripcion[Aux->cantInscriptos];
Inscripcion* AuxI=Inscriptos;
for(int j=0;j<Aux->cantInscriptos;j++){
Archivo.read((char*)&AuxI[j],sizeof(Inscripcion));
}
asistencia->CursoYfecha=Aux;
//Cuento la cantidad de asistencias(creo)
contadorAsistencias++;
ResizeAsistencias(asistencia,cantAsistencias,contadorAsistencias);//No es lo mas optimo pero no entiendo del todo como funcionan los binarios
contadorasis++;
}//Soy consciente que esto esta pegando datos innecesariamente pero no se me ocurrio otra manera de contar cuantos hay
delete Aux;
Archivo.clear();
Archivo.seekg(0,ios::beg);
asistencia=new Sasis;
ResizeAsistencias(asistencia,*cantidadAsis,contadorasis);
while(!Archivo.eof()&&i<*cantidadAsis){
Archivo.read((char*)&asistencia[i].idCliente,sizeof(u_int));
Archivo.read((char*)&asistencia[i].cantInscriptos,sizeof(u_int));

Inscripcion* Inscriptos=new Inscripcion[asistencia[i].cantInscriptos];
asistencia[i].CursoYfecha=Inscriptos;
for(int j=0;j<asistencia[i].cantInscriptos;j++){
Archivo.read((char*)&asistencia[i].CursoYfecha[j],sizeof(Inscripcion));
}
i++;
}
cantidadAsis=&contadorAsistencias;

return ArchivoManipuladoConExito;
}
Expand All @@ -482,7 +485,10 @@ ini ResizeAsistencias(Sasis*& Asist,int &tam,int ntam){
u_int longitud=(tam<ntam)?tam:ntam;
for(u_int i=0;i<longitud;i++)
Aux[i]=Asist[i];
(tam>1)? delete[] Asist:delete Asist;
if(tam>1)
delete[] Asist;
else
delete Asist;
Asist=Aux;
tam=ntam;
return inicializacionexitosa;
Expand All @@ -492,6 +498,5 @@ ini ResizeAsistencias(Sasis*& Asist,int &tam,int ntam){
return inicializacionexitosa;
}else ErrReservarmemoria;

}*/

}

29 changes: 20 additions & 9 deletions Proyecto/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,34 @@

int main() {
srand(time(NULL));
//---------------------------------------------VARIABLES------------------------------------------------
//---------------------------------------------VARIABLES------------------------------------------------
ifstream InputActividades,InputClientes,InputAsistencias;
ofstream TextoParaUbicarArchivo,InformeGym;
int cont=0;
ofstream TextoParaUbicarArchivo,InformeGym,InformeAsis;
int cont=0,cantasis=0;
Sgym* Gimnasio=new Sgym;
//--------------------------------------INICIALIZACION/APERTURA-----------------------------------------
//--------------------------------------INICIALIZACION/APERTURA-----------------------------------------
TextoParaUbicarArchivo.open("../Ubicacion.txt");
TextoParaUbicarArchivo<<"Hola";
InputActividades.open("../iriClasesGYM.csv");
InputClientes.open("../iriClientesGYM.csv");
InputAsistencias.open("../asistencias_1697673600000.dat",ios::binary);
InformeGym.open("../InformeGym.txt");
//InformeAsis.open("../asistencias_1697673600000.dat",ios::binary);

if (!InputActividades.is_open())
cout << "Error al abrir archivo Actividades" << endl;
if (!InputClientes.is_open())
cout << "Error al abrir archivo Clientes" << endl;
if(!InputAsistencias.is_open())
cout<<"Error al abrir archivo Asistencias"<< endl;
//------------------------------------------INICIALIZO LAS VARIABLES----------------------------------------------------------
//------------------------------------------INICIALIZO LAS VARIABLES----------------------------------------------------------
inicializarVariablesFijas(Gimnasio);
LeerArchivoActividades(InputActividades,Gimnasio);
cont=ContarCantClientes(InputClientes);
LeerArchivoClientes(InputClientes,Gimnasio,Gimnasio->CantClientes,cont);
LeerAsistencias(InputAsistencias,Gimnasio->asistencias,&cantasis);

//---------------------------------------------DATOS DE PRUEBA EXITOSOS-------------------------------------------------------
//---------------------------------------------DATOS DE PRUEBA EXITOSOS-------------------------------------------------------
str ActividadesCorrectas[7]={"Spinning","Stretching","Boxeo","Musculacion","Yoga","Zumba","Pilates"};
u_int cantActs=7;
str ActElegida;
Expand Down Expand Up @@ -66,11 +68,14 @@ int main() {
contCancelaciones++;
else
contErrores++;
}
for(int i=0;i<20;i++){

}
InformeGym<<"------------------CANCELACIONES------------------"<<endl;
InformeGym<<"Se Cancelaron: "<<contCancelaciones<<" actividades con exito"<<endl;
InformeGym<<"Hubo "<<contErrores<<" errores al cancelar las reservas"<<endl;
/*
/*
//--------------------------------DATOS DE PRUEBA QUE TIENEN QUE FALLAR-------------------------------------------------------
str ActividadesIncorrectas[7]={"Spinng","Streing","Box","Muscacion","Yoa","Zmba","Pites"};
u_int cantActs=7;
Expand Down Expand Up @@ -106,18 +111,24 @@ int main() {
contErrores++;
}
*/
//-----------------------------------------------CERRAR ARCHIVOS--------------------------------------------------------------
//-----------------------------------------------CERRAR ARCHIVOS--------------------------------------------------------------
TextoParaUbicarArchivo.close();
InputClientes.close();
InputActividades.close();
InputAsistencias.close();
InformeGym.close();
//--------------------------------------------ELIMINACION DINAMICAS----------------------------------------------------------
//InformeAsis.close();

//--------------------------------------------ELIMINACION DINAMICAS----------------------------------------------------------
for (int i = 0; i < Gimnasio->CantClases; ++i) {
delete[] Gimnasio->actividades[i].horarios;
delete[] Gimnasio->actividades[i].cupos;
delete[] Gimnasio->actividades[i].IdClase;
}
for (int i = 0; i < cantasis; i++) {
delete[] Gimnasio->asistencias[i].CursoYfecha;
}
delete[] Gimnasio->asistencias;
delete[] Gimnasio->actividades;
delete[] Gimnasio->musculacion->horarios;
delete[] Gimnasio->musculacion->iDClase;
Expand Down
41 changes: 21 additions & 20 deletions Proyecto/testing/tst_proyecto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ TEST_CASE("CASO 1")
CHECK(Gimnasio->actividades[1].cupos[2]==29);//esa es la actividad que quiero reservar
CHECK(Gimnasio->clientes[0].iDClasereserv[1]!=0);
}
/*
/*
SECTION("CANCELAR RESERVA"){
int posN,posH,posrepeN;
posrepeN=-2;
Expand Down Expand Up @@ -152,7 +152,7 @@ TEST_CASE("CASO 1")
delete[] Gimnasio->clientes;


delete Gimnasio;
delete Gimnasio;
}
TEST_CASE("Inicializacion"){
Sgym* Gimnasio=new Sgym;
Expand Down Expand Up @@ -182,9 +182,9 @@ TEST_CASE("ArchivoActividades"){
InputActividades.open("../iriClasesGYM.csv");

SECTION("LeerArchivos"){
LeerArchivoActividades(InputActividades,Gimnasio);
REQUIRE(Gimnasio!=nullptr);
CHECK(Gimnasio->actividades[4].horarios[3]==16);
LeerArchivoActividades(InputActividades,Gimnasio);
REQUIRE(Gimnasio!=nullptr);
CHECK(Gimnasio->actividades[4].horarios[3]==16);
}


Expand All @@ -207,48 +207,49 @@ TEST_CASE("ArchivoClientes"){
ifstream InputClientes;
InputClientes.open("../iriClientesGYM.csv");
Sgym* Gimnasio=new Sgym;
/*
/*
SECTION("CONTARCLIENTES"){
int cont;
cont=ContarCantClientes(InputClientes);
REQUIRE(cont!=-1);
}
}*/

SECTION("LEERCLIENTES"){
SECTION("LEERCLIENTES"){
int cont;
cont=ContarCantClientes(InputClientes);
REQUIRE(cont==250);
LeerArchivoClientes(InputClientes,Gimnasio,Gimnasio->CantClientes,3);
REQUIRE(Gimnasio->clientes[2].Ape.compare("Lanaro"));
REQUIRE(Gimnasio->clientes[2].Ape=="Lanaro");

delete[] Gimnasio->clientes;
}


InputClientes.close();*/
InputClientes.close();
delete Gimnasio;




}
/*TEST_CASE("BINARIO"){
Sasis* asistencias=new Sasis;
TEST_CASE("BINARIO"){
Sgym* Gimnasio=new Sgym;
ifstream InputAsistencias;
InputAsistencias.open("../asistencias_1697673600000.dat",ios::binary);
SECTION("LEER ASISTENCIAS"){
int cantAsis;
LeerAsistencias(InputAsistencias,asistencias,&cantAsis);
SECTION("LEER ASISTENCIAS"){
int cantAsis=0;
LeerAsistencias(InputAsistencias,Gimnasio->asistencias,&cantAsis);
REQUIRE(cantAsis!=0);
REQUIRE(Gimnasio->asistencias[3].idCliente==6);
for (int i = 0; i < cantAsis; i++) {
delete[] asistencias[i].CursoYfecha;
delete[] Gimnasio->asistencias[i].CursoYfecha;
}
delete[] asistencias;
delete[] Gimnasio->asistencias;

}
}
InputAsistencias.close();

delete asistencias;
delete Gimnasio;
}
*/


0 comments on commit 8e5a320

Please sign in to comment.