C/Visual C - Ayuda por favor.

 
Vista:

Ayuda por favor.

Publicado por unodeverde (1 intervención) el 02/05/2009 14:04:35
Hola, necesito ayuda con este ejercicio que me está volviendo loco, cuando arreglo algo se estropea otra cosa.
Utilizo como compilador el Borland C++ 5.01.
Haber si hay alguna alma caricativa, por favor.
Gracias de todas formas, incluso a los que se molestan en leerlo.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef struct
{
char nombre[20],apellidos[30];
int etapa,curso,nota1,nota2,nota3;
float media;
}campos;
void introducir(campos datos);
void mostrar(campos datos);
void suspensos4(campos datos);
void mostraraprobados2B(campos datos);
void ultimo(campos datos);
main()
{
campos datos;
FILE *p;
introducir(datos);
mostrar(datos);
suspensos4(datos);
mostraraprobados2B(datos);
ultimo(datos);
getchar();
getchar();
system("PAUSE");
}
void introducir(campos datos)
{
char grabar='S';
FILE *p;
if((p=fopen("fichero.bin","wb"))==NULL)
{
printf("Error.");
fflush(stdin);
getchar();
}
else
{
do
{
printf(" Introducir nombre:");
fflush(stdin);
gets(datos.nombre);
strlwr(datos.nombre);
datos.nombre[0]=toupper(datos.nombre[0]);
printf(" Introducir apellidos:");
fflush(stdin);
gets(datos.apellidos);
strlwr(datos.apellidos);
datos.apellidos[0]=toupper(datos.apellidos[0]);
do
{
printf(" Sabiendo que ESO(1), Bachillerato(2) y Ciclo formativo(3), introduce el digito perteneciente a la etapa etapa:");
scanf("%d",&datos.etapa);
}while((datos.etapa!=1)&&(datos.etapa!=2)&&(datos.etapa!=3));
do
{
printf(" Sabiendo que ESO(1,2,3,4); Bachillerato(1,2) y Ciclo formativo(1,2), introduce el digito perteneciente al curso:");
scanf("%d",&datos.curso);
}while((datos.curso!=1)&&(datos.curso!=2)&&(datos.curso!=3)&&(datos.curso!=4));
do
{
printf(" Introduce la primera nota:");
scanf("%d",&datos.nota1);
}while((datos.nota1<=0)&&(datos.nota1>=10));
do
{
printf(" Introduce la segunda nota:");
scanf("%d",&datos.nota2);
}while((datos.nota2<=0)&&(datos.nota2>=10));
do
{
printf(" Introduce la tercera nota:");
scanf("%d",&datos.nota3);
}while((datos.nota3<=0)&&(datos.nota3>=10));
datos.media=((datos.nota1+datos.nota2+datos.nota3)/3);
printf(" La nota media es: %.f . ",datos.media);
fwrite(&datos,sizeof(campos),1,p);
printf(" Deseas grabar datos de algún alumno (S/N):");
fflush(stdin);
scanf("%c",&grabar);
}while((grabar=='s')||(grabar=='S'));
}
fclose(p);
system("PAUSE");
}
//-------------------------------------------------------------------------------------------------------------------------//
void mostrar(campos datos)
{
FILE *p;
rewind(p);
if((p=fopen("fichero.bin","rb"))==NULL)
{
printf("Error.");
fflush(stdin);
getchar();
}
else
{
fread(&datos,sizeof(campos),1,p);
while(!feof(p))
{
printf(" El nombre del alumno es: %s",datos.nombre);
printf(" El nombre del apellidos es: %s",datos.apellidos);
printf(" La etapa del alumno es: %d",datos.etapa);
printf(" El curso del alumno es: %d",datos.curso);
printf(" La 1ª nota del alumno es: %d",datos.nota1);
printf(" La 2ª del alumno es: %d",datos.nota2);
printf(" La 3º del alumno es: %d",datos.nota3);
printf(" La nota media del alumno es: %f ",datos.media);
fread(&datos,sizeof(campos),1,p);
}
fclose(p);
system("PAUSE");
}
}
//-------------------------------------------------------------------------------------------------------------------------//
void suspensos4(campos datos)
{
FILE *p;
if((p=fopen("fichero.bin","rb"))==NULL)
{
printf("Error.");
fflush(stdin);
getchar();
}
else
{
printf(" Nombre y apellidos de la nota media suspensa 4 ESO. ");
fread(&datos,sizeof(campos),1,p);
int suspenso=0,contador=0;
while(!feof(p))
{
fread(&datos,sizeof(campos),1,p);
if(datos.curso==4)
{
if(datos.media<5)
{
contador++;
printf(" El nombre del alumno es: %s",datos.nombre);
printf(" El nombre del apellidos es: %s",datos.apellidos);
printf(" La nota media del alumno es: %f",datos.media);
fread(&datos,sizeof(campos),1,p);
}
}
}
if(suspenso==0)
{
printf(" No hay suspensos. ");
}
else
{
printf(" El numero de suspensos es %d. ",contador);
}
}
fclose(p);
system("PAUSE");
}
//-------------------------------------------------------------------------------------------------------------------------//
void mostraraprobados2B(campos datos)
{
FILE *p;
int cont=0;
if((p=fopen("fichero.bin","rb"))==NULL)
{
printf("Error.");
fflush(stdin);
getchar();
}
else
{
printf(" Nombre y apellidos de la nota media aprobados Segundo Bachillerato. ");
fread(&datos,sizeof(campos),1,p);
while(!feof(p))
{
fread(&datos,sizeof(campos),1,p);
if(datos.etapa==2)
{
fread(&datos,sizeof(campos),1,p);
if (datos.curso==2)
{
fread(&datos,sizeof(campos),1,p);
if(datos.media>4)
{
cont++;
printf(" El nombre del apellidos es: %s",datos.apellidos);
printf(" La nota media del alumno es: %f",datos.media);
fread(&datos,sizeof(campos),1,p);
if(cont==0)
{
printf(" No hay aprobados en Segundo de Bachillerato.");
}
else
{
printf(" El numero de aprobados en Segundo de Bachillerato es: %d",cont);
}
}

}
}
}
}
fclose(p);
system("PAUSE");
}
//----------------------------------------------------------------------------------------------------------------------//
void ultimo(campos datos)
{
FILE *p;
int registro='s';
if((p=fopen("fichero.bin","rb"))==NULL)
{
printf("Error.");
fflush(stdin);
getchar();
}
else
{
printf("Desea mostrar el ultimo registro (S/N):");
scanf("%c",registro);
while((registro=='s')||(registro=='S'))
{
fseek(p,2,0);
fread(&datos,sizeof(campos),1,p);
if(!feof(p))
{
printf(" El nombre del alumno es: %s",datos.nombre);
printf(" El nombre del apellidos es: %s",datos.apellidos);
printf(" La etapa del alumno es: %d",datos.etapa);
printf(" El curso del alumno es: %d",datos.curso);
printf(" La 1ª nota del alumno es: %d",datos.nota1);
printf(" La 2ª del alumno es: %d",datos.nota2);
printf(" La 3º del alumno es: %d",datos.nota3);
printf(" La nota media del alumno es: %f",datos.media);
fread(&datos,sizeof(campos),1,p);
}
}
}
fclose(p);
system("PAUSE");
}
//-------------------------------------------------------------------------------------------------------------------------//
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder