#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "grupos.h"
#include "alumnos.h"
#include "tipos.h"
#include "miString.h"
/*=== Funciones =============================================================*/
/*-----------------------------------------------------------------------------
Nombre: iniGrupo
Descripción: inicializa todos los campos.
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
- OK, si se ha terminado sin problemas
- ERROR en caso contrario.
-----------------------------------------------------------------------------*/
status iniGrupo (grupo * a, char * nombre)
{
if(a==NULL)
return ERROR;
myStrcpy(a->nombregrup, nombre);
a->mejornota = 0;
a->peornota = 10;
a->notamedia = 0;
a->mejoralum = NULL;
a->peoralum = NULL;
return OK;
}
/*-----------------------------------------------------------------------------
Nombre: estaAlumnoGrupo
Descripción: Comprueba si esta el alumno en un grupo.
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
- TRUE o FALSE
/*--------------------------------------------------------------------------------*/
boolean estaAlumnoGrupo (alumno * al, grupo * gr)
{
int i=0;
for (i=0;i<MAX_ALUM;i++)
{
if ((myStrcmp(gr->clase[i].nombre,al->nombre))==0)
return TRUE;
}
return FALSE;
}
/*-----------------------------------------------------------------------------
Nombre: grupoLleno
Descripción: Comprueba que el grupo no esté lleno.
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
TRUE, si el grupo lleno, FALSE en caso contrario
-----------------------------------------------------------------------------*/
boolean grupoLleno (grupo * gr)
{
if (gr->numalum==MAX_ALUM)
return TRUE;
return FALSE;
}
/*=== Funciones =============================================================*/
/*-----------------------------------------------------------------------------
Nombre: grupoVacio
Descripción: Comprueba si el grupo está vacio.
Argumentos de entrada: (Enumeración de los argumentos por orden de aparición en
el prototipo indicando para que sirven)
1. nmr, número entero para pasar ...
2. cdn, puntero a una cadena de caracteres para...
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
TRUE, si está vacío, FALSE en caso contrario
-----------------------------------------------------------------------------*/
boolean grupoVacio (grupo * gr)
{
if (gr->numalum==0)
return TRUE;
return FALSE;
}
/*-----------------------------------------------------------------------------
Nombre: addAlumnoGrupo
Descripción: Añade un alumno al grupo.
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
- Comprueba que no esté lleno.
- OK, si se ha terminado sin problemas
-ERROR, si ha habido problemas
-----------------------------------------------------------------------------*/
status addAlumnoGrupo (alumno al, grupo * gr)
{
int i,num=2;
gr->numalum=num;; ///////////////////////////////////////////////AQUI HAY QUE IGUALAR AL Nº INTRODUCIDO COMO ARGUMENTOS/////////////////////////7
if (grupoLleno(gr)==TRUE)
return ERROR;
else if ((estaAlumnoGrupo(&al, gr))==TRUE)/*como al no es un puntero, hay que ponerle & para que le llegue como puntero*/
return ERROR;
else
{
for(i=0; i<=(gr->numalum);i++)
{
fflush(stdin),
strcpy(gr->clase[i].nombre, al.nombre);
gr->clase[i].nota=al.nota;
}
return OK;
}/*fin del else*/
}
/*-----------------------------------------------------------------------------
Nombre: calculaNotas
Descripción: Calcula las notas de los alumnos.
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
-Comprueba que el grupo no esté vacío.
- OK, si se ha terminado sin problemas
- ERROR en caso contrario.
-----------------------------------------------------------------------------*/
status calculaNotas (grupo * gr)
{
int i=0;
float aux=0;
if ((grupoVacio(gr))==TRUE)
return ERROR;
for (i=0;i<(gr->numalum);i++)
{
aux+=gr->clase[i].nota;
if (gr->clase[i].nota>gr->mejornota)
{
gr->mejornota=gr->clase[i].nota;
gr->mejoralum=&(gr->clase[i]);
}/*fin del if*/
if (gr->clase[i].nota<gr->peornota)
{
gr->peornota=gr->clase[i].nota;
gr->peoralum=&(gr->clase[i]);
}/*fin del if*/
}/*fin del for*/
aux/=gr->numalum;
gr->notamedia=aux;
return OK;
}
/*-----------------------------------------------------------------------------
Nombre: printGrupo
Descripción: Imprime por pantalla todo el grupo.
Retorno: (Enumeración de los valores que puede devolver la función indicando en
que circunstancias)
- OK, si se ha terminado sin problemas
- ERROR en caso contrario.
- Comprueba que el grupo no este vacío.
-----------------------------------------------------------------------------*/
status printGrupo (grupo * gr)
{
int i;
if ((grupoVacio(gr))==TRUE) /*control de errores*/
return ERROR;
printf("Nombre del grupo: %sn", gr->nombregrup);
printf("Numero de alumnos: %dn", gr->numalum);
for (i=0;i<(gr->numalum);i++)
printAlumno(&gr->clase[i]);
printf("Mejor nota: %.2f: , alumno: %s n", gr->mejornota,gr->mejoralum);
printf("Peor nota: %.2f: , alumno: %s n", gr->peornota,gr->peoralum);
printf("Nota media: %.2fn", gr->notamedia);
return OK;
}