/*En una ciudad española se ha grabado el fichero FCENSO.DAT con datos de sus vecinos cuyos registros están formados por los siguientes campos:
CS_COD CS_NOM CS_EDAD CS_HIJO CS_SEXO CS_ECIV
char[5] char[20] int int char char
siendo CS_HIJO el número de hijos, y los códigos vláidos para CS_SEXO V o H, y para CS_ECIV S, C y V.
Se desea:
- Imprimir el número de personas casadas y la media de hijos que tienen.
- Imprimir el nombre y la edad de las mujeres solteras con edades comprendidas entre dos valores introducidos por el teclado.
- Añadir registros al fichero.
- El fichero será de tipo texto.*/
#include <stdio.h>
#include <stdlib.h>
typedef struct _censo {
char cs_cod[5];
char cs_nom[20];
int cs_edad;
int cs_hijo;
char cs_sexo;
char cs_eciv;
}strCenso;
void _menu();
void agregarRegistro(char *fichero);
void imprimirCasados();
void imprimirMujeres();
int main(void)
{
int min,max;
char opcion;
char fichero[14] = "fcenso.txt";
do{
_menu();
switch (opcion){
case '1':
agregarRegistro(fichero);
break;
case '2':
imprimirCasados(fichero);
break;
case '3':
imprimirMujeres(min,max, fichero);
break;
case '4':
break;
}}while (opcion!='4');
puts("nnPrograma finalizadon"); return 0;
}
void _menu(){
printf ("1 - Añadir Registrosn"); printf ("2 - Mostrar Personas Casadasn"); printf ("3 - Imprimir Mujeresn" );
}
void agregarRegistro(char *fichero)
{
FILE *pFichero;
strCenso registro;
if (pFichero == NULL) {
pFichero
= fopen(fichero
, "w"); scanf ("%s", registro.
cs_cod);
scanf("%d", ®istro.
cs_edad);
scanf("%d", ®istro.
cs_hijo);
scanf ("%c", ®istro.
cs_sexo);
printf("Estado Civil (s, c o v): "); scanf("%c", ®istro.
cs_eciv);
fprintf(pFichero
, "%s %s %d %d %c %cn", registro.
cs_cod, registro.
cs_nom, registro.
cs_edad, registro.
cs_hijo, registro.
cs_sexo, registro.
cs_eciv);
}
else
{
pFichero
= fopen(fichero
, "a"); scanf ("%s", registro.
cs_cod);
scanf("%d", ®istro.
cs_edad);
scanf("%d", ®istro.
cs_hijo);
scanf ("%c", ®istro.
cs_sexo);
printf("Estado Civil (s, c o v): "); scanf("%c", ®istro.
cs_eciv);
fprintf(pFichero
, "%s %s %d %d %c %cn", registro.
cs_cod, registro.
cs_nom, registro.
cs_edad, registro.
cs_hijo, registro.
cs_sexo, registro.
cs_eciv); }
}
void imprimirCasados(char *fichero)
{
FILE *pfichero;
int casadas=0;
float hijos=0;
strCenso registro;
if(fopen(fichero
,"r")==NULL
) {
printf("nERROR al abrir el archivo para lecturan"); }
if(fgetc(pfichero
)!=EOF
) //Por si está vacío {
do
{
fscanf(pfichero
, "%s %s %d %d %c %cn", registro.
cs_cod, registro.
cs_nom, registro.
cs_edad, registro.
cs_hijo, registro.
cs_sexo, registro.
cs_eciv); if(registro.cs_eciv=='c')
{
casadas++;
hijos+=registro.cs_hijo;
}
}while(fgetc(pfichero
)!=EOF
); if(casadas)
printf("nEl numero de personas casadas es %d y su media de hijos %.2fn",casadas
,hijos
/casadas
); else
printf("nNo hay personas casadas"); }
else
printf("nEl fichero esta vacion"); }
void imprimirMujeres(int min, int max, char *fichero)
{
FILE *pfichero;
int casadas=0,entra=0;
float hijos=0;
strCenso registro;
if((fopen(fichero
,"r"))==NULL
) {
printf("nERROR al abrir el archivo para lecturan"); }
if(fgetc(pfichero
)!=EOF
) //Por si está vacío {
do
{
fscanf(pfichero
, "%s %s %d %d %c %cn", registro.
cs_cod, registro.
cs_nom, registro.
cs_edad, registro.
cs_hijo, registro.
cs_sexo, registro.
cs_eciv); if(registro.cs_sexo=='h' && registro.cs_edad>=min && registro.cs_edad<=max)
{
entra=1;
printf("nNombre %sEdad %d anios",registro.
cs_nom,registro.
cs_edad); }
}while(fgetc(pfichero
)!=EOF
); if(!entra)
printf("nNinguna mujer cumple con las condicionesn"); }
else
printf("nEl fichero esta vacion"); }