Programa en C para Gestionar Datos de Fincas: Código Comentado y Corregido
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:
defaulpordefault,¡printfporprintfy&⊃por&sup. - Se ha añadido la definición de
maincon su llave de apertura, así como la declaración correcta demenu. - La función
modif_suprecibe la superficie por valor y devuelve el nuevo valor, por lo que el resultado se asigna enmain. - El uso de
getsyfflush(stdin)es dependiente del compilador y se recomienda sustituirlos porfgetsy una limpieza de buffer portable en versiones modernas de C.