#include <stdio.h>
#include <string.h>
#include <windows.h>
using namespace std;
struct USER {
char nick[25];
char ip[16];
char email[30];
};
struct CHATROOM {
int roomid;
char nombre[20];
int nUsers; //Número actual de usuarios
USER lista[40];
};
void nuevoChat(int maxChats, int &nChats, CHATROOM Chat[]); //Agrega un nuevo chat a la lista de chats
int agregarUsuario(int nChats, CHATROOM Chat[]); //Agrega un usuario nuevo a un chat específico
void ImprimeUsuarios(int indexChat, int nChats, CHATROOM Chat[]); //Imprime los usuarios dentro de el chat seleccionado o todos
void Flush(); //Elimina la basura ( Como si fuera "flush()" )
int main() {
int maxChats = 10; //Numero máximo de Chats
int nChats = 0; //Numero actual de Chats
char op; //Variable auxiliar para el menu de opciones
CHATROOM Chat[maxChats]; // Arreglo de chats
//Creando un chat nuevo por defecto
Chat[nChats].roomid = nChats + 1; //Esto no es necesario en realidad, ya que no usamos el id de chat
Chat[nChats].nUsers = 0; // Ya que es un chat nuevo no contiene Usuarios, por eso se iguala a 0
strcpy(Chat[0].nombre, "CHAT 1"); //Ponemos nombre al nuevo chat
nChats++; //Aumentamos el numero de chats
while(true) {
system("cls");
printf("***MENU DE CHATS***\n\n");
printf("1.- Agregar nuevo chat.\n");
printf("2.- Agregar usuario a chat.\n");
printf("3.- Imprimir usuarios de chat.\n");
printf("4.- Imprimir usuarios de chat especifico.\n");
printf("5.- Salir.\n\n");
printf("Seleccione su opcion: ");
scanf("%c", &op);
system("cls");
Flush();
switch(op) {
case '1':
nuevoChat(maxChats, nChats, Chat);
break;
case '2':
agregarUsuario(nChats, Chat);
break;
case '3':
ImprimeUsuarios(0,nChats, Chat);
break;
case '4':
int indexChat;
printf("Ingresa el ID del chat al que ingresara: ");
scanf("%d", &indexChat);
while(indexChat < 0 || indexChat -1 >= nChats){
printf("\nNo existe ningun chat con ese id!");
printf("\n\nIngresa el ID del chat al que ingresara: ");
scanf("%d", &indexChat);
}
Flush();
system("cls");
ImprimeUsuarios(indexChat,nChats, Chat);
break;
case '5':
return 0;
break;
default:
printf("Opcion invalida! ");
break;
}
system("Pause");
}
}
void nuevoChat(int maxChats, int &nChats, CHATROOM Chat[]) {
if(nChats < maxChats) {
printf("***AGREGAR NUEVO CHAT***\n\n");
Chat[nChats].nUsers = 0;
printf("Ingresa el nombre del nuevo Chat: ");
gets(Chat[nChats].nombre);
Chat[nChats].roomid = ++nChats;
printf("\nChat Agregado!\n\n");
} else {
printf("\n\nError, maximo de chats alcanzado!\n\n");
}
}
int agregarUsuario(int nChats, CHATROOM Chat[]) {
int indexChat;
USER newUs;
printf("***AGREGAR NUEVO USUARIO***\n\n");
printf("Ingresa el ID del chat al que ingresara: ");
scanf("%d", &indexChat);
while(indexChat < 0 || indexChat -1 >= nChats){
printf("\nNo existe ningun chat con ese id!");
printf("\n\nIngresa el ID del chat al que ingresara: ");
scanf("%d", &indexChat);
}
Flush();
printf("\n\n** Ingreso a %s **\n", Chat[indexChat - 1].nombre);
if(Chat[indexChat - 1].nUsers <= 40) {
printf("\nIngresa su nick: ");
gets(newUs.nick);
printf("Ingresa su IP: ");
gets(newUs.ip);
printf("Ingresa su email: ");
gets(newUs.email);
Chat[indexChat - 1].lista[Chat[indexChat - 1].nUsers] = newUs;
Chat[indexChat - 1].nUsers++;
printf("\nUsuario agregado!\n\n");
} else {
printf("\nMaximo de usuarios alcanzado!\n\n");
}
}
void ImprimeUsuarios(int indexChat, int nChats, CHATROOM Chat[]) {
if(indexChat == 0) {
for(int i = 0; i < nChats; i++) {
printf("** USARIOS EN %d: %s **\n\n", i+1, Chat[i].nombre);
for(int j = 0; j < Chat[i].nUsers; j++) {
printf("- Usuario %d -\n", j+1);
printf("Nick: %s\n", Chat[i].lista[j].nick);
printf("IP: %s\n", Chat[i].lista[j].ip);
printf("Email: %s\n\n", Chat[i].lista[j].email);
}
printf("\n");
}
} else {
printf("** USARIOS EN %d: %s **\n", indexChat, Chat[indexChat-1].nombre);
for(int j = 0; j < Chat[indexChat-1].nUsers; j++) {
printf("- Usuario %d -\n", j+1);
printf("Nick: %s\n", Chat[indexChat-1].lista[j].nick);
printf("IP: %s\n", Chat[indexChat-1].lista[j].ip);
printf("Email: %s\n\n", Chat[indexChat-1].lista[j].email);
}
printf("\n");
}
}
void Flush() {
char trash[10];
gets(trash);
}