Creo que estás interpretando mal la información. A mí me da la sensación que el archivo "estudian.txt" contiene una relación entre los alumnos y las asignaturas que cursan.
No se, quizás el contenido de los archivos sea algo asi:
materia.txt
0000 PROGRAMACION
0001 MATEMATICAS
alumnos.txt
1000 Pedro Noseque
1001 Laura Yoquese
estudian.txt
0000 1000
0001 1000
0001 1001
De tal forma que, "estudian.txt" es el que se encarga de relacionar la información contenida en los otros dos archivos.
¿Qué hacer ante esta situación? Bueno, tienes que leer primero los archivos que no tienen dependencias, es decir, "materias.txt" y "alumnos.txt" y, finalmente, leer "estudian.txt".
- Al leer "materias.txt" deberías almacenar su contenido en una colección. Esta colección almacena estructuras o clases de tipo, por ejemplo, "Materia"
- Al leer "alumnos.txt" haces lo mismo que con "materias.txt", en este caso lo suyo sería tener una clase llamada "Alumno"
- Llega el turno de "estudian.txt" aquí es donde se encuentra la parte, digamos, difícil. Aquí puedes hacer varias cosas:
- Crear dos mapas, uno para guardar la relación, alumno->materias y otro para la relación materia->alumnos.
- Crear un listado simple con las relaciones. Esta opción es más sencilla de rellenar pero implica tener algo más de código para buscar las relaciones.
Una vez hecho todo esto deberías tener algo tal que:
Código C++:
Ver originalstd::vector< Asignatura > asignaturas;
std::vector< Alumno > alumnos;
std::vector< Relacion > relacion;
Si no sabes usar contenedores, bueno, nunca es tarde para aprender. Aún así no es necesario, siempre puedes recurrir a listas estáticas para almacenar os datos:
Código C++:
Ver originalAsignatura asignaturas[20];
Alumno alumnos[20];
Relacion relaciones[40];
"Relacion" puede estar implementado de varias formas:
- Puede contener los códigos de los elementos:
Código C++:
Ver originalstruct Relacion
{
int codigoAsignatura;
int codigoAlumno;
};
Esta forma te obliga a, cada vez que quieras sacar un listado, recorrer el array de materias y alumnos buscando aquellos elementos que coinciden con los códigos de la lista. - Puede contener un puntero a los elementos:
Código C++:
Ver originalstruct Relacion
{
Asignatura* asignatura;
Alumno* alumno;
};
En este caso, cada vez que te lees una relación tienes que buscar la asignatura y el alumno indicado en la relación y actualizar los punteros. La ventaja de usar este sistema es que dada una materia o un alumno, sacar la información que lo relaciona es inmediata.
La primera opción es más sencilla de implementar, la segunda es más chula.
Como ves la forma de hacer las cosas se va bifurcando a medida que vas tomando decisiones concretas.