Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 22.07 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7. using System.IO;
  8.  
  9. namespace BazaDanych
  10. {
  11.     class Program
  12.     {
  13.         public const string NAGLOWEK_PLIK = "[BazaDanych]";
  14.         public const string KLUCZ_ROZMIARTABLICY = "RozmiarTablicy";
  15.         public const string NAGLOWEK_OSOBA = "[Osoba]";
  16.         public const string KLUCZ_ID = "ID";
  17.         public const string KLUCZ_IMIE = "Imie";
  18.         public const string KLUCZ_NAZWISKO = "Nazwisko";
  19.         public const string KLUCZ_WIEK = "Wiek";
  20.         public struct Osoba
  21.         {
  22.             public int id;
  23.             public string Imie;
  24.             public string Nazwisko;
  25.             public int Wiek;
  26.  
  27.             public override string ToString()
  28.             {
  29.                 return $"ID = {id} Imie = {Imie} Nazwisko = {Nazwisko} Wiek = {Wiek}";
  30.             }
  31.         }
  32.  
  33.         public static void MenuProgramu()
  34.         {
  35.  
  36.             Console.Clear();
  37.             SprawdzRozmiar("Aktualna ilosc elementow bazy to: ");
  38.             Console.WriteLine("|-------------- BAZA DANCYH  -------------|");
  39.             Console.WriteLine("| 1. Tworzenie nowej bazy                 |");
  40.             Console.WriteLine("| 2. Dodawanie osob do bazy               |");
  41.             Console.WriteLine("| 3. Wyswietlanie wszystkich rekordów bazy|");
  42.             Console.WriteLine("| 4. Wyszukiwanie w bazie                 |");
  43.             Console.WriteLine("| 5. Zmiana danych w bazie                |");
  44.             Console.WriteLine("| 6. Eksport bazy do pliku .txt           |");
  45.             Console.WriteLine("| 7. Eksport bazy do pliku .csv           |");
  46.             Console.WriteLine("| 0. Wyjscie z programu                   |");
  47.             Console.WriteLine("|-----------------------------------------|");
  48.             int menu = WprowadzInt("Wybierz opcje: ", "Nie ma takiej opcji w Menu!. Wybierz z zakresu: ", 0, 7);
  49.             switch (menu)
  50.             {
  51.                 case 1:
  52.                     Console.Clear();
  53.                     SprawdzCzyJestBaza();
  54.                     break; ;
  55.                 case 2:
  56.                     Console.Clear();
  57.                     DodajDoBazy();
  58.                     break;
  59.                 case 3:
  60.                     Console.Clear();
  61.                     odczyt();
  62.                     break;
  63.                 case 4:
  64.                     Console.Clear();
  65.                     dupa();
  66.                     break;
  67.                 case 5:
  68.                     Console.Clear();
  69.                     ZmianaWBazie();
  70.                     break;
  71.                 case 6:
  72.                     Console.Clear();
  73.                     openfile(@"C:\Temp\plikbazy_temp.txt");
  74.                     break;
  75.                 case 7:
  76.                     Console.Clear();
  77.                     ExportCSV();
  78.                     break;
  79.                 default:
  80.                     return;
  81.             }
  82.  
  83.             return;
  84.         }
  85.  
  86.         public static void PowrotDoMenu()
  87.         {
  88.             Console.WriteLine();
  89.  
  90.             Console.Write("Nacisnij dowolny przycisk aby wrócić do menu...");
  91.             Console.ReadKey();
  92.             MenuProgramu();
  93.         }
  94.         public static string Dane(string tekst, string error)
  95.         {
  96.             string wyraz;
  97.  
  98.             while (true)
  99.             {
  100.                 Console.Write(tekst);
  101.                 wyraz = Console.ReadLine();
  102.                 bool czyliczba = wyraz.Any(char.IsDigit);
  103.                 if (wyraz == "")
  104.                 {
  105.                     Console.WriteLine("Musisz cos podac!");
  106.                 }
  107.                 if (!czyliczba)
  108.                 {
  109.                     break;
  110.                 }
  111.                 else
  112.                 {
  113.                     Console.WriteLine($"{error} nie moze zawierac cyfr!");
  114.                 }
  115.             }
  116.  
  117.             return wyraz;
  118.         }
  119.  
  120.         public static int WprowadzInt(string Tekst, string TekstBledu, int Min = int.MinValue, int Max = int.MaxValue)
  121.         {
  122.             int Wynik = 0;
  123.  
  124.             while (true)
  125.             {
  126.                 Console.Write(Tekst);
  127.  
  128.                 if (int.TryParse(Console.ReadLine(), out Wynik) &&
  129.                     Wynik >= Min && Wynik <= Max)
  130.                 {
  131.                     break;
  132.                 }
  133.                 else
  134.                 {
  135.                     Console.WriteLine($"{TekstBledu} Wybierz z zakresu: {Min}-{Max}!");
  136.                 }
  137.             }
  138.  
  139.             return Wynik;
  140.         }
  141.  
  142.         public static bool OdczytajDane(string NazwaPliku, out Osoba[] ListaOsob)
  143.         {
  144.             ListaOsob = null;
  145.  
  146.             if (!string.IsNullOrEmpty(NazwaPliku))
  147.             {
  148.                 try
  149.                 {
  150.                     using (StreamReader plik = new StreamReader(NazwaPliku))
  151.                     {
  152.                         string Linia = plik.ReadLine();
  153.                         if (Linia != NAGLOWEK_PLIK)
  154.                             throw new Exception("Błędny nagłówek pliku!");
  155.  
  156.                         Linia = plik.ReadLine();
  157.                         string[] KluczWartosc = Linia.Split('=');
  158.  
  159.                         if (KluczWartosc[0] != KLUCZ_ROZMIARTABLICY)
  160.                             throw new Exception("Brak rozmiaru tablicy!");
  161.  
  162.                         int Rozmiar = int.Parse(KluczWartosc[1]);
  163.  
  164.                         if (Rozmiar < 1)
  165.                             throw new Exception("Błędny rozmiar tablicy! Powinien być > 0");
  166.  
  167.                         ListaOsob = new Osoba[Rozmiar];
  168.  
  169.                         int Indeks = -1;
  170.  
  171.                         while (true)
  172.                         {
  173.                             if (plik.EndOfStream)
  174.                                 break;
  175.  
  176.                             Linia = plik.ReadLine();
  177.  
  178.                             if (Linia == NAGLOWEK_OSOBA)
  179.                                 Indeks++;
  180.  
  181.                             if (Indeks + 1 > Rozmiar)
  182.                                 break;
  183.  
  184.                             if (Linia != NAGLOWEK_OSOBA && Indeks > -1)
  185.                             {
  186.                                 KluczWartosc = Linia.Split('=');
  187.                                 if (KluczWartosc.Length == 2)
  188.                                 {
  189.  
  190.                                     if (KluczWartosc[0] == KLUCZ_ID)
  191.                                     {
  192.                                         int wynikID = 0;
  193.                                         if (int.TryParse(KluczWartosc[1], out wynikID))
  194.                                         {
  195.                                             ListaOsob[Indeks].id = wynikID;
  196.                                         }
  197.                                     }
  198.                                     else
  199.                                     if (KluczWartosc[0] == KLUCZ_IMIE)
  200.                                         ListaOsob[Indeks].Imie = KluczWartosc[1];
  201.                                     else
  202.                                     if (KluczWartosc[0] == KLUCZ_NAZWISKO)
  203.                                         ListaOsob[Indeks].Nazwisko = KluczWartosc[1];
  204.                                     else
  205.                                     if (KluczWartosc[0] == KLUCZ_WIEK)
  206.                                     {
  207.                                         int Wynik = 0;
  208.                                         if (int.TryParse(KluczWartosc[1], out Wynik))
  209.                                         {
  210.                                             ListaOsob[Indeks].Wiek = Wynik;
  211.                                         }
  212.                                     }
  213.                                 }
  214.                             }
  215.                         }
  216.                     }
  217.  
  218.                     return true;
  219.                 }
  220.                 catch (FileNotFoundException e)
  221.                 {
  222.                     Console.WriteLine("Nie masz jeszcze bazy! Stworz nowa!");
  223.                     NowaBaza();
  224.                 }
  225.                 catch (Exception e)
  226.                 {
  227.                     Console.WriteLine($"Błąd : {e.Message}");
  228.                     ListaOsob = null;
  229.                 }
  230.             }
  231.             else
  232.             {
  233.                 NowaBaza();
  234.             }
  235.  
  236.             return false;
  237.         }
  238.  
  239.         public static bool ZapiszDane(string NazwaPliku, Osoba[] ListaOsob)
  240.         {
  241.  
  242.  
  243.             if (!string.IsNullOrEmpty(NazwaPliku) && ListaOsob != null
  244.                 && ListaOsob.Length > 0)
  245.             {
  246.                 try
  247.                 {
  248.                     using (StreamWriter plik = new StreamWriter(NazwaPliku))
  249.                     {
  250.                         plik.WriteLine(NAGLOWEK_PLIK);
  251.                         plik.WriteLine($"{KLUCZ_ROZMIARTABLICY}={ListaOsob.Length}");
  252.  
  253.                         foreach (Osoba osoba in ListaOsob)
  254.                         {
  255.                             plik.WriteLine(NAGLOWEK_OSOBA);
  256.                             plik.WriteLine($"{KLUCZ_ID}={osoba.id}");
  257.                             plik.WriteLine($"{KLUCZ_IMIE}={osoba.Imie}");
  258.                             plik.WriteLine($"{KLUCZ_NAZWISKO}={osoba.Nazwisko}");
  259.                             plik.WriteLine($"{KLUCZ_WIEK}={osoba.Wiek}");
  260.                         }
  261.  
  262.                     }
  263.                     return true;
  264.                 }
  265.                 catch (Exception e)
  266.                 {
  267.                     Console.WriteLine($"Błąd : {e.Message}");
  268.                 }
  269.             }
  270.  
  271.             return false;
  272.         }
  273.         static void odczyt()
  274.         {
  275.             Osoba[] osoby = null;
  276.  
  277.             if (OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby)
  278.                 && osoby != null)
  279.             {
  280.                 foreach (Osoba osoba in osoby)
  281.                     Console.WriteLine(osoba);
  282.             }
  283.             else
  284.             {
  285.                 Console.WriteLine("buba");
  286.             }
  287.             Console.WriteLine();
  288.             Console.Write("Nacisnij dowolny przycisk aby wrócić do menu...");
  289.             Console.ReadKey();
  290.             MenuProgramu();
  291.             return;
  292.         }
  293.         static void ZmianaWBazie()
  294.         {
  295.             Osoba[] osoby = null;
  296.             OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby);
  297.             int indeks = WprowadzInt("Podaj numer rekordu osoby ktora chcesz zmienic: ", "Nie ma takiej osoby!", 1, osoby.Length);
  298.             Console.WriteLine("Co chcesz zmienic ?");
  299.             Console.WriteLine("1. Imie ");
  300.             Console.WriteLine("2. Nazwisko ");
  301.             Console.WriteLine("3. Wiek ");
  302.             Console.WriteLine("0. Powrot");
  303.             int x = WprowadzInt("", "Nie ma takiego pola!", 0, 3);
  304.             switch (x)
  305.             {
  306.                 case 1:
  307.                     osoby[indeks - 1].Imie = Dane("Podaj nowe imie: ", "Imie");
  308.                     break;
  309.                 case 2:
  310.                     osoby[indeks - 1].Nazwisko = Dane("Podaj nowe nazwisko ", "Nazwisko");
  311.                     break;
  312.                 case 3:
  313.                     osoby[indeks - 1].Wiek = WprowadzInt($"Podaj nowy wiek ", "Wiek nie miesci sie w zakresie!", 1, 120);
  314.                     break;
  315.                 default:
  316.                     MenuProgramu();
  317.                     break;
  318.             }
  319.             if (ZapiszDane(@"c:\temp\plikbazy.txt", osoby))
  320.             {
  321.                 Console.WriteLine("Poprawnie dodano do bazy");
  322.             }
  323.             else
  324.             {
  325.                 Console.WriteLine("Buba");
  326.             }
  327.             PowrotDoMenu();
  328.  
  329.         }
  330.         static void DodajDoBazy()
  331.         {
  332.             Osoba[] osoby = null;
  333.             OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby);
  334.  
  335.  
  336.             if (osoby.Length > 0)
  337.             {
  338.                 int b = osoby.Length;
  339.                 int a = WprowadzInt("Podaj ile wprowdzisz osób: ", "Wartosc nie miesci sie w zakresie!", 0);
  340.                 Console.WriteLine();
  341.                 Array.Resize(ref osoby, osoby.Length + a);
  342.                 for (int i = b; i < osoby.Length; i++)
  343.                 {
  344.                     osoby[i].id = i + 1;
  345.                     osoby[i].Imie = Dane($"Podaj Imie {i + 1} osoby: ", "Imie");
  346.                     osoby[i].Nazwisko = Dane($"Podaj Nazwisko {i + 1} osoby: ", "Nazwisko");
  347.                     osoby[i].Wiek = WprowadzInt($"Podaj Wiek {i + 1} osoby: ", "Wiek nie miesci sie w zakresie!", 1, 120);
  348.                     Console.WriteLine();
  349.                 }
  350.             }
  351.  
  352.             else
  353.             {
  354.                 NowaBaza();
  355.             }
  356.             if (ZapiszDane(@"c:\temp\plikbazy.txt", osoby))
  357.             {
  358.                 Console.WriteLine("Poprawnie dodano do bazy");
  359.             }
  360.             else
  361.             {
  362.                 Console.WriteLine("Buba");
  363.             }
  364.             PowrotDoMenu();
  365.         }
  366.  
  367.         static void SprawdzCzyJestBaza()
  368.         {
  369.             Osoba[] osoby = null;
  370.             if (OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby))
  371.             {
  372.                 string litera;
  373.                 Console.WriteLine("Masz juz baze! Jesteś pewien że chcesz ja nadpisac? (t/n)");
  374.                 do
  375.                     litera = Console.ReadLine().ToLower();
  376.  
  377.                 while (litera != "t" && litera != "n");
  378.                 if (litera == "t")
  379.                 {
  380.                     NowaBaza();
  381.                 }
  382.                 PowrotDoMenu();
  383.             }
  384.         }
  385.         static void NowaBaza()
  386.         {
  387.             Osoba[] osoby = new Osoba[WprowadzInt("Podaj ile wprowdzisz osób: ", "Podana wartosc nie miesci sie w zakresie!", 1)];
  388.             for (int i = 0; i < osoby.Length; i++)
  389.             {
  390.                 osoby[i].id = i + 1;
  391.                 osoby[i].Imie = Dane($"Podaj Imie {i + 1} osoby: ", "Imie");
  392.                 osoby[i].Nazwisko = Dane($"Podaj Nazwisko {i + 1} osoby: ", "Nazwisko");
  393.                 osoby[i].Wiek = WprowadzInt($"Podaj Wiek {i + 1} osoby: ", "Wiek nie miesci sie w zakresie!", 1, 120);
  394.                 Console.WriteLine();
  395.             }
  396.  
  397.             if (ZapiszDane(@"c:\temp\plikbazy.txt", osoby))
  398.             {
  399.                 Console.WriteLine("Poprawnie dodano do bazy");
  400.             }
  401.             else
  402.             {
  403.                 Console.WriteLine("Buba");
  404.             }
  405.             Console.Write("Nacisnij dowolny przycisk aby wrócić do menu...");
  406.             Console.ReadKey();
  407.             MenuProgramu();
  408.         }
  409.  
  410.         public static void SprwadzanieTablicy(string NazwaPliku, out Osoba[] ListaOsob)
  411.         {
  412.             ListaOsob = null;
  413.             using (StreamReader plik = new StreamReader(NazwaPliku))
  414.             {
  415.                 string Linia = plik.ReadLine();
  416.                 Linia = plik.ReadLine();
  417.                 string[] KluczWartosc = Linia.Split('=');
  418.  
  419.                 if (KluczWartosc[0] != KLUCZ_ROZMIARTABLICY)
  420.                     throw new Exception("Brak rozmiaru tablicy!");
  421.  
  422.                 int Rozmiar = int.Parse(KluczWartosc[1]);
  423.  
  424.                 if (Rozmiar < 1)
  425.                     throw new Exception("Nie ma zadnych wpisów w bazie danych!");
  426.  
  427.                 Console.WriteLine($"Obecna ilość rekordów w bazie wynosi: {Rozmiar}");
  428.                 Console.WriteLine();
  429.             }
  430.         }
  431.  
  432.         public static int SprawdzRozmiar(string TEKST)
  433.         {
  434.             Osoba[] osoby = null;
  435.             OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby);
  436.             Console.WriteLine(TEKST + osoby.Length);
  437.             int WielkoscBazy = osoby.Length;
  438.             return WielkoscBazy;
  439.         }
  440.  
  441.         public static void WyszukajWBazie()
  442.         {
  443.             Osoba[] osoby = null;
  444.             OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby);
  445.             int szukaj = WprowadzInt("Podaj ID osoby ktora chcesz wyswietlc: ", "Nie ma osoby z takim ID!", 1, osoby.Length);
  446.             Console.WriteLine(osoby[szukaj - 1]);
  447.  
  448.             Console.WriteLine();
  449.  
  450.             Console.Write("Nacisnij dowolny przycisk aby wrócić do menu...");
  451.             Console.ReadKey();
  452.             MenuProgramu();
  453.         }
  454.         static void openfile(string sciezka)
  455.         {
  456.             string curFile = sciezka;
  457.  
  458.             if (File.Exists(curFile))
  459.             {
  460.                 File.Delete(sciezka);
  461.  
  462.                 File.Copy(@"C:\Temp\plikbazy.txt", sciezka);
  463.                 System.Diagnostics.Process.Start(sciezka);
  464.  
  465.             }
  466.             else
  467.             {
  468.                 File.Copy(@"C:\Temp\plikbazy.txt", sciezka);
  469.                 System.Diagnostics.Process.Start($"{sciezka}");
  470.  
  471.             }
  472.             Console.WriteLine("Zmiany naniesione w notatniku nie zapisza sie w bazie!");
  473.             PowrotDoMenu();
  474.         }
  475.  
  476.         public static bool ZapisCSV(string NazwaPliku, Osoba[] ListaOsob)
  477.         {
  478.  
  479.             if (!string.IsNullOrEmpty(NazwaPliku) && ListaOsob != null
  480.                 && ListaOsob.Length > 0)
  481.             {
  482.                 try
  483.                 {
  484.                     using (StreamWriter plik = new StreamWriter(NazwaPliku))
  485.                     {
  486.                         plik.WriteLine("Lp.,Imie,Nazwisko,Wiek");
  487.  
  488.                         foreach (Osoba osoba_csv in ListaOsob)
  489.                         {
  490.                             plik.Write($"{osoba_csv.id},");
  491.                             plik.Write($"{osoba_csv.Imie},");
  492.                             plik.Write($"{osoba_csv.Nazwisko},");
  493.                             plik.Write($"{osoba_csv.Wiek}");
  494.                             plik.WriteLine();
  495.                         }
  496.  
  497.                     }
  498.                     return true;
  499.                 }
  500.                 catch (Exception e)
  501.                 {
  502.                     Console.WriteLine($"Błąd : {e.Message}");
  503.                 }
  504.             }
  505.  
  506.             return false;
  507.         }
  508.  
  509.         public static void ExportCSV()
  510.         {
  511.             Osoba[] osoby = null;
  512.             OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby);
  513.             Osoba[] osoby_csv = new Osoba[osoby.Length];
  514.             for (int i = 0; i < osoby.Length; i++)
  515.             {
  516.                 osoby_csv[i].id = osoby[i].id;
  517.                 osoby_csv[i].Imie = osoby[i].Imie;
  518.                 osoby_csv[i].Nazwisko = osoby[i].Nazwisko;
  519.                 osoby_csv[i].Wiek = osoby[i].Wiek;
  520.             }
  521.  
  522.  
  523.             if (ZapisCSV(@"c:\temp\plikbazy_test.csv", osoby_csv))
  524.             {
  525.                 Console.WriteLine("Eksport wykonany pomyslnie");
  526.                 string litera;
  527.                 Console.WriteLine("Otworzyc plik? (t/n)");
  528.                 do
  529.                     litera = Console.ReadLine().ToLower();
  530.  
  531.                 while (litera != "t" && litera != "n");
  532.                 if (litera == "t")
  533.                 {
  534.                     System.Diagnostics.Process.Start(@"c:\temp\plikbazy_test.csv");
  535.                 }
  536.  
  537.             }
  538.             else
  539.             {
  540.                 Console.WriteLine("Buba");
  541.             }
  542.             PowrotDoMenu();
  543.         }
  544.  
  545.         static void dupa()
  546.         {
  547.             int x = 0;
  548.             Osoba[] osoby = null;
  549.             OdczytajDane(@"C:\Temp\plikbazy.txt", out osoby);
  550.             Console.WriteLine("Według czego chcesz wyszukac? ?");
  551.             Console.WriteLine("1. ID ");
  552.             Console.WriteLine("2. Imie ");
  553.             Console.WriteLine("3. Nazwisko ");
  554.             Console.WriteLine("4. Wiek ");
  555.             Console.WriteLine("0. Powrot");
  556.             int menu = WprowadzInt("", "Nie ma takiego pola!", 0, 4);
  557.             string szukanySTR;
  558.             int szukanyINT = 0;
  559.             switch (menu)
  560.             {
  561.  
  562.                 case 1:
  563.                     szukanyINT = WprowadzInt("Podaj ID osoby ktora chcesz wyswietlc: ", "Nie ma osoby z takim ID!", 1, osoby.Length);
  564.                     Console.WriteLine(osoby[szukanyINT - 1]);
  565.                     x++;
  566.                     break;
  567.                 case 2:
  568.                     szukanySTR = Dane("Podaj szukane imie: ", "Imie nie zawiera liczb!");
  569.                     for (int i = 0; i < osoby.Length; i++)
  570.                     {
  571.                         if (osoby[i].Imie == szukanySTR)
  572.                         {
  573.                             int index = i + 1;
  574.                             Console.WriteLine(osoby[i]);
  575.                             x++;
  576.                             //Console.WriteLine($"{szukanySTR} Znaleziono na pozycji {index}");
  577.                         }
  578.                     }
  579.  
  580.                     break;
  581.                 case 3:
  582.                     szukanySTR = Dane("Podaj szukane Nazwisko: ", "Imie nie zawiera liczb!");
  583.                     for (int i = 0; i < osoby.Length; i++)
  584.                     {
  585.                         if (osoby[i].Nazwisko == szukanySTR)
  586.                         {
  587.                             int index = i + 1;
  588.                             Console.WriteLine(osoby[i]);
  589.                             x++;
  590.                             //Console.WriteLine($"{szukanySTR} Znaleziono na pozycji {index}");
  591.  
  592.                         }
  593.                     }
  594.                     break;
  595.                 case 4:
  596.                     szukanyINT = WprowadzInt("Podaj ID osoby ktora chcesz wyswietlc: ", "Wiek nie miesci sie w zakresie: ", 1, 120);
  597.                     for (int i = 0; i < osoby.Length; i++)
  598.                     {
  599.                         if (osoby[i].Wiek == szukanyINT)
  600.                         {
  601.                             int index = i + 1;
  602.                             Console.WriteLine(osoby[i]);
  603.                             x++;
  604.                             //Console.WriteLine($"{szukanyINT} Znaleziono na pozycji {index}");
  605.                         }
  606.                     }
  607.  
  608.                     break;
  609.                 default:
  610.                     MenuProgramu();
  611.                     break;
  612.  
  613.             }
  614.             if (x == 0)
  615.             {
  616.                 Console.WriteLine("Brak rekordow z podana wartoscia!");
  617.             }
  618.             Console.ReadKey();
  619.             PowrotDoMenu();
  620.  
  621.  
  622.  
  623.  
  624.  
  625.         }
  626.  
  627.         static void Main(string[] args)
  628.         {
  629.  
  630.             MenuProgramu();
  631.  
  632.         }
  633.     }
  634. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement