Skip to content

Commit

Permalink
Correccion y Archivos
Browse files Browse the repository at this point in the history
  • Loading branch information
Joacoarce committed Nov 8, 2023
1 parent ba0247c commit a97a42d
Show file tree
Hide file tree
Showing 5 changed files with 231 additions and 39 deletions.
19 changes: 12 additions & 7 deletions Proyecto/libreria/Funciones.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ enum DescartarReserva{ErrorEliminar=-1,Eliminadaconexito=1};
typedef enum DescartarReserva Edesc;
enum inicializar{ErrReservarmemoria=-1,ErrCantidadDeClientesSobrepasada=-2, inicializacionexitosa=1};
typedef enum inicializar ini;
enum Archivos{ErrAbrirArchivo=-1, ArchivoManipuladoConExito=1};
typedef enum Archivos Archi;
struct fecha{
int dia,mes,anio;
};
Expand All @@ -23,7 +25,8 @@ struct cliente{
typedef struct cliente Scliente;
struct musculacion{
Scliente* cliente;//no se cuantos clientes asignare, uso memoria dinamica
int* iDClase,*horarios;
int* iDClase,*horarios,CantHorarios;
str Nombre;

};
typedef struct musculacion Smusc;
Expand All @@ -38,22 +41,24 @@ 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;//solo hay una sala de musculacion no veo la necesidad del uso de memoria dinamica como en actividades
Smusc* musculacion;
int CantClases,CantClientes,ClientesMax;
};
typedef struct GIMNASIO Sgym;

//Buscar,reservar,eliminar reserva, chequear que el cliente tenga tiempo o no superponga acts
//ini inicializarVariablesFijas(Sgym* Gimnasio);//puedo llamar a esta funcion para "reiniciar el dia"
ini inicializarVariablesFijas(Sgym* Gimnasio);//puedo llamar a esta funcion para "reiniciar el dia"
int BuscarActividadPorNombre(Sgym ActsGim,str actividadPasada);//devuelve la posicion donde lo encuentra
int BuscarActividadPorHorario(Sgym ActsGim,int horarioelegido,int posN);//recibira el dato de la otra funcion buscar y devuelve la posicion de la hora
//int BuscarCliente
//bool chequear estado-->me devuelve true o false
//Chequear datos
int ChequeoActs(Scliente misActs,Sgym ActsGim,int posN,int posH);//Retorna la misma posicion
Eres ReservarAct(Sgym* ActsGim,Scliente *misActs,int posN,int posH,int *posRepAct);//devuelve un enum que indica si se agrego correctamente,int *posRepAct,int*posRepHor son posiciones opcionales que devuelve por puntero el codigo si y solo si se superponen los horarios
Edesc CancelarReserva(Sgym* ActsGim,Scliente *misActs,int posN,int posH);//devuelve un enum que indica si se elimino.
//Sacts es puntero porque va a tener que cambiar globalmente la cantidad de cupos,mientras que cliente tendra que cambiar actividad y horario.
//ARCHIVOS
int CantLineas(str file);
void cargar_datos_clientes(str file,Sgym* clientes);
void cargar_datos_acts(str file,Sgym* actividades);
void cargar_datos_musc(str file,Sgym* musculacion);
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);
#endif // FUNCIONES_H
161 changes: 139 additions & 22 deletions Proyecto/libreria/FuncionesImp.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "Funciones.h"
/*ini inicializarVariablesFijas(Sgym* Gimnasio){
ini inicializarVariablesFijas(Sgym* Gimnasio){
//esta funcion inicializa los datos que son fijos en mis variables, como los cupos y los id reservas(van a estar inicializados en 0)
int i;
Gimnasio->CantClases=6;//la cantidad de clases es fijo
Expand All @@ -9,71 +9,125 @@

//--------SPINNING--------
Gimnasio->actividades[0].CantHorarios=5;
Gimnasio->actividades[0].nombre="Spinning";
Gimnasio->actividades[0].cupos=new int[Gimnasio->actividades[0].CantHorarios];
Gimnasio->actividades[0].IdClase=new int[Gimnasio->actividades[0].CantHorarios];
Gimnasio->actividades[0].horarios=new int[Gimnasio->actividades[0].CantHorarios];
if(Gimnasio->actividades[0].cupos==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[0].IdClase==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[0].horarios==nullptr)
return ErrReservarmemoria;
for(i=0;i<Gimnasio->actividades[0].CantHorarios;i++)
{
Gimnasio->actividades[0].cupos[i]=45;//todas las actividades de spinning tienen 45 cupos cada una
Gimnasio->actividades[0].cupos[i]=45;//todas las actividades de spinning tienen 45 cupos cada una
}
//-------YOGA-------
Gimnasio->actividades[1].CantHorarios=6;
Gimnasio->actividades[1].nombre="Yoga";
Gimnasio->actividades[1].cupos=new int[Gimnasio->actividades[1].CantHorarios];
Gimnasio->actividades[1].IdClase=new int[Gimnasio->actividades[1].CantHorarios];
Gimnasio->actividades[1].horarios=new int[Gimnasio->actividades[1].CantHorarios];
if(Gimnasio->actividades[1].cupos==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[1].IdClase==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[1].horarios==nullptr)
return ErrReservarmemoria;
for(i=0;i<Gimnasio->actividades[1].CantHorarios;i++)
{
Gimnasio->actividades[1].cupos[i]=25;
Gimnasio->actividades[1].cupos[i]=25;
}
//-------PILATES-------
Gimnasio->actividades[2].CantHorarios=6;
Gimnasio->actividades[2].nombre="Pilates";
Gimnasio->actividades[2].cupos=new int[Gimnasio->actividades[2].CantHorarios];
Gimnasio->actividades[2].IdClase=new int[Gimnasio->actividades[2].CantHorarios];
Gimnasio->actividades[2].horarios=new int[Gimnasio->actividades[2].CantHorarios];
if(Gimnasio->actividades[2].cupos==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[2].IdClase==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[2].horarios==nullptr)
return ErrReservarmemoria;
for(i=0;i<Gimnasio->actividades[2].CantHorarios;i++)
{
Gimnasio->actividades[2].cupos[i]=15;
Gimnasio->actividades[2].cupos[i]=15;
}
//---------STRETCHING----------
Gimnasio->actividades[3].CantHorarios=6;
Gimnasio->actividades[3].nombre="Stretching";
Gimnasio->actividades[3].cupos=new int[Gimnasio->actividades[3].CantHorarios];
Gimnasio->actividades[3].IdClase=new int[Gimnasio->actividades[3].CantHorarios];
Gimnasio->actividades[3].horarios=new int[Gimnasio->actividades[3].CantHorarios];
if(Gimnasio->actividades[3].cupos==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[3].IdClase==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[3].horarios==nullptr)
return ErrReservarmemoria;
for(i=0;i<Gimnasio->actividades[3].CantHorarios;i++)
{
Gimnasio->actividades[3].cupos[i]=40;
Gimnasio->actividades[3].cupos[i]=40;
}
//-------ZUMBA---------
Gimnasio->actividades[4].CantHorarios=6;
Gimnasio->actividades[4].nombre="Zumba";
Gimnasio->actividades[4].cupos=new int[Gimnasio->actividades[4].CantHorarios];
Gimnasio->actividades[4].IdClase=new int[Gimnasio->actividades[4].CantHorarios];
Gimnasio->actividades[4].horarios=new int[Gimnasio->actividades[4].CantHorarios];
if(Gimnasio->actividades[4].cupos==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[4].IdClase==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[4].horarios==nullptr)
return ErrReservarmemoria;
for(i=0;i<Gimnasio->actividades[4].CantHorarios;i++)
{
Gimnasio->actividades[4].cupos[i]=50;
Gimnasio->actividades[4].cupos[i]=50;
}
//------BOXEO-------
Gimnasio->actividades[5].CantHorarios=4;
Gimnasio->actividades[5].nombre="Boxeo";
Gimnasio->actividades[5].cupos=new int[Gimnasio->actividades[5].CantHorarios];
Gimnasio->actividades[5].IdClase=new int[Gimnasio->actividades[5].CantHorarios];
Gimnasio->actividades[5].horarios=new int[Gimnasio->actividades[5].CantHorarios];
if(Gimnasio->actividades[5].cupos==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[5].IdClase==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->actividades[5].horarios==nullptr)
return ErrReservarmemoria;
for(i=0;i<Gimnasio->actividades[5].CantHorarios;i++)
{
Gimnasio->actividades[5].cupos[i]=30;
Gimnasio->actividades[5].cupos[i]=30;
}
//------MUSCULACION------
Gimnasio->musculacion=new musculacion;
Gimnasio->musculacion->CantHorarios=27;
Gimnasio->musculacion->Nombre="Musculacion";
Gimnasio->musculacion->horarios=new int[Gimnasio->musculacion->CantHorarios];
Gimnasio->musculacion->iDClase=new int[Gimnasio->musculacion->CantHorarios];
if(Gimnasio->musculacion->horarios==nullptr)
return ErrReservarmemoria;
else if(Gimnasio->musculacion->iDClase==nullptr)
return ErrReservarmemoria;


return inicializacionexitosa;
//libero memoria en el main, porque si borro la memoria dinamica aca no estaria inicializando nada
}*/
}
int BuscarActividadPorNombre(Sgym ActsGim,str actividadPasada){
int i=0,posact=0;

while(ActsGim.actividades[i].nombre.compare(actividadPasada)!=0){
if(posact==5)//si lo encuentra en la ultima posicion no seria necesario que entre al while
return -1;//Actividad no encontrada
posact++;
i++;
int i;
for(i=0;i<ActsGim.CantClases;i++)
{
if (ActsGim.actividades[i].nombre.compare(actividadPasada) == 0) {
// La actividad se encontró en la posición i
return i;
}
}
return posact;
return -1;//si sale de la funcion quiere decir que no la encontro
}
int BuscarActividadPorHorario(Sgym ActsGim,int horarioelegido,int posN){
int i;
Expand Down Expand Up @@ -101,22 +155,22 @@ int ChequeoActs(Scliente misActs,Sgym ActsGim,int posN,int posH){
else if(posH==-4)
return -4;//horario invalido

for(i=0;i<3;i++)
{
if(ActsGim.actividades[posN].IdClase[posH]==misActs.iDClasereserv[i])
for(i=0;i<3;i++)
{
if(ActsGim.actividades[posN].IdClase[posH]==misActs.iDClasereserv[i])
cont++;

if(misActs.iDClasereserv[i]==0)
if(misActs.iDClasereserv[i]==0)
pos0=i;//guardo la posicion del array vacio
}
}

if(cont!=0)
return -3;//actividad repetida
else if(pos0==-2)
return -6;//no tengo espacio

return pos0;//posicion vacia de mi id;
}
}
Eres ReservarAct(Sgym* ActsGim,Scliente *misActs,int posN,int posH,int *posRepAct){
int pos0,contrepe=0;
*posRepAct=-2;//este parametro es devuelto por puntero si y solo si encuentro actividades superpuestas, para informar que clase especifica se superpone con la actividad a reservar
Expand Down Expand Up @@ -153,3 +207,66 @@ Eres ReservarAct(Sgym* ActsGim,Scliente *misActs,int posN,int posH,int *posRepAc

return Reservadaconexito;
}
//buscar cliente
//Chequear datos
//Chequear estado
//-------------------------------------------ARCHIVOS-------------------------------------------
Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio){

str NomAct,horarios,id;//despues debo castearlos
int i,j,k,l,m,n,o;

if (!Archivo.is_open())
return ErrAbrirArchivo;

str header;//encabezado
getline(Archivo,header);//separo el encabezado

i=j=k=l=m=n=o=0;
str line;
getline(Archivo,line);
while(Archivo.good()&&getline(Archivo,line)&&!Archivo.eof()){

char delimiter= ',';//Es un csv entonces por cada coma debe contar un elemento
istringstream iss(line);//permite leer los "campos de la linea"
getline(iss,id,delimiter);//de donde leo, a donde leo, hasta donde leo
getline(iss,NomAct,delimiter);
getline(iss,horarios,delimiter);
if(NomAct.compare("Spinning")==0){
Gimnasio->actividades[0].horarios[i]=stoi(horarios);
Gimnasio->actividades[0].IdClase[i]=stoi(id);
i++;
}
else if(NomAct.compare("Yoga")==0){
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++;
}
else if(NomAct.compare("Zumba")==0){
Gimnasio->actividades[4].horarios[m]=stoi(horarios);
Gimnasio->actividades[4].IdClase[m]=stoi(id);
m++;
}
else if(NomAct.compare("Boxeo")==0){
Gimnasio->actividades[5].horarios[n]=stoi(horarios);
Gimnasio->actividades[5].IdClase[n]=stoi(id);
n++;
}else if(NomAct.compare("Musculacion")==0){
Gimnasio->musculacion->horarios[o]=stoi(horarios);
Gimnasio->musculacion->iDClase[o]=stoi(id);
o++;
}
}

return ArchivoManipuladoConExito;
}
2 changes: 2 additions & 0 deletions Proyecto/libreria/Includes.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#endif // INCLUDES_H
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
typedef std::string str;

27 changes: 25 additions & 2 deletions Proyecto/main/main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,27 @@
int main(int argc, char *argv[]) {

#include "Includes.h"
#include "Funciones.h"

int main() {
ifstream InputActividades,InputClientes;
ofstream TextoParaUbicarArchivo;
TextoParaUbicarArchivo.open("../Robertone.txt");
TextoParaUbicarArchivo<<"Hola";
InputActividades.open("../iriClasesGYM.csv");
InputClientes.open("../iriClientesGYM.csv");
if (!InputActividades.is_open()) {
cout << "Error al abrir archivo" << endl;

}
if (!InputClientes.is_open()) {
cout << "Error al abrir archivo" << endl;

}




TextoParaUbicarArchivo.close();
InputClientes.close();
InputActividades.close();
return 0;
}
Loading

0 comments on commit a97a42d

Please sign in to comment.