Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.IO;
- using System.Web.Services.Description;
- using System.Text;
- public partial class Labaratorinis3 : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- Label1.Visible = false; //paslėpia nereikalingus elementus
- TextBox2.Visible = false; //
- Label2.Visible = false; //
- DropDownList1.Visible = false; //
- Button2.Visible = false; //
- Table1.Visible = false; //
- }
- protected void Button1_Click(object sender, EventArgs e)
- {
- if (FileUpload1.HasFile && FileUpload1.FileName.EndsWith(".txt") && FileUpload2.HasFile && FileUpload2.FileName.EndsWith(".txt")) //įkelia duomenys iš pasirinktų duomenų failų
- Skaitymas(FileUpload1.FileContent, FileUpload2.FileContent);
- DropDownListas(); //sukuria sąrašą iš kurio galima pasirinkti į kurį miestą nenorima važiuoti
- IsvestiPradiniusDuomenis(); //ekrane parodo pasirinktų duomenų failų turinį
- Table1.Visible = true; //toliau paslėpia ir parodo reikalingus/nereikalingus elementus
- Label1.Visible = true;
- TextBox2.Visible = true;
- Label2.Visible = true;
- DropDownList1.Visible = true;
- Button2.Visible = true;
- Button1.Visible = false;
- FileUpload1.Visible = false;
- FileUpload2.Visible = false;
- Label5.Visible = false;
- Label4.Visible = false;
- }
- protected void Button2_Click(object sender, EventArgs e)
- {
- string KaSalinti = DropDownList1.SelectedValue; //pažymimas miestas, į kurį nenorima važiuoti
- double minIlgis;
- if (TextBox2.Text != "") //įvedamas minimalus maršruto atstumas
- minIlgis = double.Parse(TextBox2.Text);
- else
- minIlgis = 0;
- MarsrutuSudarymas(); //sudaromas maršrutų sąrašas
- Salinimas(KaSalinti, minIlgis); //pašalinami nenorimi maršrutai
- IsvestiRezultatus(); //ekrane parodomi rezultatai
- Label1.Text = "Rezultatai: ";
- Label1.Visible = true;
- Table1.Visible = true;
- }
- /// <summary>
- /// Nuskaito ir išsaugo duomenis
- /// </summary>
- /// <param name="fv1">Pirmas vartotojo pasirinktas duomenų failas su keliais</param>
- /// <param name="fv2">Antras vartotojo pasirinktas duomenų failas su miestais</param>
- void Skaitymas(Stream fv1, Stream fv2)
- {
- Sarasas<Kelias> Keliai = new Sarasas<Kelias>();
- Sarasas<Miestas> Miestai = new Sarasas<Miestas>();
- string pradinisMiestas;
- using (StreamReader skaityti = new StreamReader(fv1))
- {
- string eilute = skaityti.ReadLine();
- string[] dalys = eilute.Split(';');
- int n = int.Parse(dalys[0]);
- int gyventojuLimitas = int.Parse(dalys[1]);
- Session["n"] = n;
- Session["gyventojuLimitas"] = gyventojuLimitas;
- pradinisMiestas = skaityti.ReadLine();
- while ((eilute = skaityti.ReadLine()) != null)
- {
- dalys = eilute.Split(';');
- Kelias naujasKelias = new Kelias(dalys[0], dalys[1], double.Parse(dalys[2]));
- Keliai.DetiDuomenisT(naujasKelias);
- }
- }
- using (StreamReader skaityti = new StreamReader(fv2))//, Encoding.GetEncoding(1257)))
- {
- string eilute = null;
- while ((eilute = skaityti.ReadLine()) != null)
- {
- string[] dalys = eilute.Split(';');
- Miestas naujasMiestas = new Miestas(dalys[0], int.Parse(dalys[1]));
- if (dalys[0] == pradinisMiestas)
- Session["PradinisMiestas"] = naujasMiestas;
- Miestai.DetiDuomenisT(naujasMiestas);
- }
- }
- Session["Miestai"] = Miestai;
- Session["Keliai"] = Keliai;
- }
- /// <summary>
- /// Funkcija skirta sudaryti visiems galimiems maršrutams iš pasirinkto miesto
- /// </summary>
- void MarsrutuSudarymas()
- {
- Sarasas<Kelias> Keliai = (Sarasas<Kelias>)Session["Keliai"];
- Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
- Sarasas<Sarasas<MarsrutoDalis>> Marsrutai = new Sarasas<Sarasas<MarsrutoDalis>>();
- Miestas PradinisMiestas = (Miestas)Session["PradinisMiestas"];
- foreach (Miestas miest in Miestai) //miest yra Miestas, kuris paimamas kaip kelionės tikslas
- {
- if (miest != PradinisMiestas) //tikrina, kad nesudarytų maršruto iš pradinio miesto į pradinį miestą
- {
- foreach (Kelias Kel in Keliai) //
- { //Ieško kito miesto į kurį būtų galima važiuoti
- if (Kel.Equals(PradinisMiestas)) //
- {
- Sarasas<MarsrutoDalis> Marsrutas = new Sarasas<MarsrutoDalis>(); //
- MarsrutoDalis Pradzia = new MarsrutoDalis(PradinisMiestas, 0); //
- Marsrutas.DetiDuomenisT(Pradzia); //Pradedamas konstruoti maršrutas nuo pradinio miesto
- Sarasas<Miestas> MiestuKopija = Miestai.SukurtiKopija(); //
- Miestas KitasMiestas = RastiKitaMiesta(MiestuKopija, Kel, PradinisMiestas); //
- if (KitasMiestas != miest) //nepasiekiau tikslo
- {
- MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //toliau konstruojamas maršrutas
- Marsrutas.DetiDuomenisT(NaujaDalis);
- Sarasas<Kelias> KeliuKopija = Keliai.SukurtiKopija();
- Rekursija(KeliuKopija, MiestuKopija, KitasMiestas, miest, Marsrutas, Marsrutai); //kreipiamasi į rekursiją tolemesniam maršruto sudarymui
- }
- else //pasiekiau tikslą
- {
- MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //Maršrutas įdedamas į maršrutų sąrašą
- Marsrutas.DetiDuomenisT(NaujaDalis);
- Marsrutas.DetiMarsrutoIlgi(ApskaiciuotiMarsrutoIlgi(Marsrutas));
- Marsrutai.DetiDuomenisT(Marsrutas);
- }
- }
- }
- }
- }
- Marsrutai.RikiuotiMarsrutus(); //Maršrutai surikiuojami pagal jų ilgį
- Session["Marsrutai"] = Marsrutai;
- }
- /// <summary>
- /// Funkcija skirta rasti visiems galimiems maršrutams
- /// </summary>
- /// <param name="Keliai">Visų Kelių sąrašas</param>
- /// <param name="Miestai">Visų Miestų sąrašas</param>
- /// <param name="KurEsuDabar">Miestas iš kurio ieškoma kelio į kitą galimą miestą</param>
- /// <param name="Tikslas">Miestas į kurį nurima nukeliauti</param>
- /// <param name="Marsrutas">Dabartinis konstruojamas maršrutas</param>
- /// <param name="Marsrutai">Visų maršrutų sąrašas</param>
- void Rekursija(Sarasas<Kelias> Keliai, Sarasas<Miestas> Miestai, Miestas KurEsuDabar, Miestas Tikslas, Sarasas<MarsrutoDalis> Marsrutas, Sarasas<Sarasas<MarsrutoDalis>> Marsrutai)
- {
- foreach (Kelias Kel in Keliai) //
- { //Ieško kito miesto į kurį būtų galiam nukeliauti
- if (Kel.Equals(KurEsuDabar)) //
- {
- Miestas KitasMiestas = RastiKitaMiesta(Miestai, Kel, KurEsuDabar);
- if (KitasMiestas == Tikslas) //jeigu kitas miestas yra tikslas
- {
- Sarasas<MarsrutoDalis> MarsrutoKopija = Marsrutas.SukurtiKopija(); //Sukuriama maršruto kopija, kad grįžus rekursijai, nesikartotų tas pats miestas
- MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //Pabaigiamas konstruoti maršrutas
- MarsrutoKopija.DetiDuomenisT(NaujaDalis); //
- MarsrutoKopija.DetiMarsrutoIlgi(ApskaiciuotiMarsrutoIlgi(MarsrutoKopija)); //
- Marsrutai.DetiDuomenisT(MarsrutoKopija); //Maršrutas įdedamas į maršrutų sąrašą
- }
- else
- {
- if (!ArYraMarsrute(Marsrutas, KitasMiestas)) //kitas miestas nėra tikslas
- {
- Sarasas<MarsrutoDalis> MarsrutoKopija = Marsrutas.SukurtiKopija(); //Sukuriama maršruto kopija, kad grįžus rekursijai, nesikartotų tas pats miestas
- MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //
- MarsrutoKopija.DetiDuomenisT(NaujaDalis); //Toliau konstruojamas maršrutas
- Sarasas<Kelias> KeliuKopija = Keliai.SukurtiKopija(); //
- Sarasas<Miestas> MiestuKopija = Miestai.SukurtiKopija(); //
- Rekursija(KeliuKopija, MiestuKopija, KitasMiestas, Tikslas, MarsrutoKopija, Marsrutai); //Kreipiamasi į rekursiją
- }
- }
- }
- }
- }
- /// <summary>
- /// Metodas skirtas pagal kelią ir miestą kuriame dabar esame, surasti kito miesto į kurį būtų galima nuvažiuoti objektą
- /// </summary>
- /// <param name="Miestai">Visų miestų sąrašas</param>
- /// <param name="duom">Kelias kuris yra tikrinamas</param>
- /// <param name="kurEsuDabar">Miestas kuriame šiuo metu esame</param>
- /// <returns>Miesto objektą į kurį galima nuvažiuoti iš dabar esamo miesto</returns>
- public Miestas RastiKitaMiesta(Sarasas<Miestas> Miestai, Kelias duom, Miestas kurEsuDabar)
- {
- foreach (Miestas miestas in Miestai)
- {
- if (duom.Equals(miestas) && kurEsuDabar != miestas)
- return miestas;
- }
- return null;
- }
- /// <summary>
- /// Patikrina ar maršrute jau nėra miesto, kad nevažiuoti per tą patį miestą du kartus
- /// </summary>
- /// <param name="Marsrutas">Maršrutas kurį reikia patikrinti</param>
- /// <param name="miestas">tikrinamas miestas</param>
- /// <returns>true, jeigu jau yra miestas maršrute, false jeigu ne</returns>
- public bool ArYraMarsrute(Sarasas<MarsrutoDalis> Marsrutas, Miestas miestas)
- {
- foreach (MarsrutoDalis test in Marsrutas)
- {
- if (test.miestas == miestas)
- return true;
- }
- return false;
- }
- /// <summary>
- /// Apskaičiuoja kokio ilgio yra visas maršrutas
- /// </summary>
- /// <param name="Marsrutas"></param>
- /// <returns>Maršruto ilgį</returns>
- public double ApskaiciuotiMarsrutoIlgi(Sarasas<MarsrutoDalis> Marsrutas)
- {
- double ilgis = 0;
- foreach (MarsrutoDalis duomenys in Marsrutas)
- ilgis += duomenys.atstumasNuoPraeitoMiesto;
- return ilgis;
- }
- /// <summary>
- /// Pašalina maršrutus su meistu į kurį nenorima važiuoti ir maršrutus kurie yra trumpesni nei nurodytas ilgis
- /// </summary>
- /// <param name="KaSalinti">Miestas, su kuriuo šalinami maršrutai iš maršrutų sąrašo</param>
- /// <param name="minIlgis">Ilgis už kurį trumpesni maršrutai pašalinami</param>
- public void Salinimas(string KaSalinti, double minIlgis)
- {
- Sarasas<Sarasas<MarsrutoDalis>> Marsrutai = (Sarasas<Sarasas<MarsrutoDalis>>)Session["Marsrutai"];
- int SalinimoRiba = (int)Session["gyventojuLimitas"];
- for (Marsrutai.Pradzia(); Marsrutai.ArBaigti(); Marsrutai.Desinen())
- {
- Sarasas<MarsrutoDalis> Marsrutas = Marsrutai.ImtiDuomenis();
- bool arSalinti = false;
- for (Marsrutas.Pradzia(); Marsrutas.ArBaigti(); Marsrutas.Desinen())
- {
- MarsrutoDalis miestas = Marsrutas.ImtiDuomenis();
- if (miestas.miestas.gyventojuSkaicius > SalinimoRiba || miestas.miestas.miestoPavadinimas == KaSalinti)
- {
- arSalinti = true;
- }
- }
- if (Marsrutas.KoksMarsrutoIlgis() < minIlgis)
- arSalinti = true;
- if (arSalinti)
- Marsrutai.Salinti();
- }
- }
- /// <summary>
- /// Vartotojui parodo jo pasirinktų duomenų failų turinį
- /// </summary>
- public void IsvestiPradiniusDuomenis()
- {
- Sarasas<Kelias> Keliai = (Sarasas<Kelias>)Session["Keliai"];
- Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
- DetiILentele("Pirmas duomenų failas:");
- int n = (int)Session["n"];
- int gyventojuLimitas = (int)Session["gyventojuLimitas"];
- string kaDeti = n + ";" + gyventojuLimitas;
- DetiILentele(kaDeti);
- foreach (Kelias kel in Keliai)
- {
- kaDeti = kel.pirmasMiestas + ";" + kel.antrasMiestas + ";" + kel.atstumas;
- DetiILentele(kaDeti);
- }
- DetiILentele("");
- kaDeti = "Antras duomenų failas:";
- DetiILentele(kaDeti);
- foreach (Miestas meistas in Miestai)
- {
- kaDeti = meistas.miestoPavadinimas + ";" + meistas.gyventojuSkaicius;
- DetiILentele(kaDeti);
- }
- }
- /// <summary>
- /// sukuria sąrašą kuriame galima pasirinkti miestą pro kurį nenorima važiuoti
- /// </summary>
- public void DropDownListas()
- {
- Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
- Miestas PradinisMiestas = (Miestas)Session["PradinisMiestas"];
- int gyventojuLimitas = (int)Session["gyventojuLimitas"];
- DropDownList1.Items.Add("Nešalinti");
- foreach (Miestas miest in Miestai)
- {
- if (miest.miestoPavadinimas != PradinisMiestas.miestoPavadinimas && miest.gyventojuSkaicius < gyventojuLimitas)
- {
- DropDownList1.Items.Add(miest.miestoPavadinimas);
- }
- }
- }
- /// <summary>
- /// IŠveda rezultataus į rezultatų failą ir ekraną
- /// </summary>
- public void IsvestiRezultatus()
- {
- string KaDeti = "";
- int n = (int)Session["n"];
- int gyventojuLimitas = (int)Session["gyventojuLimitas"];
- Miestas PradinisMiestas = (Miestas)Session["PradinisMiestas"];
- Sarasas<Kelias> Keliai = (Sarasas<Kelias>)Session["Keliai"];
- Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
- Sarasas<Sarasas<MarsrutoDalis>> Marsrutai = (Sarasas<Sarasas<MarsrutoDalis>>)Session["Marsrutai"];
- using (StreamWriter rasyti = new StreamWriter(Server.MapPath("App_Data/Rezultatai.txt")))
- {
- rasyti.WriteLine("Pirmas duomenų failas:");
- rasyti.WriteLine(n + ";" + gyventojuLimitas);
- rasyti.WriteLine(PradinisMiestas.miestoPavadinimas);
- foreach(Kelias kelias in Keliai)
- {
- rasyti.WriteLine(kelias.pirmasMiestas + ";" + kelias.antrasMiestas + ";" + kelias.atstumas);
- }
- rasyti.WriteLine("\nAntras duomenų failas");
- foreach(Miestas miestas in Miestai)
- {
- rasyti.WriteLine(miestas.miestoPavadinimas + ";" + miestas.gyventojuSkaicius);
- }
- rasyti.WriteLine("");
- rasyti.WriteLine("Rezultatai:");
- rasyti.WriteLine("Maršruto ilgis|Maršrutas");
- DetiILentele("Rezultatai:");
- DetiILentele("Maršruto ilgis|Maršrutas");
- foreach (Sarasas<MarsrutoDalis> Marsrutas in Marsrutai)
- {
- string maršrutoIlgis = string.Format("{0, -14}|", Marsrutas.KoksMarsrutoIlgis());
- KaDeti += maršrutoIlgis;
- rasyti.Write(maršrutoIlgis);
- foreach (MarsrutoDalis dalis in Marsrutas)
- {
- KaDeti += dalis.miestas.miestoPavadinimas + " ";
- rasyti.Write(dalis.miestas.miestoPavadinimas + " ");
- }
- rasyti.WriteLine("");
- DetiILentele(KaDeti);
- KaDeti = "";
- }
- }
- }
- /// <summary>
- /// sukuria lentelės eilutę su pasirinktų tekstu
- /// </summary>
- /// <param name="kaDeti">pasirinktas tekstas</param>
- public void DetiILentele(string kaDeti)
- {
- TableRow tRow = new TableRow();
- Table1.Rows.Add(tRow);
- TableCell cell = new TableCell();
- cell.Text = kaDeti;
- tRow.Cells.Add(cell);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement