Dokumentacja Techniczna


Inżynieria oprogramowania

Projekt „Baza dla Radia”

Program przechowujący bazę muzyki, którego celem jest wspomaganie spikera radiowego.

Dokumentacja Techniczna

Kula Krzysztof

Lab 3

  1. Wstęp

Diagramy UML są umieszczone w folderze projekt, diagram klas obejmuje praktycznie tylko jedną klasę okna, która zawiera wszystkie metody zapewniające funkcjonalność programu. W związku, z czym że program został napisany w IDE wxDev-C++ zachowane są domyślne nazwy kontrolek, przycisków pól tekstowych, pisanie tak małej aplikacji nie wymagało zmian tych nazw, przez co diagram klas nie jest zbyt czytelny, jednak mam nadzieję, że ta dokumentacja wyjaśni wszystkie nieścisłości. Do połączenia z bazą danych w Firebird wykorzystywana jest biblioteka IBPP.

  1. Opis klas wxWidgets.

WxDevC++ już przy tworzeniu nowego projektu stworzył szkielet aplikacji obejmujący 3 pliki klasy aplikacji BazaDlaRadiaApp.* typów .h, .cpp oraz .rc. Jest to szkielet każdej aplikacji wxWidgets, zawierają one klasę:

class BazaDlaRadiaFrmApp : public wxApp

Dziedziczącą jak widać po klasie wxApp.

Metoda tej klasy:

bool BazaDlaRadiaFrmApp::OnInit()

{

BazaDlaRadiaFrm* frame = new BazaDlaRadiaFrm(NULL);

SetTopWindow(frame);

frame->Show();

return true;

}

Powoduje wywołanie okna programu, którego implementacja, deklaracja i graficzny model znajdują się w kolejnych 3 plikach BazaDlaRadiaFrm.cpp, BazaDlaRadiaFrm.h oraz BazaDlaRadiaFrm.wxform zawierający graficzny wygląd okna, umieszczone kontrolki itd.

Plik ten należy otwierać tylko w wxDev-C++ w innym przypadku zobaczymy jedynie opis okna. Wszystkie metody obsługujące np. kliknięcie przycisku zapisz zostały wygenerowane przez program (oczywiście bez jakiejkolwiek zawartości). Do tej grupy zaliczają się także metody obsługujące wybranie pozycji na liście wyszukiwanie, czy zmiana zakładki.

  1. Metody i atrybuty używane przy połączeniu z bazą danych

Zarówno w przypadku, gdy tworzona jest nowa baza jak i wtedy, gdy chce się tylko z nią połączyć wykorzystywana jest metoda OtworzBaze(file,false), przy czym file to zmienna tekstowa przechowująca ścieżkę dostępu do pliku bazy danych, a false i true to zmienne logiczną określające czy metoda ma stworzyć nową bazę czy tylko się z nią połączyć. Metoda ustawia zmienną globalną otwartoBaze na true. Dokładniejszy opis tej metody umieszczę przy okazji tworzenia nowej bazy danych.

Na wszelki wypadek w każdym przypadku wywołuje metodę, ZamknijBaze() która z zależności od zmiennej globalnej otwartoBazę próbuje zamknąć bazę, ustawia ją na false po ewentualnym jej zamknięciu.

    1. Połączenie z istniejącą bazą danych

Metoda obsługująca wciśnięcie toolbutton2 powoduje połączenie się z istniejącą bazą danych cała jej nazwa w celu łatwiejszego odnalezienia w kodzie programu:

void BazaDlaRadiaFrm::WxToolButton2Click(wxCommandEvent& event)

Kod obsługujący przycisk jest krótki i przejrzysty, więc poza komentarzami nie muszę go dodatkowo wyjaśniać. Wyjaśnienie metody OtworzBaze(…,…) znajdzie się w następnym podrozdziale.

    1. Tworzenie nowej bazy danych

Obsługa przycisku nowej bazy danych jest analogiczna do otwierania istniejącej, z tym że zmienia się parametr metody OtworzBaze (file,true):

void BazaDlaRadiaFrm::WxToolButton1Click(wxCommandEvent& event)

Metoda: void BazaDlaRadiaFrm::OtworzBaze(wxString path, bool tworzNowa)

W zależności od parametru wywołania metoda usuwa istniejący plik bazy danych-, jeśli istnieje, a jeśli połączenie się powiedzie to metoda tworzy tablice w bazie danych, klucze w nich oraz jeden widok, którego jednak aplikacja nie używa. Wszystkie etapy są skomentowane i nie powinny sprawiać problemów w interpretacji. Kolejno przygotowywane są zmienne potrzebne do połączenia, usuwany plik, jeśli ma być tworzona nowa baza. Po tym następuje próba połączenie i uruchomienie nowej transakcji tr1 i „statement” st1 - używanego do zadawania zapytań do bazy danych. Konstrukcja zapytania odbywa się zawsze w zmiennej wxString zwykle o nazwie zbliżonej do „statement” a po skonstruowaniu przepisaniu do zmiennej typu std::string i w takiej wersji jako parametr podane, do st1.

st1->Prepare(polecenie);//przygotowuje polecenie

st1->Execute();//wykonuje polecenie

Na koniec metoda wypisuje nazwę pliku bazy danych na statusbar widoczny u dołu okna, oraz pobiera dane z wszystkich tabel używając metody Uaktualnij***();

Jako ostatnie wywoływane jest polecenie pokazujące użytkownikowi wszystkie zakładki pracy na bazie danych.

  1. Dopisywanie nowych danych do bazy danych

Dopisywanie nowych danych do bazy danych zawsze rozpoczyna się od wypełnienia wszystkich danych w danej zakładce, istnieje podział na dane niezbędne i te, które mogą być pominięte. Kolejność wprowadzania danych do tabel nie jest przypadkowa i odpowiada kolejności zakładek (od lewej strony) pierwszy Zespól, następnie Album i Artysta. Aby wprowadzić dane utworu musimy posiadać dane Albumu oraz Gatunku. Jest to widoczne w dokumentacji bazy danych, a także w cyfrach obok pól wyszukiwania kolejno 1,2,2,3,4 chociaż nowy gatunek może być wprowadzany niezależnie od innych danych to jednak logicznie zwykle bywa określenie go przed danym utworem.

Obsługa wszystkich przycisków jest na tyle podobna że w semantyce metod i parametrów używałem podobnych sformułowań więc zrozumienie jednego powinno zapewnić zrozumienie wszystkich.

Metody wywoływane dla odpowiednich przycisków to:

void BazaDlaRadiaFrm::WxButton3Click(wxCommandEvent& event) - Zespół

