Advertisement
Guest User

Untitled

a guest
May 1st, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.04 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.IO;
  8. using System.Web.Services.Description;
  9. using System.Text;
  10.  
  11. public partial class Labaratorinis3 : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. Label1.Visible = false; //paslėpia nereikalingus elementus
  16. TextBox2.Visible = false; //
  17. Label2.Visible = false; //
  18. DropDownList1.Visible = false; //
  19. Button2.Visible = false; //
  20. Table1.Visible = false; //
  21. }
  22.  
  23. protected void Button1_Click(object sender, EventArgs e)
  24. {
  25. if (FileUpload1.HasFile && FileUpload1.FileName.EndsWith(".txt") && FileUpload2.HasFile && FileUpload2.FileName.EndsWith(".txt")) //įkelia duomenys iš pasirinktų duomenų failų
  26. Skaitymas(FileUpload1.FileContent, FileUpload2.FileContent);
  27. DropDownListas(); //sukuria sąrašą iš kurio galima pasirinkti į kurį miestą nenorima važiuoti
  28. IsvestiPradiniusDuomenis(); //ekrane parodo pasirinktų duomenų failų turinį
  29. Table1.Visible = true; //toliau paslėpia ir parodo reikalingus/nereikalingus elementus
  30. Label1.Visible = true;
  31. TextBox2.Visible = true;
  32. Label2.Visible = true;
  33. DropDownList1.Visible = true;
  34. Button2.Visible = true;
  35. Button1.Visible = false;
  36. FileUpload1.Visible = false;
  37. FileUpload2.Visible = false;
  38. Label5.Visible = false;
  39. Label4.Visible = false;
  40. }
  41. protected void Button2_Click(object sender, EventArgs e)
  42. {
  43. string KaSalinti = DropDownList1.SelectedValue; //pažymimas miestas, į kurį nenorima važiuoti
  44. double minIlgis;
  45. if (TextBox2.Text != "") //įvedamas minimalus maršruto atstumas
  46. minIlgis = double.Parse(TextBox2.Text);
  47. else
  48. minIlgis = 0;
  49. MarsrutuSudarymas(); //sudaromas maršrutų sąrašas
  50. Salinimas(KaSalinti, minIlgis); //pašalinami nenorimi maršrutai
  51. IsvestiRezultatus(); //ekrane parodomi rezultatai
  52. Label1.Text = "Rezultatai: ";
  53. Label1.Visible = true;
  54. Table1.Visible = true;
  55. }
  56. /// <summary>
  57. /// Nuskaito ir išsaugo duomenis
  58. /// </summary>
  59. /// <param name="fv1">Pirmas vartotojo pasirinktas duomenų failas su keliais</param>
  60. /// <param name="fv2">Antras vartotojo pasirinktas duomenų failas su miestais</param>
  61. void Skaitymas(Stream fv1, Stream fv2)
  62. {
  63. Sarasas<Kelias> Keliai = new Sarasas<Kelias>();
  64. Sarasas<Miestas> Miestai = new Sarasas<Miestas>();
  65. string pradinisMiestas;
  66. using (StreamReader skaityti = new StreamReader(fv1))
  67. {
  68. string eilute = skaityti.ReadLine();
  69. string[] dalys = eilute.Split(';');
  70. int n = int.Parse(dalys[0]);
  71. int gyventojuLimitas = int.Parse(dalys[1]);
  72. Session["n"] = n;
  73. Session["gyventojuLimitas"] = gyventojuLimitas;
  74. pradinisMiestas = skaityti.ReadLine();
  75. while ((eilute = skaityti.ReadLine()) != null)
  76. {
  77. dalys = eilute.Split(';');
  78. Kelias naujasKelias = new Kelias(dalys[0], dalys[1], double.Parse(dalys[2]));
  79. Keliai.DetiDuomenisT(naujasKelias);
  80. }
  81. }
  82.  
  83. using (StreamReader skaityti = new StreamReader(fv2))//, Encoding.GetEncoding(1257)))
  84. {
  85. string eilute = null;
  86. while ((eilute = skaityti.ReadLine()) != null)
  87. {
  88. string[] dalys = eilute.Split(';');
  89. Miestas naujasMiestas = new Miestas(dalys[0], int.Parse(dalys[1]));
  90. if (dalys[0] == pradinisMiestas)
  91. Session["PradinisMiestas"] = naujasMiestas;
  92. Miestai.DetiDuomenisT(naujasMiestas);
  93. }
  94. }
  95. Session["Miestai"] = Miestai;
  96. Session["Keliai"] = Keliai;
  97. }
  98. /// <summary>
  99. /// Funkcija skirta sudaryti visiems galimiems maršrutams iš pasirinkto miesto
  100. /// </summary>
  101. void MarsrutuSudarymas()
  102. {
  103. Sarasas<Kelias> Keliai = (Sarasas<Kelias>)Session["Keliai"];
  104. Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
  105. Sarasas<Sarasas<MarsrutoDalis>> Marsrutai = new Sarasas<Sarasas<MarsrutoDalis>>();
  106. Miestas PradinisMiestas = (Miestas)Session["PradinisMiestas"];
  107. foreach (Miestas miest in Miestai) //miest yra Miestas, kuris paimamas kaip kelionės tikslas
  108. {
  109. if (miest != PradinisMiestas) //tikrina, kad nesudarytų maršruto iš pradinio miesto į pradinį miestą
  110. {
  111. foreach (Kelias Kel in Keliai) //
  112. { //Ieško kito miesto į kurį būtų galima važiuoti
  113. if (Kel.Equals(PradinisMiestas)) //
  114. {
  115. Sarasas<MarsrutoDalis> Marsrutas = new Sarasas<MarsrutoDalis>(); //
  116. MarsrutoDalis Pradzia = new MarsrutoDalis(PradinisMiestas, 0); //
  117. Marsrutas.DetiDuomenisT(Pradzia); //Pradedamas konstruoti maršrutas nuo pradinio miesto
  118. Sarasas<Miestas> MiestuKopija = Miestai.SukurtiKopija(); //
  119. Miestas KitasMiestas = RastiKitaMiesta(MiestuKopija, Kel, PradinisMiestas); //
  120.  
  121. if (KitasMiestas != miest) //nepasiekiau tikslo
  122. {
  123. MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //toliau konstruojamas maršrutas
  124. Marsrutas.DetiDuomenisT(NaujaDalis);
  125.  
  126. Sarasas<Kelias> KeliuKopija = Keliai.SukurtiKopija();
  127.  
  128. Rekursija(KeliuKopija, MiestuKopija, KitasMiestas, miest, Marsrutas, Marsrutai); //kreipiamasi į rekursiją tolemesniam maršruto sudarymui
  129. }
  130. else //pasiekiau tikslą
  131. {
  132. MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //Maršrutas įdedamas į maršrutų sąrašą
  133. Marsrutas.DetiDuomenisT(NaujaDalis);
  134. Marsrutas.DetiMarsrutoIlgi(ApskaiciuotiMarsrutoIlgi(Marsrutas));
  135. Marsrutai.DetiDuomenisT(Marsrutas);
  136. }
  137. }
  138. }
  139. }
  140. }
  141. Marsrutai.RikiuotiMarsrutus(); //Maršrutai surikiuojami pagal jų ilgį
  142.  
  143. Session["Marsrutai"] = Marsrutai;
  144. }
  145. /// <summary>
  146. /// Funkcija skirta rasti visiems galimiems maršrutams
  147. /// </summary>
  148. /// <param name="Keliai">Visų Kelių sąrašas</param>
  149. /// <param name="Miestai">Visų Miestų sąrašas</param>
  150. /// <param name="KurEsuDabar">Miestas iš kurio ieškoma kelio į kitą galimą miestą</param>
  151. /// <param name="Tikslas">Miestas į kurį nurima nukeliauti</param>
  152. /// <param name="Marsrutas">Dabartinis konstruojamas maršrutas</param>
  153. /// <param name="Marsrutai">Visų maršrutų sąrašas</param>
  154. void Rekursija(Sarasas<Kelias> Keliai, Sarasas<Miestas> Miestai, Miestas KurEsuDabar, Miestas Tikslas, Sarasas<MarsrutoDalis> Marsrutas, Sarasas<Sarasas<MarsrutoDalis>> Marsrutai)
  155. {
  156. foreach (Kelias Kel in Keliai) //
  157. { //Ieško kito miesto į kurį būtų galiam nukeliauti
  158. if (Kel.Equals(KurEsuDabar)) //
  159. {
  160. Miestas KitasMiestas = RastiKitaMiesta(Miestai, Kel, KurEsuDabar);
  161. if (KitasMiestas == Tikslas) //jeigu kitas miestas yra tikslas
  162. {
  163. Sarasas<MarsrutoDalis> MarsrutoKopija = Marsrutas.SukurtiKopija(); //Sukuriama maršruto kopija, kad grįžus rekursijai, nesikartotų tas pats miestas
  164. MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //Pabaigiamas konstruoti maršrutas
  165. MarsrutoKopija.DetiDuomenisT(NaujaDalis); //
  166. MarsrutoKopija.DetiMarsrutoIlgi(ApskaiciuotiMarsrutoIlgi(MarsrutoKopija)); //
  167. Marsrutai.DetiDuomenisT(MarsrutoKopija); //Maršrutas įdedamas į maršrutų sąrašą
  168. }
  169. else
  170. {
  171. if (!ArYraMarsrute(Marsrutas, KitasMiestas)) //kitas miestas nėra tikslas
  172. {
  173. Sarasas<MarsrutoDalis> MarsrutoKopija = Marsrutas.SukurtiKopija(); //Sukuriama maršruto kopija, kad grįžus rekursijai, nesikartotų tas pats miestas
  174. MarsrutoDalis NaujaDalis = new MarsrutoDalis(KitasMiestas, Kel.atstumas); //
  175. MarsrutoKopija.DetiDuomenisT(NaujaDalis); //Toliau konstruojamas maršrutas
  176. Sarasas<Kelias> KeliuKopija = Keliai.SukurtiKopija(); //
  177. Sarasas<Miestas> MiestuKopija = Miestai.SukurtiKopija(); //
  178. Rekursija(KeliuKopija, MiestuKopija, KitasMiestas, Tikslas, MarsrutoKopija, Marsrutai); //Kreipiamasi į rekursiją
  179. }
  180. }
  181. }
  182. }
  183. }
  184. /// <summary>
  185. /// Metodas skirtas pagal kelią ir miestą kuriame dabar esame, surasti kito miesto į kurį būtų galima nuvažiuoti objektą
  186. /// </summary>
  187. /// <param name="Miestai">Visų miestų sąrašas</param>
  188. /// <param name="duom">Kelias kuris yra tikrinamas</param>
  189. /// <param name="kurEsuDabar">Miestas kuriame šiuo metu esame</param>
  190. /// <returns>Miesto objektą į kurį galima nuvažiuoti iš dabar esamo miesto</returns>
  191. public Miestas RastiKitaMiesta(Sarasas<Miestas> Miestai, Kelias duom, Miestas kurEsuDabar)
  192. {
  193. foreach (Miestas miestas in Miestai)
  194. {
  195. if (duom.Equals(miestas) && kurEsuDabar != miestas)
  196. return miestas;
  197. }
  198. return null;
  199. }
  200. /// <summary>
  201. /// Patikrina ar maršrute jau nėra miesto, kad nevažiuoti per tą patį miestą du kartus
  202. /// </summary>
  203. /// <param name="Marsrutas">Maršrutas kurį reikia patikrinti</param>
  204. /// <param name="miestas">tikrinamas miestas</param>
  205. /// <returns>true, jeigu jau yra miestas maršrute, false jeigu ne</returns>
  206. public bool ArYraMarsrute(Sarasas<MarsrutoDalis> Marsrutas, Miestas miestas)
  207. {
  208. foreach (MarsrutoDalis test in Marsrutas)
  209. {
  210. if (test.miestas == miestas)
  211. return true;
  212. }
  213. return false;
  214. }
  215. /// <summary>
  216. /// Apskaičiuoja kokio ilgio yra visas maršrutas
  217. /// </summary>
  218. /// <param name="Marsrutas"></param>
  219. /// <returns>Maršruto ilgį</returns>
  220. public double ApskaiciuotiMarsrutoIlgi(Sarasas<MarsrutoDalis> Marsrutas)
  221. {
  222. double ilgis = 0;
  223. foreach (MarsrutoDalis duomenys in Marsrutas)
  224. ilgis += duomenys.atstumasNuoPraeitoMiesto;
  225. return ilgis;
  226. }
  227. /// <summary>
  228. /// Pašalina maršrutus su meistu į kurį nenorima važiuoti ir maršrutus kurie yra trumpesni nei nurodytas ilgis
  229. /// </summary>
  230. /// <param name="KaSalinti">Miestas, su kuriuo šalinami maršrutai iš maršrutų sąrašo</param>
  231. /// <param name="minIlgis">Ilgis už kurį trumpesni maršrutai pašalinami</param>
  232. public void Salinimas(string KaSalinti, double minIlgis)
  233. {
  234. Sarasas<Sarasas<MarsrutoDalis>> Marsrutai = (Sarasas<Sarasas<MarsrutoDalis>>)Session["Marsrutai"];
  235. int SalinimoRiba = (int)Session["gyventojuLimitas"];
  236. for (Marsrutai.Pradzia(); Marsrutai.ArBaigti(); Marsrutai.Desinen())
  237. {
  238. Sarasas<MarsrutoDalis> Marsrutas = Marsrutai.ImtiDuomenis();
  239. bool arSalinti = false;
  240. for (Marsrutas.Pradzia(); Marsrutas.ArBaigti(); Marsrutas.Desinen())
  241. {
  242. MarsrutoDalis miestas = Marsrutas.ImtiDuomenis();
  243. if (miestas.miestas.gyventojuSkaicius > SalinimoRiba || miestas.miestas.miestoPavadinimas == KaSalinti)
  244. {
  245. arSalinti = true;
  246. }
  247. }
  248. if (Marsrutas.KoksMarsrutoIlgis() < minIlgis)
  249. arSalinti = true;
  250. if (arSalinti)
  251. Marsrutai.Salinti();
  252. }
  253. }
  254. /// <summary>
  255. /// Vartotojui parodo jo pasirinktų duomenų failų turinį
  256. /// </summary>
  257. public void IsvestiPradiniusDuomenis()
  258. {
  259. Sarasas<Kelias> Keliai = (Sarasas<Kelias>)Session["Keliai"];
  260. Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
  261.  
  262. DetiILentele("Pirmas duomenų failas:");
  263.  
  264. int n = (int)Session["n"];
  265. int gyventojuLimitas = (int)Session["gyventojuLimitas"];
  266. string kaDeti = n + ";" + gyventojuLimitas;
  267.  
  268. DetiILentele(kaDeti);
  269.  
  270. foreach (Kelias kel in Keliai)
  271. {
  272. kaDeti = kel.pirmasMiestas + ";" + kel.antrasMiestas + ";" + kel.atstumas;
  273. DetiILentele(kaDeti);
  274. }
  275. DetiILentele("");
  276. kaDeti = "Antras duomenų failas:";
  277. DetiILentele(kaDeti);
  278.  
  279. foreach (Miestas meistas in Miestai)
  280. {
  281. kaDeti = meistas.miestoPavadinimas + ";" + meistas.gyventojuSkaicius;
  282. DetiILentele(kaDeti);
  283. }
  284. }
  285. /// <summary>
  286. /// sukuria sąrašą kuriame galima pasirinkti miestą pro kurį nenorima važiuoti
  287. /// </summary>
  288. public void DropDownListas()
  289. {
  290. Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
  291. Miestas PradinisMiestas = (Miestas)Session["PradinisMiestas"];
  292. int gyventojuLimitas = (int)Session["gyventojuLimitas"];
  293. DropDownList1.Items.Add("Nešalinti");
  294. foreach (Miestas miest in Miestai)
  295. {
  296. if (miest.miestoPavadinimas != PradinisMiestas.miestoPavadinimas && miest.gyventojuSkaicius < gyventojuLimitas)
  297. {
  298. DropDownList1.Items.Add(miest.miestoPavadinimas);
  299. }
  300. }
  301. }
  302. /// <summary>
  303. /// IŠveda rezultataus į rezultatų failą ir ekraną
  304. /// </summary>
  305. public void IsvestiRezultatus()
  306. {
  307. string KaDeti = "";
  308. int n = (int)Session["n"];
  309. int gyventojuLimitas = (int)Session["gyventojuLimitas"];
  310. Miestas PradinisMiestas = (Miestas)Session["PradinisMiestas"];
  311. Sarasas<Kelias> Keliai = (Sarasas<Kelias>)Session["Keliai"];
  312. Sarasas<Miestas> Miestai = (Sarasas<Miestas>)Session["Miestai"];
  313.  
  314. Sarasas<Sarasas<MarsrutoDalis>> Marsrutai = (Sarasas<Sarasas<MarsrutoDalis>>)Session["Marsrutai"];
  315.  
  316. using (StreamWriter rasyti = new StreamWriter(Server.MapPath("App_Data/Rezultatai.txt")))
  317. {
  318. rasyti.WriteLine("Pirmas duomenų failas:");
  319.  
  320. rasyti.WriteLine(n + ";" + gyventojuLimitas);
  321. rasyti.WriteLine(PradinisMiestas.miestoPavadinimas);
  322. foreach(Kelias kelias in Keliai)
  323. {
  324. rasyti.WriteLine(kelias.pirmasMiestas + ";" + kelias.antrasMiestas + ";" + kelias.atstumas);
  325. }
  326.  
  327. rasyti.WriteLine("\nAntras duomenų failas");
  328. foreach(Miestas miestas in Miestai)
  329. {
  330. rasyti.WriteLine(miestas.miestoPavadinimas + ";" + miestas.gyventojuSkaicius);
  331. }
  332. rasyti.WriteLine("");
  333.  
  334. rasyti.WriteLine("Rezultatai:");
  335. rasyti.WriteLine("Maršruto ilgis|Maršrutas");
  336. DetiILentele("Rezultatai:");
  337. DetiILentele("Maršruto ilgis|Maršrutas");
  338. foreach (Sarasas<MarsrutoDalis> Marsrutas in Marsrutai)
  339. {
  340. string maršrutoIlgis = string.Format("{0, -14}|", Marsrutas.KoksMarsrutoIlgis());
  341. KaDeti += maršrutoIlgis;
  342. rasyti.Write(maršrutoIlgis);
  343.  
  344. foreach (MarsrutoDalis dalis in Marsrutas)
  345. {
  346. KaDeti += dalis.miestas.miestoPavadinimas + " ";
  347. rasyti.Write(dalis.miestas.miestoPavadinimas + " ");
  348. }
  349. rasyti.WriteLine("");
  350. DetiILentele(KaDeti);
  351. KaDeti = "";
  352. }
  353. }
  354. }
  355. /// <summary>
  356. /// sukuria lentelės eilutę su pasirinktų tekstu
  357. /// </summary>
  358. /// <param name="kaDeti">pasirinktas tekstas</param>
  359. public void DetiILentele(string kaDeti)
  360. {
  361. TableRow tRow = new TableRow();
  362. Table1.Rows.Add(tRow);
  363. TableCell cell = new TableCell();
  364. cell.Text = kaDeti;
  365. tRow.Cells.Add(cell);
  366. }
  367.  
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement