using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; /* * * sklep (wykorzystane ListView) * * Tworzymy klasę Towary reprezentującą listę towarów do zakupu * oraz klasę Zakupy reprezentującą listę zakupionych towarów. * Opisy towarów w poszczególnych wierszach ListView * są generowane za pomocą przeciążonej metody ToString() klasy Towary. * Kliknięcie na opis towaru w ListView powoduje dodanie go do listy zakupów. * Aby zidentyfikować kliknięty towar (opis na ListView jest typu String) * wyodrębniamy jego Id (dwa pierwsze znaki) i wyszukujemy na liście towarów. * Towary na liscie zakupów nie mogą się powtarzać. * */ namespace WpfApp1 { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { // lista z towarami do zakupu // GetTowary() generuje liste towarów, // jest to statyczna metoda klasy Towary // dlatego do wywołania nie potrzebuje obiektu tylko klasę private List towary = Towary.GetTowary(); // lista z zakupami private Zakupy zakupy = new Zakupy(); public MainWindow() { InitializeComponent(); // przypisuje kolejnym wierszom ListView towary z listy towarów // używane jest w tym celu ToString() ItemsListView.ItemsSource = towary; } // zdarzenie klikniecia na wiersz ListView private void listView_Click(object sender, RoutedEventArgs e) { // pobranie wiersza var item = (sender as ListView).SelectedItem; if (item != null) { // musimy znależć towar z listy towarów o danym Id // (pobranym z klikniętego wiersza LisView) // żeby dodać go do listy zakupów // pobierz piewsze 2 znaki z kliknietego wiersza ListView String itemString = item.ToString(); // substring (index poczatkowy, długość) String Id = itemString.Substring(0, 2); // pobieramy towar z listy towarów o szukanym Id // petla po wszystkich towarach na liscie towarów do zakupu foreach (var towar in towary) { // jeśli id towaru pobranego z ListView // jest takie same jak na liście towarów // (Id oraz towar.ID jest typu String) if (Id == towar.ID) { // dodajemy towar do listy zakupów // jesli na liscie zakupów nie ma towaru o danym Id if (!zakupy.HasId(Id)) { zakupy.AddToZakupy(towar); } // przerywamy pętlę (znaleźlismy towar) break; } } // podliczamy wartość zakupów double wartoscZakupow = 0; // pętla po wszystkich towarach na liście zakupów foreach (var zakup in zakupy.GetZakupy()) { wartoscZakupow += zakup.Cena; } // wyświetalmy liste zakupów w MessageBoxie string zakupioneTowary = ""; // pętla po wszystkich towarach na liście zakupów foreach (var zakupionyTowar in zakupy.GetZakupy()) { // sumujemy (sklejamy ze sobą łańcuchy tekstowe) // zakupione towary (konkatenacja stringów) zakupioneTowary += zakupionyTowar.ToString() + "\n"; } // doklejamy wartość zakupów do zakupionych towarów zakupioneTowary += "\nwartość: "; // doklejamy enter zakupioneTowary += wartoscZakupow; // doklejamy cenę zakupów zakupioneTowary += "zł"; // doklejamy zł // komunikat MessageBox.Show(zakupioneTowary, "Twoje zakupy:"); } } } // klasa reprezentuyjąca listę z towarami do zakupu public class Towary { // ID towaru jest potrzebne w celu zidentyfikowania towaru na liście ListView // properties public string ID { get; set; } public string Nazwa { get; set; } // nazwa towaru public double Cena { get; set; } // cena towaru // przeciążona metoda ToString() // używana przy przy przypisywaniu towarów z listy towarów do ListView // (to co zwraca return znajdzie sie w poszczególnych wierszach ListView) public override string ToString() { // konkatenacja stringów (sklajanie łańcuchów tekstowych) return this.ID.ToString() + " " + this.Nazwa.ToString() + " " + this.Cena.ToString() + "zł"; } // metoda statyczna tworząca liste towarów do zakupu public static List GetTowary() { List towary = new List(); towary.Add(new Towary { ID = "01", Nazwa = "Ksiażka H.Sienkiewicz 'Potop'" , Cena = 10 }); towary.Add(new Towary { ID = "02", Nazwa = "Jabłka", Cena = 2.50 }); towary.Add(new Towary { ID = "10", Nazwa = "Cebula", Cena = 2.50 }); return towary; } } // klasa reprezentujaca zakupy public class Zakupy { // lista zakupów private List zakupy; // podliczenie zakupów private double suma; // konstruktor tworzący pusta listę zakupów public Zakupy() { zakupy = new List(); } // podlicza zakupy (ile trzeba zapłacić) public void LiczSume() { foreach (var item in zakupy) { suma += item.Cena; } } // zwraca wartość zakupów public double GetSuma() { return suma; } // dodaje towar do zakupów public void AddToZakupy(Towary towar) { zakupy.Add(towar); } // zwraca liste zakupów public List GetZakupy() { return zakupy; } // sprawdza, czy towar o danym Id jest już na liście // zwraca true, gdy dany towar jest już na liście // w przeciwnym przypadku zwraca false public bool HasId(String Id) { // pętal po wszystkich towarach na liscie towarów foreach (var item in zakupy) { // porównanie stringów if (Id == item.ID.ToString()) { // towar o danym Id jest już na liscie return true; } } // towaru o danym Id nie ma na liscie return false; } } }