[Aportes] Login y menu [C]

Pastore16

Club Atlético Huracán
Hola gente, les traigo un code sencillo. Este programa lo que hace básicamente es un Login, en el cual tenes 5 oportunidades para poner los datos correctos, si los ingresaste 5 veces mal el programa se cierra. Si los datos ingresados son correctos te lleva a un menú en el cual te aparecen una lista de opciones (mi idea fue hacerlo para guardar los datos de mis personajes de Argentum, pero se puede hacer para cualquier cosa).
Ejemplo:

  1. Ingresar datos
  2. Buscar por nick
  3. Buscar por clase
  4. Buscar por raza
  5. Cargar todo
  6. Guardar datos
  7. Salir
Obviamente para que te encuentre el personaje, tendrías que haber ingresado los datos, sino te marca "no encontrado".
Les dejo el código:

Código:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

#define USER "Sir Korsky"
#define PASS "123123"
#define LEN 100
#define MAX 150
#define INTENTOS 5

void login();
int menu();
void ingresar();
void buscar_nick();
void buscar_clase();
void buscar_raza();
void mostrar_todo();
void mostrar(int i);
void guardar();
void cargar();

struct personajes
{
    char nick[50];
    char password[50];
    char clase[15];
    char raza[15];
    char nivel[3];
    char vida[4];
    char mana[4];
} *maxPer[MAX];

int top = 0;

int main()
{
    login();
}

void login()
{
    char user[LEN], pass[LEN];
    int esUserOk, esPassOk,
        i=0, intDec=4;
    system("cls");
    do{

        printf("\n\t  Usuario: ");
        fflush(stdin);
        gets(user);
        esUserOk = strcmp(USER, user);

        printf("\t  Password: ");
        fflush(stdin);
        gets(pass);
        esPassOk = strcmp(PASS, pass);

        if(esUserOk != 0 || esPassOk != 0)
        {
            printf("\t\t    Usuario y/o password erroneo. Intentos[%d]", intDec--);
            i++;
            getch();
            system("cls");
        }

    }while ((esUserOk != 0 || esPassOk != 0) && i<INTENTOS);
    if(i == INTENTOS)
    {
        printf("\t    Usted ingreso el usuario y/o password mal 5 veces, el programa se cerrara");
        getch();
        system("cls");
        exit(1);
    }
    else
    {
        int opcion;
        cargar();

        do{
            opcion = menu();

            switch(opcion)
            {
            case 1:
                ingresar();
                break;
            case 2:
                buscar_nick();
                break;
            case 3:
                buscar_clase();
                break;
            case 4:
                buscar_raza();
                break;
            case 5:
                mostrar_todo();
                break;
            case 6:
                guardar();
                break;
            case 7:
                printf("Presione enter para salir");
                break;
            default:
                printf("No existe esa opcion");
                break;
            }
        }while(opcion != 7);
    }
    system("pause>nul");
}

int menu()
{
    int elg;
    system("cls");
    printf("\t  [1]. Introducir datos \n");
    printf("\t  [2]. Buscar por nick personaje\n");
    printf("\t  [3]. Buscar por clase personaje\n");
    printf("\t  [4]. Buscar por raza personaje\n");
    printf("\t  [5]. Cargar toda la lista de personajes\n");
    printf("\t  [6]. Guardar personaje \n");
    printf("\t  [7]. Salir\n");

    do{
        printf("\t  >>> ");
        elg = getche();
        printf("\n");
        system("cls");
    }while(elg<'1' || elg>'7');

    return elg - '0';
}

void ingresar()
{
    int i;
    for(i=top; i<MAX; i++)
    {
        maxPer[i] = malloc(sizeof(struct personajes));
        if(!maxPer[i])
        {
            printf("\t  Memoria agotada \n");
            return;
        }
        printf("\t  INTRO para salir \n");
        printf("\t  Nombre: ");
        gets(maxPer[i]-> nick);
        if(!*maxPer[i]-> nick)
            break;
        printf("\t  Passwd: ");
        fflush(stdin);
        gets(maxPer[i]-> password);
        printf("\t  Clase: ");
        fflush(stdin);
        gets(maxPer[i]-> clase);
        printf("\t  Raza: ");
        fflush(stdin);
        gets(maxPer[i]-> raza);
        printf("\t  Nivel: ");
        fflush(stdin);
        gets(maxPer[i]-> nivel);
        printf("\t  Vida: ");
        fflush(stdin);
        gets(maxPer[i]-> vida);
        printf("\t  Mana: ");
        fflush(stdin);
        gets(maxPer[i]-> mana);
        system("cls");
    }
    top = i;
}

void buscar_nick()
{
    char nick[50];
    int i, encontrado;

    printf("\t  Nick: ");
    fflush(stdin);
    gets(nick);
    system("cls");

    encontrado = 0;
    for(i=0; i<top; i++)
    {
        if(!strcmp(nick, maxPer[i]-> nick))
        {
            mostrar(i);
            encontrado = 1;
            printf("\n");
            getch();
        }
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No encontrado \n");
        getch();
        system("cls");
    }
}

void buscar_clase()
{
    char clase[15];
    int i, encontrado;

    printf("\t  Clase: ");
    fflush(stdin);
    gets(clase);
    system("cls");

    encontrado = 0;
    for(i=0; i<top; i++)
    {
        if(!strcmp(clase, maxPer[i]-> clase))
        {
            mostrar(i);
            encontrado = 1;
            printf("\n");
            getch();
        }
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No encontrado \n");
        getch();
        system("cls");
    }
}

void buscar_raza()
{
    char raza[15];
    int i, encontrado;

    printf("\t  Raza: ");
    fflush(stdin);
    gets(raza);
    system("cls");

    encontrado = 0;
    for(i=0; i<top; i++)
    {
        if(!strcmp(raza, maxPer[i]-> raza))
        {
            mostrar(i);
            encontrado = 1;
            printf("\n");
            getch();
        }
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No encontrado \n");
        getch();
        system("cls");
    }
}

void mostrar_todo()
{
    int i, encontrado;
    encontrado = 0;
    for(i=0; i<top; i++)
    {
        mostrar(i);
        encontrado = 1;
        printf("\n");
        getch();
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No existen los datos \n");
        getch();
        system("cls");
    }
}

void mostrar(int i)
{
    printf("\t  Nick: %s \n", maxPer[i]->nick);
    printf("\t  Passwd: %s \n", maxPer[i]->password);
    printf("\t  Clase: %s \n", maxPer[i]->clase);
    printf("\t  Raza: %s \n", maxPer[i]->raza);
    printf("\t  Nivel: %s \n", maxPer[i]->nivel);
    printf("\t  Vida: %s \n", maxPer[i]->vida);
    printf("\t  Mana: %s \n", maxPer[i]->mana);
}

void cargar()
{
    FILE *fp;
    int i;

    if((fp = fopen("dtsPersonajes.txt", "r"))==NULL)
    {
        system("cls");
        printf("El archivo personaje no se encuentra en la carpeta \n");
        return;
    }
    fread(&top, sizeof top, 1, fp);

    for(i=0; i<top; i++)
    {
        maxPer[i] = malloc(sizeof(struct personajes));
        if(!maxPer[i])
        {
            system("cls");
            printf("Memoria agotada \n");
            top = i-1;
            break;
        }
        fread(maxPer[i], sizeof(struct personajes), 1, fp);
    }
    fclose(fp);
}

void guardar()
{
    FILE *fp;
    int i;

    if((fp = fopen("dtsPersonajes.txt", "w"))== NULL)
    {
        system("cls");
        printf("No se puede abrir el archivo \n");
        return;
    }

    fwrite(&top, sizeof top, 1, fp);

    for(i=0; i<top; i++)
        fwrite(maxPer[i], sizeof(struct personajes), 1, fp);

    fclose(fp);
}

 

M.T.

Aprendiz Lvl 3
Muy lindo!!! Pastore. Una pregunta C y C++ usan el mismo compilador de códigos? y cual usas vos. Me recomendas alguno? Perdón por desvirtuar el tema es que me interesa.
 

Pastore16

Club Atlético Huracán
El compilador que uso es el GNU GCC MinGW de windows, si te referís al IDE el CodeBlocks
 

Franeg95

CARP
Ex-Staff
Tendrías que emplear un estilo orientado a objetos si tu intención es ir por c++, de lo contrario estas aprovechando poco y nada sus virtudes.
 

lopera

Aprendiz Lvl 3
Hola gente, les traigo un code sencillo. Este programa lo que hace básicamente es un Login, en el cual tenes 5 oportunidades para poner los datos correctos, si los ingresaste 5 veces mal el programa se cierra. Si los datos ingresados son correctos te lleva a un menú en el cual te aparecen una lista de opciones (mi idea fue hacerlo para guardar los datos de mis personajes de Argentum, pero se puede hacer para cualquier cosa).
Ejemplo:

  1. Ingresar datos
  2. Buscar por nick
  3. Buscar por clase
  4. Buscar por raza
  5. Cargar todo
  6. Guardar datos
  7. Salir
Obviamente para que te encuentre el personaje, tendrías que haber ingresado los datos, sino te marca "no encontrado".
Les dejo el código:

Código:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

#define USER "Sir Korsky"
#define PASS "123123"
#define LEN 100
#define MAX 150
#define INTENTOS 5

void login();
int menu();
void ingresar();
void buscar_nick();
void buscar_clase();
void buscar_raza();
void mostrar_todo();
void mostrar(int i);
void guardar();
void cargar();

struct personajes
{
    char nick[50];
    char password[50];
    char clase[15];
    char raza[15];
    char nivel[3];
    char vida[4];
    char mana[4];
} *maxPer[MAX];

int top = 0;

int main()
{
    login();
}

void login()
{
    char user[LEN], pass[LEN];
    int esUserOk, esPassOk,
        i=0, intDec=4;
    system("cls");
    do{

        printf("\n\t  Usuario: ");
        fflush(stdin);
        gets(user);
        esUserOk = strcmp(USER, user);

        printf("\t  Password: ");
        fflush(stdin);
        gets(pass);
        esPassOk = strcmp(PASS, pass);

        if(esUserOk != 0 || esPassOk != 0)
        {
            printf("\t\t    Usuario y/o password erroneo. Intentos[%d]", intDec--);
            i++;
            getch();
            system("cls");
        }

    }while ((esUserOk != 0 || esPassOk != 0) && i<INTENTOS);
    if(i == INTENTOS)
    {
        printf("\t    Usted ingreso el usuario y/o password mal 5 veces, el programa se cerrara");
        getch();
        system("cls");
        exit(1);
    }
    else
    {
        int opcion;
        cargar();

        do{
            opcion = menu();

            switch(opcion)
            {
            case 1:
                ingresar();
                break;
            case 2:
                buscar_nick();
                break;
            case 3:
                buscar_clase();
                break;
            case 4:
                buscar_raza();
                break;
            case 5:
                mostrar_todo();
                break;
            case 6:
                guardar();
                break;
            case 7:
                printf("Presione enter para salir");
                break;
            default:
                printf("No existe esa opcion");
                break;
            }
        }while(opcion != 7);
    }
    system("pause>nul");
}

int menu()
{
    int elg;
    system("cls");
    printf("\t  [1]. Introducir datos \n");
    printf("\t  [2]. Buscar por nick personaje\n");
    printf("\t  [3]. Buscar por clase personaje\n");
    printf("\t  [4]. Buscar por raza personaje\n");
    printf("\t  [5]. Cargar toda la lista de personajes\n");
    printf("\t  [6]. Guardar personaje \n");
    printf("\t  [7]. Salir\n");

    do{
        printf("\t  >>> ");
        elg = getche();
        printf("\n");
        system("cls");
    }while(elg<'1' || elg>'7');

    return elg - '0';
}

void ingresar()
{
    int i;
    for(i=top; i<MAX; i++)
    {
        maxPer[i] = malloc(sizeof(struct personajes));
        if(!maxPer[i])
        {
            printf("\t  Memoria agotada \n");
            return;
        }
        printf("\t  INTRO para salir \n");
        printf("\t  Nombre: ");
        gets(maxPer[i]-> nick);
        if(!*maxPer[i]-> nick)
            break;
        printf("\t  Passwd: ");
        fflush(stdin);
        gets(maxPer[i]-> password);
        printf("\t  Clase: ");
        fflush(stdin);
        gets(maxPer[i]-> clase);
        printf("\t  Raza: ");
        fflush(stdin);
        gets(maxPer[i]-> raza);
        printf("\t  Nivel: ");
        fflush(stdin);
        gets(maxPer[i]-> nivel);
        printf("\t  Vida: ");
        fflush(stdin);
        gets(maxPer[i]-> vida);
        printf("\t  Mana: ");
        fflush(stdin);
        gets(maxPer[i]-> mana);
        system("cls");
    }
    top = i;
}

void buscar_nick()
{
    char nick[50];
    int i, encontrado;

    printf("\t  Nick: ");
    fflush(stdin);
    gets(nick);
    system("cls");

    encontrado = 0;
    for(i=0; i<top; i++)
    {
        if(!strcmp(nick, maxPer[i]-> nick))
        {
            mostrar(i);
            encontrado = 1;
            printf("\n");
            getch();
        }
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No encontrado \n");
        getch();
        system("cls");
    }
}

void buscar_clase()
{
    char clase[15];
    int i, encontrado;

    printf("\t  Clase: ");
    fflush(stdin);
    gets(clase);
    system("cls");

    encontrado = 0;
    for(i=0; i<top; i++)
    {
        if(!strcmp(clase, maxPer[i]-> clase))
        {
            mostrar(i);
            encontrado = 1;
            printf("\n");
            getch();
        }
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No encontrado \n");
        getch();
        system("cls");
    }
}

void buscar_raza()
{
    char raza[15];
    int i, encontrado;

    printf("\t  Raza: ");
    fflush(stdin);
    gets(raza);
    system("cls");

    encontrado = 0;
    for(i=0; i<top; i++)
    {
        if(!strcmp(raza, maxPer[i]-> raza))
        {
            mostrar(i);
            encontrado = 1;
            printf("\n");
            getch();
        }
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No encontrado \n");
        getch();
        system("cls");
    }
}

void mostrar_todo()
{
    int i, encontrado;
    encontrado = 0;
    for(i=0; i<top; i++)
    {
        mostrar(i);
        encontrado = 1;
        printf("\n");
        getch();
    }
    if(!encontrado)
    {
        system("cls");
        printf("\t\t    No existen los datos \n");
        getch();
        system("cls");
    }
}

void mostrar(int i)
{
    printf("\t  Nick: %s \n", maxPer[i]->nick);
    printf("\t  Passwd: %s \n", maxPer[i]->password);
    printf("\t  Clase: %s \n", maxPer[i]->clase);
    printf("\t  Raza: %s \n", maxPer[i]->raza);
    printf("\t  Nivel: %s \n", maxPer[i]->nivel);
    printf("\t  Vida: %s \n", maxPer[i]->vida);
    printf("\t  Mana: %s \n", maxPer[i]->mana);
}

void cargar()
{
    FILE *fp;
    int i;

    if((fp = fopen("dtsPersonajes.txt", "r"))==NULL)
    {
        system("cls");
        printf("El archivo personaje no se encuentra en la carpeta \n");
        return;
    }
    fread(&top, sizeof top, 1, fp);

    for(i=0; i<top; i++)
    {
        maxPer[i] = malloc(sizeof(struct personajes));
        if(!maxPer[i])
        {
            system("cls");
            printf("Memoria agotada \n");
            top = i-1;
            break;
        }
        fread(maxPer[i], sizeof(struct personajes), 1, fp);
    }
    fclose(fp);
}

void guardar()
{
    FILE *fp;
    int i;

    if((fp = fopen("dtsPersonajes.txt", "w"))== NULL)
    {
        system("cls");
        printf("No se puede abrir el archivo \n");
        return;
    }

    fwrite(&top, sizeof top, 1, fp);

    for(i=0; i<top; i++)
        fwrite(maxPer[i], sizeof(struct personajes), 1, fp);

    fclose(fp);
}
por que me salta este error al ejecutarlo?

 
Arriba