Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Relacion de archivos en c++ windows form

Estas en el tema de Relacion de archivos en c++ windows form en el foro de C/C++ en Foros del Web. tengo 3 archivos txt y me piden relacionarlos por ejemplo tengo materias.txt alumnos.txt y lo que estudian.txt en el caso de las materias pues con ...
  #1 (permalink)  
Antiguo 13/11/2014, 08:09
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Información Relacion de archivos en c++ windows form

tengo 3 archivos txt y me piden relacionarlos por ejemplo
tengo materias.txt alumnos.txt y lo que estudian.txt

en el caso de las materias pues con un textbox o combobox selecciono un codigo que me muestre en un listbox los alumnos que pertenecen a esa materia y lo estudian

en el caso de los alumnos pues con un textbox o combobox selecciono un codigo que me muestre en un listbox lo que estudia y materias a las que pertenece

en el caso de lo que estudian pues con un textbox o combobox selecciono un codigo que me muestre en un listbox el nombre de todos los alumnos que esten estudiando eso y el semestre.

el problema es como relacionar los tres archivos
  #2 (permalink)  
Antiguo 13/11/2014, 09:32
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Relacion de archivos en c++ windows form

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 original
  1. std::vector< Asignatura > asignaturas;
  2. std::vector< Alumno > alumnos;
  3. 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 original
  1. Asignatura asignaturas[20];
  2. Alumno alumnos[20];
  3. Relacion relaciones[40];

"Relacion" puede estar implementado de varias formas:
  • Puede contener los códigos de los elementos:
    Código C++:
    Ver original
    1. struct Relacion
    2. {
    3.   int codigoAsignatura;
    4.   int codigoAlumno;
    5. };
    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 original
    1. struct Relacion
    2. {
    3.   Asignatura* asignatura;
    4.   Alumno* alumno;
    5. };
    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.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:26.