Red social c++, network social c++ (Spanish)




    /*
                                 Universidad Tecnologica de la Zona Metropolitana de Guadalajara
                                         Ingenieria en desarrollo y gestion de softwware
                                           1ro A - Proyecto : Red Social Universitaria
                                                        -> Nuve <--

                    Codigo desarrollado por :               Apartados :

    Lider de proyecto       Osmar Jaime Rivera Martinez         ##  Estructurador del codigo, Interfaz, Macros, Lista de amigos, Publicar, Notificaiones.
                    Olga Liliana Lopez Contreras        ##  Mi perfil,
                    Ivan Alejandro Santana Hernandez    ##  Mensajes, Tema, Interfaz y diseño

                                        Estructura del proyecto:
                    ----------------------------------------------------------------------------------------------------------------------
                    #LIBRERIAS              [Librerias que utlizamos]
                    #MACROS                 [Para los colores]
                    #INTERFAZ               [Macros para Limpiar, Pausar ventana e indicar tamaño de ventana, Titulo y Mensaje de error]
                    #ESTRUCTURAS            [Para guaradar los usuarios y contraseñas en un vector]
                    #VECTORES               [Para crear un Vector donde guardaremos los datos]
                    #LLAMANDO FUNCIONES     [Aqui llamamos las funciones para poder organizar todo el codigo]

                                        Estructura de las funciones:
                    ----------------------------------------------------------------------------------------------------------------------
                    *MAIN                   [Inicio de nuestro codigo]
                    *Funcion GOTOXY         [Contiene la funcion GOTOXY para poder centrar el texto]
                    *Registro               [Funcion para registrar los usuarios]
                    *Inicio de sesion       [Funcion para iniciar sesion, compara password, user e indica las opciones de inicio]
                    *Funcion Buscar         [Funcion vacia para buscar usuarios]
                    *Lista de usuarios      [Funcion para ver los usuarios registrados]
                    *Mensajes               [Funcion para escribir y ver mensajes]
                    *Personalizacion        [Funcion para personalizar la consola]
                    *Mi perfil              [Funcion para ver perfil y editar perfil]
                    *Publicar               [Funcion para realizar un post y ver post]
                    *Notificaciones         [Fucion para ver sus notificaciones]
    */

    //---------------------------------------------------------  Librerias   ------------------------------------------------------------------------->

    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <vector> // son similares a los arreglos, pero tienen la ventaja de poder cambiar su tamaño durante la ejecución del programa.
    using namespace std;

    //------------------  Variables que se necesitan en todas las funciones   ------------------------------------------------------------------------->

    string post;

    //---------------------------------------------------------  Macros ------------------------------------------------------------------------------>

    #define Blanco "\033[0m"         // Blanco
    #define Rojo "\033[1;31m"        // Rojo Para errores y boton volver
    #define Verde "\033[1;32m"       // Verde Para decir que es correcto
    #define AzulFuerte "\033[1;34m"  // Azul fuerte Para titulos
    #define Azul "\033[34m"          // Azul  Para subtitulos
    #define Morado "\033[35m"        // Morado Para apartados
    #define Amarillo "\033[33m"      // Amarillo Para opciones
    #define Naranja "\033[38;5;208m" //  Naranja Para opcion siguiente
    #define Cian "\033[36m"          // Cian
    #define Rosa "\033[35m"          // Rosa

    //---------------------------------------------------------  Interfaz ---------------------------------------------------------------------------->

    #define ventana system("mode con: cols=95 lines=40"); // Le indicamos el tamaño de la ventana (95 clumnas x 40 lineas)
    #define Limpiar_Pantalla system("cls");               // Borra lo escrito en pantalla (Limpia la pantalla)
    #define Pausa system("pause");                        // Pausa y continua con enter

    // Aqui se estamos creando unas macros para poner textos solo llamdolas ademas usamos "u8" para poder colocar simbolos en consola, u8 significa
    #define Titulo                                                                                                 \
gotoxy(2, 1);                                                                                              \
cout << Blanco << u8"═══════════════════════════════════════════════════════" << endl;                     \
gotoxy(1, 2);                                                                                              \
cout << u8"                 ╔══════════════════╗═══╗═╗             " << endl;                              \
gotoxy(1, 3);                                                                                              \
cout << u8"                 ║      " << Blanco << "N u v e" << AzulFuerte << u8"           ║═╗          "; \
gotoxy(1, 4);                                                                                              \
cout << u8"                 ╚════════════════════╚══╚══╝             " << Blanco << endl;                  \
gotoxy(2, 5);                                                                                              \
cout << Blanco << u8"═══════════════════════════════════════════════════════" << endl;                     \
gotoxy(2, 7);                                                                                              \
cout << Blanco << u8"═══════════════════════════════════════════════════════" << endl;

    // Aqui creamos otra macro pero para el texto de error

    #define error                                                                                                                                                                                                                                                                                                                        \
