Programa en C para Gestionar una Base de Datos de Agencia: Ejemplo con Structs y Ordenación

Informática6,08 KB

Programa en C para gestionar una base de datos de agencia

A continuación se presenta un programa en lenguaje C que implementa una pequeña base de datos de una agencia. El programa utiliza una estructura (struct) para almacenar nombre, edad y ficha de cada registro, y ofrece un menú interactivo para introducir, modificar, ordenar, mostrar y guardar los datos.

Declaración de variables y estructuras

FILE *pf;
struct registro {
    char nombre[20];
    int edad;
    int ficha;
};
struct registro reg[6], reg2[1];

Prototipos de funciones

void introducir(void);
void modificar(void);
void orde_nombre(void);
void orde_porficha(void);
void orde_edad(void);
void mostrar(void);
void guardar(void);

Función principal y menú

La función main muestra una pantalla de bienvenida y, a continuación, un menú de opciones que se repite hasta que el usuario pulsa la tecla 8 para salir.

int main(int argc, char *argv[])
{
    char op;
    gotoxy(20,20);
    printf("ESTA ES LA BASE DE DATOS ");
    gotoxy(20,22);
    printf("pulse cualquier tecla");
    gotoxy(50,24);
    printf(" --agencia repre--");
    getch();
    do {
        clrscr();
        gotoxy(15,5);  printf("MENU");
        gotoxy(15,6);  printf("-------------------");
        gotoxy(15,7);  printf("1. Introducir datos");
        gotoxy(15,8);  printf("2. Modificar datos");
        gotoxy(15,9);  printf("3. Ordenar alfabéticamente");
        gotoxy(15,10); printf("4. Mostrar de mayor a menor por ficha");
        gotoxy(15,11); printf("5. Ordenar productos por mayor edad");
        gotoxy(15,12); printf("6. Mostrar datos");
        gotoxy(15,13); printf("7. Guardar datos");
        gotoxy(15,14); printf("8. Salir");
        gotoxy(15,15); printf("-------------------");
        op = getch();
        switch (op) {
            case '1': { introducir(); break; }
            case '2': { modificar(); break; }
            case '3': { orde_nombre(); break; }
            case '4': { orde_porficha(); break; }
            case '5': { orde_edad(); break; }
            case '6': { mostrar(); break; }
            case '7': { guardar(); break; }
            case '8': {
                gotoxy(15,5);
                printf("adiós");
                getch();
                break;
            }
            default: {
                gotoxy(15,5);
                printf("Pulsa la tecla correcta");
                getch();
                break;
            }
        }
    } while (op != '8');
}

Introducir datos

La función introducir solicita al usuario el nombre, la edad y la ficha de cada uno de los seis registros.

void introducir(void)
{
    clrscr();
    int i, ca;
    for (i = 1; i < 7; i++) {
        clrscr();
        gotoxy(15,5); printf("Introduce nombre %d: ", i);
        scanf("%s", reg[i].nombre);
        gotoxy(15,6); printf("Introduce edad %d: ", i);
        scanf("%d", &ca);
        reg[i].edad = ca;
        gotoxy(15,7); printf("Introduce ficha %d: ", i);
        scanf("%d", &ca);
        reg[i].ficha = ca;
    }
    return;
}

Modificar datos

Permite seleccionar un registro existente y actualizar su nombre y edad. Se valida que el número introducido esté en el rango permitido.

void modificar(void)
{
    int comp, x, i;
    mostrar();
    do {
        gotoxy(15,5);
        printf("¿Qué número deseas modificar?: ");
        scanf("%d", &comp);
    } while (comp < 0 || comp > 6);
    gotoxy(15,6); printf("Introduce nombre %d: ", comp);
    scanf("%s", &reg[comp].nombre);
    gotoxy(15,7); printf("Introduce edad de \"%s\": ", reg[comp].nombre);
    scanf("%d", &reg[comp].edad);
}

Ordenar alfabéticamente

La función orde_nombre aplica el método de ordenación por burbuja comparando los nombres con strcmp. Al intercambiar nombres se intercambian también la edad y la ficha, manteniendo coherente cada registro.

void orde_nombre()
{
    clrscr();
    int i, j, com, a;
    char aux[20];
    for (i = 1; i < 7; i++) {
        for (j = i + 1; j < 7; j++) {
            com = strcmp(reg[i].nombre, reg[j].nombre);
            if (com > 0) {
                strcpy(aux, reg[i].nombre);
                strcpy(reg[i].nombre, reg[j].nombre);
                strcpy(reg[j].nombre, aux);
                a = reg[i].edad;
                reg[i].edad = reg[j].edad;
                reg[j].edad = a;
                a = reg[i].ficha;
                reg[i].ficha = reg[j].ficha;
                reg[j].ficha = a;
            }
        }
    }
    for (i = 1; i < 7; i++) {
        gotoxy(15, 5 + i);
        printf(" %s: %d %d euros", reg[i].nombre, reg[i].edad, reg[i].ficha);
    }
    getch();
    return;
}

Ordenar por ficha

La función orde_porficha sigue la misma lógica de comparación, pero ordena los registros según el valor de la ficha, de mayor a menor.

void orde_porficha(void)
{
    clrscr();
    int i, j, a;
    char nom[20];
    for (i = 1; i < 7; i++) {
        for (j = i + 1; j < 7; j++) {
            if (reg[i].ficha < reg[j].ficha) {
                // intercambio de registros (completar según el código original)
            }
        }
    }
}

Observaciones

  • El código utiliza gotoxy, clrscr y getch, funciones de la biblioteca conio.h propia de compiladores como Turbo C.
  • Se recomienda incluir las cabeceras <stdio.h> y <string.h> para el correcto funcionamiento de printf, scanf y strcmp.
  • En la función modificar se usa &reg[comp].nombre en el documento original; al tratarse de un array de caracteres, basta con reg[comp].nombre.

Descargar

PDF Word HTML