void BazaDlaRadiaFrm::WxButton4Click(wxCommandEvent& event - Artysta

void BazaDlaRadiaFrm::WxButton5Click(wxCommandEvent& event) -Album

void BazaDlaRadiaFrm::WxButton6Click(wxCommandEvent& event) - Gatunek

void BazaDlaRadiaFrm::WxButton7Click(wxCommandEvent& event) - Utwór

    1. Sprawdzenie wypełnienia kluczowych pól z danymi

Naciśnięcie każdego przycisku powoduje sprawdzenie czy użytkownik wprowadził wszystkie dane. Jest warunkiem dalszego wprowadzania danych. Zwracają TRUE jeśli wszystkie dane są wprowadzone.

Nazwy metod to:

sprawdzutwor() dla utworu i analogicznie dla innych sprawdz***();

Po sprawdzeniu wypełnienia metoda do osobnych zmiennych są wczytywane wszystkie podane wartości, co później ułatwia korzystanie z nich.

    1. Pobranie wartości klucza podstawowego z bazy danych

Wykorzystując konstrukcję podobną do:

try{

st1->Prepare("select MAX(IDUTWORU) FROM UTWOR");//zapytanie bazy danych

st1->Execute();

while(st1->Fetch()){//sprawdzenie czy baza zwrociła jakies dane

st1->Get(1,idUtwor);

idUtwor++;

}//while

if(idUtwor < 1) idUtwor = 1;

}catch(IBPP::Exception& e) {

wxMessageBox(e.what(), _T("Błąd"),wxOK | wxICON_EXCLAMATION, this);

//jesli baza nie zwrocila wynikow uzywa 1

idUtwor=1;

}

Sprawdzany jest maksymalny indeks w tablicy i zapisywany jest do zmiennej, jeśli jeszcze nie ma danych przyjmowane jest 1.

    1. Dodanie nowego rekordu do tabeli bazy danych

Kolejnym krokiem jest wpisanie wartości do tabeli, najpierw przygotowywane jest zapytanie:

st1->Prepare("INSERT INTO UTWOR (IDUTWORU,IDALBUMU,IDGATUNKU,TYTUL,DLUGOSC,DATANAGRANIA,DATASINGLA,TEKSTUTWORU,DODATKOWYOPIS) "

"VALUES (?,?,?,?,?,?,?,?,?)");

Następnie dla każdego „?” dodawane są do polecenia konkretne wartości:

st1->Set(1, idUtwor);

st1->Set(2, idAlbumu);

Pierwszy parametr oznacza kolejność w zapytaniu, drugi zmienną, którą należy przypisać.

Wykonanie odbywa się poleniem: st1->Execute();

    1. Wyczyszczenie wypełnionych danych

Na koniec aby użytkownik zauważył zmianę - a więc był pewien że dane zostały wprowadzone wartości pól tekstowych są czyszczone, odpowiednio dla utworu są to:

WxEdit17->SetLabel("");

WxEdit21->SetLabel("");

WxEdit22->SetLabel("");

    1. Wywołanie metody Uaktualnij***() -pobranie danych z bazy danych

Na koniec wywoływana jest metoda UaktualnijUtwory(0,0);

Parametry jej wywołani są inne dla każdej z nich, ale zasada pozostaje ta sama, jako parametr przyjmują indeks powiązanego z daną tabelą pola w tabeli nadrzędnej inaczej mówiąc w takiej którą trzeba stworzyć przed nią samą, np. Album musi być nagrany przez konkretny zespół. Parametry te są wykorzystywane do selekcji wartości, wybierane są te spełniające parametry, z tym że 0 oznacza wszystkie utwory. Dla utworu 0,0 oznacza gatunek i album.

Metoda wykorzystuje inną metodę o nazwie zbliżonej do :

PobierzTytulyUtworow(idalbumu, idgatunku)

Metoda ta zapisuje do tablic globalnych indeksy i nazwy utworów poprzez użycie polecenia select IDUTWORU,TYTUL FROM UTWOR where IDALBUMU = idalbumu AND IDGATUNKU = idgatunku

Po wykonaniu polecenia dane zwrócone przez bazę danych są zapisywane do dwóch zmiennych tablicowych

while(st1->Fetch()){//sprawdzenie czy baza zwróciła jakieś dane

st1->Get(1, indeks);//pobiera jedną daną

indeksyUtworow.Add(indeks);// zapisuje zmienną do tablicy

st1->Get(2, nmag);

nazwyUtworow.Add(nmag);

}//while

Na koniec w instrukcji return metoda zwraca ilość wczytanych danych.

  1. Zakładka wyszukiwania

W zakładce widoczne są 4 obiekty wyboru, obszerne pole tekstowe oraz przycisk pozwalający na czyszczenie zawartości pola tekstowego. Obiekty wyboru typu wxComboBox przy wybraniu konkretnej wartości pobierają dane z odpowiedniej tabeli bazy danych, które następnie wyświetlane są w polu tekstowym.

    1. Wypisywanie danych wybranej pozycji

Na początku podawane jest zapytanie do bazy danych typu selekt wybierające wszystkie dane danego wiersza. Następnie w pętli while są wczytywane wszystkie zwrócone wiersze, choć zwykle powinien być tylko jeden zabezpiecza to program przed wykonaniem się w przypadku jakiegoś błędu- nie zwrócenia żadnych danych.

while(st1->Fetch())

{

st1->Get(1, nmag);

statement = nmag.c_str();

WxMemo1->AppendText("Artysta: Imie: " + statement);

statement.Clear();

Powyższy kod z pewnymi modyfikacjami odnoszącymi się do danego zwracanego typu danej w tabeli jest praktycznie taki sam dla każdej danej.

St1->Get(1,nmag); pobiera pierwszą daną do zmiennej nmag. Po czym jest ona przepisywana do zmiennej tekstowej wxString statement a następnie dodawana do WxMemo1. Po dodaniu czyszczona jest zmienna statement.

    1. Uaktualnienie danych w polach zależnych

Dodatkowo wybór zespołu, albumu i gatunku powodują zmiany w zależnych od nich obiektach:

Zespół zmienia Albumy i Artystów.

Gatunek i Album zmieniają Utwory.

Zmiany te polegają np. na wyświetlaniu tylko artystów z danego zespołu i tylko albumów tego zespołu. Możliwe jest to dzięki wykorzystaniu już omówionych metod Uaktualnij***() oraz Pobierz***(). Metoda Pobierz***() wczytuje dane z bazy danych, natomiast Uaktualnij***() wywołuje metodę wczytaj, oraz wprowadza do wszystkich pól wyboru dane pobrane z bazy danych.

    1. Zmiana zakładki - koniec wyszukiwania

Metoda obsługująca zmianę zakładki jest odpowiedzialna za wczytanie wszystkich danych przez metodę Uaktualnij***() - metoda ta bowiem przy zmianach opcji wyszukiwania zmienia globalną listę np. Albumów więc w przypadku gdyby użytkownik chciał dodać nowy album spoza wybranych w wyszukiwaniu musiałby ponownie otwierać zakładkę wyszukiwania i usuwać wybory w polach ComboBox. Metoda obsługująca zmianę zakładek robi to za użytkownika sama wybierając w każdym z tych pól wyboru ostatnią pozycję:

WxComboBox2->SetSelection(WxComboBox2->GetCount()-1);

Oraz wywołując Uaktualnij***() dla każdej z tabel.

  1. Podsumowanie

Program jest zakończony i (przynajmniej na razie) nie przewidywany jest jego dalszy rozwój. Wszystko się jednak może zdarzyć, ponieważ jeszcze nie wybrałem nawet promotora. Wszelkie pochwały lub nagany kierować na adres krzych.super@wp.pl. Program nie jest objęty żadną licencją aczkolwiek chciałbym być poinformowany o jego ewentualnym użyciu lub wykorzystaniu kodu źródłowego.



Wyszukiwarka

Podobne podstrony:
20 Rysunkowa dokumentacja techniczna
09 Posługiwanie się dokumentacją techniczną (2)
Dokumentacja techniczna
05 Posługiwanie się dokumentacją techniczną (2)
05 Posługiwanie się dokumentacją techniczną
Posługiwanie się dokumentacją techniczną
02 Posługiwanie się dokumentacją techniczną
OBIEG DOKUMENTÓW, Technik prac biurowych
SA Klient dzialu dokumentacji technicznej
02 Posługiwanie się dokumentacją techniczną
listwa zaciskowa LZ w szafie SO numeracja i opis, ELEKTRYCZNOŚĆ, Dokumentacja techniczna Rokita
dokumentacja techniczna rysunkowa
6 Posługiwanie się dokumentacją techniczną (2)
dokumentacja techniczna
Rys powykonawczy usytuowanie aparatury w szafie SZW, ELEKTRYCZNOŚĆ, Dokumentacja techniczna Rokita
02 Posługiwanie się dokumentacją techniczno technologiczną
DOKUMENTACJA TECHNICZNO RUCHOWA regulatory tyrystorowe typu REB
Ogólne informacje na temat zasad tworzenia dokumentacji technicznej z badań doświadczalnych
Zał. nr 1 DEKL. ZGODN. CE SZAFY SZW, ELEKTRYCZNOŚĆ, Dokumentacja techniczna Rokita
Wartosci dynamometryczne, Dokumenty techniczne

więcej podobnych podstron