Advertisement
Guest User

tendeddero ver 2

a guest
Nov 20th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 26.92 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Test
  5. {
  6.     class Nodo
  7.     {
  8.         public int noControl;
  9.         public string nombre;
  10.         public int noSemestre;
  11.         public int noCarrera;
  12.  
  13.         public Nodo carreraAnterior;
  14.         public Nodo siguienteCarrera;
  15.         public Nodo semestreAnterior;
  16.         public Nodo siguienteSemestre;
  17.         public Nodo alumnoAnterior;
  18.         public Nodo siguienteAlumno;
  19.  
  20.         public string representacion ()
  21.         {
  22.             return string.Format ("[{0} -> {1} -> {2}]",
  23.                 carreraAnterior == null ? "Nil" : carreraAnterior.coordenadas (),
  24.                 coordenadas (),
  25.                 siguienteCarrera == null ? "Nil" : siguienteCarrera.coordenadas ());
  26.         }
  27.  
  28.         public string coordenadas ()
  29.         {
  30.             return string.Format ("({0}, {1}, {2})", noCarrera, noSemestre, noControl);
  31.         }
  32.  
  33.         public override string ToString()
  34.         {
  35.             return string.Format ("No Control: {0}, Nombre: {1}, No Semestre: {2}, No Carrera: {3}", noControl, nombre, noSemestre, noCarrera);
  36.         }
  37.     }
  38.  
  39.     class TendederoPrueba
  40.     {
  41.         public TendederoPrueba ()
  42.         {
  43.             insertar_vacio_exito ();
  44.             Console.Clear ();
  45.             insertar_carrerasemestreigual_exito ();
  46.             Console.Clear ();
  47.             insertar_carreradiferentesemestreigual_exito ();
  48.             Console.Clear ();
  49.             insertar_carreraigualsemestrediferente_exito ();
  50.             Console.Clear ();
  51.             enlazar_carreraigualsemestrediferente_exito ();
  52.             Console.Clear ();
  53.             enlazar_carreradiferentesemestreigual_exito ();
  54.             Console.Clear ();
  55.             Console.WriteLine ("FUCKING YES!!!!");
  56.         }
  57.  
  58.         public void insertar_vacio_exito ()
  59.         {
  60.             Tendedero tendedero = new Tendedero ();
  61.             tendedero.insertar (3, 2, 1, "Juan");
  62.  
  63.             if (tendedero.buscar (1, 1, 1).ToString () !=
  64.                 "No Control: 1, Nombre: Juan, No Semestre: 2, No Carrera: 3") {
  65.                 throw new Exception ("[insertar_vacio_exito] Insersión vacío fallida.");
  66.             }
  67.         }
  68.  
  69.         public void insertar_carrerasemestreigual_exito ()
  70.         {
  71.             Tendedero tendedero = new Tendedero ();
  72.             tendedero.insertar (3, 2, 2, "Juan");
  73.             tendedero.insertar (3, 2, 4, "Sergio");
  74.             tendedero.insertar (3, 2, 1, "Pedro");
  75.             tendedero.insertar (3, 2, 3, "Ana");
  76.  
  77.             Console.WriteLine ();
  78.             tendedero.carreras.inicio.semestres.inicio.alumnos.imprimir ();
  79.             Console.WriteLine ();
  80.  
  81.             if (tendedero.buscar (1, 1, 1).ToString () !=
  82.                 "No Control: 1, Nombre: Pedro, No Semestre: 2, No Carrera: 3" ||
  83.                 tendedero.buscar (1, 1, 2).ToString () !=
  84.                 "No Control: 2, Nombre: Juan, No Semestre: 2, No Carrera: 3" ||
  85.                 tendedero.buscar (1, 1, 3).ToString () !=
  86.                 "No Control: 3, Nombre: Ana, No Semestre: 2, No Carrera: 3" ||
  87.                 tendedero.buscar (1, 1, 4).ToString () !=
  88.                 "No Control: 4, Nombre: Sergio, No Semestre: 2, No Carrera: 3") {
  89.                 throw new Exception ("[insertar_carrerasemestreigual_exito] Insersión con" +
  90.                     " carrera y semestre iguales fallida.");
  91.             }
  92.         }
  93.  
  94.         public void insertar_carreraigualsemestrediferente_exito ()
  95.         {
  96.             Tendedero tendedero = new Tendedero ();
  97.             tendedero.insertar (2, 3, 2, "Juan");
  98.             tendedero.insertar (2, 3, 4, "Sergio");
  99.             tendedero.insertar (2, 3, 1, "Pedro");
  100.             tendedero.insertar (2, 3, 3, "Ana");
  101.             tendedero.insertar (2, 1, 6, "Manuel");
  102.             tendedero.insertar (2, 1, 8, "Manuela");
  103.             tendedero.insertar (2, 1, 5, "Manolo");
  104.             tendedero.insertar (2, 1, 7, "Mani");
  105.             tendedero.insertar (2, 2, 10, "Pepe");
  106.             tendedero.insertar (2, 2, 12, "Jose");
  107.             tendedero.insertar (2, 2, 9, "Gilberto");
  108.             tendedero.insertar (2, 2, 11, "Oscar");
  109.  
  110.             Console.WriteLine ();
  111.             tendedero.carreras.inicio.semestres.inicio.alumnos.imprimir ();
  112.             Console.WriteLine ();
  113.             tendedero.carreras.inicio.semestres.inicio.siguiente.alumnos.imprimir ();
  114.             Console.WriteLine ();
  115.             tendedero.carreras.inicio.semestres.inicio.siguiente.siguiente.alumnos.imprimir ();
  116.             Console.WriteLine ();
  117.  
  118.             if (tendedero.buscar (1, 1, 1).ToString () !=
  119.                 "No Control: 5, Nombre: Manolo, No Semestre: 1, No Carrera: 2" ||
  120.                 tendedero.buscar (1, 1, 2).ToString () !=
  121.                 "No Control: 6, Nombre: Manuel, No Semestre: 1, No Carrera: 2" ||
  122.                 tendedero.buscar (1, 1, 3).ToString () !=
  123.                 "No Control: 7, Nombre: Mani, No Semestre: 1, No Carrera: 2" ||
  124.                 tendedero.buscar (1, 1, 4).ToString () !=
  125.                 "No Control: 8, Nombre: Manuela, No Semestre: 1, No Carrera: 2" ||
  126.                 tendedero.buscar (1, 2, 1).ToString () !=
  127.                 "No Control: 9, Nombre: Gilberto, No Semestre: 2, No Carrera: 2" ||
  128.                 tendedero.buscar (1, 2, 2).ToString () !=
  129.                 "No Control: 10, Nombre: Pepe, No Semestre: 2, No Carrera: 2" ||
  130.                 tendedero.buscar (1, 2, 3).ToString () !=
  131.                 "No Control: 11, Nombre: Oscar, No Semestre: 2, No Carrera: 2" ||
  132.                 tendedero.buscar (1, 2, 4).ToString () !=
  133.                 "No Control: 12, Nombre: Jose, No Semestre: 2, No Carrera: 2" ||
  134.                 tendedero.buscar (1, 3, 1).ToString () !=
  135.                 "No Control: 1, Nombre: Pedro, No Semestre: 3, No Carrera: 2" ||
  136.                 tendedero.buscar (1, 3, 2).ToString () !=
  137.                 "No Control: 2, Nombre: Juan, No Semestre: 3, No Carrera: 2" ||
  138.                 tendedero.buscar (1, 3, 3).ToString () !=
  139.                 "No Control: 3, Nombre: Ana, No Semestre: 3, No Carrera: 2" ||
  140.                 tendedero.buscar (1, 3, 4).ToString () !=
  141.                 "No Control: 4, Nombre: Sergio, No Semestre: 3, No Carrera: 2") {
  142.                 throw new Exception ("[insertar_carreraigualsemestrediferente_exito] Insersión con" +
  143.                     " carrera igual y semestre diferente fallida.");
  144.             }
  145.         }
  146.  
  147.         public void insertar_carreradiferentesemestreigual_exito ()
  148.         {
  149.             Tendedero tendedero = new Tendedero ();
  150.             tendedero.insertar (3, 2, 2, "Juan");
  151.             tendedero.insertar (3, 2, 4, "Sergio");
  152.             tendedero.insertar (3, 2, 1, "Pedro");
  153.             tendedero.insertar (3, 2, 3, "Ana");
  154.             tendedero.insertar (1, 2, 6, "Manuel");
  155.             tendedero.insertar (1, 2, 8, "Manuela");
  156.             tendedero.insertar (1, 2, 5, "Manolo");
  157.             tendedero.insertar (1, 2, 7, "Mani");
  158.             tendedero.insertar (2, 2, 10, "Pepe");
  159.             tendedero.insertar (2, 2, 12, "Jose");
  160.             tendedero.insertar (2, 2, 9, "Gilberto");
  161.             tendedero.insertar (2, 2, 11, "Oscar");
  162.  
  163.             Console.WriteLine ();
  164.             tendedero.carreras.inicio.semestres.inicio.alumnos.imprimir ();
  165.             Console.WriteLine ();
  166.             tendedero.carreras.inicio.siguiente.semestres.inicio.alumnos.imprimir ();
  167.             Console.WriteLine ();
  168.             tendedero.carreras.inicio.siguiente.siguiente.semestres.inicio.alumnos.imprimir ();
  169.             Console.WriteLine ();
  170.  
  171.             if (tendedero.buscar (1, 1, 1).ToString () !=
  172.                 "No Control: 5, Nombre: Manolo, No Semestre: 2, No Carrera: 1" ||
  173.                 tendedero.buscar (1, 1, 2).ToString () !=
  174.                 "No Control: 6, Nombre: Manuel, No Semestre: 2, No Carrera: 1" ||
  175.                 tendedero.buscar (1, 1, 3).ToString () !=
  176.                 "No Control: 7, Nombre: Mani, No Semestre: 2, No Carrera: 1" ||
  177.                 tendedero.buscar (1, 1, 4).ToString () !=
  178.                 "No Control: 8, Nombre: Manuela, No Semestre: 2, No Carrera: 1" ||
  179.                 tendedero.buscar (2, 1, 1).ToString () !=
  180.                 "No Control: 9, Nombre: Gilberto, No Semestre: 2, No Carrera: 2" ||
  181.                 tendedero.buscar (2, 1, 2).ToString () !=
  182.                 "No Control: 10, Nombre: Pepe, No Semestre: 2, No Carrera: 2" ||
  183.                 tendedero.buscar (2, 1, 3).ToString () !=
  184.                 "No Control: 11, Nombre: Oscar, No Semestre: 2, No Carrera: 2" ||
  185.                 tendedero.buscar (2, 1, 4).ToString () !=
  186.                 "No Control: 12, Nombre: Jose, No Semestre: 2, No Carrera: 2" ||
  187.                 tendedero.buscar (3, 1, 1).ToString () !=
  188.                 "No Control: 1, Nombre: Pedro, No Semestre: 2, No Carrera: 3" ||
  189.                 tendedero.buscar (3, 1, 2).ToString () !=
  190.                 "No Control: 2, Nombre: Juan, No Semestre: 2, No Carrera: 3" ||
  191.                 tendedero.buscar (3, 1, 3).ToString () !=
  192.                 "No Control: 3, Nombre: Ana, No Semestre: 2, No Carrera: 3" ||
  193.                 tendedero.buscar (3, 1, 4).ToString () !=
  194.                 "No Control: 4, Nombre: Sergio, No Semestre: 2, No Carrera: 3") {
  195.                 throw new Exception ("[insertar_carreradiferentesemestreigual_exito] Insersión con" +
  196.                     " carrera diferente y semestre igual fallida.");
  197.             }
  198.         }
  199.  
  200.         public void enlazar_carreraigualsemestrediferente_exito ()
  201.         {
  202.             Tendedero tendedero = new Tendedero ();
  203.             tendedero.insertar (2, 3, 2, "Juan");
  204.             tendedero.insertar (2, 3, 4, "Sergio");
  205.             tendedero.insertar (2, 3, 1, "Pedro");
  206.             tendedero.insertar (2, 3, 3, "Ana");
  207.             tendedero.insertar (2, 1, 6, "Manuel");
  208.             tendedero.insertar (2, 1, 8, "Manuela");
  209.             tendedero.insertar (2, 1, 5, "Manolo");
  210.             tendedero.insertar (2, 1, 7, "Mani");
  211.             tendedero.insertar (2, 2, 10, "Pepe");
  212.             tendedero.insertar (2, 2, 12, "Jose");
  213.             tendedero.insertar (2, 2, 9, "Gilberto");
  214.             tendedero.insertar (2, 2, 11, "Oscar");
  215.  
  216.  
  217.             Console.WriteLine ();
  218.             Console.WriteLine ("------");
  219.             Console.WriteLine (tendedero.buscar (1, 1, 2));
  220.             Console.WriteLine (tendedero.buscar (1, 2, 2).semestreAnterior);
  221.             Console.WriteLine (tendedero.buscar (1, 2, 2));
  222.             Console.WriteLine (tendedero.buscar (1, 3, 2).semestreAnterior);
  223.             Console.WriteLine ("------");
  224.             Console.WriteLine (tendedero.buscar (1, 1, 2));
  225.             Console.WriteLine (tendedero.buscar (1, 2, 2).semestreAnterior);
  226.             Console.WriteLine (tendedero.buscar (1, 2, 2).siguienteSemestre);
  227.             Console.WriteLine (tendedero.buscar (1, 3, 2));
  228.             Console.WriteLine ("------");
  229.             Console.WriteLine (tendedero.buscar (1, 1, 2).siguienteSemestre);
  230.             Console.WriteLine (tendedero.buscar (1, 2, 2));
  231.             Console.WriteLine (tendedero.buscar (1, 2, 2).siguienteSemestre);
  232.             Console.WriteLine (tendedero.buscar (1, 3, 2));
  233.             Console.WriteLine ("------");
  234.             Console.WriteLine ();
  235.  
  236.             if (tendedero.buscar (1, 1, 1).siguienteSemestre != tendedero.buscar (1, 2, 1) ||
  237.                 tendedero.buscar (1, 1, 2).siguienteSemestre != tendedero.buscar (1, 2, 2) ||
  238.                 tendedero.buscar (1, 1, 3).siguienteSemestre != tendedero.buscar (1, 2, 3) ||
  239.                 tendedero.buscar (1, 2, 1).siguienteSemestre != tendedero.buscar (1, 3, 1) ||
  240.                 tendedero.buscar (1, 2, 2).siguienteSemestre != tendedero.buscar (1, 3, 2) ||
  241.                 tendedero.buscar (1, 2, 3).siguienteSemestre != tendedero.buscar (1, 3, 3) ||
  242.                 tendedero.buscar (1, 3, 1).semestreAnterior != tendedero.buscar (1, 2, 1) ||
  243.                 tendedero.buscar (1, 3, 2).semestreAnterior != tendedero.buscar (1, 2, 2) ||
  244.                 tendedero.buscar (1, 3, 3).semestreAnterior != tendedero.buscar (1, 2, 3) ||
  245.                 tendedero.buscar (1, 2, 1).semestreAnterior != tendedero.buscar (1, 1, 1) ||
  246.                 tendedero.buscar (1, 2, 2).semestreAnterior != tendedero.buscar (1, 1, 2) ||
  247.                 tendedero.buscar (1, 2, 3).semestreAnterior != tendedero.buscar (1, 1, 3)) {
  248.                 throw new Exception ("[enlazar_carreraigualsemestrediferente_exito] Enlazar con" +
  249.                     " carrera igual y semestre diferente fallido.");
  250.             }
  251.         }
  252.  
  253.         public void enlazar_carreradiferentesemestreigual_exito ()
  254.         {
  255.             Tendedero tendedero = new Tendedero ();
  256.             tendedero.insertar (3, 2, 2, "Juan");
  257.             tendedero.insertar (3, 2, 4, "Sergio");
  258.             tendedero.insertar (3, 2, 1, "Pedro");
  259.             tendedero.insertar (3, 2, 3, "Ana");
  260.             tendedero.insertar (1, 2, 6, "Manuel");
  261.             tendedero.insertar (1, 2, 8, "Manuela");
  262.             tendedero.insertar (1, 2, 5, "Manolo");
  263.             tendedero.insertar (1, 2, 7, "Mani");
  264.             tendedero.insertar (2, 2, 10, "Pepe");
  265.             tendedero.insertar (2, 2, 12, "Jose");
  266.             tendedero.insertar (2, 2, 9, "Gilberto");
  267.             tendedero.insertar (2, 2, 11, "Oscar");
  268.  
  269.             Console.WriteLine ();
  270.             Console.WriteLine ("------");
  271.             Console.WriteLine (tendedero.buscar (1, 1, 2));
  272.             Console.WriteLine (tendedero.buscar (2, 1, 2).carreraAnterior);
  273.             Console.WriteLine (tendedero.buscar (2, 1, 2));
  274.             Console.WriteLine (tendedero.buscar (3, 1, 2).carreraAnterior);
  275.             Console.WriteLine ("------");
  276.             Console.WriteLine (tendedero.buscar (1, 1, 2));
  277.             Console.WriteLine (tendedero.buscar (2, 1, 2).carreraAnterior);
  278.             Console.WriteLine (tendedero.buscar (2, 1, 2).siguienteCarrera);
  279.             Console.WriteLine (tendedero.buscar (3, 1, 2));
  280.             Console.WriteLine ("------");
  281.             Console.WriteLine (tendedero.buscar (1, 1, 2).siguienteCarrera);
  282.             Console.WriteLine (tendedero.buscar (2, 1, 2));
  283.             Console.WriteLine (tendedero.buscar (2, 1, 2).siguienteCarrera);
  284.             Console.WriteLine (tendedero.buscar (3, 1, 2));
  285.             Console.WriteLine ("------");
  286.             Console.WriteLine ();
  287.  
  288.             if (tendedero.buscar (1, 1, 1).siguienteCarrera != tendedero.buscar (2, 1, 1) ||
  289.                 tendedero.buscar (1, 1, 2).siguienteCarrera != tendedero.buscar (2, 1, 2) ||
  290.                 tendedero.buscar (1, 1, 3).siguienteCarrera != tendedero.buscar (2, 1, 3) ||
  291.                 tendedero.buscar (2, 1, 1).siguienteCarrera != tendedero.buscar (3, 1, 1) ||
  292.                 tendedero.buscar (2, 1, 2).siguienteCarrera != tendedero.buscar (3, 1, 2) ||
  293.                 tendedero.buscar (2, 1, 3).siguienteCarrera != tendedero.buscar (3, 1, 3) ||
  294.                 tendedero.buscar (3, 1, 1).carreraAnterior != tendedero.buscar (2, 1, 1) ||
  295.                 tendedero.buscar (3, 1, 2).carreraAnterior != tendedero.buscar (2, 1, 2) ||
  296.                 tendedero.buscar (3, 1, 3).carreraAnterior != tendedero.buscar (2, 1, 3) ||
  297.                 tendedero.buscar (2, 1, 1).carreraAnterior != tendedero.buscar (1, 1, 1) ||
  298.                 tendedero.buscar (2, 1, 2).carreraAnterior != tendedero.buscar (1, 1, 2) ||
  299.                 tendedero.buscar (2, 1, 3).carreraAnterior != tendedero.buscar (1, 1, 3)) {
  300.                 throw new Exception ("[enlazar_carreradiferentesemestreigual_exito] Enlazar con" +
  301.                     " carrera diferente y semestre igual fallido.");
  302.             }
  303.         }
  304.     }
  305.  
  306.     class Tendedero
  307.     {
  308.         public ListaCarreras carreras;
  309.  
  310.         public void insertar (int noCarrera, int noSemestre, int noControl, string nombre)
  311.         {
  312.             Nodo nodo = new Nodo ();
  313.             nodo.noControl = noControl;
  314.             nodo.nombre = nombre;
  315.             nodo.noSemestre = noSemestre;
  316.             nodo.noCarrera = noCarrera;
  317.             nodo.alumnoAnterior = null;
  318.             nodo.siguienteAlumno = null;
  319.             nodo.semestreAnterior = null;
  320.             nodo.siguienteSemestre = null;
  321.             nodo.carreraAnterior = null;
  322.             nodo.siguienteCarrera = null;
  323.  
  324.             if (carreras == null) {
  325.                 Console.WriteLine ("Insertando inicio");
  326.                 carreras = new ListaCarreras ();
  327.                 carreras.inicio = null;
  328.                 carreras.final = null;
  329.             }
  330.  
  331.             bool carreraExiste, semestreExiste;
  332.             Carrera carrera;
  333.             Semestre semestre;
  334.             carreraExiste = false;
  335.             semestreExiste = false;
  336.             carrera = carreras.inicio;
  337.             semestre = null;
  338.             while (carrera != null && !carreraExiste) {
  339.                 semestre = carrera.semestres.inicio;
  340.                 if (semestre != null && semestre.alumnos.inicio.noCarrera == nodo.noCarrera) {
  341.                     carreraExiste = true;
  342.                     while (semestre != null && !semestreExiste) {
  343.                         if (nodo.noSemestre == semestre.alumnos.inicio.noSemestre) {
  344.                             semestreExiste = true;
  345.                         } else {
  346.                             semestre = semestre.siguiente;
  347.                         }
  348.                     }
  349.                 } else {
  350.                     carrera = carrera.siguiente;
  351.                 }
  352.             }
  353.  
  354.             if (carrera == null) {
  355.                 Console.WriteLine ("Insertando nueva carrera");
  356.                 carrera = new Carrera ();
  357.                 carrera.semestres = new ListaSemestres ();
  358.                 carrera.semestres.inicio = new Semestre ();
  359.                 carrera.semestres.final = carrera.semestres.inicio;
  360.                 carrera.semestres.inicio.alumnos = new ListaAlumnos ();
  361.                 carrera.semestres.inicio.alumnos.inicio = null;
  362.                 carrera.semestres.inicio.alumnos.final = null;
  363.                 semestre = carrera.semestres.inicio;
  364.                 if (carreras.inicio == null || carreras.final == null) {
  365.                     carreras.inicio = carrera;
  366.                     carreras.final = carrera;
  367.                     carrera.anterior = null;
  368.                     carrera.siguiente = null;
  369.                 } else if (carreras.inicio.semestres.inicio.alumnos.inicio.noCarrera > nodo.noCarrera) {
  370.                     carrera.anterior = carreras.inicio.anterior;
  371.                     carrera.siguiente = carreras.inicio;
  372.                     carreras.inicio.anterior = carrera;
  373.                     carreras.inicio = carrera;
  374.                 } else if (carreras.final.semestres.inicio.alumnos.inicio.noCarrera < nodo.noCarrera) {
  375.                     carrera.anterior = carreras.final;
  376.                     carrera.siguiente = carreras.final.siguiente;
  377.                     carreras.final.anterior = carrera;
  378.                     carreras.final = carrera;
  379.                 } else {
  380.                     Carrera anterior, siguiente;
  381.                     anterior = carreras.inicio;
  382.                     siguiente = anterior.siguiente;
  383.                     while (siguiente != null &&
  384.                         siguiente.semestres.inicio.alumnos.inicio.noCarrera < nodo.noCarrera) {
  385.                         anterior = siguiente;
  386.                         siguiente = siguiente.siguiente;
  387.                     }
  388.                     carrera.anterior = anterior;
  389.                     carrera.siguiente = siguiente;
  390.                     siguiente.anterior = carrera;
  391.                     anterior.siguiente = carrera;
  392.                 }
  393.             }
  394.  
  395.             if (semestre == null) {
  396.                 Console.WriteLine ("Insertando nuevo semestre");
  397.                 semestre = new Semestre ();
  398.                 semestre.alumnos = new ListaAlumnos ();
  399.                 semestre.alumnos.inicio = null;
  400.                 semestre.alumnos.final = null;
  401.                 if (carrera.semestres.inicio == null || carrera.semestres.final == null) {
  402.                     carrera.semestres.inicio = semestre;
  403.                     carrera.semestres.final = semestre;
  404.                     semestre.anterior = null;
  405.                     semestre.siguiente = null;
  406.                 } else if (carrera.semestres.inicio.alumnos.inicio.noSemestre > nodo.noSemestre) {
  407.                     semestre.anterior = carrera.semestres.inicio.anterior;
  408.                     semestre.siguiente = carrera.semestres.inicio;
  409.                     carrera.semestres.inicio.anterior = semestre;
  410.                     carrera.semestres.inicio = semestre;
  411.                 } else if (carrera.semestres.final.alumnos.inicio.noSemestre < nodo.noSemestre) {
  412.                     semestre.anterior = carrera.semestres.final;
  413.                     semestre.siguiente = carrera.semestres.final.siguiente;
  414.                     carrera.semestres.final.anterior = semestre;
  415.                     carrera.semestres.final = semestre;
  416.                 } else {
  417.                     Semestre anterior, siguiente;
  418.                     anterior = carrera.semestres.inicio;
  419.                     siguiente = anterior.siguiente;
  420.                     while (siguiente != null &&
  421.                         siguiente.alumnos.inicio.noSemestre < nodo.noSemestre) {
  422.                         anterior = siguiente;
  423.                         siguiente = siguiente.siguiente;
  424.                     }
  425.                     semestre.anterior = anterior;
  426.                     semestre.siguiente = siguiente;
  427.                     siguiente.anterior = semestre;
  428.                     anterior.siguiente = semestre;
  429.                 }
  430.             }
  431.                
  432.             Console.WriteLine ("Insertando nuevo alumno");
  433.             if (semestre.alumnos.inicio == null || semestre.alumnos.final == null) {
  434.                 semestre.alumnos.inicio = nodo;
  435.                 semestre.alumnos.final = nodo;
  436.                 //enlazarSemestre (semestre);
  437.                 /*if (semestre.anterior != null) {
  438.                     nodo.semestreAnterior = semestre.anterior.alumnos.inicio;
  439.                     semestre.anterior.alumnos.inicio.siguienteSemestre = nodo;
  440.                 }
  441.                 if (semestre.siguiente != null) {
  442.                     nodo.siguienteSemestre = semestre.siguiente.alumnos.inicio;
  443.                     semestre.siguiente.alumnos.inicio.semestreAnterior = nodo;
  444.                 }*/
  445.             } else if (semestre.alumnos.inicio.noControl > nodo.noControl) {
  446.                 nodo.alumnoAnterior = semestre.alumnos.inicio.alumnoAnterior;
  447.                 nodo.siguienteAlumno = semestre.alumnos.inicio;
  448.                 semestre.alumnos.inicio.alumnoAnterior = nodo;
  449.                 semestre.alumnos.inicio = nodo;
  450.                 /*if (semestre.anterior != null) {
  451.                     nodo.semestreAnterior = semestre.anterior.alumnos.inicio;
  452.                     semestre.anterior.alumnos.inicio.siguienteSemestre = nodo;
  453.                 }
  454.                 if (semestre.siguiente != null) {
  455.                     nodo.siguienteSemestre = semestre.siguiente.alumnos.inicio;
  456.                     semestre.siguiente.alumnos.inicio.semestreAnterior = nodo;
  457.                 }*/
  458.             } else if (semestre.alumnos.final.noControl < nodo.noControl) {
  459.                 nodo.alumnoAnterior = semestre.alumnos.final;
  460.                 nodo.siguienteAlumno = semestre.alumnos.final.siguienteAlumno;
  461.                 semestre.alumnos.final.siguienteAlumno = nodo;
  462.                 semestre.alumnos.final = nodo;
  463.  
  464.                 // TODO recorrer sin saber dimensiones
  465.  
  466.             } else {
  467.                 Nodo anterior, siguiente;
  468.                 anterior = semestre.alumnos.inicio;
  469.                 siguiente = anterior.siguienteAlumno;
  470.                 while (siguiente != null && siguiente.noControl < nodo.noControl) {
  471.                     anterior = siguiente;
  472.                     siguiente = siguiente.siguienteAlumno;
  473.                 }
  474.                 nodo.alumnoAnterior = anterior;
  475.                 nodo.siguienteAlumno = siguiente;
  476.                 siguiente.alumnoAnterior = nodo;
  477.                 anterior.siguienteAlumno = nodo;
  478.             }
  479.             enlazarSemestre (semestre, nodo);
  480.             enlazarCarrera (carrera, semestre, nodo);
  481.         }
  482.  
  483.         public void enlazarSemestre (Semestre semestre, Nodo alumno)
  484.         {
  485.             Nodo anterior, nodo, siguiente;
  486.             anterior = null;
  487.             nodo = null;
  488.             siguiente = null;
  489.             bool enlazar;
  490.  
  491.             if (semestre.anterior != null) {
  492.                 anterior = semestre.anterior.alumnos.inicio;
  493.             }
  494.             nodo = semestre.alumnos.inicio;
  495.             if (semestre.siguiente != null) {
  496.                 siguiente = semestre.siguiente.alumnos.inicio;
  497.             }
  498.             enlazar = false;
  499.  
  500.             while (anterior != null || nodo != null || siguiente != null) {
  501.  
  502.                 if (alumno == nodo) {
  503.                     enlazar = true;
  504.                 }
  505.  
  506.                 if (enlazar) {
  507.                     if (anterior != null) {
  508.                         anterior.siguienteSemestre = nodo;
  509.                     }
  510.                     if (nodo != null) {
  511.                         nodo.semestreAnterior = anterior;
  512.                         nodo.siguienteSemestre = siguiente;
  513.                     }
  514.                     if (siguiente != null) {
  515.                         siguiente.semestreAnterior = nodo;
  516.                     }
  517.                 }
  518.  
  519.                 if (anterior != null) {
  520.                     anterior = anterior.siguienteAlumno;
  521.                 }
  522.                 if (nodo != null) {
  523.                     nodo = nodo.siguienteAlumno;
  524.                 }
  525.                 if (siguiente != null) {
  526.                     siguiente = siguiente.siguienteAlumno;
  527.                 }
  528.             }
  529.         }
  530.  
  531.         public void enlazarCarrera (Carrera carrera, Semestre semestre, Nodo alumno)
  532.         {
  533.             Semestre semestreAnterior, semestreNodo, siguienteSemestre;
  534.             semestreAnterior = null;
  535.             semestreNodo = null;
  536.             siguienteSemestre = null;
  537.             Nodo anterior, nodo, siguiente;
  538.             anterior = null;
  539.             nodo = null;
  540.             siguiente = null;
  541.             bool enlazar;
  542.  
  543.             if (carrera.anterior != null) {
  544.                 semestreAnterior = carrera.anterior.semestres.inicio;
  545.             }
  546.             semestreNodo = carrera.semestres.inicio;
  547.             if (carrera.siguiente != null) {
  548.                 siguienteSemestre = carrera.siguiente.semestres.inicio;
  549.             }
  550.             enlazar = false;
  551.  
  552.             while (semestreAnterior != null || semestreNodo != null || siguienteSemestre != null) {
  553.  
  554.                 if (semestre == semestreNodo) {
  555.                     enlazar = true;
  556.                 }
  557.  
  558.                 if (enlazar) {
  559.                     if (semestreAnterior != null) {
  560.                         anterior = semestreAnterior.alumnos.inicio;
  561.                     }
  562.                     if (semestreNodo != null) {
  563.                         nodo = semestreNodo.alumnos.inicio;
  564.                     }
  565.                     if (siguienteSemestre != null) {
  566.                         siguiente = siguienteSemestre.alumnos.inicio;
  567.                     }
  568.  
  569.                     while (anterior != null || nodo != null || siguiente != null) {
  570.                         if (anterior != null) {
  571.                             anterior.siguienteCarrera = nodo;
  572.                         }
  573.                         if (nodo != null) {
  574.                             nodo.carreraAnterior = anterior;
  575.                             nodo.siguienteCarrera = siguiente;
  576.                         }
  577.                         if (siguiente != null) {
  578.                             siguiente.carreraAnterior = nodo;
  579.                         }
  580.  
  581.                         if (anterior != null) {
  582.                             anterior = anterior.siguienteAlumno;
  583.                         }
  584.                         if (nodo != null) {
  585.                             nodo = nodo.siguienteAlumno;
  586.                         }
  587.                         if (siguiente != null) {
  588.                             siguiente = siguiente.siguienteAlumno;
  589.                         }
  590.                     }
  591.                 }
  592.  
  593.                 if (semestreAnterior != null) {
  594.                     semestreAnterior = semestreAnterior.siguiente;
  595.                 }
  596.                 if (semestreNodo != null) {
  597.                         semestreNodo = semestreNodo.siguiente;
  598.                 }
  599.                 if (siguienteSemestre != null) {
  600.                     siguienteSemestre = siguienteSemestre.siguiente;
  601.                 }
  602.             }
  603.  
  604.         }
  605.  
  606.         public Nodo buscar (int noCarrera, int noSemestre, int noControl)
  607.         {
  608.             Carrera carrera;
  609.             Semestre semestre;
  610.             Nodo nodo;
  611.  
  612.             carrera = null;
  613.             semestre = null;
  614.             nodo = null;
  615.  
  616.             carrera = carreras.inicio;
  617.             for (int i = 1; i < noCarrera && carrera != null; i++) {
  618.                 carrera = carrera.siguiente;
  619.             }
  620.             if (carrera != null) {
  621.                 semestre = carrera.semestres.inicio;
  622.                 for (int i = 1; i < noSemestre && semestre != null; i++) {
  623.                     semestre = semestre.siguiente;
  624.                 }
  625.             }
  626.             if (semestre != null) {
  627.                 nodo = semestre.alumnos.inicio;
  628.                 for (int i = 1; i < noControl && nodo != null; i++) {
  629.                     nodo = nodo.siguienteAlumno;
  630.                 }
  631.             }
  632.  
  633.             /*while (carrera != null && nodo == null) {
  634.                 semestre = carrera.semestres.inicio;
  635.                 while (semestre != null && nodo == null) {
  636.                     nodo = semestre.alumnos.inicio;
  637.                     if (nodo != null) {
  638.                         if (nodo.noCarrera == noCarrera) {
  639.                             if (nodo.noSemestre == noSemestre) {
  640.                                 while (nodo != null && nodo.noControl != noControl) {
  641.                                     nodo = nodo.siguienteAlumno;
  642.                                 }
  643.                             } else {
  644.                                 nodo = null;
  645.                                 semestre = semestre.siguiente;
  646.                             }
  647.                         } else {
  648.                             nodo = null;
  649.                             semestre = null;
  650.                         }
  651.                     } else {
  652.                         semestre = semestre.siguiente;
  653.                     }
  654.                 }
  655.                 carrera = carrera.siguiente;
  656.             }*/
  657.  
  658.             return nodo;
  659.         }
  660.     }
  661.  
  662.     class ListaCarreras
  663.     {
  664.         public Carrera inicio, final;
  665.     }
  666.  
  667.     class Carrera
  668.     {
  669.         public ListaSemestres semestres;
  670.         public Carrera anterior, siguiente;
  671.     }
  672.  
  673.     class ListaSemestres
  674.     {
  675.         public Semestre inicio, final;
  676.     }
  677.  
  678.     class Semestre
  679.     {
  680.         public ListaAlumnos alumnos;
  681.         public Semestre anterior, siguiente;
  682.     }
  683.  
  684.     class ListaAlumnos
  685.     {
  686.         public Nodo inicio, final;
  687.  
  688.         public void imprimir ()
  689.         {
  690.             Nodo t = inicio;
  691.             while (t != null) {
  692.                 Console.WriteLine (t);
  693.                 t = t.siguienteAlumno;
  694.             }
  695.         }
  696.     }
  697.  
  698.     class MainClass
  699.     {
  700.  
  701.         static void Main(string[] args)
  702.         {
  703.             try {
  704.                 new TendederoPrueba ();
  705.             } catch (Exception e) {
  706.                 Console.WriteLine (e);
  707.             }
  708.         }
  709.     }
  710. }
  711.  
  712. /*
  713.  *
  714.  
  715.                         if (carreras.inicio == carreras.final) {
  716.                             nodo.carreraAnterior = null;
  717.                             nodo.siguienteCarrera = null;
  718.                         } else if (carrera == carreras.inicio) {
  719.                             nodo.carreraAnterior = null;
  720.                             nodo.siguienteCarrera = carrera.siguiente.semestres.inicio.alumnos.inicio;
  721.                         } else if (carrera == carreras.final) {
  722.                             nodo.carreraAnterior = carrera.anterior.semestres.inicio.alumnos.inicio;
  723.                             nodo.siguienteCarrera = null;
  724.                         } else {
  725.                             Carrera carreraAnterior, carreraSiguiente;
  726.                             carreraAnterior = carreras.inicio;
  727.                             carreraSiguiente = carreraAnterior.siguiente;
  728.                             while (carreraSiguiente != null && carreraSiguiente != carrera) {
  729.                                 carreraAnterior = carreraSiguiente;
  730.                                 carreraSiguiente = carreraSiguiente.siguiente;
  731.                             }
  732.                             nodo.carreraAnterior = carreraAnterior;
  733.                             nodo.siguienteCarrera = carreraSiguiente;
  734.                         }
  735.  
  736. */
  737.  
  738. /*Nodo carreraAnterior, nodo, siguienteCarrera;
  739.             carreraAnterior = null;
  740.             nodo = null;
  741.             siguienteCarrera = null;
  742.             if (carrera.anterior != null) {
  743.                 carreraAnterior = carrera.anterior.alumnos.inicio;
  744.             }
  745.             nodo = semestre.alumnos.inicio;
  746.             if (carrera.siguiente != null) {
  747.                 siguienteSemestre = semestre.siguiente.alumnos.inicio;
  748.             }
  749.  
  750.  
  751.             while (nodo != null) {
  752.                 if (semestreAnterior != null) {
  753.                     nodo.semestreAnterior = semestreAnterior;
  754.                     semestreAnterior.siguienteSemestre = nodo;
  755.                     semestreAnterior = semestreAnterior.siguienteAlumno;
  756.                 }
  757.                 if (siguienteSemestre != null) {
  758.                     nodo.siguienteSemestre = siguienteSemestre;
  759.                     siguienteSemestre.semestreAnterior = nodo;
  760.                     siguienteSemestre = siguienteSemestre.siguienteAlumno;
  761.                 }
  762.                 nodo = nodo.siguienteAlumno;
  763.             }*/
  764.  
  765. /*
  766. *
  767. if (nodo == alumno) {
  768.     enlazar = true;
  769. }
  770. if (semestreAnterior != null) {
  771.     if (nodo != null) {
  772.         nodo.semestreAnterior = semestreAnterior;
  773.     }
  774.     //if (enlazar) {
  775.     semestreAnterior.siguienteSemestre = nodo;
  776.     semestreAnterior = semestreAnterior.siguienteAlumno;
  777.     //}
  778. }
  779. if (siguienteSemestre != null) {
  780.     if (nodo != null) {
  781.         nodo.siguienteSemestre = siguienteSemestre;
  782.     }
  783.     //if (enlazar) {
  784.     siguienteSemestre.semestreAnterior = nodo;
  785.     siguienteSemestre = siguienteSemestre.siguienteAlumno;
  786.     //}
  787. }
  788. if (nodo != null) {
  789.     nodo = nodo.siguienteAlumno;
  790. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement