/// <summary>
 /// Suranda ar visu grupiu studentai pasirinko sio destytojo modulius
 /// </summary>
 /// <param name="Studentai">Studentu sarasas</param>
 /// <param name="Destytojai">Destytoju sarasas</param>
 /// <param name="destytojasMaxVardas">daugiausiai moduliu turincio destytojo vardas</param>
 /// <param name="destytojasMaxPavarde">daugiausiai moduliu turincio destytojo pavarde</param>
 /// <returns></returns>
 static bool ArVisuPasirinko(Sarasas1 Studentai, Sarasas2 Destytojai, string destytojasMaxVardas, string destytojasMaxPavarde)
 {
     for (Mazgas2 g = Destytojai.GautiPirma(); g != null; g = g.Kitas)
     {
         if ((destytojasMaxVardas == g.DuomDest.vardas) && (destytojasMaxPavarde == g.DuomDest.pavarde))
         {
             string modulis = g.DuomDest.modulis;
             for (Mazgas1 d = Studentai.GautiPirma(); d != null; d = d.Kitas)
             {
                 if (modulis == d.DuomStud.modulis)
                 {
                     int visi = 0; int ne = 0;
                     for (Mazgas1 d2 = d; d2 != null; d2 = d2.Kitas)
                     {
                         if (d.DuomStud.grupe == d2.DuomStud.grupe)
                         {
                             visi += 1;
                             if (d2.DuomStud.modulis != modulis)
                             {
                                 ne += 1;
                             }
                         }
                     }
                     if (ne == visi)
                     {
                         return(false);
                     }
                 }
             }
         }
     }
     return(true);
 }
 /// <summary>
 /// spausdinami rezultatai po ivedamo modulio klaviatura
 /// </summary>
 /// <param name="NewStudentai">naujas studentu sarasas</param>
 /// <param name="modulisVIP">Ivestas modulis</param>
 /// <param name="fr">rezultatu failas</param>
 public void SpausdintiRez2(Sarasas1 NewStudentai, string modulisVIP, string fr)
 {
     using (var writer = File.AppendText(fr))
     {
         writer.WriteLine();
         writer.WriteLine("----------------------------------------------");
         writer.WriteLine("Ivestas modulio pavadinimas: {0}", modulisVIP);
         writer.WriteLine("Sio modulio studentu sarasas:");
         for (Mazgas1 d = NewStudentai.GautiPirma(); d != null; d = d.Kitas)
         {
             writer.WriteLine(d.DuomStud.ToString());
         }
     }
 }
    /// <summary>
    /// pasalina paskutini elemanta
    /// </summary>
    /// <param name="StudentaiGR">surikiuotu studentu sarasas</param>
    static void PasalintiPaskutini(Sarasas1 StudentaiGR)
    {
        Mazgas1 k = StudentaiGR.GautiPirma();

        for (Mazgas1 d = StudentaiGR.GautiPirma(); d != null; d = d.Kitas)
        {
            k = d.Kitas;
            if (k.Kitas == null)
            {
                d.Kitas = null;
                StudentaiGR.DetiDuomenisT(d.DuomStud);
            }
        }
    }
    /// <summary>
    /// Nuskaito studentu duomenu faila
    /// </summary>
    /// <param name="fv">studentu failas</param>
    /// <param name="Studentai">Studentu sarasas</param>
    static void SkaitytiStud(string fv, Sarasas1 Studentai)
    {
        string line;

        using (var reader = new StreamReader(fv))
        {
            while ((line = reader.ReadLine()) != null)
            {
                var v       = line.Split(' ');
                var student = new Studentas(v[0], v[1], v[2], v[3]);
                Studentai.DetiDuomenisT(student);
            }
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        string CD1 = @"F:\\2tras\\objektinis\\L2\\U7a.txt"; //studentu duomenu failas
        string CR  = @"F:\\2tras\\objektinis\\L2\\REZ.txt"; //rezultatu duomenu failas

        SkaitytiStud(CD1, Studentai);
        Label4.Text = "Iveskite modulio pavadinima ir dar karta paspauskite antraji 'START' mygtuka";
        string   modulisVIP   = TextBox1.Text;
        Sarasas1 NewStudentai = new Sarasas1();

        SudarytiStudentuSarasa(NewStudentai, modulisVIP, Studentai);
        if (modulisVIP != "")
        {
            SpausdintiRez2(NewStudentai, modulisVIP, CR);
        }
    }
 /// <summary>
 /// Surikiuoja nauja studentu sarasas pagal grupe, pavarde ir varda
 /// </summary>
 /// <param name="StudentaiGR">naujas studentu sarasas</param>
 static void Rikiuoti(Sarasas1 StudentaiGR)
 {
     for (Mazgas1 d1 = StudentaiGR.GautiPirma(); d1 != null; d1 = d1.Kitas)
     {
         Mazgas1 max = d1;
         for (Mazgas1 d2 = d1; d2 != null; d2 = d2.Kitas)
         {
             if (d2.DuomStud < max.DuomStud)
             {
                 max = d2;
             }
             Studentas stud = d1.DuomStud;
             d1.DuomStud  = max.DuomStud;
             max.DuomStud = stud;
         }
     }
 }
    /// <summary>
    /// spausdinti rezultatus
    /// </summary>
    /// <param name="StudentaiGR">surikiuotu studentu sarasas</param>
    /// <param name="fr">rezultatu failas</param>
    public void SpausdintiGrupes(Sarasas1 StudentaiGR, string fr)
    {
        string line = "";

        using (var writer = File.AppendText(fr))
        {
            writer.WriteLine();
            writer.WriteLine("Grupes, kuriu studentai nepasirinko sio destytojo moduliu:");
            Label5.Text = "Grupes, kuriu studentai nepasirinko sio destytojo moduliu:";
            line       += "Modulis         Pavarde              Vardas          Grupe" + "\r\n" + "\r\n";
            for (Mazgas1 d = StudentaiGR.GautiPirma(); d != null; d = d.Kitas)
            {
                writer.WriteLine(d.DuomStud.ToString());
                line += d.DuomStud.ToString() + "\r\n";
            }
        }
        TextBox3.Text = line;
    }
 /// <summary>
 /// pasalina grupes, kuriu visi studentai pasirinke sio destytojo modulius
 /// </summary>
 /// <param name="StudentaiGR">Surikiuotu studentu sarasas</param>
 /// <param name="grupe">grupe, kuria reikia pasalinti</param>
 static void SalintiGrupe(Sarasas1 StudentaiGR, string grupe)
 {
     for (Mazgas1 d = StudentaiGR.GautiPirma(); d != null; d = d.Kitas)
     {
         if (d.DuomStud.grupe == grupe)
         {
             if (d.Kitas != null)
             {
                 Mazgas1 s = d.Kitas;
                 d.DuomStud = s.DuomStud;
                 d.Kitas    = s.Kitas;
             }
             else
             {
                 PasalintiPaskutini(StudentaiGR);
             }
         }
     }
 }
    /// <summary>
    /// suranda grupes, kuriu bent vienas studentas nepasirinko sio destytojo modulio
    /// </summary>
    /// <param name="Studentai">Studentu sarasas</param>
    /// <param name="Destytojai">Destytoju sarasas</param>
    /// <param name="destytojasMaxVardas">daugiausiai moduliu turincio destytojo vardas</param>
    /// <param name="destytojasMaxPavarde">daugiausiai moduliu turincio destytojo pavarde</param>
    /// <param name="fr">rezultatu failas</param>
    public void GrupesKurNepasirinko(Sarasas1 Studentai, Sarasas2 Destytojai, string destytojasMaxVardas, string destytojasMaxPavarde, string fr)
    {
        Sarasas1 StudentaiGR = new Sarasas1();

        StudentaiGR = Studentai;
        //rusiuoja pagal grupes, pavardes ir vardus

        //jei grupej yra nors vienas nepasirinkes modulio, atspauszinti
        //jei visa grupe pasirinkusi ta moduli, pasalinti grupe

        for (Mazgas2 g = Destytojai.GautiPirma(); g != null; g = g.Kitas)
        {
            if ((destytojasMaxVardas == g.DuomDest.vardas) && (destytojasMaxPavarde == g.DuomDest.pavarde))
            {
                string modulis = g.DuomDest.modulis;
                for (Mazgas1 d = Studentai.GautiPirma(); d != null; d = d.Kitas)
                {
                    if (modulis == d.DuomStud.modulis)
                    {
                        int visi = 0; int ne = 0; string grupe = "";
                        for (Mazgas1 d2 = d; d2 != null; d2 = d2.Kitas)
                        {
                            if (d.DuomStud.grupe == d2.DuomStud.grupe)
                            {
                                visi += 1;
                                if (d2.DuomStud.modulis == modulis)
                                {
                                    ne   += 1;
                                    grupe = d.DuomStud.grupe;
                                }
                            }
                        }
                        if (ne == visi)
                        {
                            SalintiGrupe(StudentaiGR, grupe);
                        }
                    }
                }
            }
        }
        Rikiuoti(StudentaiGR);
        SpausdintiGrupes(StudentaiGR, fr);
    }
    /// <summary>
    /// sudaromas studentu sarasas pagal ivesta klaviatura moduli
    /// </summary>
    /// <param name="NewStudentai">naujas studentu sarasas</param>
    /// <param name="modulisVIP">Ivestas modulis</param>
    /// <param name="Studentai">studentu sarasas</param>
    public void SudarytiStudentuSarasa(Sarasas1 NewStudentai, string modulisVIP, Sarasas1 Studentai)
    {
        string eil = "";

        if (modulisVIP != "")
        {
            for (Mazgas1 d = Studentai.GautiPirma(); d != null; d = d.Kitas)
            {
                if (d.DuomStud.modulis == modulisVIP)
                {
                    NewStudentai.DetiDuomenisT(d.DuomStud);
                    eil += d.DuomStud + "\r\n";
                }
            }
        }
        else
        {
            TextBox2.Text = "Neteisingas modulio pavadinimas";
        }
        TextBox2.Text = eil;
    }
 /// <summary>
 /// spausdina gautus rezultatus
 /// </summary>
 /// <param name="Studentai">studentu sarasas</param>
 /// <param name="Destytojai">destytoju sarasas</param>
 /// <param name="destytojasMaxVardas">daugiausiai moduliu turincio destytojo vardas</param>
 /// <param name="destytojasMaxPavarde">daugiausiai moduliu turincio destytojo pavarde</param>
 /// <param name="fr">rezultatu failas</param>
 public void SpausdintiRezultatus(Sarasas1 Studentai, Sarasas2 Destytojai, string destytojasMaxVardas, string destytojasMaxPavarde, string fr)
 {
     using (var writer = File.AppendText(fr))
     {
         //--- pradiniu doumenu spausdinimas
         writer.WriteLine("--------------PRADINIAI-DUOMENYS------------------");
         writer.WriteLine();
         writer.WriteLine("---------Studentu-duomenu-failas--------");
         for (Mazgas1 d = Studentai.GautiPirma(); d != null; d = d.Kitas)
         {
             writer.WriteLine(d.DuomStud.ToString());
         }
         writer.WriteLine();
         writer.WriteLine("---------Destytoju-duomenu-failas--------");
         for (Mazgas2 d = Destytojai.GautiPirma(); d != null; d = d.Kitas)
         {
             writer.WriteLine(d.DuomDest.ToString1());
         }
         writer.WriteLine("-------------------------------------------------");
         writer.WriteLine();
         //---------
         writer.WriteLine();
         writer.WriteLine("Daugiausiai pasirinktu moduliu turi destytojas - {0} {1}", destytojasMaxVardas, destytojasMaxPavarde);
         Label1.Text = "Daugiausiai pasirinktu moduliu turi destytojas - " + destytojasMaxVardas + " " + destytojasMaxPavarde;
         writer.WriteLine();
         if (ArVisuPasirinko(Studentai, Destytojai, destytojasMaxVardas, destytojasMaxPavarde))
         {
             writer.WriteLine("Nevisu grupiu studentai pasirinko sio destytojo modulius.");
             Label2.Text = "Visu grupiu studentai pasirinko sio destytojo modulius.";
         }
         if (!ArVisuPasirinko(Studentai, Destytojai, destytojasMaxVardas, destytojasMaxPavarde))
         {
             writer.WriteLine("Ne visu grupiu studentai pasirinko sio destytojo modulius.");
             Label2.Text = "Ne visu grupiu studentai pasirinko sio destytojo modulius.";
         }
     }
 }
    /// <summary>
    /// suranda destytoja, turinti daugiausiai moduliu
    /// </summary>
    /// <param name="Studentai">Studentu sarasas</param>
    /// <param name="Destytojai">Destytoju sarasas</param>
    /// <param name="destytojasMaxVardas">daugiausiai moduliu turincio destytojo vardas</param>
    /// <param name="destytojasMaxPavarde">daugiausiai moduliu turincio destytojo pavarde</param>
    static void DestytojasMaxMod(Sarasas1 Studentai, Sarasas2 Destytojai, out string destytojasMaxVardas, out string destytojasMaxPavarde)
    {
        int max = 0;

        destytojasMaxVardas  = null;
        destytojasMaxPavarde = null;
        for (Mazgas2 g = Destytojai.GautiPirma(); g != null; g = g.Kitas)
        {
            int laik = 0;
            for (Mazgas1 d = Studentai.GautiPirma(); d != null; d = d.Kitas)
            {
                if (g.DuomDest.modulis == d.DuomStud.modulis)
                {
                    laik += 1;
                }
            }
            if (max < laik)
            {
                destytojasMaxVardas  = g.DuomDest.vardas;
                destytojasMaxPavarde = g.DuomDest.pavarde;
                max = laik;
            }
        }
    }