/** * \brief Solicita un numero entero al usuario y lo valida * \param requestMessage Es el mensaje a ser mostrado para solicitar el dato * \param requestMessage Es el mensaje a ser mostrado en caso de error * \return El número ingresado por el usuario * */ int getValidInt(char requestMessage[],char errorMessage[], int lowLimit, int hiLimit) { char auxStr[256]; int auxInt; while(1) { if (!getStringNumeros(requestMessage,auxStr)) { printf ("%s\n",errorMessage); continue; } auxInt = atoi(auxStr); if(auxInt < lowLimit || auxInt > hiLimit) { printf ("El numero del debe ser mayor a %d y menor a %d\n",lowLimit,hiLimit); continue; } return auxInt; } }
int main() { //Inicializo la estructura EPersona arrayPersona[QTY_PEOPLE]; //_________________________________________________ EPersona personaAux; char auxNombreStr[50]; char auxDniStr[50]; int auxDni; char auxEdadStr[50]; int auxEdad; int IndexLibre; int IndexEncontrado; //Seteo el estado int i,j; setearEstado(arrayPersona,QTY_PEOPLE,0);/**< Se indica con -1 que esa posicion esta vacia */ char seguir='s'; int opcion=0; while(seguir=='s') { //Solicito la opcion y armo el Menu opcion = getInt("\n\n1 - Agregar persona \n2 - Borrar persona \n3 - Imprimir lista ordenada por nombre\n4 - Imprimir grafico de edades\n5 - SALIR\n\n\n"); switch(opcion) { case 1: //Busco lugares libres IndexLibre = BuscarLugarLibre(arrayPersona,QTY_PEOPLE); if(IndexLibre == -1) { printf("\n\nNO QUEDAN LUGARES LIBRES!!!\n"); break; } //SOLICITO LOS DATOS printf("\AGREGAR PERSONA\n\n"); if (!getStringLetras("Ingrese el nombre: ",auxNombreStr)) { printf ("El nombre debe estar compuesto solo por letras\n"); break; } if(!getStringNumeros("Ingrese la edad: ",auxEdadStr)) { printf ("La edad debe ser numerica\n"); break; } auxEdad = atoi(auxEdadStr); if (!getStringNumeros("Ingrese el dni: ",auxDniStr)) { printf ("El dni debe ser numerico\n"); break; } auxDni = atoi(auxDniStr); if(BuscarPersonaPorDni(arrayPersona,QTY_PEOPLE,auxDni) != -1) { printf("\n\nEL DNI YA EXISTE!!!\n"); break; } //GUARDO EN LA ESTRUCTURA arrayPersona[IndexLibre].dni = auxDni; strcpy(arrayPersona[IndexLibre].nombre,auxNombreStr); arrayPersona[IndexLibre].edad = auxEdad; arrayPersona[IndexLibre].estado = 1; break; case 2: printf("\nBORRAR PERSONA\n\n"); if (!getStringNumeros("Ingrese el dni de la persona a dar de baja: ",auxDniStr)) { printf ("El dni de la persona debe ser numerico\n"); break; } auxDni = atoi(auxDniStr); IndexEncontrado = BuscarPersonaPorDni(arrayPersona,QTY_PEOPLE,auxDni); if(IndexEncontrado == -1) { printf("\n\nNO SE ENCUENTRA ESE DNI\n"); break; } arrayPersona[IndexEncontrado].estado = 0; break; case 3: printf("\nLISTAR PERSONAS\n\n"); //RECORRRO EL ARRAY DE PERSONAS for(i=0; i < QTY_PEOPLE - 1; i++) { if(arrayPersona[i].estado == 0) { continue; } for(j=i+1; j < QTY_PEOPLE; j++) { if(arrayPersona[i].estado == 0) { continue; } if(strcmp(arrayPersona[i].nombre,arrayPersona[j].nombre)>0) { personaAux = arrayPersona[j]; arrayPersona[j] = arrayPersona[i]; arrayPersona[i] = personaAux; } } } //RECORRO Y ARMO LA LISTA for(i=0;i < QTY_PEOPLE; i++) { if(arrayPersona[i].estado != 0) { printf("\n %s - %d - %d", arrayPersona[i].nombre,arrayPersona[i].dni,arrayPersona[i].edad); } } break; case 4: //ARMAR GRAFICO //RECORRO EL ARRAY DE PERSONAS Graficar(arrayPersona,QTY_PEOPLE); break; case 5: seguir = 'n'; break; } } return 0; }
int main() { persona arrayP[Q]; persona arrayAuxiliar; char auxNombre[50]; char auxE[50]; char auxD[50]; int auxDNI,auxEdad,i; int hasta18=0,de19a35=0,mayorDe35=0, mayor; int flag=0; int indicarLugarLibre; int indicarResultadoBusqueda; int opcion=0; inicializar(arrayP,Q,0); while(opcion != 6) { printf("\n -- ABM de Usuarios -- \n"); opcion=getInt("\n1. Alta \n2. Baja \n3. Modificar \n4. Listar \n5. Imprimir grafico \n6. Salir\n"); switch(opcion) { case 1: system("cls"); indicarLugarLibre=buscar(arrayP,Q,0); if(indicarLugarLibre == -1) { printf("\n No quedan mas lugares libres!!\n"); break; } printf("\n - Alta - \n"); if(!getStringLetras("Ingrese nombre: ",auxNombre)) { printf("El nombre debe estar compuesto solo por letras."); break; } if(!getStringNumeros("\nIngrese edad: \n",auxE)) { printf("La edad debe estar compuesta solo por numeros"); break; } auxEdad=atoi(auxE); if(!validaRango(auxEdad,0,120)) { printf("La edad se encuentra fuera de rango.\n"); break; } if(!getStringNumeros("\nIngrese DNI: \n",auxD)) { printf("El DNI deber ser solo numeros: "); break; } auxDNI=atoi(auxD); if(!validaRango(auxDNI,12000000,99999999)) { printf("El DNI ingresado se encuentra fuera de rango.\n"); break; } if(buscarPorDNI(arrayP,Q,auxDNI)!= -1) { printf("\n El DNI ya existe. \n"); break; } strcpy(arrayP[indicarLugarLibre].nombre,auxNombre); arrayP[indicarLugarLibre].dni=auxDNI; arrayP[indicarLugarLibre].edad=auxEdad; arrayP[indicarLugarLibre].estado= 1; flag=1; if(arrayP[indicarLugarLibre].edad < 18) { hasta18++; } else if(arrayP[indicarLugarLibre].edad >= 18 && arrayP[indicarLugarLibre].edad < 35) { de19a35++; } else if(arrayP[indicarLugarLibre].edad >= 35) { mayorDe35++; } system("cls"); break; case 2: system("cls"); if(buscar(arrayP,Q,1)== -1) { printf("\nPrimero debe ingrear usuarios!!\n"); break; } if(!getStringNumeros("Ingrese el DNI de usario a dar de baja: ",auxD)) { printf("El DNI deber poseer solo numeros: "); break; } auxDNI=atoi(auxD); if(!validaRango(auxDNI,12000000,99999999)) { printf("El DNI ingresado se encuentra fuera de rango.\n"); break; } indicarResultadoBusqueda=buscarPorDNI(arrayP,Q,auxDNI); if(indicarResultadoBusqueda == -1) { printf("No se encuentra ese Usuario!\n"); break; } printf("\nSe ha eliminado el usuario DNI: %d Nombre: %s\n", arrayP[indicarResultadoBusqueda].dni, arrayP[indicarResultadoBusqueda].nombre); if(arrayP[indicarLugarLibre].edad < 18) { hasta18--; } else if(arrayP[indicarLugarLibre].edad >= 18 && arrayP[indicarLugarLibre].edad < 35) { de19a35--; } else if(arrayP[indicarLugarLibre].edad >= 35) { mayorDe35--; } arrayP[indicarResultadoBusqueda].estado=0; break; case 3: system("cls"); if(buscar(arrayP,Q,1)== -1) { printf("\nPrimero debe ingrear usuarios!!\n"); break; } if(!getStringNumeros("Ingrese el DNI del usuario a modificar: ",auxD)) { printf("El DNI deber poseer solo numeros: "); break; } auxDNI=atoi(auxD); if(!validaRango(auxDNI,12000000,99999999)) { printf("El DNI ingresado se encuentra fuera de rango.\n"); break; } indicarResultadoBusqueda=buscarPorDNI(arrayP,Q,auxDNI); if(indicarResultadoBusqueda == -1) { printf("No se encuentra ese DNI!\n"); break; } if(!getStringLetras("Ingrese nombre: ",auxNombre)) { printf("El nombre debe estar compuesto solo por letras."); break; } if(!getStringNumeros("\nIngrese edad: \n",auxE)) { printf("La edad debe estar compuesta solo por numeros"); break; } auxEdad=atoi(auxE); if(!validaRango(auxEdad,0,120)) { printf("La edad se encuentra fuera de rango.\n"); break; } if(!getStringNumeros("\nIngrese nuevo DNI: \n",auxD)) { printf("El DNI deber ser solo numeros: "); break; } auxDNI=atoi(auxD); if(!validaRango(auxDNI,12000000,99999999)) { printf("El DNI ingresado se encuentra fuera de rango.\n"); break; } strcpy(arrayP[indicarResultadoBusqueda].nombre,auxNombre); arrayP[indicarResultadoBusqueda].edad=auxEdad; arrayP[indicarResultadoBusqueda].dni=atoi(auxD); break; case 4: system("cls"); if(buscar(arrayP,Q,1)== -1) { printf("\nPrimero debe ingrear usuarios!!\n"); break; } printf("\n - Listado Alfabetico- \n\n"); int j; for(i=0;i<Q -1; i++) { for(j=i;j<Q;j++) { if(arrayP[i].estado != 0) { if(stricmp(arrayP[i].nombre,arrayP[j].nombre)>0) { arrayAuxiliar=arrayP[i]; arrayP[i]=arrayP[j]; arrayP[j]=arrayAuxiliar; } } } } for(i=0;i<Q; i++) { if(arrayP[i].estado == 1) { printf("Nombre: %s DNI: %d\n",arrayP[i].nombre,arrayP[i].dni); } } break; case 5: system("cls"); if(buscar(arrayP,Q,1)== -1) { printf("\nPrimero debe ingrear usuarios!!\n"); break; } if(hasta18 >= de19a35 && hasta18 >= mayorDe35) { mayor = hasta18; } else if(de19a35 >= hasta18 && de19a35 >= mayorDe35) { mayor = de19a35; } else { mayor = mayorDe35; } for(i=mayor; i>0; i--){ if(i<10){ printf("%02d|",i); } else printf("%02d|",i); if(i<= hasta18){ printf("*"); } if(i<= de19a35){ flag=1; printf("\t*"); } if(i<= mayorDe35){ if(flag==0) printf("\t\t*"); if(flag==1) printf("\t*"); } printf("\n"); } printf("--+-----------------"); printf("\n |<18\t19-35\t>35"); printf("\n %d\t%d\t%d", hasta18, de19a35, mayorDe35); printf("\n\n"); break; } } return 0; }