Skip to content

Commit

Permalink
BuscarCID-CancelarRes-ChequeoEst
Browse files Browse the repository at this point in the history
  • Loading branch information
Joacoarce committed Nov 16, 2023
1 parent 1c1c70a commit 5830ef5
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 89 deletions.
23 changes: 14 additions & 9 deletions Proyecto/libreria/Funciones.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,31 @@
#define FUNCIONES_H
#include "includes.h"


//Parto de la suposicion de que las actividades estan dispuestas de la siguiente forma: spinning,yoga,pilates,stretching,zumba,boxeo;

enum reservar{ErrNoEncontrada=-1,ErrNoHayCupos=-2,ErrYaReservada=-3,ErrHorarioNoValido=-4,ErrActividadsuperpuesta=-5,ErrMuchasReservasActivas=-6,Reservadaconexito=1};
//-----------------------------RESERVA-----------------------------------------------------
enum reservar{ErrNoEncontrada=-1,ErrNoHayCupos=-2,ErrYaReservada=-3,ErrHorarioNoValido=-4,ErrActividadsuperpuesta=-5,ErrMuchasReservasActivas=-6,ErrClienteNoEncontrado=-7,ErrFaltadePago=-8,Reservadaconexito=1};
typedef enum reservar Eres;
enum DescartarReserva{ErrorEliminar=-1,Eliminadaconexito=1};
//-------------------------CANCELAR RESERVA------------------------------------------------
enum DescartarReserva{ErrNoReservada=-1,Canceladaconexito=1};
typedef enum DescartarReserva Edesc;
//--------------------INICIALIZACION DE VARIABLE-------------------------------------------
enum inicializar{ErrReservarmemoria=-1,ErrCantidadDeClientesSobrepasada=-2, inicializacionexitosa=1};
typedef enum inicializar ini;
//-----------------------------ARCHIVOS----------------------------------------------------
enum Archivos{ErrAbrirArchivo=-1, ArchivoManipuladoConExito=1};
typedef enum Archivos Archi;
//-----------------------ESTRUCTURAS DE DATOS----------------------------------------------
struct fecha{
int dia,mes,anio;
};
typedef struct fecha Sfecha;

struct cliente{
str Nom,Ape,mail,Telefono,NomReserva[3]={"","",""};
Sfecha FechaNac;
int estado,idCliente,iDClasereserv[3]={0,0,0},horariosRes[3]={0,0,0};//Clasereserv tiene 3 arrays porque partimos de la suposicion de que se pueden reservar tres clases por cliente y esta iniciada con "0";
};
typedef struct cliente Scliente;

struct musculacion{
Scliente* cliente;//no se cuantos clientes asignare, uso memoria dinamica
int* iDClase,*horarios,CantHorarios;
Expand All @@ -31,13 +35,13 @@ struct musculacion{
};
typedef struct musculacion Smusc;


struct actividad{
str nombre;
int *horarios,*cupos,*IdClase,CantHorarios;

};
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
Expand All @@ -46,14 +50,14 @@ struct GIMNASIO{
};
typedef struct GIMNASIO Sgym;


//-----------------------------------------FUNCIONES-------------------------------------------------
ini inicializarVariablesFijas(Sgym* Gimnasio);//puedo llamar a esta funcion para "reiniciar el dia"
//------------------------------------------BUSCAR--------------------------------------------------
//------------------------------------------BUSCAR---------------------------------------------------
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 BuscarClientePorId(Sgym Gimnasio,int idPasado);
//-----------------------------------------CHEQUEOS--------------------------------------------------
bool ChequearEstado(Sgym Gimnasio);
bool ChequearEstado(Scliente Gimnasio);
int ChequeoActs(Scliente misActs,Sgym ActsGim,int posN,int posH);//Retorna la misma posicion
//-----------------------------------------RESERVA---------------------------------------------------
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
Expand All @@ -66,5 +70,6 @@ Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio);//deberia usar re
int ContarCantClientes(ifstream& Archivo);//cuenta las lineas del archivo y devuelve el numero total
Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int cantclientesT);
bool ChequearDatos(ifstream& Clientes);
Archi Asistencias(ifstream& Asistencia);
void SepararFecha(string fecha, int& dia, int& mes, int& ano);
#endif // FUNCIONES_H
132 changes: 88 additions & 44 deletions Proyecto/libreria/FuncionesImp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,21 @@ int BuscarActividadPorHorario(Sgym ActsGim,int horarioelegido,int posN){
}
return i;
}
int BuscarClientePorId(Sgym Gimnasio,int idPasado){
int pos=0;
for(int i=0;i<Gimnasio.CantClientes;i++){
if(Gimnasio.clientes[i].idCliente==idPasado)
pos=i;
}
if(pos==Gimnasio.CantClientes)
return -1;
else return pos;
}
bool ChequearEstado(Scliente Cliente){
if(Cliente.estado>=0)//mayor igual a 0 tienen la cuota al dia
return true;
else return false;
}
int ChequeoActs(Scliente misActs,Sgym ActsGim,int posN,int posH){
int i,cont=0,pos0=-2;//pos0 recibe un valor que no puede tomar como para poder determinar si tengo espacio o no
if(posN==-1||posH==-1)
Expand Down Expand Up @@ -176,7 +191,9 @@ Eres ReservarAct(Sgym* ActsGim,Scliente *misActs,int posN,int posH,int *posRepAc
*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

pos0=ChequeoActs(*misActs,*ActsGim,posN,posH);
if(pos0==-1)
if(ChequearEstado(*misActs)==false)
return ErrFaltadePago;
else if(pos0==-1)
return ErrNoEncontrada;
else if(pos0==-3)
return ErrYaReservada;
Expand Down Expand Up @@ -207,6 +224,24 @@ Eres ReservarAct(Sgym* ActsGim,Scliente *misActs,int posN,int posH,int *posRepAc

return Reservadaconexito;
}
Edesc CancelarReserva(Sgym* ActsGim,Scliente *misActs,int posN,int posH){
int i=0;
while(i<3&&misActs->iDClasereserv[i]!=ActsGim->actividades[posN].IdClase[posH]){
i++;
}
if(i==3)
return ErrNoReservada;//No encontro el id de la clase en las clases reservadas
else
{
//Se restablecen los valores
misActs->iDClasereserv[i]=0;
misActs->NomReserva[i]="";
misActs->horariosRes[i]=0;
//Se aumenta un cupo
ActsGim->actividades[posN].cupos[posH]++;
}
return Canceladaconexito;
}
ini ResizeCliente(Scliente*& Clientes,int &tam,int ntam){
if(Clientes==nullptr&&ntam>0){
Scliente*Aux=new Scliente[ntam];
Expand Down Expand Up @@ -236,62 +271,70 @@ ini ResizeCliente(Scliente*& Clientes,int &tam,int ntam){
//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;

Archivo.clear();
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-------------------------
str header,line;//manejo de archivos
char delimiter= ',';//Es un csv entonces por cada coma debe contar un elemento

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

//---------------------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;
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
while(Archivo.good()&&!Archivo.eof()){
getline(Archivo,line);
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){
horariosI=stoi(horarios);
if(horariosI>=8&&horariosI<=19){
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){
}
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){
}
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++;
}
}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]=stoi(id);
o++;
}
}
}

