Programa en C para Gestionar Datos de Fincas: Código Comentado y Corregido

Informática y Telecomunicaciones4,68 KB

Programa en C para la gestión de datos de fincas

A continuación se presenta un programa en lenguaje C que permite gestionar los datos de una finca mediante un menú interactivo. El programa posibilita introducir los datos, modificar el nombre y la superficie, mostrar la información en pantalla y finalizar la ejecución.

Definición de tipos

Se utilizan typedef para definir dos tipos de cadena de caracteres:

typedef char texto20[20];
typedef char texto50[50];

Prototipos de funciones

char menu(void);
void datos_finca(texto20 nom, texto20 ref, texto50 prop, float *sup);
void modif_nombre(texto20 nom);
float modif_sup(float sup);
void imprime(texto20 nom, texto20 ref, texto50 prop, float sup);

Función principal

int main(void)
{
    texto20 nombre_finca, ref_catastral;
    texto50 propietario;
    float superficie;
    char opcion;
    int control_datos = 0;

    do
    {
        opcion = menu();
        switch (opcion)
        {
            case 'a':
                datos_finca(nombre_finca, ref_catastral, propietario, &superficie);
                control_datos = 1;
                break;
            case 'b':
                if (control_datos == 1)
                    modif_nombre(nombre_finca);
                else
                    printf("No se puede modificar pues no se han introducido datos.\n");
                break;
            case 'c':
                if (control_datos == 1)
                    superficie = modif_sup(superficie);
                else
                    printf("No se puede modificar pues no se han introducido datos.\n");
                break;
            case 'd':
                if (control_datos == 1)
                    imprime(nombre_finca, ref_catastral, propietario, superficie);
                else
                    printf("No se pueden mostrar los datos pues no se han introducido.\n");
                break;
            case 'e':
                printf("Fin de programa\n");
                system("pause");
                break;
            default:
                printf("Opción incorrecta\n");
        }
    } while (opcion != 'e');

    return 0;
}

Función menú

char menu(void)
{
    char op;

    printf("\n\n");
    printf("Pulsa a para leer los datos de la finca\n");
    printf("Pulsa b para modificar el nombre de la finca\n");
    printf("Pulsa c para modificar la superficie\n");
    printf("Pulsa d para mostrar en pantalla los datos de la finca\n");
    printf("Pulsa e para terminar\n");

    scanf("%c", &op);
    fflush(stdin);
    return op;
}

Introducción de datos

void datos_finca(texto20 nom, texto20 ref, texto50 prop, float *sup)
{
    printf("\n\n");
    printf("Dame el nombre: ");
    gets(nom);
    fflush(stdin);

    printf("Dame la referencia catastral: ");
    scanf("%s", ref);
    fflush(stdin);

    printf("Dame el propietario: ");
    gets(prop);
    fflush(stdin);

    printf("Dame la superficie: ");
    scanf("%f", sup);
    fflush(stdin);
}

Modificación del nombre

void modif_nombre(texto20 nom)
{
    printf("\nLa finca %s va a cambiar de nombre.\n\n", nom);
    printf("Dame el nuevo nombre: ");
    gets(nom);
    fflush(stdin);
}

Modificación de la superficie

float modif_sup(float sup)
{
    printf("\nLa antigua superficie de la finca es de: %f\n\n", sup);
    printf("Dame la nueva superficie: ");
    scanf("%f", &sup);
    fflush(stdin);
    return sup;
}

Visualización de los datos

void imprime(texto20 nom, texto20 ref, texto50 prop, float sup)
{
    printf("\n");
    printf("\nEl nombre de la finca es: %s\n", nom);
    printf("\nLa referencia catastral es: %s\n", ref);
    printf("\nEl propietario es: %s\n", prop);
    printf("\nLa superficie es: %f\n", sup);
    printf("\n\n");
    system("pause");
}

Notas sobre el código

  • Se han corregido los errores tipográficos del original: defaul por default, ¡printf por printf y &⊃ por &sup.
  • Se ha añadido la definición de main con su llave de apertura, así como la declaración correcta de menu.
  • La función modif_sup recibe la superficie por valor y devuelve el nuevo valor, por lo que el resultado se asigna en main.
  • El uso de gets y fflush(stdin) es dependiente del compilador y se recomienda sustituirlos por fgets y una limpieza de buffer portable en versiones modernas de C.

Descargar

PDF Word HTML