Skip to content

Commit

Permalink
Escribir binario y uso de ctime
Browse files Browse the repository at this point in the history
  • Loading branch information
Joacoarce committed Nov 23, 2023
1 parent 8e5a320 commit 907aaf6
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 12 deletions.
1 change: 1 addition & 0 deletions Proyecto/libreria/Funciones.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,6 @@ int ContarCantClientes(ifstream& Archivo);//cuenta las lineas del archivo y devu
Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int cantclientesT);
//Archi ChequearDatos(ifstream& Clientes,int*& posErrNom,int*& posErrApe, int*& posErrorTel,int*& posErrorFecha);
Archi LeerAsistencias(ifstream& Archivo,Sasis*& Asis,int*cantidadAsis);
Archi EscribirBinario(ofstream& Archivo, Sgym Gimnasio,int cantidadAsis);
void SepararFecha(string fecha, int& dia, int& mes, int& ano);
#endif // FUNCIONES_H
13 changes: 13 additions & 0 deletions Proyecto/libreria/FuncionesImp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -499,4 +499,17 @@ ini ResizeAsistencias(Sasis*& Asist,int &tam,int ntam){
}else ErrReservarmemoria;

}
Archi EscribirBinario(ofstream& Archivo, Sgym Gimnasio,int cantidadAsis){
if(!Archivo.is_open())
return ErrAbrirArchivo;
Archivo.seekp(0,ios::end);//situo el puntero al final para no sobreescrbir los datos
for(int i=0;i<cantidadAsis;i++){
Archivo.write((char*)&Gimnasio.asistencias[i].idCliente,sizeof(u_int));
Archivo.write((char*)&Gimnasio.asistencias[i].cantInscriptos,sizeof(u_int));

for(int j=0;j<Gimnasio.asistencias[i].cantInscriptos;j++){
Archivo.write((char*)&Gimnasio.asistencias[i].CursoYfecha[j],sizeof(Inscripcion));
}
}
return ArchivoManipuladoConExito;
}
30 changes: 23 additions & 7 deletions Proyecto/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ int main() {
//---------------------------------------------VARIABLES------------------------------------------------
ifstream InputActividades,InputClientes,InputAsistencias;
ofstream TextoParaUbicarArchivo,InformeGym,InformeAsis;
time_t tiempoActual =time(NULL);
tm* HoraLocal= localtime(&tiempoActual);//esto es una estructura que ayuda con la representacion del tiempo(asi como la fecha y hora)
char nomFecha[50];//esta variable la utilizo como buffer donde se guardara la fecha en fotmato "string"
strftime(nomFecha, sizeof(nomFecha), "%d/%m/%Y", HoraLocal);//esta funcion formatea la fecha y la convierte en un string (%Y es el año en 4 digitos, %m es el mes en dos digitos y %d los dias en dos digitos) ese es el formato que deberia devolver
int cont=0,cantasis=0;
Sgym* Gimnasio=new Sgym;
//--------------------------------------INICIALIZACION/APERTURA-----------------------------------------
Expand All @@ -15,8 +19,8 @@ int main() {
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);
InformeGym.open("../InformeGym.txt",ios::app);//Como no sabia como hacer un archivo por dia opte por reescribir el archivo que tengo solo que agregando la sentencia de nomFecha
InformeAsis.open("../asistencias_1697673600000.dat",ios::binary| ios::app);

if (!InputActividades.is_open())
cout << "Error al abrir archivo Actividades" << endl;
Expand All @@ -35,8 +39,8 @@ int main() {
str ActividadesCorrectas[7]={"Spinning","Stretching","Boxeo","Musculacion","Yoga","Zumba","Pilates"};
u_int cantActs=7;
str ActElegida;
int posN,posH,HorarioRandom,iDrandom,posCliente,contErrores=0,posicionactividadrepetida,contReservas=0,contCancelaciones=0,valorenum;

int posN,posH,HorarioRandom,iDrandom,iDrandomCurso,posCliente,contErrores=0,posicionactividadrepetida,contReservas=0,contCancelaciones=0,valorenum,cantinscriptosRand,cantAsisEscritura;
time_t TiempoRandom;
for(int i=0;i<20;i++){
ActElegida=generarActAlAzar(cantActs,ActividadesCorrectas);//ActividadesValidas
HorarioRandom= 7+rand()%(22-7);//HorariosValidos
Expand All @@ -52,6 +56,7 @@ int main() {
}
cout<<"Se resevraron: "<<contReservas<<" Actividades con exito"<<endl;
cout<<"Hubo "<<contErrores<<" errores al reservar"<<endl;
InformeGym<<"INFORME DEL DIA: "<<nomFecha<<endl;
InformeGym<<"------------------RESERVAS------------------"<<endl;
InformeGym<<"Se reservaron: "<<contReservas<<" actividades con exito"<<endl;
InformeGym<<"Hubo "<<contErrores<<" al reservar"<<endl;
Expand All @@ -69,12 +74,23 @@ int main() {
else
contErrores++;
}
for(int i=0;i<20;i++){

cantAsisEscritura=8;//8 asistencias
//voy a sobreescribir 8 datos y los voy a escribir en el binario
for(int i=0;i<cantAsisEscritura;i++){
iDrandom=1+rand()%(251-1);
Gimnasio->asistencias[i].idCliente=iDrandom;
//la cantidad de inscriptos no la toco para no generar problemas de memoria
for(int j=0;j<Gimnasio->asistencias[i].cantInscriptos;j++){
iDrandomCurso=1+rand()%(60-1);
TiempoRandom = tiempoActual + rand() % 86400; // 86400 segundos en un día (varia un dia respecto del tiempo actual)
Gimnasio->asistencias[i].CursoYfecha[j].idCurso=iDrandomCurso;
Gimnasio->asistencias[i].CursoYfecha[j].fechaInscripcion=TiempoRandom;
}
}
InformeGym<<"------------------CANCELACIONES------------------"<<endl;
InformeGym<<"Se Cancelaron: "<<contCancelaciones<<" actividades con exito"<<endl;
InformeGym<<"Hubo "<<contErrores<<" errores al cancelar las reservas"<<endl;
EscribirBinario(InformeAsis,*(Gimnasio),cantAsisEscritura);
/*
//--------------------------------DATOS DE PRUEBA QUE TIENEN QUE FALLAR-------------------------------------------------------
str ActividadesIncorrectas[7]={"Spinng","Streing","Box","Muscacion","Yoa","Zmba","Pites"};
Expand Down Expand Up @@ -117,7 +133,7 @@ int main() {
InputActividades.close();
InputAsistencias.close();
InformeGym.close();
//InformeAsis.close();
InformeAsis.close();

//--------------------------------------------ELIMINACION DINAMICAS----------------------------------------------------------
for (int i = 0; i < Gimnasio->CantClases; ++i) {
Expand Down
14 changes: 9 additions & 5 deletions Proyecto/testing/tst_proyecto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,16 +203,16 @@ TEST_CASE("ArchivoActividades"){
delete Gimnasio;

}
TEST_CASE("ArchivoClientes"){
/*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"){
int cont;
Expand All @@ -231,24 +231,28 @@ TEST_CASE("ArchivoClientes"){
}
}*/
TEST_CASE("BINARIO"){
Sgym* Gimnasio=new Sgym;
ifstream InputAsistencias;
ofstream EscribirBin;
InputAsistencias.open("../asistencias_1697673600000.dat",ios::binary);
EscribirBin.open("../pruebaasis",ios::binary);

SECTION("LEER ASISTENCIAS"){
int cantAsis=0;
LeerAsistencias(InputAsistencias,Gimnasio->asistencias,&cantAsis);
REQUIRE(cantAsis!=0);
REQUIRE(Gimnasio->asistencias[3].idCliente==6);
EscribirBinario(EscribirBin,*(Gimnasio),cantAsis);
for (int i = 0; i < cantAsis; i++) {
delete[] Gimnasio->asistencias[i].CursoYfecha;
}
delete[] Gimnasio->asistencias;

}
InputAsistencias.close();

EscribirBin.close();
delete Gimnasio;
}

Expand Down

0 comments on commit 907aaf6

Please sign in to comment.