Expand All @@ -308,10 +351,8 @@ int ContarCantClientes(ifstream& Archivo){
str encabezado,linea;
getline(Archivo,encabezado);//quito el encabezado

while(Archivo.good()&&!Archivo.eof()){
getline(Archivo,linea);
while(Archivo.good()&&!Archivo.eof()&&getline(Archivo,linea))
cont++;
}
return cont;
}
Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int cantclientesT){
Expand All @@ -322,29 +363,32 @@ Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int
Archivo.seekg(0,ios::beg);//envio el puntero que recorre el archivo al inicio

str encabezado,linea;
char delimitador=',';
getline(Archivo,encabezado);//quito el encabezado

//---------AUXILIARES------
str idCliente,Nombre,Apellido,Mail,Telefono,FechaNac,Estado;
int dia,mes,anio,i;
i=0;
//---------RESIZE----------
if(cantclientes<cantclientesT)
ResizeCliente(Gimnasio->clientes,cantclientes,cantclientesT);//si no tengo espacio hago un resize

while(Archivo.good()&&getline(Archivo,linea)&&!Archivo.eof()){
char delimitador=',';
istringstream s(linea);
while(Archivo.good()&&!Archivo.eof()&&i<Gimnasio->CantClientes){
getline(Archivo,linea);
stringstream s(linea);
getline(s,idCliente,delimitador);
getline(s,Nombre,delimitador);
getline(s,Apellido,delimitador);
getline(s,Mail,delimitador);
getline(s,Telefono,delimitador);
getline(s,FechaNac,delimitador);
getline(s,Estado,delimitador);
if(cantclientes<cantclientesT)
ResizeCliente(Gimnasio->clientes,cantclientes,cantclientesT);//si no tengo espacio hago un resize
//---------------GUARDADO--------------------------
Gimnasio->clientes[i].idCliente=stoi(idCliente);
Gimnasio->clientes[i].Nom=Nombre;
Gimnasio->clientes[i].Ape=Apellido;
Gimnasio->clientes[i].mail=Mail;
Gimnasio->clientes[i].Telefono=Telefono;
SepararFecha(FechaNac,dia,mes,anio);//separo la fecha en dia mes y año para guardarla en mi struct
Gimnasio->clientes[i].FechaNac.dia=dia;
Expand Down
32 changes: 27 additions & 5 deletions Proyecto/main/main.cpp
Original file line number Diff line number Diff line change
@@ -1,27 +1,49 @@
#include "Includes.h"
#include "Funciones.h"
#include "FuncionesImp.cpp"

int main() {
//---------------------------------------------VARIABLES------------------------------------------------
ifstream InputActividades,InputClientes;
ofstream TextoParaUbicarArchivo;
int cont=0;
Sgym* Gimnasio=new Sgym;
//--------------------------------------INICIALIZACION/APERTURA-----------------------------------------
TextoParaUbicarArchivo.open("../Ubicacion.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()) {
if (!InputActividades.is_open())
cout << "Error al abrir archivo" << endl;
if (!InputClientes.is_open())
cout << "Error al abrir archivo" << endl;

}
inicializarVariablesFijas(Gimnasio);
LeerArchivoActividades(InputActividades,Gimnasio);
cont=ContarCantClientes(InputClientes);
LeerArchivoClientes(InputClientes,Gimnasio,Gimnasio->CantClientes,cont);






//-----------------------------------------------CERRAR ARCHIVOS--------------------------------------------------------------
TextoParaUbicarArchivo.close();
InputClientes.close();
InputActividades.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;
}
delete[] Gimnasio->actividades;
delete[] Gimnasio->musculacion->horarios;
delete[] Gimnasio->musculacion->iDClase;
delete Gimnasio->musculacion;
delete[] Gimnasio->clientes;
delete Gimnasio;
return 0;
}
Loading

0 comments on commit 5830ef5

Please sign in to comment.