Limpiar_Pantalla;                                                                                                                                                                                                                                                                                                                \
cout << Rojo << u8"▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓" << endl;                                                                                                                                                                                                \
cout << "\t\t\t\t Opción inválida. Intente nuevamente." << endl;                                                                                                                                                                                                                                                                 \
cout << Rojo << u8"▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓" \
     << Blanco << endl;

    //---------------------------------------------------------  Estructuras ------------------------------------------------------------------------>

    /* Estructura: es un tipo de dato que permite agrupar varios valores relacionados en una sola entidad.
                    representan objetos más complejos en un programa.*/

    struct User // La esctructura de nuestro vector se llama "User"
    {
string username; // Aqui guardamos Usuarios
string password; // Aqui guardamos Contraseñas
    };

    //---------------------------------------------------------  Vectores -------------------------------------------------------------------------->

    vector<User> users; // Le creamos un vector "users" a unuestra estrectura "User"

    //------------------------------------------------------ Llamando Funciones -------------------------------------------------------------------------->

    // Aqui llamamos las funciones para dar  orden y leerlas mejor

    void gotoxy(int x, int y); // Gotoxy para el diseño de interfaz nos ayuda a colorcar en la linea y columna que deseamos por cordenadas

    int RegistrarUsuario(); // Registro de usuarios

    int BuscarUsuario(string username); // Busqueda de usuarios

    void ListaNombresUsuarios(); // Lista de amigos

    int IniciarSesion(); // Inicia sesion

    int MiPerfil(); // Mi Perfil

    int Publicar(); // Publicar

    void Mensajes(); // Mensajes

    int Notificaciones(); // Notificaciones

    void Tema(); // Personalizacion

    //********************************************************  GOTOXY *********************************************************************************>

    void gotoxy(int x, int y)
    {
HANDLE hcon;
hcon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
SetConsoleCursorPosition(hcon, dwPos);
    }

    //****************************************************************  MAIN ***************************************************************************>

    int main()
    {
SetConsoleOutputCP(CP_UTF8); // Le indicamos que usaremos simbolos en estec aso  ═ ║
int option;                  // Variables para opciones
bool volver = false;         // Variable para regresarse al menu y regresamos el false para evitar errores
Limpiar_Pantalla;

gotoxy(10, 2);
cout << u8"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 3);
cout << u8"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 4);
cout << u8"░░░░░░░░┌──┐░░░░░░░░░░░░░░░░░░░┌┐░░░░░░░┌┐░░░░┌─┐░┌┬┐░┌┬┐░░┌┬───┐░░░░░░" << endl;
gotoxy(10, 5);
cout << u8"░░░░░░░░│┌┐│░░░░░░░░░░░░░░░░░░░││░░░░░░░││░░░░││└┐│││░││└┐┌┘│┌──┘░░░░░░" << endl;
gotoxy(10, 6);
cout << u8"░░░░░░░░│└┘└┬┬──┬─┐┌┐┌┬──┬─┐┌┬─┘├──┐┌──┐││┌──┐│┌┐└┘││░│├┐││┌┤└──┐░░░░░░" << endl;
gotoxy(10, 7);
cout << u8"░░░░░░░░│┌─┐├┤│─┤┌┐┤└┘││─┤┌┐┼┤┌┐│┌┐││┌┐││││┌┐│││└┐│││░│││└┘││┌──┘░░░░░░" << endl;
gotoxy(10, 8);
cout << u8"░░░░░░░░│└─┘│││─┤││├┐┌┤│─┤││││└┘│└┘││┌┐││└┤┌┐│││░│││└─┘│└┐┌┘│└──┐░░░░░░" << endl;
gotoxy(10, 9);
cout << u8"░░░░░░░░└───┴┴──┴┘└┘└┘└──┴┘└┴┴──┴──┘└┘└┘└─┴┘└┘└┘░└─┴───┘░└┘░└───┘░░░░░░" << endl;
gotoxy(10, 10);
cout << u8"░░░░░░░░░░░░░░░░░░░░░░░░░░▄▄▄▄▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 11);
cout << u8"░░░░░░░░░░░░░░░░░▄▄▄▄▄░░█████████▄▄█████▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 12);
cout << u8"░░░░░░░░░░░░░░░███████████▀▒▒▒▀██████▀███▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 13);
cout << u8"░░░░░░░░░░░░░▐███▒▒▒▒░███░▒▒░░▒▐██▒▒▒▒▒▒███████▄░░░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 14);
cout << u8"░░░░░░░░░░░▄▄██▒▒▒▒▒▒▒░█▌▒░░░░░▐█▒▒░░░░░▐█▀▀▀████▄░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 15);
cout << u8"░░░░░░░░░██████▒▒▒░░░▒▒▒▒▒░░░▒▒▒▒▒░░░░░░░▀▒▒▒▒▒▀██░░░░░░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 16);
cout << u8"░░░░░░░▐███░▒▒▒▒▒▒░░░▒▒▒▒▒▒░░▒░░░░░░░▒▒░░▒▒░░░░░▐██████░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 17);
cout << u8"░░░░░░░▐█▒▒▒▒░░░░░░░▒▒░░░░░▒▒░▒▒░░░░░░▒▒▒▒░░░░░░██▀▀▀███░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 18);
cout << u8"░░░░░░██░▒░░░░░░░░░▒░░░░░░▒▒░░░░░░░▒▒▒▒░░░░░░░░░██░▒▒░▀██░░░░░░░░░░░░░░" << endl;
gotoxy(10, 19);
cout << u8"░░░░░░██░░░░░░░░▒▒▒░░░░░░▒▒░░░░░▒▒▒░░░░░░░░░░░░░░▒▒░▒▒░██░░░░░░░░░░░░░░" << endl;
gotoxy(10, 20);
cout << u8"░░░░░░███▄▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒░░░░░▐█░░░░░░░░░░░░░░" << endl;
gotoxy(10, 21);
cout << u8"░░░░░░▀█████░░░░░░▄▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░" << endl;
gotoxy(10, 22);
cout << u8"░░░░░░░░░░███████████▄▄▄▄▄▄█████▄▄░░░░▄▄██▄▄▄▄▄▄▄▄███████░░░░░░░░░░░░░░" << endl;
gotoxy(10, 23);
cout << u8"░░░░░░░░░░░▀▀▀▀▀▀▀▀█████████▀▀█████████████████████▀▀▀▀░░░░░░░░░░░░░░░░" << endl;
gotoxy(10, 24);
cout << u8"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▀▀▀▀▀▀░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" << endl;

Pausa;

do
{
    // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

    Limpiar_Pantalla;
    ventana;
    Titulo;

    // Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

    int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
    for (int i = 0; i < length; i++)
    {
        cout << "▓" << endl;
        y++;
        gotoxy(x, y);
    }

    gotoxy(18, 4);
    cout << Verde << u8"Menu>" << endl; // Comenzamos con el titulo

    gotoxy(18, 9);
    cout << Azul << u8"╔═════════════════════════╗" << endl;
    gotoxy(18, 10);
    cout << u8"║  ▒▒▄▀▀▀▀▀▄▒▒▒▒▒▄▄▄▄▄▒▒▒ ║" << endl;
    gotoxy(18, 11);
    cout << u8"║  ▒▐░▄░░░▄░▌▒▒▄█▄█▄█▄█▄▒ ║" << endl;
    gotoxy(18, 12);
    cout << u8"║  ▒▐░▀▀░▀▀░▌▒▒▒▒▒░░░▒▒▒▒ ║" << endl;
    gotoxy(18, 13);
    cout << u8"║  ▒▒▀▄░═░▄▀▒▒▒▒▒▒░░░▒▒▒▒ ║" << endl;
    gotoxy(18, 14);
    cout << u8"║  ▒▒▐░▀▄▀░▌▒▒▒▒▒▒░░░▒▒▒▒ ║" << endl;
    gotoxy(18, 15);
    cout << u8"║  ──────────────▄▀█▀█▀▄  ║" << endl;
    gotoxy(18, 16);
    cout << u8"║   Registrarse ▀▀▀▀▀▀▀▀▀ ║" << endl;
    gotoxy(18, 17);
    cout << u8"║  ─────────────▄─░░░░░▄  ║" << endl;
    gotoxy(18, 18);
    cout << u8"╚═════════════════════════╝" << endl;

    gotoxy(18, 19);
    cout << Naranja << u8"╔═════════════════════════╗" << endl;
    gotoxy(18, 20);
    cout << u8"║  ▐▓█▀▀▀▀▀▀▀▀▀█▓▌░▄▄▄▄▄░ ║" << endl;
    gotoxy(18, 21);
    cout << u8"║  ▐▓█░░▀░░▀▄░░█▓▌░█▄▄▄█░ ║" << endl;
    gotoxy(18, 22);
    cout << u8"║  ▐▓█░░▄░░▄▀░░█▓▌░█▄▄▄█░ ║" << endl;
    gotoxy(18, 23);
    cout << u8"║  ▐▓█▄▄▄▄▄▄▄▄▄█▓▌░█████░ ║" << endl;
    gotoxy(18, 24);
    cout << u8"║  ░░░░▄▄███▄▄░░░░░█████░ ║" << endl;
    gotoxy(18, 25);
    cout << u8"║                         ║" << endl;
    gotoxy(18, 26);
    cout << u8"║      Iniciar sesion     ║" << endl;
    gotoxy(18, 27);
    cout << u8"║                         ║" << endl;
    gotoxy(18, 28);
    cout << u8"╚═════════════════════════╝" << Blanco << endl;

    // Barra de opciones

    gotoxy(60, 4);
    cout << Azul << u8"══════ Bienvenido ══════" << Blanco << endl;
    gotoxy(59, 6);
    cout << "║ Ingrese una opcion:              ║" << endl;
    gotoxy(59, 7);
    cout << Azul << u8"║                     ╚═════╝      ║" << Blanco << endl;
    gotoxy(59, 8);
    cout << Azul << u8"╚══════════════════════════════════╝" << Blanco << endl;
    gotoxy(60, 9);
    cout << Rojo << "[0] Salir" << Blanco << endl;
    gotoxy(60, 11);
    cout << Azul << "[1] Registrarse" << endl;
    gotoxy(60, 13);
    cout << Naranja << "[2] Iniciar sesion" << Blanco << endl;
    gotoxy(83, 6);
    cin >> option;

    switch (option)
    {
    case 1:
        Limpiar_Pantalla;
        RegistrarUsuario();
        break;
    case 2:
    {
        Limpiar_Pantalla;
        IniciarSesion();
        break;
    }
    case 0:
        Limpiar_Pantalla;
        cout << "Saliendo del programa..." << endl;
        cout << u8"████████████▒░▒██████" << endl;
        cout << u8"███████████▓░░░▒█████" << endl;
        cout << u8"███████████▒░░▒░▒████" << endl;
        cout << u8"▒▓████████▓░░▒▒▒▒░░▓█" << endl;
        cout << u8"░░░▒▒▓██▓░░░░▒▒▓▒░▒█▓" << endl;
        cout << u8"█░░░░░░░░░░░▒▒▒▒▓░██░" << endl;
        cout << u8"██▒░░░░░░░░░░░░░░░▓█░" << endl;
        cout << u8"███▓░░░░░░░░░░░░░░░██" << endl;
        cout << u8"████▒░░░░░▒▓▒░░░░░░▒█" << endl;
        cout << u8"████░░░░░░▒█▓░░░░░░░█" << endl;
        cout << u8"███▓░▓▓░░░▒▒░░░░░░░░▓" << endl;
        cout << u8"████░▒▓░░░░░░░░░░▒░░░" << endl;
        cout << u8"████▓░░░░░░░░░░░░░░░░" << endl;
        cout << u8"█████░░░░▒░░░░░░░░░░░" << endl;
        cout << u8"████▒░▒░▒▒░░░▒▒░░░░░░" << endl;
        cout << u8"▓▓████▓░░▒▒▒▒▒░░░░░░░" << endl;
        cout << u8"▓▓▓▓█▓██▓░▒▒▒░░░░░░░░" << endl;
        cout << u8"█▓███▓▓██░░░░░░░░░░░░" << endl;
        cout << u8"▓░▓██▓░▓▒░░░░░░░░░░░░" << endl;
        return 0;
        break;

    default:
        Limpiar_Pantalla;
        error;
        Pausa;
        break;
    }

    Limpiar_Pantalla;

} while (volver = true); // Regresamos al inicio si volver es verdadero

return 0;
    }

    //********************************************************  REGISTRO ******************************************************************************>

    int RegistrarUsuario()
    {
int option;          // Variables para opciones
bool volver = false; // Variable para regresarse al menu y regresamos el false para evitar errores

do
{
    // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

    Limpiar_Pantalla;
    ventana;
    Titulo;
    // Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

    int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
    for (int i = 0; i < length; i++)
    {
        cout << "▓" << endl;
        y++;
        gotoxy(x, y);
    }

    gotoxy(18, 4);
    cout << Verde << u8" Menu > Registrase" << endl; // Comenzamos con el titulo

    string username, password; // Declaramos donde guardar nuestros Usuarios y Contraseñas

    gotoxy(60, 4);
    cout << Azul << u8"══════ Registrase ══════" << Blanco << endl;
    gotoxy(10, 8);
    cout << "Ingrese un nombre de usuario ";
    gotoxy(10, 10);
    cout << u8"╚═════════════════════════════╝" << endl;
    gotoxy(15, 9);
    cin >> username;
    gotoxy(10, 11);
    cout << "Ingrese una contraseña:";
    gotoxy(10, 13);
    cout << u8"╚═════════════════════════════╝" << endl;
    gotoxy(15, 12);
    cin >> password;

    // Push_back es un método que permite agregar un elemento al final de un vector. en este caso (Users.)
    users.push_back({username, password});

    gotoxy(15, 12);
    cout << Verde << "Registro exitoso." << Blanco << endl;
    gotoxy(59, 6);
    cout << "║ Ingrese una opcion:              ║" << endl;
    gotoxy(59, 7);
    cout << Azul << u8"║                     ╚═════╝      ║" << Blanco << endl;
    gotoxy(59, 8);
    cout << Azul << u8"╚══════════════════════════════════╝" << Blanco << endl;
    gotoxy(60, 9);
    cout << Rojo << "0) Volver al menu";
    gotoxy(60, 11);
    cout << Azul << "1) Registrar otra cuenta" << Blanco << endl;
    gotoxy(83, 6);
    cin >> option;

    switch (option)
    {
    case 0:
        return 0;
        break;
    case 1:
        volver = true;
        break;

    default:
        error;
        break;
    }
} while (volver = true); // Regresamos al inicio si volver es verdadero

return 0;
    }

    //********************************************************  Inicio Sesion ***************************************************************************>

    int IniciarSesion()
    {
bool volver = false;  // Variable para regresarse al menu y regresamos el false para evitar errores
int option, OpcError; // Variable de opciones y variables de cuando tenemos error le mensiona si quiere reintentar o salir
do
{
    // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

    Limpiar_Pantalla;
    ventana;
    Titulo;
    // Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

    int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
    for (int i = 0; i < length; i++)
    {
        cout << "▓" << endl;
        y++;
        gotoxy(x, y);
    }

    gotoxy(18, 4);
    cout << Verde << u8" Menu > Iniciar Sesion" << endl; // Comenzamos con el titulo

    string username, password; // Declaramos donde guardar nuestros Usuarios y Contraseñas

    gotoxy(60, 4);
    cout << Naranja << u8"║         Iniciar Sesion         ║ "
         << Blanco << endl;
    gotoxy(10, 8);
    cout << "Ingrese un nombre de usuario ";
    gotoxy(10, 10);
    cout << u8"╚═════════════════════════════╝" << endl;
    gotoxy(15, 9);
    cin >> username;
    gotoxy(10, 11);
    cout << "Ingrese una contraseña:";
    gotoxy(10, 13);
    cout << u8"╚═════════════════════════════╝" << endl;
    gotoxy(15, 12);
    cin >> password;

    /* Declaramos una variables llamada "user_index" para saber la posicion de la lista de usuarios que tiene ademas los buscamos
    y vemos si coenciden su usuario y contraseña */

    int user_index = BuscarUsuario(username);

    if (user_index == -1 || users[user_index].password != password)

    {
        // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

        Limpiar_Pantalla;
        ventana;
        Titulo;
        gotoxy(15, 8);
        cout << Rojo << u8"╔═════════════════════════════════════════════╗" << endl;
        gotoxy(15, 9);
        cout << "║ Nombre de usuario o contraseña incorrectos. ║  :c" << endl;
        gotoxy(15, 10);
        cout << u8"╚═════════════════════════════════════════════╝" << Blanco << endl;
        gotoxy(15, 11);
        cout << "Para reintentar " << Rojo << "presione [1] " << Blanco << "Para salir " << Rojo << "presione [0]" << Blanco;
        gotoxy(25, 14);
        cout << Azul << u8"╚═════╝" << Blanco << endl;
        gotoxy(28, 13);
        cin >> OpcError;

        if (OpcError == 1)
        {
            volver = true;
        }
        else
        {
            return 0;
        }
    }
    else
    {

        // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

        Limpiar_Pantalla;
        ventana;
        Titulo;
        // Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

        int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
        for (int i = 0; i < length; i++)
        {
            cout << "▓" << endl;
            y++;
            gotoxy(x, y);
        }

        gotoxy(18, 4);
        cout << Verde << u8"Inicio>" << endl; // menu
        gotoxy(2, 8);
        cout << Azul << u8"╔══════════════════════╗" << endl;
        gotoxy(2, 9);
        cout << u8"║        ████          ║" << endl;
        gotoxy(2, 10);
        cout << u8"║       ██████         ║" << endl;
        gotoxy(2, 11);
        cout << u8"║      ████████        ║" << endl;
        gotoxy(2, 12);
        cout << u8"║    ████████████      ║" << endl;
        gotoxy(2, 13);
        cout << u8"║         ░░           ║" << endl;
        gotoxy(2, 14);
        cout << u8"║         ░░           ║" << endl;
        gotoxy(2, 15);
        cout << u8"╚══════════════════════╝" << endl;

        gotoxy(30, 8);
        cout << Naranja << u8"╔══════════════════════╗" << endl;
        gotoxy(30, 9);
        cout << u8"║     ***********      ║" << endl;
        gotoxy(30, 10);
        cout << u8"║     ***********      ║" << endl;
        gotoxy(30, 11);
        cout << u8"║     ** ***** **      ║" << endl;
        gotoxy(30, 12);
        cout << u8"║     *** *** ***      ║" << endl;
        gotoxy(30, 13);
        cout << u8"║     **** * ****      ║" << endl;
        gotoxy(30, 14);
        cout << u8"║     ***********      ║" << endl;
        gotoxy(30, 15);
        cout << u8"╚══════════════════════╝" << endl;

        gotoxy(2, 16);
        cout << Rosa << u8"╔══════════════════════╗" << endl;
        gotoxy(2, 17);
        cout << u8"║███████████████       ║" << endl;
        gotoxy(2, 18);
        cout << u8"║████░░░░░░░░░░░████   ║" << endl;
        gotoxy(2, 19);
        cout << u8"║███░░░░██░░░░██░░░███ ║" << endl;
        gotoxy(2, 20);
        cout << u8"║███░░░░██░░░░██░░░███ ║" << endl;
        gotoxy(2, 21);
        cout << u8"║███░░░░░░░░░░░░░░░███ ║" << endl;
        gotoxy(2, 22);
        cout << u8"║███░░░░░░░░░░░░░░░███ ║" << endl;

        gotoxy(2, 23);
        cout << u8"╚══════════════════════╝" << endl;

        gotoxy(30, 16);
        cout << Verde << u8"╔══════════════════════╗" << endl;
        gotoxy(30, 17);
        cout << u8"║ ▒▒▒▒███╔═╗▒╔╗████▒▒▒ ║" << endl;
        gotoxy(30, 18);
        cout << u8"║ ▒▒▄█▒▒▒║║╚╗║║░▒▒▒█▄▒ ║" << endl;
        gotoxy(30, 19);
        cout << u8"║ ▒▐██▒▒░║╔╗╚╝║░░░▒██▒ ║" << endl;
        gotoxy(30, 20);
        cout << u8"║ ▒▒▒█▒░░║║╚╗║║░░░▒█▒▒ ║" << endl;
        gotoxy(30, 21);
        cout << u8"║ ▒▒▄█▒▒▒║║▒║║║▒▒▒▒█▄▒ ║" << endl;
        gotoxy(30, 22);
        cout << u8"║ ▒▐███░░╚╝░╚═╝░░░███▒ ║" << endl;
        gotoxy(30, 23);
        cout << u8"╚══════════════════════╝" << endl;

        gotoxy(2, 24);
        cout << Amarillo << u8"╔══════════════════════╗" << endl;
        gotoxy(2, 25);
        cout << u8"║ ╔══╦═╦═╦══╦══╦═╦══╗  ║" << endl;
        gotoxy(2, 26);
        cout << u8"║ ║╔╗║║║║╠║║╣╔═╣║║══╣  ║" << endl;
        gotoxy(2, 27);
        cout << u8"║ ║╠╣║║║║╠║║╣╚╗║║╠══║  ║" << endl;
        gotoxy(2, 28);
        cout << u8"║ ╚╝╚╩╩═╩╩══╩══╩═╩══╝  ║" << endl;
        gotoxy(2, 29);
        cout << u8"║ ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬  ║" << endl;
        gotoxy(2, 30);
        cout << u8"╚══════════════════════╝" << endl;

        gotoxy(30, 24);
        cout << Cian << u8"╔══════════════════════╗" << endl;
        gotoxy(30, 25);
        cout << Rojo << u8"║ ╔╔╔══╦═╦═╦═╦══╗████  ║" << endl;
        gotoxy(30, 26);
        cout << Azul << u8"║ ╚╚╚╗╔══╦═╦═╦═╦══╗██  ║" << endl;
        gotoxy(30, 27);
        cout << Verde << u8"║ █║║║╚╗╔╣╦╣║║║║╔╗║██  ║" << endl;
        gotoxy(30, 28);
        cout << Morado << u8"║ █╚╚╚╝║║║╩╣║║║║╠╣║██  ║" << endl;
        gotoxy(30, 29);
        cout << Naranja << u8"║ █████╚╝╚═╩╩═╩╩╝╚╝██  ║" << endl;
        gotoxy(30, 30);
        cout << Cian << u8"╚══════════════════════╝" << endl;

        gotoxy(60, 3);
        cout << Verde << "Inicio de sesión exitoso."
             << Blanco << endl;
        gotoxy(59, 6);
        cout << "║ Ingrese una opcion:              ║" << endl;
        gotoxy(59, 7);
        cout << Azul << u8"║                     ╚═════╝      ║" << Blanco << endl;
        gotoxy(59, 8);
        cout << Azul << u8"╚══════════════════════════════════╝" << Blanco << endl;
        gotoxy(59, 9);
        cout << Rojo << "[0] Cerrar sesion" << endl;
        gotoxy(59, 11);
        cout << Azul << "[1] Mi perfil" << endl;
        gotoxy(59, 13);
        cout << Naranja << "[2] Mensajes" << endl;
        gotoxy(59, 15);
        cout << Morado << "[3] Publicar" << endl;
        gotoxy(59, 17);
        cout << Verde << "[4] Notificaciones" << endl;
        gotoxy(59, 19);
        cout << Amarillo << "[5] Lista de amigos" << endl;
        gotoxy(59, 21);
        cout << Cian << "[6] Tema" << endl;
        gotoxy(83, 6);
        cin >> option;

        switch (option)
        {

        case 0:
            Limpiar_Pantalla;
            cout << "Saliste de la cuenta" << endl;
            Pausa;
            return 0;
            break;

        case 1:
            MiPerfil();

            break;
        case 2:
            Mensajes();
            Pausa;
            break;
        case 3:
            Publicar();

            break;
        case 4:
            Notificaciones();
            Pausa;
            break;
        case 5:
            ListaNombresUsuarios();
            Pausa;
            break;
        case 6:
            Tema();
            Pausa;
            break;
        default:
            error;
            Pausa;
            break;
        }
    }
} while (volver = true);
return 0;
    }

    //********************************************************  Buscar ********************************************************************************>

    int BuscarUsuario(string username)
    {
for (int i = 0; i < users.size(); i++) // size(): es un método que devuelve la cantidad de elementos que hay en un vector.
{                                      // si queremos saber cuántos elementos tiene el vector mi_vector, podemos usar el método size()
    if (users[i].username == username)
    {
        return i;
    }
}
return -1;
    }

    //********************************************************  Lista Usuarios *************************************************************************>

    void ListaNombresUsuarios()
    {
// INICIO

// INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

Limpiar_Pantalla;
ventana;
Titulo;
// Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
for (int i = 0; i < length; i++)
{
    cout << "▓" << endl;
    y++;
    gotoxy(x, y);
}

gotoxy(18, 4);
cout << Verde << u8" Menu > Lista amigos" << endl; // menu

gotoxy(10, 8);
cout << Amarillo << u8"║       AMIGOS     ║"
     << Blanco << endl;

if (users.empty())
{
    gotoxy(10, 10);
    cout << Rojo << "No hay usuarios registrados en el sistema." << Blanco << endl;
    return;
}

for (int i = 0; i < users.size(); i++)
{

    cout << endl
         << users[i].username << endl;
}
    }

    //******************************************************** Mensajes ALEJANDRO  ***************************************************>

    void Mensajes()
    {
// INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

Limpiar_Pantalla;
ventana;
Titulo;
// Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
for (int i = 0; i < length; i++)
{
    cout << "▓" << endl;
    y++;
    gotoxy(x, y);
}

gotoxy(10, 8);
cout << "Bienvenido a la bandeja de mensajes" << endl;

Sleep(2000); // Simulación de proceso que tarda 2 segundos en ejecutarse
gotoxy(6, 10);
cout << "Mensaje 1: Hola, ¿cómo estás?" << endl;

Sleep(2000);
gotoxy(6, 11);
cout << "Mensaje 2: No te olvides de comprar leche en el supermercado" << endl;
Sleep(2000);
gotoxy(6, 12);
cout << "Mensaje 3: Recordatorio: Tu cita con el dentista es mañana" << endl;


    }

    //********************************************************  TEMA ALEJANDRO ***************************************************>

    void Tema()
    {

// INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

Limpiar_Pantalla;
ventana;
Titulo;
// Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
for (int i = 0; i < length; i++)
{
    cout << "▓" << endl;
    y++;
    gotoxy(x, y);
}

int fondo;

Limpiar_Pantalla;

gotoxy(10, 8);
cout << "Que color de fondo quieres elegir?" << endl
     << "1. Negro" << endl
     << "2. Azul" << endl
     << "3. Verde" << endl
     << "4. Rojo" << endl
     << "5. Morado" << endl
     << "6. Amarillo" << endl
     << "7. Blanco hueso" << endl
     << "8. Gris" << endl
     << "9.Celeste" << endl
     << "10. Color Crema" << endl;
cin >> fondo;

switch (fondo)
{
case 1:
    system("Color 00");
    break;
case 2:
    system("Color 10");
    break;
case 3:
    system("Color 20");
    break;
case 4:
    system("Color 40");
    break;
case 5:
    system("Color 50");
    break;
case 6:
    system("Color 60");
    break;
case 7:
    system("Color 70");
    break;
case 8:
    system("Color 80");
    break;
case 9:
    system("Color 90");
    break;
case 10:
    system("Color E0");
    break;
default:
    cout << "Esa es una opcion no valida" << endl;
}
    }

    //******************************************************** Mi perfil Olga  ***************************************************>

    int MiPerfil()

    {

bool repetir = false;
int opc;

do
{
    // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

    Limpiar_Pantalla;
    ventana;
    Titulo;
    // Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

    int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
    for (int i = 0; i < length; i++)
    {
        cout << "▓" << endl;
        y++;
        gotoxy(x, y);
    }

    struct PerfilSocial
    {

        int edad;
        string nombre, ciudad, carrera, cumpleanos, sexo, situacionsentimental, apodo, mostrarinforamacion;
    };

    PerfilSocial perfil;

    gotoxy(10, 6);
    cout << "Atencion !! trata de no equivocarte por que no podras \n cambiar tu informacion hasta que no te registres por completo... " << endl;

    gotoxy(10, 8);
    cout << "Ingrese los detalles del Perfil Social:" << endl;
    gotoxy(10, 11);
    cout << "nombre:";
    gotoxy(10, 12);
    cin >> perfil.nombre;
    gotoxy(10, 13);
    cout << "Edad: ";
    gotoxy(10, 14);
    cin >> perfil.edad;
    gotoxy(10, 15);
    cout << "apodo:";
    gotoxy(10, 16);
    cin >> perfil.apodo;
    gotoxy(10, 17);
    cout << "Ciudada actual: ";
    gotoxy(10, 18);
    cin >> perfil.ciudad;
    gotoxy(10, 19);
    cout << "Carrera que estudia: ";
    gotoxy(10, 20);
    cin >> perfil.carrera;
    gotoxy(10, 21);
    cout << "fecha de cumpleaños: ";
    gotoxy(10, 22);
    cin >> perfil.cumpleanos;
    gotoxy(10, 23);
    cout << "sexo : ";
    gotoxy(10, 24);
    cin >> perfil.sexo;
    gotoxy(10, 25);
    cout << "situacion sentimental: ";
    gotoxy(10, 26);
    cin >> perfil.situacionsentimental;

    Limpiar_Pantalla;

    gotoxy(10, 8);
    cout << "Tu informacion" << endl;
    gotoxy(10, 10);
    cout << "Perfil Social:" << endl;
    gotoxy(10, 11);
    cout << "nombre: " << perfil.nombre << endl;
    gotoxy(10, 12);
    cout << "Edad: " << perfil.edad << endl;
    gotoxy(10, 13);
    cout << "apodo el cual te gustaria que te digan: " << perfil.apodo << endl;
    gotoxy(10, 14);
    cout << "Ciudad actual: " << perfil.ciudad << endl;
    gotoxy(10, 15);
    cout << "Carrera que estudia: " << perfil.carrera << endl;
    gotoxy(10, 16);
    cout << "cumpleaños: " << perfil.cumpleanos << endl;
    gotoxy(10, 17);
    cout << "sexo: " << perfil.sexo << endl;
    gotoxy(10, 18);
    cout << "situacionsentimental: " << perfil.situacionsentimental << endl;
    gotoxy(10, 19);
    cout << "apodo: " << perfil.apodo << endl;
    gotoxy(10, 22);
    cout << "fin de la informacion requerida..................." << std::endl;
    gotoxy(10, 23);
    cout << "quieres repetir tu informacion? Si = 1, No = 0:";
    gotoxy(10, 24);

    cin >> opc;

    switch (opc)
    {
    case 1:
        repetir = true;
        break;

    default:
        break;
    }

} while (repetir == true);

return 0;
    }

    //******************************************************** Publicar  Osmar ***************************************************>

    int Publicar()
    {
int option;
bool volver = false;
do
{

    // INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

    Limpiar_Pantalla;
    ventana;
    Titulo;
    // Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

    int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
    for (int i = 0; i < length; i++)
    {
        cout << "▓" << endl;
        y++;
        gotoxy(x, y);
    }

    gotoxy(18, 4);
    cout << Verde << u8" Inicio > Publicar" << endl; // menu

    gotoxy(59, 6);
    cout << "║ Ingrese una opcion:              ║" << endl;
    gotoxy(59, 7);
    cout << Azul << u8"║                     ╚═════╝      ║" << Blanco << endl;
    gotoxy(59, 8);
    cout << Azul << u8"╚══════════════════════════════════╝" << Blanco << endl;
    gotoxy(59, 9);
    cout << Rojo << "[0] Cerrar sesion" << endl;
    gotoxy(59, 11);
    cout << Azul << "[1] Publicar" << endl;
    gotoxy(59, 13);
    cout << Naranja << "[2] Ver post" << Blanco << endl;
    gotoxy(83, 6);
    cin >> option;

    switch (option)
    {

    case 0:
        return 0;
        break;

    case 1:
        gotoxy(10, 8);
        cout << "Escribe tu post" << endl;
        gotoxy(10, 10);
        cin >> post;
        gotoxy(10, 12);
        cout << Verde << "Publicado" << Blanco << endl;
        volver = true;
        break;

    case 2:
        gotoxy(10, 8);
        cout << "Posts" << endl;
        gotoxy(10, 10);
        cout << "---" << post << "---" << endl;
        gotoxy(10, 12);
        Pausa;
        return 0;
        break;
    }
} while (volver = true);

return 0;
    }

    //******************************************************** Notificaciones Osmar  ***************************************************>

    int Notificaciones()
    {
int option;

// INICIO empezaos limpiando pantalla, indicando el tamaño de ventana y colocando titulo

Limpiar_Pantalla;
ventana;
Titulo;
// Aqui estamos creando un ciclo para poner la linea vertical con el simbolo : ▓

int x = 57, y = 1, length = 40; // Colunna, Linea y largo en sentido vertical
for (int i = 0; i < length; i++)
{
    cout << "▓" << endl;
    y++;
    gotoxy(x, y);
}

gotoxy(18, 4);
cout << "Ejecutando programa..." << endl;

// Simulación de proceso que tarda 3 segundos en ejecutarse
Sleep(3000);

gotoxy(18, 4);
cout << Verde << "Proceso completado." << endl;
gotoxy(10, 7);
cout << Blanco << "¡Tienes una nueva notificación!" << endl;
gotoxy(10, 10);
return 0;

    }

    //******************************************************** fINAL DEL CODIGO ************************************************************************>