Utworzenie narzędzia odpornego na błędy systemowe związane z dostępem do zasobów zewnętrznych (np. dysku). Student uczy się wykorzystywać bloki try-catch do przechwytywania specyficznych wyjątków biblioteki System.IO oraz gwarantować bezpieczeństwo operacji.
Budujesz prosty edytor tekstowy, który musi potrafić zapisać tekst notatki do pliku na dysku. Proces ten jest obciążony wieloma ryzykami: użytkownik może podać błędną ścieżkę, plik może być aktualnie używany przez inny program lub dysk może być chroniony przed zapisem. Twoim zadaniem jest stworzenie metody ZapiszDoPliku(string sciezka, string tresc), która zostanie w całości otoczona blokiem bezpiecznego dostępu. Musisz obsłużyć co najmniej trzy rodzaje błędów: błąd braku uprawnień (UnauthorizedAccessException), błąd niepoprawnego formatu ścieżki oraz ogólny błąd wejścia/wyjścia (IOException). System nie może po prostu przestać działać - musi poinformować użytkownika, dlaczego zapis się nie udał, i pozwolić na poprawienie nazwy pliku. Program w konsoli symuluje interakcję z dyskiem, wyświetlając status operacji. To zadanie uczy, jak ważna jest rola wyjątków przy komunikacji z systemem operacyjnym. Finalnie, nawet przy błędzie, program powinien zwolnić wszystkie zasoby pomocnicze (blok finally). Precyzyjna informacja diagnostyczna jest kluczem do zadowolenia użytkownika końcowego aplikacji.
Zaimplementowanie dwukierunkowej bazy słów z wykorzystaniem mechanizmu Dictionary<TKey, TValue>. Student uczy się optymalizować operacje wyszukiwania tekstowego oraz zarządzać unikalnością kluczy w z zbiorach danych.
Budujesz małe narzędzie edukacyjne ułatwiające naukę słówek z języka angielskiego. System powinien przechowywać bazę danych, w której polskie słowo jest kluczem, a jego angielski odpowiednik jest wartością. Użytkownik ma mieć możliwość dodawania nowych par słówek oraz błyskawicznego tłumaczenia wyrazów wpisanych w konsoli. Musisz zadbać o to, aby system informował, jeśli dane słowo zostało już wcześniej dodane do bazy, i uniemożliwiał nadpisanie go bez wiedzy operatora. Program powinien również oferować funkcję wyświetlenia całego aktualnie posiadanego słownictwa w formie sformatowanej tabeli. Dzięki zastosowaniu słownika, Twoja aplikacja będzie działać niezwykle szybko nawet przy setkach wpisów, co jest przewagą nad zwykłą listą. Co więcej, system powinien być odporny na wielkość liter (ignorowanie case) podczas wyszukiwania. Takie rozwiązanie symuluje działanie profesjonalnych aplikacji językowych i baz terminologicznych. Program kończy pracę na życzenie użytkownika po wyświetleniu statystyk Twojej aktualnej wiedzy.
Przetwarzanie rozbudowanych zbiorów obiektów z wykorzystaniem mocy obliczeniowej LINQ. Student uczy się łączyć filtrowanie, sortowanie oraz zaawansowaną agregację danych w kilku liniach czytelnego kodu.
Pracujesz nad systemem wspomagającym pracę drogówki, który przechowuje listę zarejestrowanych mandatów karnych (klasa Mandat z polami: Kierowca, PunktyKarne, Kwota, Miasto). Twoim zadaniem jest stworzenie bazy mandatów opartej na List<Mandat> i wypełnienie jej kilkunastoma przykładowymi pozycjami. Następnie system musi wygenerować kilka bardzo konkretnych raportów analitycznych przy użyciu zapytań LINQ. Pierwszy raport powinien listować tylko te mandaty, które zostały wystawione w Krakowie na kwotę powyżej 500 zł. Drugi raport ma wyliczyć sumę wszystkich punktów karnych zgromadzonych przez konkretnego kierowcę (filtrowanie po nazwisku). Trzecia analiza powinna znaleźć kierowcę, który zapłacił najwyższy mandat w całej bazie danych. Zastosowanie LINQ pozwoli Ci uniknąć pisania skomplikowanych i błędotwórczych pętli warunkowych. Dzięki temu Twój kod będzie wyglądał nowocześnie i profesjonalnie. Program musi wyświetlić wyniki raportów w przejrzysty sposób, stosując formatowanie walutowe dla kwot pieniężnych. Jest to świetna okazja do poćwiczenia metod takich jak Where(), Select(), Sum() oraz Max(). Finalnie system powinien podać ogólną sumę wpływów z mandatów zarejestrowanych w systemie.
Zapoznanie z działaniem stosu (LIFO – Last In, First Out) jako specyficznej formy kolekcji. Student uczy się modelować procesy, w których ostatnio dodany element jest pobierany jako pierwszy (np. układanie towaru w wysokich stosach).
Zaprojektuj system zarządzania wysokim stosem materiałów w magazynie papirusów. Ze względu na budowę regałów, pracownicy mogą dokładać towar tylko na górę stosu i tylko z góry go zdejmować – idealnie odzwierciedla to struktura Stack<string>. Twoja aplikacja powinna oferować funkcję "Przyjmij towar" (Push), która kładzie nową ryzę papieru na szczyt stosu, oraz "Wydaj towar" (Pop), która pobiera element z samej góry. Dodatkowo musisz zaimplementować funkcję sprawdzenia, jaki towar znajduje się obecnie na wierzchu bez jego zdejmowania (Peek). Bardzo ważne jest zabezpieczenie programu przed próbą wydania towaru, gdy stos jest całkowicie pusty – musisz obsłużyć ten przypadek, sprawdzając właściwość Count lub stosując blok try-catch dla InvalidOperationException. Użytkownik w konsoli symuluje pracę magazyniera, wpisując nazwy przyjmowanych partii materiału. Wyświetlaj na bieżąco stan stosu, pokazując co jest aktualnie „pod ręką”. Zadanie to uczy rozumienia struktur pamięciowych i ich wpływu na logikę biznesową procesów logistycznych. Finalnie program powinien wyświetlić, ile pozycji pozostało w magazynie po serii wydań towaru.
Wykorzystanie zaawansowanych operatorów grupowania i selekcji LINQ do analizy jakościowej zbiorów danych. Student uczy się wyciągać wnioski statystyczne z surowych list obiektów o różnorodnych atrybutach.
Zostałeś poproszony przez dziekanat o przygotowanie szybkiej analizy wyników sesji egzaminacyjnej. Posiadasz listę obiektów Student (pola: Imię, Nazwisko, Ocena, Przedmiot), zapisaną w List<Student>. Twoim celem jest użycie LINQ do wygenerowania raportu sukcesu dla poszczególnych przedmiotów. Musisz obliczyć średnią ocen z Matematyki, znaleźć studenta z najwyższą oceną z Informatyki oraz podać, ile osób łącznie zdało egzamin (ocena >= 3.0). Dodatkowo Twoim wyzwaniem jest użycie metody GroupBy(), aby pogrupować studentów według ocen i sprawdzić, która ocena pojawiała się najczęściej. Dzięki technologii LINQ wszystkie te skomplikowane operacje wykonasz szybko i przy minimalnej ilości kodu. Program w konsoli powinien wyświetlić przejrzyste zestawienie punktowe dla każdego przedmiotu oddzielnie. To zadanie uczy, jak w profesjonalny sposób przetwarzać dane edukacyjne i biznesowe w nowoczesnym środowisku programistycznym. Wykaż w sprawozdaniu, jak łatwo można zmienić kryteria analizy (np. liczenie średniej tylko dla kobiet), zmieniając jedynie warunek w zapytaniu .Where(). Program kończy pracę po wyświetleniu komunikatu o pomyślnej archiwizacji wyników. Jest to przykład praktycznego zastosowania C# w administracji i analityce.