Skip to content

Commit

Permalink
Lectura cliente-resize-testing
Browse files Browse the repository at this point in the history
  • Loading branch information
Joacoarce committed Nov 9, 2023
1 parent a97a42d commit 1c1c70a
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 15 deletions.
18 changes: 12 additions & 6 deletions Proyecto/libreria/Funciones.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,25 @@ struct GIMNASIO{
};
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"
//------------------------------------------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 BuscarCliente
//bool chequear estado-->me devuelve true o false
//Chequear datos
int BuscarClientePorId(Sgym Gimnasio,int idPasado);
//-----------------------------------------CHEQUEOS--------------------------------------------------
bool ChequearEstado(Sgym 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
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
//------------------------------------------RESIZES--------------------------------------------------
ini ResizeCliente(Scliente*& Clientes,int &tam,int ntam);
//-----------------------------------------ARCHIVOS--------------------------------------------------
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);
Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int cantclientesT);
bool ChequearDatos(ifstream& Clientes);
void SepararFecha(string fecha, int& dia, int& mes, int& ano);
#endif // FUNCIONES_H
99 changes: 99 additions & 0 deletions Proyecto/libreria/FuncionesImp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,30 @@ Eres ReservarAct(Sgym* ActsGim,Scliente *misActs,int posN,int posH,int *posRepAc

return Reservadaconexito;
}
ini ResizeCliente(Scliente*& Clientes,int &tam,int ntam){
if(Clientes==nullptr&&ntam>0){
Scliente*Aux=new Scliente[ntam];
delete Clientes;
Clientes=Aux;
tam=ntam;
return inicializacionexitosa;
}
if(tam>=0&&ntam>0){
Scliente*Aux=new Scliente[ntam];
u_int longitud=(tam<ntam)?tam:ntam;
for(u_int i=0;i<longitud;i++)
Aux[i]=Clientes[i];
(tam>1)? delete[] Clientes:delete Clientes;
Clientes=Aux;
tam=ntam;
return inicializacionexitosa;
}else if(ntam>0){
Clientes=new Scliente[ntam];
tam=ntam;
return inicializacionexitosa;
}else ErrReservarmemoria;

}
//buscar cliente
//Chequear datos
//Chequear estado
Expand All @@ -219,6 +243,9 @@ Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio){
if (!Archivo.is_open())
return ErrAbrirArchivo;

Archivo.clear();
Archivo.seekg(0,ios::beg);//envio el puntero que recorre el archivo al inicio

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

Expand Down Expand Up @@ -270,3 +297,75 @@ Archi LeerArchivoActividades(ifstream& Archivo,Sgym* Gimnasio){

return ArchivoManipuladoConExito;
}
int ContarCantClientes(ifstream& Archivo){
if(!Archivo.is_open())
return -1;

Archivo.clear();
Archivo.seekg(0,ios::beg);//envio el puntero que recorre el archivo al inicio

int cont=0;
str encabezado,linea;
getline(Archivo,encabezado);//quito el encabezado

while(Archivo.good()&&!Archivo.eof()){
getline(Archivo,linea);
cont++;
}
return cont;
}
Archi LeerArchivoClientes(ifstream& Archivo,Sgym*Gimnasio,int &cantclientes,int cantclientesT){
if(!Archivo.is_open())
return ErrAbrirArchivo;

Archivo.clear();
Archivo.seekg(0,ios::beg);//envio el puntero que recorre el archivo al inicio

str encabezado,linea;
getline(Archivo,encabezado);//quito el encabezado

//---------AUXILIARES------
str idCliente,Nombre,Apellido,Mail,Telefono,FechaNac,Estado;
int dia,mes,anio,i;
i=0;

while(Archivo.good()&&getline(Archivo,linea)&&!Archivo.eof()){
char delimitador=',';
istringstream 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].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;
Gimnasio->clientes[i].FechaNac.mes=mes;
Gimnasio->clientes[i].FechaNac.anio=anio;
Gimnasio->clientes[i].estado=stoi(Estado);
i++;
}
return ArchivoManipuladoConExito;
}
void SepararFecha(string fecha, int& dia, int& mes, int& anio) {
istringstream ss(fecha);
char delimitador = '-';
string campo;

getline(ss, campo, delimitador);
dia = stoi(campo);

getline(ss, campo, delimitador);
mes = stoi(campo);

getline(ss, campo, delimitador);
anio = stoi(campo);
}
2 changes: 1 addition & 1 deletion Proyecto/libreria/Includes.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
#include <sstream>
using namespace std;
typedef std::string str;

typedef unsigned int u_int;
2 changes: 1 addition & 1 deletion Proyecto/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
int main() {
ifstream InputActividades,InputClientes;
ofstream TextoParaUbicarArchivo;
TextoParaUbicarArchivo.open("../Robertone.txt");
TextoParaUbicarArchivo.open("../Ubicacion.txt");
TextoParaUbicarArchivo<<"Hola";
InputActividades.open("../iriClasesGYM.csv");
InputClientes.open("../iriClientesGYM.csv");
Expand Down
42 changes: 35 additions & 7 deletions Proyecto/testing/tst_proyecto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include "Funciones.h"
#include "FuncionesImp.cpp"
#include "Includes.h"

/*
TEST_CASE("CASO 1")
{
int i;
Expand Down Expand Up @@ -94,7 +94,11 @@ TEST_CASE("CASO 1")
Gimnasio->clientes[1]={"Carla","Rober","[email protected]","1 (603) 037-9228",{"Boxeo","Spinning","Spinning"},{15,11,1970},4,0,{30,0,3},{8,0,12}};
Gimnasio->clientes[2]={"Sidney","Runolfsson","[email protected]","1 (433) 165-6466",{"Spinning","","Spinning"},{1,4,2000},3,1,{2,0,3},{10,0,12},};
Gimnasio->clientes[3]={"Emma","O'Connell","[email protected]","1 (493) 966-7600",{"Spinning","Spinning","Spinning"},{12,1,1995},2,0,{1,1,3},{8,8,12}};

SECTION("RESIZE"){
ResizeCliente(Gimnasio->clientes,Gimnasio->CantClientes,6);
REQUIRE(Gimnasio->clientes!=nullptr);
CHECK(Gimnasio->CantClientes==6);
}
SECTION("chequeoAct"){
int pos0,posH,posN;
posN=BuscarActividadPorNombre(*Gimnasio,"Spiing");
Expand Down Expand Up @@ -131,7 +135,7 @@ TEST_CASE("CASO 1")
delete[] Gimnasio->clientes;
delete Gimnasio;
delete Gimnasio;
}
TEST_CASE("Inicializacion"){
Sgym* Gimnasio=new Sgym;
Expand All @@ -154,16 +158,16 @@ TEST_CASE("Inicializacion"){
delete Gimnasio;
}
TEST_CASE("Archivos"){
TEST_CASE("ArchivoActividades"){
Sgym* Gimnasio=new Sgym;
inicializarVariablesFijas(Gimnasio);
ifstream InputActividades;
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 @@ -181,4 +185,28 @@ TEST_CASE("Archivos"){
delete Gimnasio;
}*/
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;
cont=ContarCantClientes(InputClientes);

LeerArchivoClientes(InputClientes,Gimnasio,Gimnasio->CantClientes,cont);
}
InputClientes.close();
delete[] Gimnasio->clientes;
delete Gimnasio;
}

0 comments on commit 1c1c70a

Please sign in to comment.