Języki i metodologia programowania.

 

Ćwiczenie 9

 

Programowanie w języku C#

Opis zadania

Wstęp

W trakcie laboratorium będziemy sukcesywnie modyfikowali program obsługi kont bankowych, który zaczęliśmy pisać w trakcie Ćwiczenia 9.

Zadania do wykonania

  1. Ze względów organizacyjnych wskazane jest utworzyć nowy projekt konsolowy o nazwie TestKonta1.

Należy pobrać ze strony WWW: pliki KontoBankoweSzkielet.cs i UtworzKonto_public.cs. Pobrany program należy zapisać w katalogu nowo utworzonego projektu (~\TestKonta1) pod nazwami KontoBankowe.cs i UtworzKonto.cs. Z projektu usunąć domyślnie stworzoną klasę, a dodać klasy KontoBankowe i UtworzKonto.

UWAGA: Przed dokonaniem jakichkolwiek modyfikacji proszę sprawdzić, czy ściągnięte programy można skompilować i uruchomić.

  1. Kolejnym etapem ćwiczenia jest enkapsulacja publicznych pól składowych klasy KontoBankowe. W tym celu należy w klasie KontoBankowe zmienić deklarację zmiennych z public na private. W wyniku tych zmian przestaną one być widoczne w klasie UtwórzKonto.
  2. W celu usunięcia błędow kompilacji wynikających ze zmian w poprzednim punkcie, należy dopisać nową metodę publiczną Ustaw w klasie KontoBankowe. Zadaniem tej metody będzie ustawianie odpowiednich wartości w polach klasy. Argumenty przekazywane do metody to numer konta i saldo na koncie.

Poniżej został podany odpowiedni fragment kodu:

public void Ustaw(long numer, double saldo){
numerKonta = numer;
stanKonta = saldo;
typKonta = "biezace";
}
 

4.      Po tych zmianach można skompilować plik z klasą KontoBankowe.cs. UWAGA: Pola prywatne klasy KontoBankowe będą niewidoczne w klasie UtworzKonto, stąd na tym etapie przy próbie kompilacji programu pojawią się komunikaty o błędach. Proszę zastanowić się nad ich treścią.

  1. W następnym kroku należy dokonać odpowiednich modyfikacji w pliku UtworzKonto.cs i zastapić tam bezpośrednie odwołania sie do pól (już teraz prywatnych) klasy KontoBankowe. Zmiany należy dokonać we fragmencie kodu:
try{

noweKonto.numerKonta=long.Parse(Console.ReadLine());

                               Console.Write("Proszę podać typ konta: ");

                               noweKonto.typKonta=Console.ReadLine();

                               Console.Write("Proszę podać saldo konta: ");

      noweKonto.stanKonta=double.Parse(Console.ReadLine());}

6.      Powyższy kod proszę zmodyfikować w następujący sposób:

                               long tLong=long.Parse(Console.ReadLine());

                               Console.Write("Proszę podać typ konta: ");

                               string tString=Console.ReadLine();

                               Console.Write("Proszę podać saldo konta: ");

                               double tDouble=double.Parse(Console.ReadLine());

      noweKonto.Ustaw(tLong, tDouble, tString);

Wykonane zmiany uniemożliwiają bezpośrednie odwoływanie się do pól klasy.

  1. Kolejnym etapem modyfikacji będzie zmiana bezpośredniego odwołania do pól prywatnych w metodzie UtworzKonto.WypiszKonto. W tym celu należy najpierw w klasie KontoBankowe utworzyć trzy nowe metody: Numer(), Typ() i Saldo(). Metody te będą zwracały odpowiednio: numerKonta, typKonta i stanKonta. Po dodaniu tych metod, należy zmienić w metodzie UtworzKonto.WypiszKonto odwołania do pól prywatnych na wywołanie metod Numer(), Typ() i Saldo().

Po wprowadzeniu zmian należy skompilować plik, w którym znajduje się metoda Main (UtworzKonto.cs).

  1. Kolejne zmiany będą dotyczyły ustawienia numeru konta w taki sposób, żeby był on unikalny dla nowo tworzonego obiektu. W tym celu zostanie dodane nowe pole prywatne i statyczne typu long o nazwie nastepnyNumerKonta. Dostęp do tego pola, a właściwie możliwość odczytania numeru następnego konta będzie można uzyskać poprzez statyczną metodę prywatną NastepnyNumer(). Metoda ta po zwróceniu numeru następnego konta (typu long), będzie zwiększała o jeden wartość pola nastepnyNumerKonta.
  2. Po przeprowadzeniu tych zmian należy zmodyfikować odpowiednio metodęKontoBankowe.Ustaw(...) tak, żeby przyjmowała tylko jeden parametr saldo. Odpowiednie modyfikacje należy przeprowadzić również w pliku UtworzKonto.cs.
    Teraz już nie trzeba będzie pobierać numeru konta od użytkownika - będzie on generowany automatycznie.
  3. W klasie KontoBankowe należy dopisać metodę publiczną Wplata, która jako argument będzie przyjmowała kwotę wpłaty (double) i będzie zwracała wartość stanKonta (również double). Metoda ta modyfikuje (zwiększa) pole stanKonta o wartość argumentu tej metody.
class KontoBankowe{
...
public double Wplata(double kwota){
stanKonta += kwota;
return stanKonta;
}
...
}

Uwaga: Metoda Wplata mogłaby również nie zwracać żadnej wartości, bo stanKonta jest już uaktualniany w tej metodzie.

  1. W celu przetestowania metody Wplata należy teraz dopisać w pliku UtworzKonto.cs metodę TestWplaty. Metoda ta nie będzie zwracała żadnej wartości, zaś jako argument będzie pobierała referencję do obiektu klasy KontoBankowe.
 
 
class UtworzKonto{
...

public static void TestWplaty(KontoBankowe konto)

                  {

                 Console.Write("Proszę podać kwotę wpłaty: ");

                 try

                 {

                         double kwota=double.Parse(Console.ReadLine());

                         konto.Wplata(kwota);

                 }

                 catch(System.FormatException e)

                 {

                         Console.WriteLine("Wystąpił wyjątek podczas czytania z klawiatury:"+e);

                 }

}
...
}
 
  1. Kolejnym etapem jest dopisanie wywołania metody TestWplaty w metodzie Main. Metodę tę wywołujemy dla dwóch obiektów klasy KontoBankowe (kowalski, nowak).
 
class UtworzKonto{
...
public static void Main(String[] arg){
KontoBankowe kowalski = NoweKontoBankowe();
WypiszKonto(kowalski);
TestWplaty(kowalski);
WypiszKonto(kowalski);
 
KontoBankowe nowak = NoweKontoBankowe();
WypiszKonto(nowak);
TestWplaty(nowak);
WypiszKonto(nowak);
}
...
}

Po wykonaniu tych czynności należy skompilować, a następnie przetestować program podając różne kwoty wpłaty.

  1. Kolejną metodą zwiększającą funkcjonalność programu, będzie metoda Wyplata. Metoda ta podobnie jak metoda Wplata będzie pobierała jako argument kwotę pożyczki, zaś wartością zwracaną będzie zmienna logiczna typu boolean. Wartość zwracanej przez metodę zmiennej identyfikuje, czy operacja powiodła się, czy też zakończyła się niepowodzeniem. Sytuacja taka może powstać przy próbie pożyczki dla konta, na którym nie ma wystarczających środków.
class KontoBankowe{
...
public bool Wyplata(double kwota){
bool dostepneSrodki = stanKonta >= kwota;
if(dostepneSrodki){
stanKonta -= kwota;
}
return dostepneSrodki;
}
...
}
 
  1. W celu przetestowania metody Wyplata należy teraz dopisać w pliku UtworzKonto.cs metodę TestWyplaty. Metoda ta nie będzie zwracała żadnej wartości, zaś jako argument będzie pobierała referencję do obiektu klasy KontoBankowe.
class UtworzKonto{
...
public static void TestWyplaty(KontoBankowe konto){
Console.Write("Prosze podac kwote do wypłacenia: ");
try{
double kwota = double.Parse(Console.ReadLine());
if(!konto.Wyplata(kwota) ){
Console.WriteLine("Brak wystarczajacych srodkow na koncie");           
}
}
catch(System.FormatException e){
Console.WriteLine("Wystapil wyjatek w czasie czytania z klawiatury: " + e) ;
}
}
....
}
 
  1. Kolejnym etapem jest dopisanie wywołania metody TestWyplaty w metodzie Main. Metodę tę wywołujemy dla dwóch obiektów klasy KontoBankowe (kowalski, nowak).
class UtworzKonto{
...
public static void Main(String[] arg){
KontoBankowe kowalski = NoweKontoBankowe();
WypiszKonto(kowalski);
TestWplaty(kowalski);
WypiszKonto(kowalski);
TestWyplaty(kowalski);
WypiszKonto(kowalski);
 
KontoBankowe nowak = NoweKontoBankowe();
WypiszKonto(nowak);
TestWplaty(nowak);
WypiszKonto(nowak);
TestWyplaty(nowak);
WypiszKonto(nowak);
}
...
}
 
  1. Ostatnim etapem ćwiczenia jest dokumentacja przeprowadzonych czynności. Można również napisać odpowiednie ,,pułapki'', w metodzie Wplata, które będą sprawdzały, czy podana kwota nie jest ujemna.
  2. W przypadku problemów z uruchomieniem samodzielnie napisanego programu proszę spróbować przeanalizować przykładową zawartość plików UtworzKonto.cs i KontoBankowe.cs realizujące ww. zalecenia.