Funciones CRUD en C: Gestión de Datos de Estrellas

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 9,37 KB

Este documento presenta una serie de funciones en lenguaje C que permiten realizar operaciones CRUD (Crear, Leer, Actualizar y Borrar) sobre una estructura de datos que almacena información de estrellas. Las funciones implementadas son:

  • Insertar
  • Mostrar
  • Consultar_estrella
  • Modificar
  • Borrar_estrella
  • Guardar_lista
  • Recup_estrella

A continuación, se detalla el código de cada función, junto con una breve explicación de su funcionamiento.

Función Insertar

La función Insertar permite añadir una nueva estrella a la lista. Solicita al usuario que introduzca el nombre de la estrella, la galaxia a la que pertenece, el número de planetas y si hay posibilidad de vida (1 para Sí, 0 para No).

void Insertar(){
    system("cls");
    int hayVida;
    printf("Introducir el nombre de la estrella: ");
    fflush(stdin);
    gets(lista.vector[lista.cursor].nombre);

    printf("Introducir el nombre de la galaxia: ");
    gets(lista.vector[lista.cursor].galaxia);

    printf("Introducir el número de planetas: ");
    scanf("%d", &lista.vector[lista.cursor].planetas);

    do {
        printf("Posibilidad de vida (0 No, 1 Si): ");
        scanf("%d", &hayVida);

        if (hayVida == 1) {
            lista.vector[lista.cursor].vida = true;
            printf("Estrella añadida con éxito \n");
        } else if (hayVida == 0) {
            lista.vector[lista.cursor].vida = false;
            printf("Estrella añadida con éxito \n");
        } else {
            printf("Valor no válido. Por favor, introduzca 0 o 1.\n");
        }
    } while (hayVida != 0 && hayVida != 1);

    lista.cursor++;
}

Función Mostrar

La función Mostrar muestra por pantalla todas las estrellas almacenadas en la lista, incluyendo su nombre, galaxia, número de planetas y si hay posibilidad de vida.

void Mostrar(){
    system("cls");
    int i=0;
    printf("Lista cursor es %d \n", lista.cursor);
    while(i<lista.cursor){
        printf("Nombre de la estrella: %s \n", lista.vector[i].nombre);
        printf("Nombre de la galaxia: %s \n", lista.vector[i].galaxia);
        printf("Número de planetas: %d \n", lista.vector[i].planetas);
        printf("Hay vida?(No 0, Si 1): %d \n \n", lista.vector[i].vida);
        i++;
    }
    printf("Pulse cualquier tecla para continuar");
    system("pause");
}

Función Consultar_estrella

La función Consultar_estrella permite buscar una estrella por su nombre y mostrar sus datos.

void Consultar_estrella(){
    system("cls");
    char nombre[Maximo_1];
    printf("Ingrese el nombre de la estrella que desea consultar: ");
    scanf("%s", nombre);
    for (int i=0; i < lista.cursor; i++){
        if (strcmp(lista.vector[i].nombre, nombre) == 0) {
            printf("\nDatos de la estrella %s:\n", lista.vector[i].nombre);
            printf("Galaxia: %s\n", lista.vector[i].galaxia);
            printf("Número de planetas: %d\n", lista.vector[i].planetas);
            printf("Posibilidad de vida: %s\n", lista.vector[i].vida ? "Si" : "No");
            system("pause");
            return;
        }

    }
    printf("Estrella no encontrada.\n");
    system("pause");
}

Función Modificar

La función Modificar permite modificar los datos de una estrella existente. El usuario debe introducir el nombre de la estrella que desea modificar y luego seleccionar el campo que desea actualizar.

