El programa tiene un menú de opciones y cada una está creada independiente de las demás. Entonces se ingresan los datos en un vector, pero no controlo la última posición ocupada del vector, lo que hace qe las distintas funciones no se ejecuten como deberían. Por ejemplo, ingreso una serie de nombres y luego le doy a "mostrar", hasta ahí bien, pero si vuelvo a ingresar otro nombre y le vuelvo a dar a "mostrar" lo coloca el primero de la lista y desaparece el que había antes. Igual me pasa con la función "poner notas", qe siempre me ofrece al primero de la lista para que le ponga notas, no pasa nunca por los demás.
Aquí dejo el código, a ver si alguien puede exarle un vistazo y exarme una mano, que llevo varios días con el programa y no consigo terminarlo.
SALUDOS!!!!
Código:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<conio.h>
int anterior;
void ordena (void);
void crear (void);
void mostrar (void);
void buscar (void);
void borrar (void);
void notas (void);
struct alumno{
char nombre[20];
char apellidos[20];
char DNI[9];
float T;
float P;
float final;
};
struct alumno curso[200];
int menu (void){
printf ("\t\t***MENU****\n");
printf ("\t1. Dar de alta un alumno.\n");
printf ("\t2. Borrar un alumno.\n");
printf ("\t3. Buscar un alumno.\n");
printf ("\t4. Ordenar.\n");
printf ("\t5. Poner notas.\n");
printf ("\t6. Mostrar lista de alumnos.\n");
printf ("\t7. SALIR\n\n");
printf ("Elija una opciOn: ");
}
int main (){
int op;
int F=0;
op==menu();
scanf ("%d", &op);
printf ("\n\n");
while (op !=7){
if (op==1){
printf ("\nDar de alta\n");
crear ();
op==menu();
scanf ("%d", &op);
}
else{
if(op==2){
printf ("\nDar de baja\n");
borrar ();
op==menu();
scanf ("%d", &op);
}
else{
if(op==3){
buscar ();
op==menu();
scanf ("%d", &op);
}
else {
if(op==4){
printf ("\nOrdenar\n");
op==menu();
scanf ("%d", &op);
}
else{
if(op==5){
printf ("\n\nPoner notas\n");
notas ();
op==menu();
scanf ("%d", &op);
}
else{
if(op==6){
printf ("\nMostrar lista de alumnos\n");
mostrar();
op==menu();
scanf ("%d", &op);
}
}
}
}
}
}
}
}
void crear(){
int F=0;
int terminar;
anterior=0;
terminar=0;
for (F=anterior; F<200&&terminar!=1; F++){
printf ("Introducir APELLIDOS:\t");
fflush (stdin);
gets (curso[F].apellidos);
printf ("Introducir NOMBRE:\t");
fflush (stdin);
gets (curso[F].nombre);
printf ("Introducir DNI:\t");
scanf ("%s", curso[F].DNI);
printf ("¿Ha terminado de dar de alta alumnos?\n1=Si\t 2=No");
scanf ("%d", &terminar);
anterior==F;
printf ("\n\n");
}
if (anterior==200){
printf ("\nLa lista estA llena");
}
}
void mostrar (){
int F;
F=0;
anterior=0;
printf ("\n\nDNI Apellidos Nombre TeorIa PrActica Final \n--------- --------------------- ---------- ------ -------- ----- \n\n");
for (F=anterior; F<200; F++){
curso[F].final= (40*curso[F].T)/100+(60*curso[F].P)/100;
printf ("%s ", curso[F].DNI);
printf ("%s ", curso[F].apellidos);
printf ("%s ", curso[F].nombre);
printf ("%f ", curso[F].T);
printf ("%f ", curso[F].P);
printf ("%f \n", curso[F].final);
anterior==F;
}
printf ("\n\n");
}
void buscar (){
int F;
char busco[30];
printf ("\n\nBuscar por apellidos: ");
fflush (stdin);
gets (busco);
for (F=0; F<200; F++){
if (strcmp (busco, curso[F].apellidos)==0){
printf ("\n%s", curso[F].apellidos);
printf ("\n%s", curso[F].nombre);
printf ("\n%s", curso[F].DNI);
}
}
if (strcmp (busco, curso[F].apellidos)!=0){
printf ("\nNo se han encontrado coincidencias\n");
}
}
void borrar (){
int F;
char busco[30];
int i;
int k;
printf ("\n\nBuscar por apellidos: ");
fflush (stdin);
gets (busco);
for (F=0; F<200; F++){
if (strcmp (busco, curso[F].apellidos)==0){
printf ("\n%s", curso[F].apellidos);
printf ("\n%s", curso[F].nombre);
printf ("\n%s", curso[F].DNI);
printf ("\n¿Desea dar de baja a este alumno?\t1=SI\t2=NO\t");
scanf ("%d", &k);
if (k=1){
for (i=F; i<200; i++){
curso[i]=curso[i+1];
anterior--;
}
}
else{
}
}
}
if (strcmp (busco, curso[F].apellidos)!=0){
printf ("\nNo se han encontrado coincidencias\n\n");
}
}
void notas (){
int F;
for (F=0; F<=anterior; F++){
printf ("\nAlumno: %s, %s", curso[F].apellidos, curso[F].nombre);
printf ("\nNota de teoria: ");
scanf ("%f", &curso[F].T);
printf ("\nNota de practica: ");
scanf ("%f", &curso[F].P);
printf ("\nNota final: %f", (40*curso[F].T)/100+(60*curso[F].P)/100);
printf ("\n\n");
}
}