Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string.h>
- #include <stdlib.h>
- using namespace std;
- struct Foto{
- string ruta;
- string tipo;
- unsigned long int tamanio;
- };
- struct Usuario{
- string login;
- string nombre;
- string apellido;
- string perfil_usuario;
- Foto* v_fotos; // puntero a
- int dim_vfotos;
- int totalFotosUsuario; // Utiles v_fotos
- };
- struct TablaUsuarios{
- Usuario** punteroapuntero; // Puntero a vector dinámico de punteros a usuarios dinámicos
- int totaltuplas; // Dimensión y útiles a la vez
- };
- // Sets y gets de TablaUsuarios:
- Usuario** getPunteroaPuntero (const TablaUsuarios t) {
- return t.punteroapuntero;
- }
- void setPunteroaPuntero (TablaUsuarios &t,Usuario** dvUsuarios) {
- t.punteroapuntero=dvUsuarios;
- }
- int getTotalTuplas (const TablaUsuarios t) {
- return t.totaltuplas;
- }
- void setTotalTuplas (TablaUsuarios &t, int tuplasActuales) {
- t.totaltuplas=tuplasActuales;
- }
- // Sets y gets de Usuario:
- void setLogin (TablaUsuarios &t, string nuevoLogin, int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->login=nuevoLogin;
- }
- string getLogin (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->login;
- }
- void setNombre (TablaUsuarios &t, string nuevoNombre,int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->nombre=nuevoNombre;
- }
- string getNombre (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->nombre;
- }
- void setApellido (TablaUsuarios &t, string nuevoApellido, int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->apellido=nuevoApellido;
- }
- string getApellido (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->apellido;
- }
- void setPerfil_usuario (TablaUsuarios &t, string nuevoPerfil_usuario, int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->perfil_usuario=nuevoPerfil_usuario;
- }
- string getPerfil_usuario (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->perfil_usuario;
- }
- void setV_fotos (TablaUsuarios &t, Foto* dvFotos, int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->v_fotos=dvFotos;
- }
- Foto* getV_fotos (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->v_fotos;
- }
- void setDim_vfotos (TablaUsuarios &t, int dimension, int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->dim_vfotos=dimension;
- }
- int getDim_vfotos (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->dim_vfotos;
- }
- void setTotalFotosUsuario (TablaUsuarios &t, int totalfotos, int posicionUsuario) {
- t.punteroapuntero[posicionUsuario]->totalFotosUsuario=totalfotos;
- }
- int getTotalFotosUsuario (const TablaUsuarios t, int posicionUsuario) {
- return t.punteroapuntero[posicionUsuario]->totalFotosUsuario;
- }
- // Sets y gets de Foto
- void setRuta (TablaUsuarios &t,string nuevaRuta,int posicionUsuario,int posicionFoto) {
- t.punteroapuntero[posicionUsuario]->v_fotos[posicionFoto].ruta=nuevaRuta;
- }
- string getRuta (const TablaUsuarios t,int posicionUsuario,int posicionFoto) {
- return t.punteroapuntero[posicionUsuario]->v_fotos[posicionFoto].ruta;
- }
- void setTipo (TablaUsuarios &t,string nuevoTipo,int posicionUsuario,int posicionFoto) {
- t.punteroapuntero[posicionUsuario]->v_fotos[posicionFoto].tipo=nuevoTipo;
- }
- string getTipo (const TablaUsuarios t,int posicionUsuario,int posicionFoto) {
- return t.punteroapuntero[posicionUsuario]->v_fotos[posicionFoto].tipo;
- }
- void setTamanio (TablaUsuarios &t,unsigned long int nuevoTamanio,int posicionUsuario,int posicionFoto) {
- t.punteroapuntero[posicionUsuario]->v_fotos[posicionFoto].tamanio=nuevoTamanio;
- }
- unsigned long int getTamanio (const TablaUsuarios t,int posicionUsuario,int posicionFoto) {
- return t.punteroapuntero[posicionUsuario]->v_fotos[posicionFoto].tamanio;
- }
- // Modulo de debug
- void imprimirVPunteros(TablaUsuarios t) {
- int totalTuplas=getTotalTuplas(t);
- for (int i=0;i<totalTuplas;i++) {
- cout << t.punteroapuntero[i] << endl;
- }
- }
- // Módulos back-end:
- Usuario** resizeVectorPunteros(Usuario **v,int &util_actual,int &dim_actual,int dim_nueva){
- Usuario** nuevoVector = new Usuario* [dim_nueva];
- if (nuevoVector==0) {
- cerr << "No se le puede otorgar memoria, abortando la ejecución del programa" << endl;
- exit(-1);
- }
- if (util_actual>dim_nueva) {
- util_actual=dim_nueva;
- }
- for (int i=0;i<util_actual;i++) {
- nuevoVector[i]=v[i];
- }
- dim_actual=dim_nueva;
- delete [] v;
- v=0;
- return nuevoVector;
- }
- void pausa() {
- char tecla;
- cout << "Introduzca cualquier tecla para continuar" << endl;
- cin >> tecla;
- }
- Foto* crearVectorFotos () {
- Foto* dvFotos= new Foto[5];
- if (dvFotos==0) {
- cerr << "Error. No hay memoria suficiente. Se abortará la ejecución" << endl;
- exit(-1);
- }
- return dvFotos;
- }
- void eliminarVectorFotos (Foto* dvFotos) {
- delete [] dvFotos;
- dvFotos=0;
- }
- Usuario* crearUsuario () {
- Usuario* dUsuario= new Usuario;
- if (dUsuario==0) {
- cerr << "Error. No hay memoria suficiente. Se abortará la ejecución" << endl;
- exit(-1);
- }
- return dUsuario;
- }
- void eliminarUsuario (Usuario* dUsuario) {
- delete dUsuario;
- dUsuario=0;
- }
- Usuario** crearVectorDePunterosaUsuarios () {
- Usuario** dvUsuarios = new Usuario*[1];
- if (dvUsuarios==0) {
- cerr << "Error. No hay memoria suficiente. Se abortará la ejecución" << endl;
- exit(-1);
- }
- return dvUsuarios;
- }
- void eliminarVectorDePunterosaUsuarios (Usuario** dvUsuarios) {
- delete [] dvUsuarios;
- dvUsuarios=0;
- }
- void imprimirFoto (const TablaUsuarios t,int posUsuario,int posFoto) {
- string ruta;
- string tipo;
- unsigned long int tamanio=0;
- ruta=getRuta(t,posUsuario,posFoto);
- tipo=getTipo(t,posUsuario,posFoto);
- tamanio=getTamanio(t,posUsuario,posFoto);
- cout << "La ruta de la imagen es: " << ruta << endl;
- cout << "La extensión de la imagen es: " << tipo << endl;
- cout << "El tamaño de la imagen en bits es: " << tamanio << endl;
- cout << "" << endl;
- }
- void imprimirFotosUsuario (const TablaUsuarios t,int posUsuario) {
- int util_vfotos = getTotalFotosUsuario(t,posUsuario);
- for (int i=0;i<util_vfotos;i++) {
- cout << "Foto " << i+1 << endl;
- cout << "" << endl;
- imprimirFoto(t,posUsuario,i);
- }
- }
- void imprimirUsuario (const TablaUsuarios t,int posUsuario) {
- string login;
- string nombre;
- string apellido;
- string perfilUsuario;
- int dim_vfotos=0;
- int util_vfotos=0;
- login=getLogin(t,posUsuario);
- nombre=getNombre(t,posUsuario);
- apellido=getApellido(t,posUsuario);
- perfilUsuario=getPerfil_usuario(t,posUsuario);
- dim_vfotos=getDim_vfotos(t,posUsuario);
- util_vfotos=getTotalFotosUsuario(t,posUsuario);
- cout << "Login: " << login << endl;
- cout << "Nombre: " << nombre << endl;
- cout << "Apellido: " << apellido << endl;
- cout << "Perfil de usuario: " << perfilUsuario << endl;
- cout << "Dimensión actual del vector de fotos: " << dim_vfotos << endl;
- cout << "Total de fotos: " << util_vfotos << endl;
- cout << "" << endl;
- cout << "Fotos: " << endl;
- cout << "" << endl;
- imprimirFotosUsuario(t,posUsuario);
- }
- // pre: el usuario ha sido insertado en la tabla
- void rellenarUsuario (TablaUsuarios &t,int posUsuario) {
- string login;
- string nombre;
- string apellido;
- string perfilUsuario;
- Foto* v_fotos=0;
- int dim_vfotos=5;
- int totalFotosUsuario=0;
- cout << "Introduzca su login" << endl;
- cin >> login;
- setLogin(t,login,posUsuario);
- cout << "Introduzca su nombre" << endl;
- cin >> nombre;
- setNombre(t,nombre,posUsuario);
- cout << "Introduzca su primer apellido" << endl;
- cin >> apellido;
- setApellido(t,apellido,posUsuario);
- cout << "Introduzca su perfil de usuario" << endl;
- cin >> perfilUsuario;
- setPerfil_usuario(t,perfilUsuario,posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,totalFotosUsuario,posUsuario);
- }
- void insertarUsuarioEnTabla (TablaUsuarios &t,Usuario* direcUsuario,bool tablaYaCreada) {
- int dimActual=0;
- Usuario** dActualVector=0;
- Usuario** dNuevoVector=0;
- dimActual=getTotalTuplas(t);
- dActualVector=getPunteroaPuntero(t);
- dNuevoVector=resizeVectorPunteros(dActualVector,dimActual,dimActual,dimActual+1);
- //cout << dActualVector << endl;
- //cout << dNuevoVector << endl;
- //cout << "La dimension actual es " << dimActual << endl;
- setPunteroaPuntero(t,dNuevoVector);
- //dActualVector=getPunteroaPuntero(t);
- //cout << dActualVector << endl;
- t.punteroapuntero[dimActual-1]=direcUsuario;
- setTotalTuplas(t,dimActual);
- }
- // Módulo que busca un usuario por su atributo login y devuelve por referencia su posición en el vector de punteros, devuelve -1 si no existe el usuario
- void buscarUsuarioPorLogin(const TablaUsuarios t,string loginBuscado,int &posicionUsuario) {
- int tuplasActuales=0;
- bool encontrado=false;
- tuplasActuales=getTotalTuplas(t); // Obtenemos la dimensión actual del vector de punteros a usuarios
- for (int i=0;(i<tuplasActuales)&&(encontrado==false);i++) { // Recorremos el vector de punteros para comparar el login de los usuarios actuales
- if (t.punteroapuntero[i]->login==loginBuscado) { // Si encontramos ese login dejaremos de buscar y guardaremos la posición del usuario
- encontrado=true;
- posicionUsuario=i;
- }
- }
- if (encontrado==false) { // Si no se encuentra ese login en ningún usuario de la tabla después de buscar
- posicionUsuario = -1;
- }
- }
- // Módulo que elimina un usuario de la tabla, debe existir ese usuario en la tabla
- void eliminarUsuario (TablaUsuarios &t,int posicionUsuario) {
- Foto* dvFotos=getV_fotos(t,posicionUsuario); // liberamos la memoria de su vector de fotos
- delete [] dvFotos;
- dvFotos=0;
- Usuario* dUsuario=t.punteroapuntero[posicionUsuario]; // liberamos la memoria con el contenido de la burbuja de ese usuario
- delete dUsuario;
- dUsuario=0;
- }
- void intercambiarPunteros (Usuario* &p1,Usuario* &p2) {
- Usuario* pAux=0;
- pAux=p1;
- p1=p2;
- p2=pAux;
- pAux=0;
- }
- // resize vFotos:
- Foto* resizeVectorFotos(Foto* v, int &util_actual, int &dim_actual, int dim_nueva){
- Foto* nuevoVector = new Foto [dim_nueva];
- if (util_actual>dim_nueva) {
- util_actual=dim_nueva;
- }
- if (dim_nueva<dim_actual) {
- for (int i=0;i<dim_nueva;i++) {
- nuevoVector[i].ruta=v[i].ruta;
- nuevoVector[i].tipo=v[i].tipo;
- nuevoVector[i].tamanio=v[i].tamanio;
- }
- }
- if (dim_nueva>dim_actual) {
- for (int i=0;i<util_actual;i++) {
- nuevoVector[i].ruta=v[i].ruta;
- nuevoVector[i].tipo=v[i].tipo;
- nuevoVector[i].tamanio=v[i].tamanio;
- }
- }
- dim_actual=dim_nueva;
- delete [] v;
- v=0;
- return nuevoVector;
- }
- void asignarFoto (Foto &a,Foto &b) {
- a.ruta=b.ruta;
- a.tipo=b.tipo;
- a.tamanio=b.tamanio;
- }
- void intercambiarFotos (Foto &a,Foto &b) {
- Foto auxFoto;
- asignarFoto(auxFoto,a);
- asignarFoto(a,b);
- asignarFoto(b,auxFoto);
- }
- // Modulos front-end:
- void crearTabla (TablaUsuarios &t,bool &tablaYaCreada) {
- Usuario** direcVectorDinamico=0; // Puntero al vector de punteros a usuarios
- int posUsuario=0; // Posicion del usuario en el vector de punteros
- int tuplasIniciales=1; // Se reserva el vector de punteros con dim=1
- int util_vFotos=0;
- //Para crear usuarios de ejemplo
- Usuario* yo=0;
- Usuario* u2=0;
- Usuario* u3=0;
- Usuario* u4=0;
- Usuario* u5=0;
- Usuario* u6=0;
- Usuario* u7=0;
- string login;
- Foto* v_fotos=0;
- int dim_vfotos=5;
- if (tablaYaCreada==false) { // Si no existe ya una tabla se creará una con un usuario de ejemplo dentro
- // Se crea el vector dinámico de punteros y se guarda su dirección de memoria en el miembro punteroapuntero de t.
- direcVectorDinamico=crearVectorDePunterosaUsuarios(); // Creamos un vector dinámico de punteros con dimensión 1 y guardamos la dirección de memoria
- setPunteroaPuntero(t,direcVectorDinamico); // Guardamos la dirección de memoria del vector de punteros en la tabla
- setTotalTuplas(t,tuplasIniciales); // Guardamos la dimensión actual del vector de punteros en la tabla
- // Usuarios de ejemplo:
- // Ejemplo 1:
- //Creamos el nuevo usuario y guardamos su posición de memoria en el puntero yo
- yo=crearUsuario();
- //Asignamos el puntero al nuevo usuario en la única posición del vector dinámico de punteros
- t.punteroapuntero[posUsuario]=yo; // Al ser el primer ejemplo no hace falta hacer un resize, por lo que no es necesario llamar a insertar usuario en tabla
- //Rellenamos sus datos
- setLogin(t,"@AlexxPedrosa",posUsuario);
- setNombre(t,"Alejandro",posUsuario);
- setApellido(t,"Pedrosa Carrión",posUsuario);
- setPerfil_usuario(t,"Admin",posUsuario);
- //Creamos su vector dinámico de fotos (con dimension 5 por defecto) y lo guardamos en el miembro v_fotos de su estructura
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- //Guardamos la dimensión y las útiles de su vector de fotos en los miembros de su estructura
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,3,posUsuario);
- setRuta(t,"/home/cristorey/Escritorio",posUsuario,0);
- setTipo(t,".jpg",posUsuario,0);
- setTamanio(t,1024,posUsuario,0);
- setRuta(t,"/Imagenes",posUsuario,1);
- setTipo(t,".png",posUsuario,1);
- setTamanio(t,1024,posUsuario,1);
- setRuta(t,"/Descargas",posUsuario,2);
- setTipo(t,".svg",posUsuario,2);
- setTamanio(t,1024,posUsuario,2);
- posUsuario++; // Aumentamos en uno la variable local que nos indica la posicion del puntero al usuario en el vector de punteros
- // Ejemplo 2:
- u2=crearUsuario();
- insertarUsuarioEnTabla(t,u2,tablaYaCreada); // Se redimensionará el vector de punteros a usuarios al llamar a este modulo
- setLogin(t,"@Ejemplo2",posUsuario);
- setNombre(t,"Ejemplo2",posUsuario);
- setApellido(t,"Ejemplo2",posUsuario);
- setPerfil_usuario(t,"Usuario",posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,2,posUsuario);
- setRuta(t,"ruta1",posUsuario,0);
- setTipo(t,".jpg",posUsuario,0);
- setTamanio(t,1024,posUsuario,0);
- setRuta(t,"ruta2",posUsuario,1);
- setTipo(t,".png",posUsuario,1);
- setTamanio(t,1024,posUsuario,1);
- posUsuario++; // Aumentamos en uno la variable local que nos indica la posicion del puntero al usuario en el vector de punteros
- // Ejemplo 3:
- u3=crearUsuario();
- insertarUsuarioEnTabla(t,u3,tablaYaCreada); // Se redimensionará el vector de punteros a usuarios al llamar a este modulo
- setLogin(t,"@Ejemplo3",posUsuario);
- setNombre(t,"Ejemplo3",posUsuario);
- setApellido(t,"Ejemplo3",posUsuario);
- setPerfil_usuario(t,"Usuario",posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,1,posUsuario);
- setRuta(t,"ruta1",posUsuario,0);
- setTipo(t,".jpg",posUsuario,0);
- setTamanio(t,1024,posUsuario,0);
- posUsuario++; // Aumentamos en uno la variable local que nos indica la posicion del puntero al usuario en el vector de punteros
- // EJemplo 4:
- u4=crearUsuario();
- insertarUsuarioEnTabla(t,u4,tablaYaCreada); // Se redimensionará el vector de punteros a usuarios al llamar a este modulo
- setLogin(t,"@Ejemplo4",posUsuario);
- setNombre(t,"Ejemplo4",posUsuario);
- setApellido(t,"Ejemplo4",posUsuario);
- setPerfil_usuario(t,"Usuario",posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,4,posUsuario);
- setRuta(t,"ruta1",posUsuario,0);
- setTipo(t,".jpg",posUsuario,0);
- setTamanio(t,1024,posUsuario,0);
- setRuta(t,"ruta2",posUsuario,1);
- setTipo(t,".jpg",posUsuario,1);
- setTamanio(t,1024,posUsuario,1);
- setRuta(t,"ruta3",posUsuario,2);
- setTipo(t,".jpg",posUsuario,2);
- setTamanio(t,1024,posUsuario,2);
- setRuta(t,"ruta4",posUsuario,3);
- setTipo(t,".jpg",posUsuario,3);
- setTamanio(t,1024,posUsuario,3);
- posUsuario++; // Aumentamos en uno la variable local que nos indica la posicion del puntero al usuario en el vector de punteros
- // EJemplo 5:
- u5=crearUsuario();
- insertarUsuarioEnTabla(t,u5,tablaYaCreada); // Se redimensionará el vector de punteros a usuarios al llamar a este modulo
- setLogin(t,"@Ejemplo5",posUsuario);
- setNombre(t,"Ejemplo5",posUsuario);
- setApellido(t,"Ejemplo5",posUsuario);
- setPerfil_usuario(t,"Usuario",posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,5,posUsuario);
- setRuta(t,"ruta1",posUsuario,0);
- setTipo(t,".jpg",posUsuario,0);
- setTamanio(t,1024,posUsuario,0);
- setRuta(t,"ruta2",posUsuario,1);
- setTipo(t,".jpg",posUsuario,1);
- setTamanio(t,1024,posUsuario,1);
- setRuta(t,"ruta3",posUsuario,2);
- setTipo(t,".jpg",posUsuario,2);
- setTamanio(t,1024,posUsuario,2);
- setRuta(t,"ruta4",posUsuario,3);
- setTipo(t,".jpg",posUsuario,3);
- setTamanio(t,1024,posUsuario,3);
- setRuta(t,"ruta5",posUsuario,4);
- setTipo(t,".jpg",posUsuario,4);
- setTamanio(t,1024,posUsuario,4);
- posUsuario++; // Aumentamos en uno la variable local que nos indica la posicion del puntero al usuario en el vector de punteros
- // Ejemplo 6:
- u6=crearUsuario();
- insertarUsuarioEnTabla(t,u6,tablaYaCreada); // Se redimensionará el vector de punteros a usuarios al llamar a este modulo
- setLogin(t,"@Ejemplo6",posUsuario);
- setNombre(t,"Ejemplo6",posUsuario);
- setApellido(t,"Ejemplo6",posUsuario);
- setPerfil_usuario(t,"Usuario",posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,0,posUsuario);
- posUsuario++; // Aumentamos en uno la variable local que nos indica la posición del puntero al usuario en el vector de punteros
- // EJemplo 7:
- u7=crearUsuario();
- insertarUsuarioEnTabla(t,u7,tablaYaCreada); // Se redimensionará el vector de punteros a usuarios al llamar a este modulo
- setLogin(t,"@Ejemplo7",posUsuario);
- setNombre(t,"Ejemplo7",posUsuario);
- setApellido(t,"Ejemplo7",posUsuario);
- setPerfil_usuario(t,"Usuario",posUsuario);
- v_fotos=crearVectorFotos();
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- setTotalFotosUsuario(t,5,posUsuario);
- setRuta(t,"ruta1",posUsuario,0);
- setTipo(t,".jpg",posUsuario,0);
- setTamanio(t,100,posUsuario,0);
- setRuta(t,"ruta2",posUsuario,1);
- setTipo(t,".jpg",posUsuario,1);
- setTamanio(t,200,posUsuario,1);
- setRuta(t,"ruta3",posUsuario,2);
- setTipo(t,".jpg",posUsuario,2);
- setTamanio(t,300,posUsuario,2);
- setRuta(t,"ruta4",posUsuario,3);
- setTipo(t,".jpg",posUsuario,3);
- setTamanio(t,400,posUsuario,3);
- setRuta(t,"ruta5",posUsuario,4);
- setTipo(t,".jpg",posUsuario,4);
- setTamanio(t,500,posUsuario,4);
- //Resize de vfotos para crear un usuario automaticamente con espacio para 6 fotos (5 por defecto):
- //Obtenemos la direccion de su vector de fotos y su dimensión y útiles actuales
- v_fotos=getV_fotos(t,posUsuario);
- dim_vfotos=getDim_vfotos(t,posUsuario);
- util_vFotos=getTotalFotosUsuario(t,posUsuario);
- v_fotos=resizeVectorFotos(v_fotos,util_vFotos,dim_vfotos,6); // Redimensionamos el vector con los parametros obtenidos
- //Asignamos en las estructuras de ese usuario la dirección de su nuevo vector de fotos y actualizamos la dimensión de este
- setV_fotos(t,v_fotos,posUsuario);
- setDim_vfotos(t,dim_vfotos,posUsuario);
- //Rellenamos
- setRuta(t,"ruta6",posUsuario,5);
- setTipo(t,".jpg",posUsuario,5);
- setTamanio(t,600,posUsuario,5);
- setTotalFotosUsuario(t,util_vFotos+1,posUsuario); // Aumentamos su total de fotos en uno
- cout << "La tabla fué creada con éxito" << endl;
- cout << "" << endl;
- tablaYaCreada=true; //Actualizamos la variable que nos indica si la tabla ya existe (se devuelve por referencia)
- } else {
- cout << "Ya existe una tabla, si quieres crear una nueva debes borrar primero la que ya existe." << endl;
- }
- }
- void eliminarTabla (TablaUsuarios &t,bool &tablaYaCreada) {
- if (tablaYaCreada==true) {
- int totalUsuarios=getTotalTuplas(t);
- for (int i=0;i<totalUsuarios;i++) { // Liberamos la memoria del vector dinámico de fotos de cada usuario en la tabla
- Foto* dvFotos=getV_fotos(t,i);
- delete [] dvFotos;
- dvFotos=0;
- }
- for (int i=0;i<totalUsuarios;i++) { // Liberamos la memoria dinámica de todos los usuarios de la tabla
- Usuario* dUsuario=t.punteroapuntero[i];
- delete dUsuario;
- dUsuario=0;
- }
- Usuario** dvPunteroaPuntero=getPunteroaPuntero(t); // Obtenemos la dirección del vector dinámico de punteros a usuarios
- delete dvPunteroaPuntero; // Liberamos la memoria dinámica del vector de punteros a usuarios
- cout << "La tabla fué eliminada con éxito" << endl;
- cout << "" << endl;
- tablaYaCreada=false; // Postcondición: dejará de existir una tabla sobre la que operar
- } else {
- cout << "No puedes eliminar una tabla si no existe ninguna" << endl;
- }
- }
- void imprimirTabla (const TablaUsuarios t,bool tablaYaCreada) {
- if (tablaYaCreada==true) {
- int totalUsuarios=getTotalTuplas(t);
- for (int i=0;i<totalUsuarios;i++) {
- cout << "Usuario " << i+1 << endl;
- cout << "" << endl;
- imprimirUsuario(t,i);
- }
- } else {
- cout << "Debes crear una tabla antes de intentar imprimir una" << endl;
- cout << "" << endl;
- }
- }
- void insertarUsuarioFront (TablaUsuarios &t,bool tablaYaCreada) {
- Usuario* nuevoUsuario=0;
- int dimActual=0;
- if (tablaYaCreada==true) {
- nuevoUsuario=crearUsuario();
- //cout << "d nuevo User : " << nuevoUsuario << endl;
- insertarUsuarioEnTabla(t,nuevoUsuario,tablaYaCreada);
- //cout << "Se ha insertado el nuevo usuario" << endl;
- //cout << "direcciones en el vector" << endl;
- //imprimirVPunteros(t);
- dimActual=getTotalTuplas(t);
- //cout << dimActual;
- rellenarUsuario(t,dimActual-1);
- } else {
- cerr << "No puedes insertar un usuario si no has creado una tabla antes" << endl;
- }
- }
- void buscarUsuarioFront (const TablaUsuarios t,bool tablaYaCreada) {
- string loginQueBuscar;
- int posicionUsuario=0;
- if (tablaYaCreada==true) {
- cout << "Introduce el login del usuario que deseas buscar" << endl;
- cout << " " << endl;
- cin >> loginQueBuscar;
- buscarUsuarioPorLogin(t,loginQueBuscar,posicionUsuario);
- if (posicionUsuario!=-1) { // Si se encontro ese login en algún usuario
- cout << " " << endl;
- cout << "Se ha encontrado el usuario, se imprimirán sus datos: " << endl;
- cout << " " << endl;
- imprimirUsuario(t,posicionUsuario);
- } else { // Si al buscar se devolvió la posición -1
- cout << "No existe ningún usuario con ese login" << endl;
- }
- } else {
- cerr << "No puedes buscar un usuario si no has creado una tabla antes" << endl;
- }
- }
- void eliminarUsuarioFront (TablaUsuarios &t, bool tablaYaCreada) {
- string loginQueBuscar;
- int posicionUsuario=0;
- int dimActual=0;
- Usuario** dActualVector=0;
- Usuario** dNuevoVector=0;
- dimActual=getTotalTuplas(t);
- if (tablaYaCreada==true) {
- cout << "Introduce el login del usuario que deseas borrar" << endl;
- cout << " " << endl;
- cin >> loginQueBuscar;
- buscarUsuarioPorLogin(t,loginQueBuscar,posicionUsuario);
- if (posicionUsuario!=-1) { // Si se encontro ese login en algún usuario
- // Se eliminará el vector de fotos del usuario y su contenido en memoria dinámica
- cout << " " << endl;
- cout << "Se ha encontrado el usuario, se procederá a eliminar sus datos: " << endl;
- cout << " " << endl;
- setLogin(t,"",posicionUsuario); // Borramos los datos del usuario
- setNombre(t,"",posicionUsuario);
- setApellido(t,"",posicionUsuario);
- setPerfil_usuario(t,"",posicionUsuario);
- setDim_vfotos(t,0,posicionUsuario);
- setTotalFotosUsuario(t,0,posicionUsuario);
- eliminarUsuario(t,posicionUsuario); // liberamos la memoria dinámica del usuario
- // Se moverá su puntero a la última posicion del vector de punteros
- t.punteroapuntero[posicionUsuario]=t.punteroapuntero[dimActual-1];
- // Se redimensionará el vector de punteros
- dActualVector=getPunteroaPuntero(t);
- dNuevoVector=resizeVectorPunteros(dActualVector,dimActual,dimActual,dimActual-1);
- // Se guardará la dirección del nuevo vector en la tabla y se modificará el total de tuplas del vector de punteros en la tabla
- setPunteroaPuntero(t,dNuevoVector);
- setTotalTuplas(t,dimActual);
- } else { // Si al buscar se devolvió la posición -1
- cout << "No existe ningún usuario con ese login" << endl;
- }
- } else { // Si no existe la tabla
- cerr << "No puedes eliminar un usuario si no has creado una tabla antes" << endl;
- }
- }
- void ordenarTablaFront (TablaUsuarios &t,bool tablaYaCreada) {
- int fotosActuales=0;
- int fotosAnteriores=0;
- bool cambio=true;
- int dimActual=0;
- if (tablaYaCreada==true) {
- dimActual=getTotalTuplas(t);
- if (dimActual>1) { // No se ordenará la tabla si no existe más de un usuario en ella
- for (int izda=0;(izda<dimActual)&&(cambio==true);izda++) { // Se ordenara con el método de burbuja por el total de fotos
- cambio=false;
- for (int i=dimActual-1;i>izda;i--) {
- fotosActuales=getTotalFotosUsuario(t,i);
- fotosAnteriores=getTotalFotosUsuario(t,i-1);
- if (fotosActuales>fotosAnteriores) { // Se ordenara de mayor a menor
- cambio=true;
- intercambiarPunteros(t.punteroapuntero[i-1],t.punteroapuntero[i]);
- }
- }
- }
- cout << "La tabla fué ordenada con éxito según el total de fotos (mayor a menor)" << endl;
- } else {
- cerr << "No puedes ordenar la tabla si no existe más de un usuario en ella" << endl;
- }
- } else {
- cerr << "No puedes ordenar la tabla si no has creado una tabla antes" << endl;
- }
- }
- void aniadirFotoFront (TablaUsuarios &t,bool tablaYaCreada) {
- int utilActual=0;
- int dim_vfActual=0;
- string ruta;
- string tipo;
- unsigned long int tamanio;
- string loginQueBuscar;
- int posicionUsuario=0;
- Foto* dvFotosActual=0;
- Foto* nueva_dvFotos=0;
- if (tablaYaCreada==true) {
- cout << "Introduce el login del usuario al que deseas añadir una foto" << endl;
- cout << " " << endl;
- cin >> loginQueBuscar;
- buscarUsuarioPorLogin(t,loginQueBuscar,posicionUsuario); // Se devolverá la posición en el vector de punteros del puntero a el usuario buscado
- if (posicionUsuario!=-1) {
- cout << "Se ha encontrado el usuario, se procederá a añadir una foto" << endl;
- utilActual=getTotalFotosUsuario(t,posicionUsuario);
- dim_vfActual=getDim_vfotos(t,posicionUsuario);
- if (utilActual==dim_vfActual) { // Es necesario aumentar la dimensión del vector de fotos
- dvFotosActual=getV_fotos(t,posicionUsuario);
- nueva_dvFotos=resizeVectorFotos(dvFotosActual,utilActual,dim_vfActual,dim_vfActual+1);
- setV_fotos(t,nueva_dvFotos,posicionUsuario);
- cout << "Se ha redimensionado su vector de fotos" << endl;
- //cout << "Sus útiles después de redimensionar son " << utilActual<< endl;
- //cout << "Su dimensión después de redimensionar es " << dim_vfActual<< endl;
- cout << "Introduzca la ruta de la imagen" << endl;
- cin >> ruta;
- cout << "Introduzca la extensión de la imagen" << endl;
- cin >> tipo;
- cout << "Introduzca el tamaño en bits de la imagen" << endl;
- cin >> tamanio;
- setRuta(t,ruta,posicionUsuario,utilActual);
- setTipo(t,tipo,posicionUsuario,utilActual);
- setTamanio(t,tamanio,posicionUsuario,utilActual);
- setTotalFotosUsuario(t,dim_vfActual,posicionUsuario); // Cambia la dimensión y las útiles
- setDim_vfotos(t,dim_vfActual,posicionUsuario);
- } else { // no es necesario un resize
- cout << "Introduzca la ruta de la imagen" << endl;
- cin >> ruta;
- cout << "Introduzca la extensión de la imagen" << endl;
- cin >> tipo;
- cout << "Introduzca el tamaño en bits de la imagen" << endl;
- cin >> tamanio;
- setRuta(t,ruta,posicionUsuario,utilActual);
- setTipo(t,tipo,posicionUsuario,utilActual);
- setTamanio(t,tamanio,posicionUsuario,utilActual);
- utilActual++;
- setTotalFotosUsuario(t,utilActual,posicionUsuario); // Solo cambian las utiles de ese usuario
- }
- } else {
- cout << "No se ha encontrado ningún usuario con ese login" << endl;
- }
- } else {
- cerr << "No puedes añadir una foto a un usuario si no has creado una tabla antes" << endl;
- }
- }
- void eliminarFotoFront (TablaUsuarios &t,bool tablaYaCreada) {
- int utilActual=0;
- int dim_vfActual=0;
- int numeroFoto=0;
- string loginQueBuscar;
- int posicionUsuario=0;
- bool cambio=true;
- int tamanioActual=0;
- int tamanioAnterior=0;
- Foto foto1,foto2;
- if (tablaYaCreada==true) {
- cout << "Introduce el login del usuario del que deseas eliminar una foto" << endl;
- cout << " " << endl;
- cin >> loginQueBuscar;
- buscarUsuarioPorLogin(t,loginQueBuscar,posicionUsuario); // Se devolverá por referencia la posición en el vector de punteros del puntero al usuario buscado
- // Será -1 si no lo encuentra
- if (posicionUsuario!=-1) { // Si se encuentra un usuario con ese login
- utilActual=getTotalFotosUsuario(t,posicionUsuario); // Se obtendrán las útiles actuales del vector de fotos del usuario
- dim_vfActual=getDim_vfotos(t,posicionUsuario); // Se obtendrá la dimensión actual del vector de fotos del usuario
- if (utilActual>0) { // Si el usuario tiene alguna foto
- cout << "Se ha encontrado el usuario, Introduzca el número de la foto que desea borrar" << endl;
- cin >> numeroFoto;
- if ((numeroFoto>0)&&(numeroFoto<=dim_vfActual)) { // Si el número de la foto es mayor que cero y menor o igual a las fotos totales del usuario
- //Vacío el contenido de esa foto
- setRuta(t,"",posicionUsuario,numeroFoto-1);
- setTipo(t,"",posicionUsuario,numeroFoto-1);
- setTamanio(t,0,posicionUsuario,numeroFoto-1);
- if (utilActual>1) { // Si había más de una foto reordeno el vector de fotos por tamaño en bits con el método de burbuja
- for (int izda=0;(izda<dim_vfActual)&&(cambio==true);izda++) {
- cambio=false;
- for (int i=dim_vfActual-1;i>izda;i--) {
- tamanioActual=getTamanio(t,posicionUsuario,i);
- tamanioAnterior=getTamanio(t,posicionUsuario,i-1);
- if (tamanioActual>tamanioAnterior) { // De mayor a menor
- cambio=true;
- intercambiarFotos(t.punteroapuntero[posicionUsuario]->v_fotos[i-1],t.punteroapuntero[posicionUsuario]->v_fotos[i]);
- }
- }
- }
- }
- // Disminuyo en uno las útiles de su vector de fotos
- setTotalFotosUsuario(t,utilActual-1,posicionUsuario);
- } else {
- cout << "No existe esa foto en el usuario" << endl;
- }
- } else {
- cout << "No puedes borrar una foto de un usuario si no tiene ninguna foto" << endl;
- }
- } else {
- cout << "No se ha encontrado ningún usuario con ese login" << endl;
- }
- } else {
- cerr << "No puedes eliminar una foto de un usuario si no has creado una tabla antes" << endl;
- }
- }
- void imprimirFotosUsuarioFront (const TablaUsuarios t,bool tablaYaCreada) {
- string loginQueBuscar;
- int posicionUsuario=0;
- if (tablaYaCreada==true) {
- cout << "Introduce el login del usuario del que deseas imprimir las fotos" << endl;
- cout << " " << endl;
- cin >> loginQueBuscar;
- buscarUsuarioPorLogin(t,loginQueBuscar,posicionUsuario); // Se devolverá la posición en el vector de punteros del puntero a el usuario buscado
- if (posicionUsuario!=-1) {
- cout << "Se ha encontrado el usuario, se procederá a imprimir sus fotos" << endl;
- imprimirFotosUsuario (t,posicionUsuario);
- } else {
- cerr << "No se ha encontrado ningún usuario con ese login" << endl;
- }
- } else {
- cerr << "No puedes imprimir las fotos de un usuario si no existe ninguna tabla de usuarios" << endl;
- }
- }
- void imprimirMenu() {
- cout << "Elige una opcion:" << endl << "" << endl << "1º Crear tabla de usuarios" << endl << "2º Eliminar tabla de usuarios" << endl << "3º Imprimir tabla de usuarios" << endl << "4º Insertar usuario en tabla de usuarios" << endl << "5º Eliminar usuario en tabla de usuarios" << endl << "6º Buscar usuario por login" << endl << "7º Ordenar tabla por total de fotos o por login" << endl << "8º Añadir fotografia a un usuario" << endl << "9º Eliminar fotografia de un usuario" << endl << "10º Imprimir fotografias de un usuario" << endl << "11º Salir" << endl << "" << endl;
- }
- void menu () {
- bool tablaYaExiste=false; // Variable que nos indicará en cada momento si ya existe una tabla de usuarios
- unsigned long int opcion=0; // Declaro la variable que guardará el valor de la opción
- TablaUsuarios t; // Declaro una tabla y vacio el contenido de su puntero al vector dinámico y su total de tuplas (basura)
- t.punteroapuntero=0;
- t.totaltuplas=0;
- do {
- // Se volverá al menú después de ejecutar una opción siempre y cuando la opción no fuese salir
- if (opcion != 11) {
- if (opcion > 11 || opcion < 0) { // Se mostrará este mensaje de error si la opción era un número incorrecto
- cout << "" << endl;
- cout << "Debes elegir una de las opciones del menú" << endl;
- cout << "" << endl;
- }
- imprimirMenu();
- cin >> opcion;
- if (!cin) { // Se mostrara este mensaje de error si la opción no era un número, y se limpiará e ignorará el buffer de entrada
- cin.clear();
- cin.ignore(100,'\n');
- cout << "" << endl;
- cerr << "Debes elegir una de las opciones del menú" << endl;
- cout << "" << endl;
- }
- }
- // Opción 11: Se comprobará si la tabla se ha borrado antes de acabar el programa, no se podra salir del programa
- //sin haber eliminado antes la tabla de usuarios.
- if (opcion == 11) { // Si la opción es salir.
- if (tablaYaExiste==true) { // y la tabla ya existe.
- do { // Se mostrará el mensaje de advertencia y se mostrará de nuevo el menú para elegir una opción.
- cerr << "No puedes salir del programa sin eliminar la tabla de usuarios" << endl;
- pausa();
- imprimirMenu();
- cin >> opcion;
- if (!cin) { // Se mostrara este mensaje de error si la opción no era un número, y se limpiará e ignorará el buffer de entrada
- cin.clear();
- cin.ignore(100,'\n');
- cout << "" << endl;
- cerr << "Debes elegir una de las opciones del menú" << endl;
- }
- cout << "" << endl;
- } while (opcion==11); // Esto ocurrirá siempre que la opción sea acabar el programa cuando ya existe una tabla.
- } else { // En caso contrario se dejará al usuario acabar la ejecución del programa .
- cout << "Ha decidido acabar con la ejecución del programa" << endl << "" << endl;
- }
- }
- // Opción 1: Se creará la tabla de usuarios, no será posible crear una tabla si ya existe una
- if (opcion == 1) {
- crearTabla(t,tablaYaExiste);
- pausa();
- }
- // Opción 2: Se eliminará la tabla de usuarios, no será posible eliminar una tabla si no existe ninguna
- if (opcion == 2) {
- eliminarTabla(t,tablaYaExiste);
- pausa();
- }
- // Opción 3: Se imprimirá la tabla de usuarios, no será posible imprimir una tabla si no existe ninguna
- if (opcion == 3) {
- imprimirTabla(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 4) {
- insertarUsuarioFront(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 5) {
- eliminarUsuarioFront(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 6) {
- buscarUsuarioFront(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 7) {
- ordenarTablaFront(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 8) {
- aniadirFotoFront(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 9) {
- eliminarFotoFront(t,tablaYaExiste);
- pausa();
- }
- if (opcion == 10) {
- imprimirFotosUsuarioFront(t,tablaYaExiste);
- pausa();
- }
- } while (opcion!=11); // Mientras que la opcion no sea 11 no se saldrá del bucle, si la tabla aún está creada la opción no puede ser 11.
- }
- int main () {
- menu();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement