Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Test
- {
- class Nodo
- {
- public int noControl;
- public string nombre;
- public int noSemestre;
- public int noCarrera;
- public Nodo carreraAnterior;
- public Nodo siguienteCarrera;
- public Nodo semestreAnterior;
- public Nodo siguienteSemestre;
- public Nodo alumnoAnterior;
- public Nodo siguienteAlumno;
- // No copiar
- public string representacion ()
- {
- return string.Format ("[{0} -> {1} -> {2}]",
- carreraAnterior == null ? "Nil" : carreraAnterior.coordenadas (),
- coordenadas (),
- siguienteCarrera == null ? "Nil" : siguienteCarrera.coordenadas ());
- }
- // No copiar
- public string coordenadas ()
- {
- return string.Format ("({0}, {1}, {2})", noCarrera, noSemestre, noControl);
- }
- // No copiar
- public override string ToString()
- {
- return string.Format ("No Control: {0}, Nombre: {1}, No Semestre: {2}, No Carrera: {3}", noControl, nombre, noSemestre, noCarrera);
- }
- }
- class Tendedero
- {
- public ListaCarreras carreras;
- public void insertar (int noCarrera, int noSemestre, int noControl, string nombre)
- {
- Nodo nodo;
- nodo = new Nodo ();
- nodo.noControl = noControl;
- nodo.nombre = nombre;
- nodo.noSemestre = noSemestre;
- nodo.noCarrera = noCarrera;
- nodo.alumnoAnterior = null;
- nodo.siguienteAlumno = null;
- nodo.semestreAnterior = null;
- nodo.siguienteSemestre = null;
- nodo.carreraAnterior = null;
- nodo.siguienteCarrera = null;
- if (carreras == null) {
- Console.WriteLine ("Insertando inicio...");
- carreras = new ListaCarreras ();
- carreras.inicio = null;
- carreras.final = null;
- }
- bool carreraExiste, semestreExiste;
- Carrera carrera;
- Semestre semestre;
- carreraExiste = false;
- semestreExiste = false;
- carrera = carreras.inicio;
- semestre = null;
- while (carrera != null && !carreraExiste) {
- semestre = carrera.semestres.inicio;
- if (semestre != null && semestre.alumnos.inicio.noCarrera == nodo.noCarrera) {
- carreraExiste = true;
- while (semestre != null && !semestreExiste) {
- if (nodo.noSemestre == semestre.alumnos.inicio.noSemestre) {
- semestreExiste = true;
- } else {
- semestre = semestre.siguiente;
- }
- }
- } else {
- carrera = carrera.siguiente;
- }
- }
- if (carrera == null) {
- Console.WriteLine ("Insertando nueva carrera...");
- carrera = new Carrera ();
- carrera.semestres = new ListaSemestres ();
- carrera.semestres.inicio = null;
- carrera.semestres.final = null;
- semestre = null;
- if (carreras.inicio == null || carreras.final == null) {
- carreras.inicio = carrera;
- carreras.final = carrera;
- carrera.anterior = null;
- carrera.siguiente = null;
- } else if (carreras.inicio.semestres.inicio.alumnos.inicio.noCarrera > nodo.noCarrera) {
- carrera.anterior = carreras.inicio.anterior;
- carrera.siguiente = carreras.inicio;
- carreras.inicio.anterior = carrera;
- carreras.inicio = carrera;
- } else if (carreras.final.semestres.inicio.alumnos.inicio.noCarrera < nodo.noCarrera) {
- carrera.anterior = carreras.final;
- carrera.siguiente = carreras.final.siguiente;
- carreras.final.siguiente = carrera;
- carreras.final = carrera;
- } else {
- Carrera anterior, siguiente;
- anterior = carreras.inicio;
- siguiente = anterior.siguiente;
- while (siguiente != null &&
- siguiente.semestres.inicio.alumnos.inicio.noCarrera < nodo.noCarrera) {
- anterior = siguiente;
- siguiente = siguiente.siguiente;
- }
- carrera.anterior = anterior;
- carrera.siguiente = siguiente;
- siguiente.anterior = carrera;
- anterior.siguiente = carrera;
- }
- }
- if (semestre == null) {
- Console.WriteLine ("Insertando nuevo semestre...");
- semestre = new Semestre ();
- semestre.alumnos = new ListaAlumnos ();
- semestre.alumnos.inicio = null;
- semestre.alumnos.final = null;
- if (carrera.semestres.inicio == null || carrera.semestres.final == null) {
- carrera.semestres.inicio = semestre;
- carrera.semestres.final = semestre;
- semestre.anterior = null;
- semestre.siguiente = null;
- } else if (carrera.semestres.inicio.alumnos.inicio.noSemestre > nodo.noSemestre) {
- semestre.anterior = carrera.semestres.inicio.anterior;
- semestre.siguiente = carrera.semestres.inicio;
- carrera.semestres.inicio.anterior = semestre;
- carrera.semestres.inicio = semestre;
- } else if (carrera.semestres.final.alumnos.inicio.noSemestre < nodo.noSemestre) {
- semestre.anterior = carrera.semestres.final;
- semestre.siguiente = carrera.semestres.final.siguiente;
- carrera.semestres.final.siguiente = semestre;
- carrera.semestres.final = semestre;
- } else {
- Semestre anterior, siguiente;
- anterior = carrera.semestres.inicio;
- siguiente = anterior.siguiente;
- while (siguiente != null &&
- siguiente.alumnos.inicio.noSemestre < nodo.noSemestre) {
- anterior = siguiente;
- siguiente = siguiente.siguiente;
- }
- semestre.anterior = anterior;
- semestre.siguiente = siguiente;
- siguiente.anterior = semestre;
- anterior.siguiente = semestre;
- }
- }
- Console.WriteLine ("Insertando nuevo alumno...");
- if (semestre.alumnos.inicio == null || semestre.alumnos.final == null) {
- semestre.alumnos.inicio = nodo;
- semestre.alumnos.final = nodo;
- } else if (semestre.alumnos.inicio.noControl > nodo.noControl) {
- nodo.alumnoAnterior = semestre.alumnos.inicio.alumnoAnterior;
- nodo.siguienteAlumno = semestre.alumnos.inicio;
- semestre.alumnos.inicio.alumnoAnterior = nodo;
- semestre.alumnos.inicio = nodo;
- } else if (semestre.alumnos.final.noControl < nodo.noControl) {
- nodo.alumnoAnterior = semestre.alumnos.final;
- nodo.siguienteAlumno = semestre.alumnos.final.siguienteAlumno;
- semestre.alumnos.final.siguienteAlumno = nodo;
- semestre.alumnos.final = nodo;
- } else {
- Nodo anterior, siguiente;
- anterior = semestre.alumnos.inicio;
- siguiente = anterior.siguienteAlumno;
- while (siguiente != null && siguiente.noControl < nodo.noControl) {
- anterior = siguiente;
- siguiente = siguiente.siguienteAlumno;
- }
- nodo.alumnoAnterior = anterior;
- nodo.siguienteAlumno = siguiente;
- siguiente.alumnoAnterior = nodo;
- anterior.siguienteAlumno = nodo;
- }
- enlazarSemestre (semestre, nodo);
- enlazarCarrera (carrera, semestre, nodo);
- }
- public void eliminar (int noCarrera, int noSemestre, int noControl)
- {
- if (carreras == null) {
- Console.WriteLine ("Vacío.");
- } else {
- Carrera carrera;
- Semestre semestre;
- Nodo nodo;
- carrera = null;
- semestre = null;
- nodo = null;
- carrera = carreras.inicio;
- while (carrera != null && semestre == null) {
- if (carrera.semestres.inicio != null &&
- carrera.semestres.inicio.alumnos.inicio != null &&
- carrera.semestres.inicio.alumnos.inicio.noCarrera == noCarrera) {
- semestre = carrera.semestres.inicio;
- } else {
- carrera = carrera.siguiente;
- }
- }
- while (semestre != null && nodo == null) {
- if (semestre.alumnos.inicio != null &&
- semestre.alumnos.inicio.noSemestre == noSemestre) {
- nodo = semestre.alumnos.inicio;
- } else {
- semestre = semestre.siguiente;
- }
- }
- while (nodo != null && nodo.noControl != noControl) {
- nodo = nodo.siguienteAlumno;
- }
- if (nodo != null) {
- Console.WriteLine ("Eliminando... ");
- desenlazarSemestre (semestre, nodo);
- desenlazarCarrera (carrera, semestre, nodo);
- if (semestre.alumnos.inicio == semestre.alumnos.final) {
- semestre.alumnos.inicio = null;
- semestre.alumnos.final = null;
- if (carrera.semestres.inicio == carrera.semestres.final) {
- carrera.semestres.inicio = null;
- carrera.semestres.final = null;
- if (carreras.inicio == carreras.final) {
- carreras.inicio = null;
- carreras.final = null;
- carreras = null;
- } else if (carreras.inicio == carrera) {
- carreras.inicio = carrera.siguiente;
- carreras.inicio.anterior = null;
- } else if (carreras.final == carrera) {
- carreras.final = carrera.anterior;
- carreras.final.siguiente = null;
- } else {
- carrera.anterior.siguiente = carrera.siguiente;
- carrera.siguiente.anterior = carrera.anterior;
- }
- } else if (carrera.semestres.inicio == semestre) {
- carrera.semestres.inicio = semestre.siguiente;
- carrera.semestres.inicio.anterior = null;
- } else if (carrera.semestres.final == semestre) {
- carrera.semestres.final = semestre.anterior;
- carrera.semestres.final.siguiente = null;
- } else {
- semestre.anterior.siguiente = semestre.siguiente;
- semestre.siguiente.anterior = semestre.anterior;
- }
- } else if (semestre.alumnos.inicio == nodo) {
- semestre.alumnos.inicio = nodo.siguienteAlumno;
- semestre.alumnos.inicio.alumnoAnterior = null;
- } else if (semestre.alumnos.final == nodo) {
- semestre.alumnos.final = nodo.alumnoAnterior;
- semestre.alumnos.final.siguienteAlumno = null;
- } else {
- nodo.alumnoAnterior.siguienteAlumno = nodo.siguienteAlumno;
- nodo.siguienteAlumno.alumnoAnterior = nodo.alumnoAnterior;
- }
- } else {
- Console.WriteLine ("No se encontró.");
- }
- }
- }
- private void enlazarSemestre (Semestre semestre, Nodo alumno)
- {
- Nodo anterior, nodo, siguiente;
- anterior = null;
- nodo = null;
- siguiente = null;
- bool enlazar;
- if (semestre.anterior != null) {
- anterior = semestre.anterior.alumnos.inicio;
- }
- nodo = semestre.alumnos.inicio;
- if (semestre.siguiente != null) {
- siguiente = semestre.siguiente.alumnos.inicio;
- }
- enlazar = false;
- while (anterior != null || nodo != null || siguiente != null) {
- if (alumno == nodo) {
- enlazar = true;
- }
- if (enlazar) {
- if (anterior != null) {
- anterior.siguienteSemestre = nodo;
- }
- if (nodo != null) {
- nodo.semestreAnterior = anterior;
- nodo.siguienteSemestre = siguiente;
- }
- if (siguiente != null) {
- siguiente.semestreAnterior = nodo;
- }
- }
- if (anterior != null) {
- anterior = anterior.siguienteAlumno;
- }
- if (nodo != null) {
- nodo = nodo.siguienteAlumno;
- }
- if (siguiente != null) {
- siguiente = siguiente.siguienteAlumno;
- }
- }
- }
- private void desenlazarSemestre (Semestre semestre, Nodo alumno)
- {
- Nodo anterior, nodo, siguiente;
- anterior = null;
- nodo = null;
- siguiente = null;
- bool desenlazar;
- if (semestre.anterior != null) {
- anterior = semestre.anterior.alumnos.inicio;
- }
- nodo = semestre.alumnos.inicio;
- if (semestre.siguiente != null) {
- siguiente = semestre.siguiente.alumnos.inicio;
- }
- desenlazar = false;
- while (anterior != null || nodo != null || siguiente != null) {
- if (desenlazar) {
- if (anterior != null) {
- anterior.siguienteSemestre = nodo;
- }
- if (nodo != null) {
- nodo.semestreAnterior = anterior;
- nodo.siguienteSemestre = siguiente;
- }
- if (siguiente != null) {
- siguiente.semestreAnterior = nodo;
- }
- }
- if (alumno == nodo) {
- desenlazar = true;
- }
- if (anterior != null && nodo != alumno && alumno != null) {
- anterior = anterior.siguienteAlumno;
- }
- if (nodo != null) {
- nodo = nodo.siguienteAlumno;
- }
- if (siguiente != null && nodo != alumno && alumno != null) {
- siguiente = siguiente.siguienteAlumno;
- }
- }
- }
- private void enlazarCarrera (Carrera carrera, Semestre semestre, Nodo alumno)
- {
- Semestre semestreAnterior, semestreNodo, siguienteSemestre;
- semestreAnterior = null;
- semestreNodo = null;
- siguienteSemestre = null;
- Nodo anterior, nodo, siguiente;
- anterior = null;
- nodo = null;
- siguiente = null;
- bool enlazar;
- if (carrera.anterior != null) {
- semestreAnterior = carrera.anterior.semestres.inicio;
- }
- semestreNodo = carrera.semestres.inicio;
- if (carrera.siguiente != null) {
- siguienteSemestre = carrera.siguiente.semestres.inicio;
- }
- enlazar = false;
- while (semestreAnterior != null || semestreNodo != null || siguienteSemestre != null) {
- if (semestre == semestreNodo) {
- enlazar = true;
- }
- if (enlazar) {
- if (semestreAnterior != null) {
- anterior = semestreAnterior.alumnos.inicio;
- }
- if (semestreNodo != null) {
- nodo = semestreNodo.alumnos.inicio;
- }
- if (siguienteSemestre != null) {
- siguiente = siguienteSemestre.alumnos.inicio;
- }
- while (anterior != null || nodo != null || siguiente != null) {
- if (anterior != null) {
- anterior.siguienteCarrera = nodo;
- }
- if (nodo != null) {
- nodo.carreraAnterior = anterior;
- nodo.siguienteCarrera = siguiente;
- }
- if (siguiente != null) {
- siguiente.carreraAnterior = nodo;
- }
- if (anterior != null) {
- anterior = anterior.siguienteAlumno;
- }
- if (nodo != null) {
- nodo = nodo.siguienteAlumno;
- }
- if (siguiente != null) {
- siguiente = siguiente.siguienteAlumno;
- }
- }
- }
- if (semestreAnterior != null) {
- semestreAnterior = semestreAnterior.siguiente;
- }
- if (semestreNodo != null) {
- semestreNodo = semestreNodo.siguiente;
- }
- if (siguienteSemestre != null) {
- siguienteSemestre = siguienteSemestre.siguiente;
- }
- }
- }
- private void desenlazarCarrera (Carrera carrera, Semestre semestre, Nodo alumno)
- {
- Semestre semestreAnterior, semestreNodo, siguienteSemestre;
- semestreAnterior = null;
- semestreNodo = null;
- siguienteSemestre = null;
- Nodo anterior, nodo, siguiente;
- anterior = null;
- nodo = null;
- siguiente = null;
- bool desenlazar;
- if (carrera.anterior != null) {
- semestreAnterior = carrera.anterior.semestres.inicio;
- }
- semestreNodo = carrera.semestres.inicio;
- if (carrera.siguiente != null) {
- siguienteSemestre = carrera.siguiente.semestres.inicio;
- }
- desenlazar = false;
- while (semestreAnterior != null || semestreNodo != null || siguienteSemestre != null) {
- if (desenlazar) {
- if (semestreAnterior != null) {
- anterior = semestreAnterior.alumnos.inicio;
- }
- if (semestreNodo != null) {
- nodo = semestreNodo.alumnos.inicio;
- }
- if (siguienteSemestre != null) {
- siguiente = siguienteSemestre.alumnos.inicio;
- }
- while (anterior != null || nodo != null || siguiente != null) {
- if (anterior != null) {
- anterior.siguienteCarrera = nodo;
- }
- if (nodo != null) {
- nodo.carreraAnterior = anterior;
- nodo.siguienteCarrera = siguiente;
- }
- if (siguiente != null) {
- siguiente.carreraAnterior = nodo;
- }
- if (anterior != null && nodo != alumno && alumno != null) {
- anterior = anterior.siguienteAlumno;
- }
- if (nodo != null) {
- nodo = nodo.siguienteAlumno;
- }
- if (siguiente != null && nodo != alumno && alumno != null) {
- siguiente = siguiente.siguienteAlumno;
- }
- }
- }
- if (semestre == semestreNodo) {
- desenlazar = true;
- }
- if (semestreAnterior != null) {
- semestreAnterior = semestreAnterior.siguiente;
- }
- if (semestreNodo != null) {
- semestreNodo = semestreNodo.siguiente;
- }
- if (siguienteSemestre != null) {
- siguienteSemestre = siguienteSemestre.siguiente;
- }
- }
- }
- // No copiar
- public Nodo buscar (int noCarrera, int noSemestre, int noControl)
- {
- Carrera carrera;
- Semestre semestre;
- Nodo nodo;
- carrera = null;
- semestre = null;
- nodo = null;
- carrera = carreras.inicio;
- for (int i = 1; i < noCarrera && carrera != null; i++) {
- carrera = carrera.siguiente;
- }
- if (carrera != null) {
- semestre = carrera.semestres.inicio;
- for (int i = 1; i < noSemestre && semestre != null; i++) {
- semestre = semestre.siguiente;
- }
- }
- if (semestre != null) {
- nodo = semestre.alumnos.inicio;
- for (int i = 1; i < noControl && nodo != null; i++) {
- nodo = nodo.siguienteAlumno;
- }
- }
- return nodo;
- }
- }
- class ListaCarreras
- {
- public Carrera inicio, final;
- }
- class Carrera
- {
- public ListaSemestres semestres;
- public Carrera anterior, siguiente;
- }
- class ListaSemestres
- {
- public Semestre inicio, final;
- }
- class Semestre
- {
- public ListaAlumnos alumnos;
- public Semestre anterior, siguiente;
- }
- class ListaAlumnos
- {
- public Nodo inicio, final;
- // No copiar
- public void imprimir ()
- {
- Nodo t = inicio;
- while (t != null) {
- Console.WriteLine (t);
- t = t.siguienteAlumno;
- }
- }
- }
- class MainClass
- {
- static void Main(string[] args)
- {
- Tendedero tendedero = new Tendedero ();
- string respuesta;
- do {
- Console.WriteLine ("Menú");
- Console.WriteLine ("1. Insertar alumno");
- Console.WriteLine ("2. Reporte de alumnos");
- Console.WriteLine ("3. Salir");
- Console.WriteLine ();
- Console.Write ("¿Qué desea hacer? ");
- respuesta = Console.ReadLine ();
- Console.WriteLine ();
- if (respuesta == "1") {
- insertarAlumno (tendedero);
- } else if (respuesta == "2") {
- reporteAlumnos (tendedero);
- }
- } while (respuesta != "3");
- }
- public static void insertarAlumno (Tendedero tendedero) {
- int noCarrera, noSemestre, noControl;
- string nombre;
- Console.Write ("¿Cuál es el numero de control del alumno? ");
- noControl = int.Parse (Console.ReadLine ());
- Console.Write ("¿Cuál es el nombre del alumno? ");
- nombre = Console.ReadLine ();
- Console.Write ("¿Cuál es la carrera del alumno (en número)? ");
- noCarrera = int.Parse (Console.ReadLine ());
- Console.Write ("¿Cuál es el semestre del alumno? ");
- noSemestre = int.Parse (Console.ReadLine ());
- Console.WriteLine ();
- tendedero.insertar (noCarrera, noSemestre, noControl, nombre);
- Console.WriteLine ("¡Se ha insertado con éxito!");
- Console.WriteLine ();
- }
- public static void reporteAlumnos (Tendedero tendedero) {
- int noCarrera, noSemestre, noControl;
- Console.Write ("¿Cuál carrera desea consulatar (en número)? ");
- noCarrera = int.Parse (Console.ReadLine ());
- Console.Write ("¿Cuál semestre desea consultar? ");
- noSemestre = int.Parse (Console.ReadLine ());
- Carrera carrera;
- Semestre semestre;
- Nodo nodo;
- carrera = tendedero.carreras.inicio;
- semestre = null;
- nodo = null;
- while (carrera != null && nodo == null) {
- semestre = carrera.semestres.inicio;
- if (semestre.alumnos.inicio != null &&
- semestre.alumnos.inicio.noCarrera == noCarrera) {
- while (semestre != null && nodo == null) {
- if (semestre.alumnos.inicio.noSemestre == noSemestre) {
- nodo = semestre.alumnos.inicio;
- } else {
- semestre = semestre.siguiente;
- }
- }
- carrera = null;
- } else {
- carrera = carrera.siguiente;
- }
- }
- Console.WriteLine ();
- if (nodo == null) {
- Console.WriteLine ("Vacío.");
- } else {
- while (nodo != null) {
- Console.WriteLine (nodo);
- nodo = nodo.siguienteAlumno;
- }
- }
- Console.WriteLine ();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement