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;
}
}
}