void Modificar(){
    char nombre_estrella[30];
    int estrellaEncontrada=0;
    int i=0;
    system("cls");
    printf("Introduce el nombre de la estrella: ");
    fflush(stdin);
    gets(nombre_estrella);

    for (i = 0; i < lista.cursor; i++) {
        if (strcmp(nombre_estrella, lista.vector[i].nombre) == 0) {
            estrellaEncontrada = 1;
            break;
        }
    }
    if (estrellaEncontrada) {
        int opcion = 0;
        char modificarOtra;

        do {

            printf("\nEstrella encontrada: %s\n", lista.vector[i].nombre);
            printf("Qué campo desea modificar?\n");
            printf("1. Nombre de la estrella\n");
            printf("2. Galaxia\n");
            printf("3. Número de planetas\n");
            printf("4. Posibilidad de vida\n");
            printf("5. Volver al menú principal\n");
            printf("Seleccione una opción: ");
            scanf("%d", &opcion);
            getchar();

            switch (opcion) {
                case 1:
                    printf("Nuevo nombre de la estrella: ");
                    fflush(stdin);
                    gets(lista.vector[i].nombre);
                    break;
                case 2:
                    printf("Nueva galaxia: ");
                    fflush(stdin);
                    gets(lista.vector[i].galaxia);
                    break;
                case 3:
                    printf("Nuevo número de planetas: ");
                    scanf("%d", &lista.vector[i].planetas);
                    getchar(); 
                    break;
                case 4: {
                    int hayVida;
                    do {
                        printf("Nueva posibilidad de vida (0 No, 1 Sí): ");
                        scanf("%d", &hayVida);
                        if (hayVida == 1) {
                            lista.vector[i].vida = true;
                        } else if (hayVida == 0) {
                            lista.vector[i].vida = false;
                        } else {
                            printf("Valor no válido. Por favor, introduzca 0 o 1.\n");
                        }
                    } while (hayVida != 0 && hayVida != 1);
                    break;
                }
                case 5:
                    printf("Volviendo al menú principal...\n");
                    return; 
                default:
                    printf("Opción no válida. Intente de nuevo.\n");
                    break;
            }

            printf("\n¿Desea modificar otro campo de esta estrella? (S/N): ");
            scanf(" %c", &modificarOtra);
            modificarOtra = toupper(modificarOtra); 

        } while (modificarOtra == 'S');

    } else {
        printf("Estrella no encontrada.\n");
        system("pause");
    }
}

Función Borrar_estrella

La función Borrar_estrella permite eliminar una estrella de la lista. El usuario debe introducir el nombre de la estrella que desea borrar.

void Borrar_estrella(){
    system("cls");
    char nombre[Maximo_1];
    int j;
    printf("Introduce el nombre de la estrella que quieres borrar: ");
    scanf("%s", nombre);

    for (int i = 0; i < lista.cursor; i++) {
        if (strcmp(lista.vector[i].nombre, nombre) == 0) {
            for (int j = i; j < (lista.cursor) - 1; j++) {
                lista.vector[j] = lista.vector[j + 1];
            }
            (lista.cursor)--;
            printf("Estrella borrada exitosamente.\n");
            system("pause");
            return;
        }
    }
    printf("Estrella no encontrada.\n");
    system("pause");
}

Función Guardar_lista

La función Guardar_lista guarda la lista de estrellas en un archivo binario llamado"ListaEstrellas.da".

void Guardar_lista(){
    int j;
    Estrellas=fopen("ListaEstrellas.dat", "wb");
    for(j=0; j<lista.cursor; j++){
        fwrite(&lista.vector[j], sizeof(struct T_estrella), 1, Estrellas);
    }
    fclose(Estrellas);

}

Función Recup_estrella

La función Recup_estrella recupera la lista de estrellas del archivo binario"ListaEstrellas.da".

void Recup_estrella(){
    lista.cursor=0;
    Estrellas=fopen("ListaEstrellas.dat", "rb");
    while(!feof(Estrellas)){ 
        fread(&lista.vector[lista.cursor],sizeof(struct T_estrella),1,Estrellas);

        lista.cursor++;
    }
    fclose(Estrellas);
    system("pause");
    lista.cursor--;
}

Función main

La función main muestra un menú al usuario que le permite seleccionar la operación que desea realizar. El programa se ejecuta hasta que el usuario selecciona la opción"Sali".

int main (void)
{
    int opcion = 0;
    lista.cursor = 0;

    while(opcion != 8){
        opcion= mostrarMenu();
        printf("He recogido el número %d \n",opcion);

        switch(opcion){
            case 1: 
                Mostrar();
                break;
            case 2: 
                Insertar();
                break;
            case 3: 
                Consultar_estrella();
                break;
            case 4: 
                Modificar();
                break;
            case 5: 
                Borrar_estrella();
                break;
            case 6: 
                Guardar_lista();
                break;
            case 7: 
                Recup_estrella();
                break;
            case 8: 
                break;
        }
    }
}

Este código proporciona una base sólida para la gestión de datos de estrellas en C. Se puede ampliar y mejorar para incluir más funcionalidades, como la búsqueda por otros criterios o la ordenación de la lista.

Entradas relacionadas: