Zadanie egzaminacyjne: ParagonNaFakture
Wykonaj aplikację desktopową WPF o nazwie ParagonNaFakture. Program ma wczytywać dane z pliku paragon.json, wyświetlać pozycje paragonu w tabeli, obliczać podsumowanie kwot oraz umożliwiać zapis i wydruk faktury VAT na podstawie wczytanego paragonu.

Struktura projektu
W projekcie utwórz następujące katalogi i pliki:
ParagonNaFakture
│
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── paragon.json
│
└── Model
└── Paragon.cs
W katalogu Model utwórz plik Paragon.cs, a w nim klasy:
Paragon
PozycjaParagonu
Klasa Paragon powinna przechowywać:
Sklep
DataWystawienia
Pozycje
Klasa PozycjaParagonu powinna przechowywać:
Kod
Nazwa
Ilosc
CenaJednostkowa
Wartosc
Właściwość Wartosc powinna być obliczana na podstawie ilości i ceny jednostkowej.
Plik paragon.json
{
"sklep": "Sklep Komputerowy",
"dataWystawieniaParagonu": "2024-05-24",
"waluta": "PLN",
"stawkaVat": 23,
"pozycje": [
{
"lp": 1,
"kod": "KB001",
"nazwa": "Klawiatura mechaniczna Logitech G Pro",
"ilosc": 1,
"cenaJednostkowa": 499.00,
"wartosc": 499.00
},
{
"lp": 2,
"kod": "MS002",
"nazwa": "Mysz bezprzewodowa Logitech G Pro X Superlight",
"ilosc": 1,
"cenaJednostkowa": 599.00,
"wartosc": 599.00
},
{
"lp": 3,
"kod": "MON003",
"nazwa": "Monitor 27\" Dell G2724D",
"ilosc": 1,
"cenaJednostkowa": 1199.00,
"wartosc": 1199.00
},
{
"lp": 4,
"kod": "CPU004",
"nazwa": "Procesor Intel Core i7-13700K",
"ilosc": 1,
"cenaJednostkowa": 1699.00,
"wartosc": 1699.00
},
{
"lp": 5,
"kod": "MB005",
"nazwa": "Płyta główna ASUS TUF Z790-PLUS WiFi",
"ilosc": 1,
"cenaJednostkowa": 1099.00,
"wartosc": 1099.00
},
{
"lp": 6,
"kod": "RAM006",
"nazwa": "Pamięć RAM Kingston Fury 32GB DDR5 6000MHz",
"ilosc": 1,
"cenaJednostkowa": 599.00,
"wartosc": 599.00
},
{
"lp": 7,
"kod": "GPU007",
"nazwa": "Karta graficzna MSI GeForce RTX 4070 Ti SUPER",
"ilosc": 1,
"cenaJednostkowa": 3499.00,
"wartosc": 3499.00
},
{
"lp": 8,
"kod": "SSD008",
"nazwa": "Dysk SSD Samsung 990 PRO 2TB NVMe",
"ilosc": 1,
"cenaJednostkowa": 749.00,
"wartosc": 749.00
},
{
"lp": 9,
"kod": "PSU009",
"nazwa": "Zasilacz be quiet! Pure Power 12 M 850W",
"ilosc": 1,
"cenaJednostkowa": 649.00,
"wartosc": 649.00
},
{
"lp": 10,
"kod": "CASE010",
"nazwa": "Obudowa Fractal Design Meshify 2",
"ilosc": 1,
"cenaJednostkowa": 599.00,
"wartosc": 599.00
}
],
"podsumowanie": {
"liczbaPozycji": 10,
"sumaNetto": 11689.43,
"vat23": 2688.57,
"sumaBrutto": 14378.00
}
}
W projekcie umieść plik paragon.json zawierający dane paragonu ze sklepu komputerowego. Plik powinien zawierać 10 produktów, na przykład:
klawiatura, mysz, monitor, procesor, płyta główna, pamięć RAM, karta graficzna, dysk SSD, zasilacz, obudowa
Każdy produkt powinien mieć:
kod produktu
nazwę produktu
ilość
cenę jednostkową
Plik paragon.json ustaw tak, aby był kopiowany do katalogu wyjściowego programu.
Wymagania dotyczące interfejsu
Aplikacja powinna mieć nowoczesny, ale prosty układ możliwy do wykonania w WPF.
Należy zastosować główny layout typu:
Grid
Główne okno powinno być podzielone na trzy części:
lewy panel nawigacyjny
środkowy panel z danymi paragonu
prawy panel z podsumowaniem i fakturą VAT
Wewnątrz paneli należy wykorzystać:
Grid
StackPanel
Border
DataGrid
TextBlock
Button
Separator
Kolorystyka aplikacji
Zastosuj jasny, czytelny motyw aplikacji.
Przykładowe kolory:
tło główne: #F4F7FB
białe panele: #FFFFFF
obramowania: #DDE3EA
kolor główny niebieski: #0B5ED7
jasnoniebieskie tło aktywnego przycisku: #E8F1FF
zielony komunikat sukcesu: #DCFCE7
obramowanie zielonego komunikatu: #86EFAC
tekst ciemny: #0F172A
tekst pomocniczy: #64748B
Panele powinny mieć zaokrąglone rogi przy użyciu właściwości:
CornerRadius
Wymagane kontrolki
W aplikacji użyj następujących kontrolek:
Button
TextBlock
DataGrid
Border
StackPanel
Grid
Separator
Przyciski:
Wczytaj paragon
Wybierz plik
Wydrukuj fakturę VAT
Zapisz fakturę do pliku
Tabela DataGrid powinna wyświetlać kolumny:
Kod
Nazwa produktu
Ilość
Cena jedn.
Wartość
Działanie programu
Po uruchomieniu aplikacji użytkownik powinien widzieć pusty widok gotowy do wczytania pliku.
Po kliknięciu przycisku Wybierz plik lub Wczytaj paragon program powinien umożliwić wybranie pliku paragon.json.
Po poprawnym wczytaniu pliku program powinien:
wyświetlić nazwę pliku
wyświetlić ścieżkę do pliku
wstawić produkty do tabeli DataGrid
policzyć liczbę pozycji
obliczyć sumę netto
obliczyć VAT 23%
obliczyć sumę brutto
wyświetlić nazwę sklepu
wyświetlić datę wystawienia paragonu
pokazać komunikat „Paragon wczytany”
Faktura VAT
Na podstawie wczytanego paragonu program powinien umożliwiać:
wydrukowanie faktury VAT
zapisanie faktury VAT do pliku tekstowego
Faktura powinna zawierać:
tytuł „FAKTURA VAT”
nazwę sklepu
datę wystawienia
listę produktów
sumę netto
wartość VAT 23%
sumę brutto
Jeżeli użytkownik spróbuje zapisać lub wydrukować fakturę bez wcześniejszego wczytania paragonu, program powinien wyświetlić komunikat:
Najpierw wczytaj paragon.
Kryteria oceny
Uczeń otrzymuje punkty za:
utworzenie poprawnej struktury projektu
przygotowanie pliku paragon.json
utworzenie klas Paragon i PozycjaParagonu
poprawne wczytanie danych z JSON
wyświetlenie danych w DataGrid
obliczenie netto, VAT i brutto
wykonanie nowoczesnego layoutu WPF
użycie wskazanych kontrolek
obsługę zapisu faktury do pliku
obsługę wydruku faktury
czytelność kodu i nazw zmiennych
Program powinien być wykonany w języku C# w technologii WPF.

