Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja. Paweł Paduch paduch@tu.kielce.pl
|
|
- Izabela Owczarek
- 8 lat temu
- Przeglądów:
Transkrypt
1 Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja Paweł Paduch paduch@tu.kielce.pl
2 Rozdział 1 Wstęp Dzisiejsze zajęcia będą kontynuacją implementowania interfejsu. Skupimy się także na testowaniu aplikacji pod kontem ergonomii i niezawodności. W ocenie interfejsu może pomóc lista kontrolna Ravdena Johnsona (do znalezienia w Internecie). Jest to opracowany w 1989 r. zbiór pytań i punktów kontrolnych dotyczących projektu informatycznego. Między innymi sprawdzana jest spójność interfejsu, komunikaty do użytkownika, klarowność łatwość obsługi itd. Listę tę, należy sobie przeczytać i stosować także w swoich przyszłych projektach. 1
3 Rozdział 2 Okno edycji użytkowników Na ostatnich zajęciach poradziliśmy sobie ze zunifikowaniem nazewnictwa w bazie danych a co za tym idzie także w naszej bibliotece RezerwacjeLib. Poznaliśmy podstawowe elementy programowania aplikacji WPF takie jak kontrolki, zdarzenia czy tworzenie nowych okien. Na koniec został pokazany przykład podpięcia danych słownikowych jako kontrolki typu ComboBox w tabelce Zasoby. Pierwszym zadaniem będzie stworzenie okna zarządzającego osobami. Będzie to tabelka ze wszystkimi potrzebnymi danymi takimi jak imię, nazwisko, uprawnienie, tytuł, mail, hasło czy daty dodania i modyfikacji. Do tej pory w większości okien nie przywiązywaliśmy uwagi do zachowania się kontrolek podczas skalowania okna. Tym razem postaramy się prawidłowo i w miarę estetycznie rozmieścić elementy i skonfigurować ich zachowanie podczas zmiany rozmiaru okna. 2.1 Konfiguracja wyglądu Zadanie zaczynamy oczywiście od dodania nowego okna z menu projektu wybieramy Add Window. Nazywamy go WinOsoby. Po utworzeniu zmieniamy jego tytuł na Osoby. Dodajemy tabelkę i przyciski. Oprogramowujemy pozycję Osoby w menu głównego okna tak by otworzyło nam się okienko z wypełnioną tabelką. Jak zwykle pamiętamy o ustawieniu odpowiedniej przestrzeni nazw w pliku *.cs. Można uruchomić i sprawdzić czy dane dociągnęły się jak należy. Wygląd okna powinien przypominać ten na rysunku 2.1. Rysunek 2.1: Okienko edycji osób. Proszę zwrócić uwagę na kolejność kolumn, poprawione nagłówki i format daty. Dodatkowo wszystkie kolumny gdzie występował klucz obcy zastąpione 2
4 zostały odpowiednimi polami combobox zawierającymi słowniki. Jak stworzyć słowniki można sobie przypomnieć z ostatniej instrukcji laboratoryjnej. Po utworzeniu domyślnej tabeli, daty dodania i modyfikacji osadzone zostaną w bardzo funkcjonalnej kontrolce pozwalającej wprowadzać datę z kalendarza. Jednak nasze daty, zarówno dodania jak i edycji aktualizują się same. Powinniśmy więc ustawić je tylko do odczytu. Zamieniamy je na pole typu DataGridTextColumn tak jak na listingu 2.1 Listing 2.1: Kolumny z datą tylko do odczytu <DataGridTextColumn x:name="datadodaniacolumn" Header="Data dodania" Binding="Binding DataDodania, StringFormat=\0:dd.MM.yyyy HH:mm:ss\" Width="Auto" MinWidth="110" IsReadOnly="True"/> <DataGridTextColumn x:name="datamodyfikacjicolumn" Header="Data modyfikacji" Binding="Binding DataModyfikacji, StringFormat=\0:dd.MM.yyyy HH:mm:ss\" Width="Auto" MinWidth="110" IsReadOnly="True"/> We właściwościach widzimy, że są to pola tylko do odczytu. Widać też, że zastosowano ciąg formatujący datę (niestety ten domyślny nam nie odpowiada. Z ciekawości można usunąć parametr StringFormat w jednej z kolumn i zobaczyć efekt działania. 2.2 Rozmieszczenie elementów Okno w WPF może posiadać tylko jeden element. Nie można wstawiać bezpośrednio pod tagiem Window elementy typu guziki, etykietki i inne. Tym jedynym elementem jest panel. Jest to element układający inne elementy wewnątrz siebie. W WPF mamy do dyspozycji kilka takich paneli. Canvas - klasyczne rozmieszczenie elementów, tam gdzie je ustawimy tam pozostaną DockPanel - przyczepa element do określonej krawędzi (góra, dół, prawa, lewa) StackPanel - Elementy układane są jeden na drugim, lub jeden za drugim WrapPanel - Podobnie jak StackPanel ale powoduje zawijanie wiersza elementów. W podobny sposób zorganizowane jest menu. Grid - siatka składająca się często z wielu komórek, w każdej komórce można rozmieszczać elementy. Jest to domyślny panel w kodzie wygenerowanym automatycznie. Nasz Grid będzie zawierał dwa wiersze oraz jedną kolumnę. W pierwszym wierszu umieścimy tabelkę w drugim guziki. W listingu 2.2 widzimy prosty grid o podanej wysokości wierszy. 3
5 <Grid.RowDefinitions> <RowDefinition Height="260*" /> <RowDefinition Height="40" /> </Grid.RowDefinitions> Listing 2.2: Definicja panelu siatki. Gwiazdka przy wartości 260* świadczy o tym, że wiersz ten może zmieniać rozmiar. Gdy wstawimy weń tabelę też będzie trzeba określić jej sposób wyrównywania w pionie i poziomie ( VerticalAlignment= Stretch HorizontalAlignment= Stretch ). Przy drugim wierszu gdzie będą guziki nie chcemy by były one zakrywane albo rozciągane przy zmianie rozmiaru okna dlatego stosujemy stałą wysokość wiersza. Ponadto chcemy, by zarówno tabelka jak i guziki nie przylegały do krawędzi okna. Do określenia marginesu jaki należy zachować dookoła danego elementu służy atrybut Margin Określenie do jakiej komórki należy dana kontrolka dokonamy za pomocą tzw. właściwości dołączanych jak widzimy to w listingu 2.3. Listing 2.3: Przykład przycisków w gridzie. <Button Content="Zapisz" Grid.Row="1" Height="25" HorizontalAlignment="Left" Margin="10,0,10,10" Name="buttonZapisz" VerticalAlignment="Top" Width="75" Click="buttonZapisz_Click" /> <Button Content="Wyjdź" Grid.Row="1" Height="25" HorizontalAlignment="Right" Margin="10,0,10,10" Name="buttonWyjdz" VerticalAlignment="Top" Width="75" Click="buttonWyjdz_Click" /> Widzimy tu też przykład przyklejenia jednego przycisku do lewej krawędzi drugiego do prawej. Przy zmianie szerokości okna przyciski te będą albo się od siebie oddalać albo przybliżać. Wyrównywanie kolumn. Praktycznie wszystkie kolumny powinny mieć szerokość ustawioną na Auto. Wtedy szerokość będzie brana taka by zmieścił się najszerszy element. Kolumny z datą można ustawić na stałe 110, natomiast szerokość kolumny Opis ustawiamy na *. Wtedy kolumna ta będzie rozszerzalna wraz z rozszerzaniem się tabelki. Po ustawieniu odpowiednich właściwości przetestować działanie w programie. Jedyną rzeczą, której tu nie zrobimy a mogłaby się przydać to maskowanie haseł. Ze względów bezpieczeństwa, nawet admin nie powinien znać haseł użytkowników. Powinniśmy zastosować typ pola PasswordBox. Jednak związanie z danymi z bazy jest trochę bardziej skomplikowane i pominiemy ten problem. Zwłaszcza, że hasła i tak są w bazie trzymane jawnie. Docelowo nasz system będzie oparty o autentykację Active Directory i wtedy problem zmiany haseł będzie leżał po stronie domeny. 4
6 Rozdział 3 Przegląd rezerwacji Teraz zajmiemy się najtrudniejszą (jak do tej pory) częścią naszego programu, przeglądem i łatwym wyszukiwaniem rezerwacji. Do tego celu posłużą nam 3 tabelki typu datagrid umieszczone na głównym oknie. Wygląd będzie mniej więcej taki jak na rysunku 3.1. W tabelce osób zaznaczamy użytkowników, których rezerwacje chcemy przeglądać, w tabelce zasoby zaznaczamy interesujące nas sale, sprzęty czy grupy. Ctrl+A oczywiście zaznacza wszystko w danej tabelce. Przy zaznaczonych wszystkich elementach w obu tabelkach mamy wgląd we wszystkie rezerwacje. Rysunek 3.1: Projekt głównego okna. 5
7 3.1 Rozmieszczenie i zawartość tabelek Aby zapewnić odpowiednie wyrównywanie i skalowanie, tabelki umieścimy w siatce (grid). Siatka będzie składać się z dwóch kolumn oraz 4 wierszy. Definicje kolumn i wierszy umieszczamy bezpośrednio pod tagiem Grid, listing 3.1 W zerowym wierszu umieścimy menu. W kolejnych dwóch będą umieszczone tabelki rezerwacji, osób i zasobów. W ostatniej umieścimy zagnieżdżoną siatkę, w której będą elementy potrzebne do dodawania rezerwacji. Listing 3.1: Definicja grida dla głównego okna. <Grid.ColumnDefinitions> <ColumnDefinition Width="320*" /> <ColumnDefinition Width="180*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="22" /> <RowDefinition Height="125*" /> <RowDefinition Height="125*" /> <RowDefinition Height="50" /> </Grid.RowDefinitions> Gwiazdki przy rozmiarach oznaczają, że dany rozmiar może się zmieniać, jednak będzie się to odbywać proporcjonalnie. W pierwszym wierszu o stałej wysokości 22 umieścimy pasek z menu. Robimy to za pomocą właściwości dołączanej (informującej element rodzicielski o parametrach dla elementu potomnego). Grid.Row - oznacza w którym wierszu umieszczamy menu, Grid.ColumnSpan określa na ile kolumn rozciągnąć pasek. Określamy też rozciągliwość paska na całą szerokość obu kolumn grida oraz wyrównywanie do samej góry. Tak jak na listingu 3.2 Listing 3.2: Umieszczenie paska menu w siatce. <Menu Height="22" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Top" Name="menuGlowne"> Kolejnym elementem będzie tabelka rezerwacji. Umieścimy ją w gridzie w kolumnie 1 oraz wierszach 1-2. Skonfigurujemy od razu jakie informacje chcemy w niej zawrzeć. Będą to kolumny: Id - identyfikator, docelowo zniknie ale dla testów i celów edukacyjnych narazie zostawimy. Imię osoby, której dotyczy rezerwacja Nazwisko osoby której dotyczy rezerwacja Nazwa zasobu Czas początku rezerwacji Czas końca rezerwacji Stan rezerwacji oraz Typ rezerwacji 6
8 W tabelce ustawimy odstęp od każdej sąsiadującej krawędzi na 5. Tabelka powinna też rozciągać się wraz ze zmianą wysokości jak i szerokości okna. Definicja rozmieszczenia tabelki oraz jej kolumn zawarto w listingu 3.3. Listing 3.3: Rozmieszczenie tabelki rezerwacji oraz jej kolumny. <DataGrid AutoGenerateColumns="False" Margin="5,5,5,5" Grid.Row="1" Grid.RowSpan="2" ItemsSource="Binding" Name="rezerwacjeDataGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <DataGrid.Columns> <DataGridTextColumn Header="Id" Binding="Binding IdRezerwacji" Width="30" MinWidth="30" /> <DataGridTextColumn Header="Imię" Binding="Binding Imie" Width="*" MinWidth="50"/> <DataGridTextColumn Header="Nazwisko" Binding="Binding Nazwisko" Width="*" MinWidth="50"/> <DataGridTextColumn Header="Zasób" Binding="Binding Nazwa" Width="*" MinWidth="60"/> <DataGridTextColumn Header="Początek" Width="Auto" MinWidth="115" Binding="Binding Od, StringFormat=\0:dd.MM.yyyy HH:mm:ss\"/> <DataGridTextColumn Header="Koniec" Width="Auto" MinWidth="115" Binding="Binding Do, StringFormat=\0:dd.MM.yyyy HH:mm:ss\"/> <DataGridTextColumn Header="Stan" Binding="Binding Stan" Width="Auto" MinWidth="55"/> <DataGridTextColumn Header="Typ" Binding="Binding Typ" Width="Auto" MinWidth="55"/> </DataGrid.Columns> </DataGrid> Wierszu 1 i kolumnie 1 siatki umieścimy prostą tabelkę osób z danymi tytuł, imię i nazwisko. Tabelkę przeciągamy z bocznego paska Data Sources i konfigurujemy tak jak pokazano na listingu 3.4. Listing 3.4: Rozmieszczenie tabelki osób oraz jej kolumny. <DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="Binding Source=StaticResource osobyviewsource" Margin="5,5,5,5" Name="osobyDataGrid" SelectionChanged="osobyDataGrid_SelectionChanged"> <DataGrid.Columns> <DataGridTextColumn x:name="tytulcolumn" Binding="Binding Path=Tytuly.Tytul" Header="Tytuł" Width="Auto" /> <DataGridTextColumn x:name="imiecolumn" Binding="Binding Path=Imie" Header="Imię" Width="Auto" /> <DataGridTextColumn x:name="nazwiskocolumn" Binding="Binding Path=Nazwisko" Header="Nazwisko" Width="*" /> </DataGrid.Columns> </DataGrid> 3.2 Kod obsługujący Gdy już mamy zdefiniowane tabelki (na razie dwie, trzecia będzie do zrobienia samodzielnego) należy wypełnić je danymi. Najłatwiej będzie z tabelką osób. Należy to zrobić analogicznie jak w przypadku innych prostych tabelek. W funkcji wywoływanej podczas ładowania głównego okna (Window Loaded) należy dodać linię: osobyviewsource.source = zalogowany.znajdzosobyponazwisku( * ).ToList(); Tabela rezerwacji ma nieco więcej danych. Dodatkowo dane te pochodzą z tabel w relacji wiele-do-wielu. Gdy tabelki połączeniowe np. RezerwacjeZasoby 7
9 lub RezerwacjeOsoby posiadały tylko klucze obce generator modelu Entity Framework stworzyłby relację *-*. O ile z rezerwacjami można by się pokusić o takie rozwiązanie o tyle połączenie z osobami jest nieco bardziej skomplikowane ze względu na pole Zgoda. Tak czy inaczej stworzymy sobie nowy typ danych klasę będącą reprezentacją pojedynczego wiersza rezerwacji. Wiersza, w którym będzie zawarty jeden zasób i jedna osoba. Nową klasę jak na listingu 3.5 umieszczamy w pliku Rezerwacje.cs w bibliotece RezerwacjeLib. Listing 3.5: Nowa klasa RezerwacjoZasoboOsoby. public class RezerwacjoZasoboOsoby public Rezerwacje rez get;set; public Zasoby zas get; set; public Osoby os get; set; Kolejnym elementem jest implementacja funkcji szukającej rezerwacje związane z danymi osobami i zasobami. Podając listy odpowiednich identyfikatorów powinniśmy dostać zbiór rezerwacji. Zrealizujemy tą funkcjonalność w listingu 3.6 w pliku Rezerwacje.cs w bibliotece RezerwacjeLib. Listing 3.6: Funkcja szukająca rezerwacje. public IQueryable<RezerwacjoZasoboOsoby> znajdzrezerwacje(list<long> idkiludzikow, List<long> idkizasobow) IQueryable<RezerwacjoZasoboOsoby> rezos = (from rz in context.rezerwacje from zas in context.rezerwacjezasoby from os in context.rezerwacjeosoby from osobydowyszukania in idkiludzikow from zasobydowyszukania in idkizasobow where rz.idrezerwacji == zas.idrezerwacji //zlaczenie tabeli rezerwacji z tabela zawierajaca identyfikatory zasobow && os.idrezerwacji == rz.idrezerwacji //i czy dane osoby tez nie sa zajete w tym czasie && os.idosoby == osobydowyszukania //uwzględniamy tylko podane id && zas.idzasobu == zasobydowyszukania //uwzględniamy tylko podane id select new RezerwacjoZasoboOsoby rez=rz, os=os.osoby, zas=zas. Zasoby ).AsQueryable(); return rezos; Teraz należy stworzyć funkcję wypełniającą tabelkę rezerwacji (listing 3.7. Oczywiście funkcja ta będzie w pliku MainWindow.xaml.cs. Listing 3.7: Funkcja wypelnijtabelkerezerwacji. private void wypelnijtabelkerezerwacji() try Zasoby zasoby = new Zasoby(); List<long> idkiosob = new List<long>(); idkiosob = (from os in osobydatagrid.selecteditems.oftype<osoby>() select os. IdOsoby).ToList(); //Chwilowo weźmiemy pod uwagę wszystkie zasoby List<long> idkizasobow = (from zas in zasoby.getall() select zas.idzasobu).tolist (); 8
10 //znajdź rezerwacje List<RezerwacjoZasoboOsoby> rez = rezerwacje.znajdzrezerwacje(idkiosob, idkizasobow).tolist(); ListCollectionView reztest = new ListCollectionView((from rz in rez select new rz.rez.idrezerwacji, opiszas = rz.zas.opis, rz.zas.nazwa, rz.os.imie, rz.os. Nazwisko, rz.rez.od, rz.rez.do, rz.rez.stanyrezerwacji.stan, rz.rez. TypyRezerwacji.Typ ).ToList()); rezerwacjedatagrid.itemssource = reztest; catch (Exception ex) MessageBox.Show("złapałem wyjątka: " + ex.message); Tabelkę wypełniamy na samym początku podczas ładowania głównego okna. Aby zawartość tabelki zmieniała się wraz ze zmianą zaznaczonych osób, należy podpiąć wypełnianie tabelki do zdarzenia osobydatagrid SelectionChanged. Jeżeli wszystko zostało wykonane poprawnie możemy przebudować bibliotekę (F6) oraz skompilować program (F5). 3.3 Dodanie tabelki zasobów Jeżeli działa wyszukiwanie po osobach należałoby dodać jeszcze analogiczną tabelkę zasobów. Jest to zadanie samodzielne weryfikujące wiedzę nabytą w tym rozdziale. 3.4 Kolejne usprawnienia Kolejną dość łatwym zadaniem, które można przy okazji zrobić to upewnić się, że tabelki operują na listach. Listy dadzą się sortować nie da się na nich robić operacji dodawania i usuwania natomiast IQueryable odwrotnie, dodawać i usuwać da się, niestety nie działa sortowanie. Problem ten oczywiście można obejść w dość łatwy sposób jednak wymaga on dopisania jeszcze pewnej części kodu. Tabelki operujące na listach nie powinny mieć możliwości dodawania przez użytkownika nowych rekordów. Należy odszukać i poustawiać odpowiednie atrybut CanUserAddRows= False. Wtedy zniknie nam dodatkowy pusty wiersz w tabelkach. Aby użytkownik mógł sortować należy mu na to pozwolić ustawiając odpowiednio atrybut CanUserSortColumns= True. Uwaga w edytorze Visual Studio pomimo iż domyślnie te atrybuty we właściwościach są ustawione to trzeba je wyłączyć i jeszcze raz włączyć by jawnie pojawiły się w pliku konfiguracyjnym. 9
11 Rozdział 4 Formularz dodawania rezerwacji Dodawanie rezerwacji umieścimy w głównym oknie na dole. Metodę dodającą rezerwacje stworzyliśmy na 4 laboratoriach. Nazywa się dodajrezerwacje i potrzebuje następujących danych wejściowych: identyfikator dodającego rezerwacje czas startu czas końca lista identyfikatorów osób którym rezerwujemy czas lista identyfikatorów zasobów typ rezerwacji 4.1 Zmiany w bibliotece Do tej pory metoda ta nie zwracała nic, a w razie niepowodzenia wypisywała na konsolę odpowiednie komunikaty. Obecnie chcemy, aby w dodawanie rezerwacji informowało nas czy operacja się powiodła. Jeżeli wystąpi błąd, będziemy mogli odczytać podstawową informację na jego temat. W tym celu musimy dokonać małej przeróbki w kodzie naszej biblioteki. Do klasy Rezerwacje dodajemy zmienną typu string i określamy dostęp do niej jako tylko do odczytu, tak jak na listingu 4.1 To tu zapiszemy stosowny komunikat w razie niepowodzenia. private string _mesg = null; public string Message get return _mesg; Listing 4.1: Zmienna do zapisu komunikatu. 10
12 Oczywiście trzeba zmienić w nagłówku funkcji dodajrezerwacje zwracany typ z void na bool. Oraz wszędzie tam gdzie gdzie funkcja wychodziła, dodać odpowiednio return true lub false np. (listing 4.2) Listing 4.2: Przykład zapisu komunikatu i wyjście z błędem. try context.savechanges(); //ostatecznie zapisujemy zmiany, EF robi to w transakcji. catch (Exception ex) _mesg = "Wystąpił błąd podczas dodawania rezerwacji" + ex.message; if (ex.innerexception!= null) _mesg = _mesg + "\n\nbłąd wewnętrzny:\n\n" + ex.innerexception.message; Console.WriteLine(_mesg); return false; Przy okazji testów, wyszedł jeden błąd. Złe zapytanie LINQ wyszukujące konfliktowe rezerwacje nie znajdywało rezerwacji w tym samy terminie tych samych zasobów gdy rezerwacja była na inną osobę. Przyczyna prosta. Pomiędzy warunkiem określającym zasoby oraz osoby było złączenie AND. To oznacza, że konfliktowa rezerwacja byłaby wtedy kiedy oprócz dat musiał zaistnieć warunek zasób i osoba. Gdy osoba była inna, konfliktu nie było. Dlatego ten fragment należy poprawić jak w listingu 4.3. Listing 4.3: Poprawione zapytanie wyszukujące konfliktowe rezerwacje. var konfliktowerez = (from rz in context.rezerwacje from zas in context.rezerwacjezasoby from zasobydorezerwacji in idkizasobow from os in context.rezerwacjeosoby from osobydorezerwacji in idkiludzikow where ((rz.od <= dtstart && rz.do > dtstart) (dtstart <= rz.od && dtstop > rz. Od)) && (( rz.idrezerwacji == zas.idrezerwacji && zas.idzasobu == zasobydorezerwacji ) (os.idrezerwacji == rz.idrezerwacji && os.idosoby == osobydorezerwacji )) select rz).distinct(); 4.2 Dodatkowa biblioteka W bogatym zestawie kontrolek WPF brakuje tak przydatnej kontrolki jak choćby TimePicker (pobieranie czasu) czy DecimalUpDown (zwiększanie i zmniejszanie liczby typu decimal za pomocą dwóch małych przycisków). Na szczęście możemy sobie stworzyć sami własne kontrolki. Tutaj nie będziemy tego robić. Posłużymy się darmową wersją biblioteki Extended WPF Toolkit Community Edition. Zaczniemy od ściągnięcia biblioteki ze strony wpftoolkit.codeplex.com Zawartość należy rozpakować do dowolnego katalogu do którego mamy dostęp, ale najlepiej stworzyć sobie w obrębie projektu katalog ExtendedWPFToolkit i tam wypakować albo całą zawartość pliku albo tylko Xceed.Wpf.Toolkit.dll. Następnie w przypadku systemów Windows 2008 Server 11
13 (możliwe że 7 lub 8 też należy tę operację wykonać) należy wejść we właściwości pliku i go odblokować klikając na guzik Odblokuj. Tak jak na pokazano na rysunku 4.1 Rysunek 4.1: Odblokowanie obcej biblioteki. Teraz we właściwościach projektu należy dodać referencję do pliku Xceed.Wpf.Toolkit.dll. Aby używać przestrzeni nazw z nowej biblioteki w plikach xaml należy dodać jeszcze: xmlns:xctk= Nazwa ta powinna nam się pojawić po wpisaniu xmlns:xctk= gdyby tak się nie stało należy sprawdzić czy dodaliśmy referencję po odblokowaniu pliku. Ewentualnie można też uruchomić ponownie Visual Studio. Szczegóły instalacji oraz używania biblioteki można doczytać w dokumentacji na stronie producenta. 4.3 Nowe komponenty Nowa biblioteka dostarczyła nam ciekawego komponentu DataTimePicker. Jest to komponent zawierający kalendarz ale i pozwalający na wpisanie godziny. Możemy określić sposób formatowania daty oraz czasu. Nowe elementy umieścimy w dodatkowej siatce (grid) a tę umieścimy w ostatnim wierszu siatki głównej. Jak było to już wspomniane, dodawanie rezerwacji wymaga list identyfikatorów użytkowników i zasobów. Te weźmiemy z istniejących tabel. Identyfikator osoby dodającej będzie wzięty z zalogowanej osoby. Osoba niezalogowana dostanie informację o braku uprawnień lub inny stosowny komunikat. Typ rezerwacji będzie pobierany z pola typu combi. Oczywiście trzeba będzie go wypełnić danymi z bazy. Daty od do będą wprowadzane za pomocą nowych kontrolek. Będzie też potrzebny guzik rozpoczynający proces dodawania rezerwacji. Cała konfiguracja wyglądu zawarta jest w kodzie 4.4 Listing 4.4: Konfiguracja nowych elementów potrzebnych do dodawania rezerwacji. 12
14 <Grid Grid.Row="3" Grid.ColumnSpan="2" VerticalAlignment="Top" Margin="0,5,0,0" HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="125*" /> <ColumnDefinition Width="125*" /> <ColumnDefinition Width="125*" /> <ColumnDefinition Width="125*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="40"/> </Grid.RowDefinitions> <ComboBox Grid.Row="0" Height="25" HorizontalAlignment="Left" Margin="95,0,0,0" Name="comboTypRezerwacji" VerticalAlignment="Center" Width="110" DisplayMemberPath="Typ" ItemsSource="Binding"/> <Label Content="Typ Rezerwacji:" Grid.Row="0" Height="25" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Name="label1"/> <Label Content="Data Od:" Grid.Row="0" Grid.Column="1" Height="25" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Name="label2"/> <Label Content="Data Do:" Grid.Row="0" Grid.Column="2" Height="25" Margin="5,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Name="label3"/> <xctk:datetimepicker Height="25" Width="130" Grid.Row="0" Grid.Column="1" Margin="60,0,0,0" Name="dtpickerOd" HorizontalAlignment="Left" VerticalAlignment="Center" FormatString="dd.MM.yyyy HH:mm" Format="Custom" ValueChanged="dtpickerOd_ValueChanged"/> <xctk:datetimepicker Height="25" Width="130" Grid.Row="0" Grid.Column="2" Margin="60,0,0,0" Name="dtpickerDo" HorizontalAlignment="Left" VerticalAlignment="Center" FormatString="dd.MM.yyyy HH:mm" Format="Custom"/> <Button Content="Dodaj" Height="23" Width="75" Grid.Row="0" Grid.Column="3" Margin="0,0,0,0" Name="buttonDodaj" HorizontalAlignment="Center" VerticalAlignment="Center" Click="buttonDodaj_Click" /> </Grid> 4.4 Kod W pliku xaml widzimy, podpięte procedury obsługi zdarzeń ValueChanged oraz Click. Przed kompilacją należy wygenerować puste funkcje. Teraz powinniśmy wypełnić pole combi. Wykonamy to za pomocą jednej linii combotyprezerwacji.itemssource = typyrezerwacji.getall(); Daty można podawać ręcznie, jednak miłym udogodnieniem było by gdyby wypełnione były one bieżącą datą. Użytkownik i tak nie będzie ustawiał daty wcześniejszej ale będzie miał trochę mniej szukania czy pisania. Może zgodzi mu się rok i miesiąc, a może nawet i godzina. Niestety pobranie bieżącego czasu będzie z dokładnością do sekund a to skutkowałoby zmuszeniem użytkownika do zerowania części sekundowej a i zapewne ustawiania części minutowej. Dobrym rozwiązaniem było by zaokrąglenie daty do 5 minut na przód. Wykonamy to za pomocą prostej funkcji zaczerpniętej ze strony: Tworzymy nową klasę 4.5 w pliku Enumeracje.cs (lub innym dostępnym w projekcie). public class TimeTools Listing 4.5: Funkcja zaokrąglająca czas. 13
15 public DateTime RoundUp(DateTime dt, TimeSpan d) return new DateTime(((dt.Ticks + d.ticks/2) / d.ticks) * d.ticks); Teraz wystarczy jej użyć w kodzie 4.6 ładującym główne okno. Listing 4.6: Ustawienie czasu. TimeTools tt = new TimeTools(); dtpickerod.value = tt.roundup(datetime.now, TimeSpan.FromMinutes(5)); Jak widzimy zrobiliśmy to tylko dla czasu początkowego. Czas końcowy ustawimy w funkcji 4.7 dtpickerod ValueChanged podpiętej do zdarzenia ValueChanged. Jest on ustawiany za każdym razem gdy pole Do jest mniejsze niż Od lub jest ono nie ustawione. Logicznym jest fakt, że czas końca rezerwacji nie może być wcześniejszy niż jej początek. Dlatego kolejnym ułatwieniem dla użytkownika jest automatyczne ustawienie czas końca na czas przynajmniej taki jak czas początku. Listing 4.7: Funkcja zaokrąglająca czas. private void dtpickerod_valuechanged(object sender, RoutedPropertyChangedEventArgs< object> e) //jeżeli po zmianie w pierwszym polu data w drugim jest mniejsza //to można już ją nastawić przynajmniej na taką samą if (dtpickerdo.value == null) //gdyby nie było to ustawiamy czas bieżący z zaokrągleniem do 5 minut w górę. TimeTools tt = new TimeTools(); dtpickerdo.value = tt.roundup(datetime.now, TimeSpan.FromMinutes(5)); if (dtpickerdo.value.value < dtpickerod.value.value) dtpickerdo.value = dtpickerod.value; Kolejną pracą samodzielną jest ustawienie automatycznej zmiany czasu początku w przypadku, gdy użytkownik zmieni czas końca tak, by czas początku nie był późniejszy niż czas końca. Pozostała nam jeszcze tylko obsługa guzika Dodaj. Pod kliknięcie podpinamy kod 4.8 Listing 4.8: Funkcja obsługi guzika Dodaj. private void buttondodaj_click(object sender, RoutedEventArgs e) if (zalogowany==null) MessageBox.Show("Nie jesteś zalogowany, nie możesz dodawać rezerwacji"); List<long> idkiosob = new List<long>(); idkiosob = (from os in osobydatagrid.selecteditems.oftype<osoby>() select os. IdOsoby).ToList(); List<long> idkizasobow = new List<long>(); idkizasobow = (from zs in zasobydatagrid.selecteditems.oftype<zasoby>() select zs.idzasobu).tolist(); if (rezerwacje.dodajrezerwacje(zalogowany.idosoby, dtpickerod.value.value, dtpickerdo.value.value, idkizasobow, idkiosob, (TypyRezerwacji) combotyprezerwacji.selecteditem)) 14
16 MessageBox.Show("ok nowa rezerwacja"); wypelnijtabelkerezerwacji(); else MessageBox.Show("Nie dodano rezerwacji: \n" + rezerwacje.message); Jak widać identyfikatory osób i zasobów brane są z zaznaczonych wierszy tabelek. Użytkownik dodający to ten zalogowany (niezalogowany nie będzie mógł dodać rezerwacji). Typ rezerwacji pobierany jest z pola combo. Sprawdzamy też poprawność wykonania operacji i w razie niepowodzenia wyświetlamy komunikat jaki przygotowała nam funkcja dodajrezerwacje. 15
17 Rozdział 5 Testowanie i wnioski Jak widać aplikacja jest niemal gotowa. Jednak do bardzo podstawowej funkcjonalności jeszcze jej brakuje dwóch rzeczy. Usuwania rezerwacji oraz przegląd i zatwierdzanie lub odrzucanie propozycji. Zauważyliśmy też, że na chwilę obecną nie ma obsługi uprawnień. Każdy zalogowany lub nie może robić co chce. W zaufanym środowisku to jeszcze nie jest problemem, jednak usuwanie i akceptacja rezerwacji są kluczowe. Aplikację można zacząć już sprawdzać i wypisywać element, które należy zmienić, usprawnić, dodać lub zabrać. Przykładowo: skoro nie możemy dodawać w tabelkach to należy ustawić zakaz usuwania (przynajmniej w tabeli osób i zasobów w głównym oknie). Jeżeli te tabelki służą jedynie do edycji należy ustawić je jako tylko do odczytu. Bindowanie nie powinno być TwoWay co oznacza możliwości nanoszenia zmian na bazę. Idąc dalej można pokusić się o dodatkowe usprawnienia np. guzik zaznacz wszystko, opcje filtrowania tylko aktywne, ukryj archiwalne itp. Ostatnim zadaniem jest spisanie tego typu uwag pomocnych w dalszym rozwoju. Tak by interfejs był spójny i jak najbardziej wygodny, czy skalując okna nie tracimy nic z czytelności, czy wszystkie wyświetlane guziki i pozycje w menu są obsługiwane. Czy wyświetlane są odpowiednie komunikaty w razie powodzenia i niepowodzenia. Trzeba oczywiście wyłapać wszystkie przypadki gdy program nam się zakończy błędem (jest bardzo wiele takich miejsc ponieważ praktycznie nie nastawialiśmy się na obsługę wyjątków). Oprócz błędów krytycznych trzeba znaleźć też błędy w działaniu, np. czy da się dodać rezerwacje tak, by były one kolidujące ze sobą, albo gdy data początku jest późniejsza niż data końca. Czy wprowadzając błędny format daty program to przyjmie, co gdy błędnie podamy konfiguracje serwera bazodanowego itd. 16
18 Rozdział 6 Oceny Jak zawsze całość wykonanego ćwiczenia jest na 5 punktów w skład których wchodzi: Stworzenie okna edycji osób (wraz ze skalowaniem i poprawnym rozmieszczeniem elementów) 1 pkt. Rozmieszczenie i skonfigurowanie wyglądu elementów wchodzących w skład przeglądu rezerwacji (oczywiście ze skalowaniem itp.) 0,5 pkt Dodanie kodu obsługującego przegląd rezerwacji 0,5 pkt. Dodanie swojej tablicy zasobów i uwzględnienie jej przy przeszukiwaniu rezerwacji 0,5 pkt. Zmiany w RezerwacjeLib potrzebne do dodawania rezerwacji 0,5 pkt. Dodanie nowej biblioteki z kontrolkami i użycie ich w projekcie 0,5 pkt. Kod obsługujący dodawanie rezerwacji 0,5 pkt Automatyczna zmiana czasu Od w przypadku zmian czasu Do 0,5 pkt. Testowanie i raport z testów 0,5 pkt. Na sprawozdania jak zawsze czekam do końca poniedziałku. 17
xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname="mainregion" />
1 Tworzenie Shella a. W pierwszej kolejności tworzymy nowy projekt: WPF Application. Name: Shell SolutionName: PrismApp b. Dodajemy bibliotekę PRISM za pomocą NuGet Managera (dla.net Framework 4.5 Prism
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego
Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego 1/34 Wymagania wstępne: Znajomość podstaw programowania. Efekty kształcenia: Umiejętność tworzenia prostych aplikacji
Bardziej szczegółowoBudowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości
Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości część 2 Zaprojektowaliśmy stronę dodaj_dzial.aspx proszę jednak spróbować dodać nowy dział nie podając jego nazwy
Bardziej szczegółowo1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1
1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie
Bardziej szczegółowoUtworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia
Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia nowego projektu (poniżej są utworzone projekty) Po kliknięciu
Bardziej szczegółowoPolitechnika Poznańska Wydział Budowy Maszyn i Zarządzania
1) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi elementami obiektowymi systemu Windows wykorzystując Visual Studio 2008 takimi jak: przyciski, pola tekstowe, okna pobierania danych
Bardziej szczegółowoLeszek Stasiak Zastosowanie technologii LINQ w
Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji
Bardziej szczegółowoInżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl
Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych Paweł Paduch paduch@tu.kielce.pl 06-04-2013 Rozdział 1 Wstęp Na dzisiejszych zajęciach zajmiemy się projektem bazy danych.
Bardziej szczegółowoJak zainstalować szablon allegro?
Jak zainstalować szablon allegro? W mailu z zakupionym szablonem otrzymali państwo plik zip z numerem szablonu w nazwie. Należy najpierw go rozpakować. W paczce znajduję się pliki: 1. index[nrszablonu].txt
Bardziej szczegółowoPodręcznik użytkownika Obieg dokumentów
Podręcznik użytkownika Obieg dokumentów Opracowany na potrzeby wdrożenia dla Akademii Wychowania Fizycznego im. Eugeniusza Piaseckiego w Poznaniu W ramach realizacji projektu: Uczelnia jutra wdrożenie
Bardziej szczegółowoPodstawy technologii WWW
Podstawy technologii WWW Ćwiczenie 8 PHP, czyli poczatki nowej, dynamicznej znajomosci Na dzisiejszych zajęciach rozpoczniemy programowanie po stronie serwera w języku PHP. Po otrzymaniu żądania serwer
Bardziej szczegółowoFormularze w programie Word
Formularze w programie Word Formularz to dokument o określonej strukturze, zawierający puste pola do wypełnienia, czyli pola formularza, w których wprowadza się informacje. Uzyskane informacje można następnie
Bardziej szczegółowoTWORZENIE FORMULARZY WORD 2007
TWORZENIE FORMULARZY WORD 2007 Witam serdecznie. Poniżej przedstawię w jaki sposób tworzyć formularze w programie WORD 2007. Poprzednie wersje programu WORD 2007 również udostępniały opcję tworzenia formularzy,
Bardziej szczegółowoLABORATORIUM 8,9: BAZA DANYCH MS-ACCESS
UNIWERSYTET ZIELONOGÓRSKI INSTYTUT INFORMATYKI I ELEKTROTECHNIKI ZAKŁAD INŻYNIERII KOMPUTEROWEJ Przygotowali: mgr inż. Arkadiusz Bukowiec mgr inż. Remigiusz Wiśniewski LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS
Bardziej szczegółowoMATERIAŁY - udostępnianie materiałów dydaktycznych w sieci SGH
MATERIAŁY - udostępnianie materiałów dydaktycznych w sieci SGH SPIS TREŚCI i EKRANÓW WSTĘP Ekran1: Wstęp. Logowanie Ekran2: Strona początkowa UDOSTEPNIONE MATERIAŁY Ekran3: Dostępne materiały Ekran4: Zawartość
Bardziej szczegółowoInformatyka II. Laboratorium Aplikacja okienkowa
Informatyka II Laboratorium Aplikacja okienkowa Założenia Program będzie obliczał obwód oraz pole trójkąta na podstawie podanych zmiennych. Użytkownik będzie poproszony o podanie długości boków trójkąta.
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Bardziej szczegółowoInstrukcja obsługi Modułu Payu dla Moodle 2.x
Instrukcja obsługi Modułu Payu dla Moodle 2.x Wersja z 10 lutego 2015r. Spis treści 1. Wymagania............................................ 1 2. Instalacja.............................................
Bardziej szczegółowoPodstawy technologii WWW
Podstawy technologii WWW Ćwiczenie 11 PHP, MySQL: więcej, więcej!, więcej!!. tabel i funkcjonalności. Na dzisiejszych zajęciach zdefiniujemy w naszej bazie kilka tabel powiązanych kluczem obcym i zobaczymy,
Bardziej szczegółowoInżynieria Programowania Laboratorium 5 Część Wizualna. Paweł Paduch paduch@tu.kielce.pl
Inżynieria Programowania Laboratorium 5 Część Wizualna Paweł Paduch paduch@tu.kielce.pl 11-05-2013 Rozdział 1 Wstęp Na dzisiejszych zajęciach poznamy jeden ze sposobów tworzenia okienkowej aplikacji w
Bardziej szczegółowoDokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja
Dokumentacja programu Zoz Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ Wersja 1.40.0.0 Zielona Góra 2012-02-29 Wstęp Nowelizacja Rozporządzenia Ministra Zdrowia z
Bardziej szczegółowoPalety by CTI. Instrukcja
Palety by CTI Instrukcja Spis treści 1. Logowanie... 3 2. Okno główne programu... 4 3. Konfiguracja... 5 4. Zmiana Lokalizacji... 6 5. Nowa Paleta z dokumentu MMP... 8 6. Realizacja Zlecenia ZW... 10 7.
Bardziej szczegółowoI. Program II. Opis głównych funkcji programu... 19
07-12-18 Spis treści I. Program... 1 1 Panel główny... 1 2 Edycja szablonu filtrów... 3 A) Zakładka Ogólne... 4 B) Zakładka Grupy filtrów... 5 C) Zakładka Kolumny... 17 D) Zakładka Sortowanie... 18 II.
Bardziej szczegółowo1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki e-mail za pomocą otrzymanych danych.
1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki e-mail za pomocą otrzymanych danych. 2. Po poprawnym zalogowaniu się, przejdziemy do nowej skrzynki. Ważną informacją jest zajętość
Bardziej szczegółowoĆwiczenie 1. Kolejki IBM Message Queue (MQ)
Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając
Bardziej szczegółowoKASK by CTI. Instrukcja
KASK by CTI Instrukcja Spis treści 1. Opis programu... 3 2. Pierwsze uruchomienie... 4 3. Okno główne programu... 5 4. Konfiguracja atrybutów... 6 5. Nadawanie wartości atrybutom... 7 6. Wybór firmy z
Bardziej szczegółowo5.4. Tworzymy formularze
5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania
Bardziej szczegółowoWYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.
WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM NetBeans Wykonał: Jacek Ventzke informatyka sem. VI 1. Uruchamiamy program NetBeans (tu wersja 6.8 ) 2. Tworzymy
Bardziej szczegółowoBaza danych. Program: Access 2007
Baza danych Program: Access 2007 Bazę danych składa się z czterech typów obiektów: tabela, formularz, kwerenda i raport (do czego, który służy, poszukaj w podręczniku i nie bądź za bardzo leniw) Pracę
Bardziej szczegółowoBAZY DANYCH Panel sterujący
BAZY DANYCH Panel sterujący Panel sterujący pełni z reguły rolę centrum, z którego wydajemy polecenia i uruchamiamy różnorodne, wcześniej zdefiniowane zadania, np. wyświetlamy formularze lub drukujemy
Bardziej szczegółowoProjekt Hurtownia, realizacja rejestracji dostaw produktów
Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące
Bardziej szczegółowoPolitechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS)
Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS) Temat: Platforma Systemowa Wonderware cz. 2 przemysłowa baza danych,
Bardziej szczegółowoMicrosoft.NET: LINQ to SQL, ASP.NET AJAX
Microsoft.NET: LINQ to SQL, ASP.NET AJAX Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2008 oraz serwer bazy danych SQL Server Express 2005 (lub
Bardziej szczegółowoInstrukcja obsługi programu DHL EasySHip v. 5.3.x
Instrukcja obsługi programu DHL EasySHip v. 5.3.x I n s t r u k c j a E a s y S h i p 5. 3. x Strona 1 Spis treści 1. Konfiguracja aplikacji... 3 2. Przygotowanie listu przewozowego... 4 3. Dodawanie Nadawcy...
Bardziej szczegółowoUONET+ - moduł Sekretariat. Jak wykorzystać wydruki list w formacie XLS do analizy danych uczniów?
UONET+ - moduł Sekretariat Jak wykorzystać wydruki list w formacie XLS do analizy danych uczniów? W module Sekretariat wydruki dostępne w widoku Wydruki/ Wydruki list można przygotować w formacie PDF oraz
Bardziej szczegółowoBackend Administratora
Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona
Bardziej szczegółowoSystem magazynowy małego sklepu.
System magazynowy małego sklepu. dokumentacja użytkownika. Mariusz Grabowski e-mail: mariosh@interia.pl Jabber ID: mariosh@jabber.autocom.pl Spis treści 1 Wstęp. 2 2 Przed uruchomieniem. 3 3 Korzystanie
Bardziej szczegółowoĆwiczenie 1 Galeria zdjęć
Galeria zdjęć Pobierz przykład (http://jsekulska.kis.p.lodz.pl/studia.htm). Krok 1 Ustawienie stołu montażowego Otwieramy nowy plik i nazywamy go (np. gallery.fla). Ustawiamy wielkość pola roboczego na
Bardziej szczegółowoWypożyczalnia by CTI. Instrukcja
Wypożyczalnia by CTI Instrukcja Spis treści 1. Opis programu... 3 2. Pierwsze uruchomienie... 4 3. Lista sprzętu... 7 3.1. Dodawanie nowego sprzętu... 8 3.2. Dodawanie przeglądu... 9 3.3. Edycja sprzętu...
Bardziej szczegółowo5. Bazy danych Base Okno bazy danych
5. Bazy danych Base 5.1. Okno bazy danych Podobnie jak inne aplikacje środowiska OpenOffice, program do tworzenia baz danych uruchamia się po wybraniu polecenia Start/Programy/OpenOffice.org 2.4/OpenOffice.org
Bardziej szczegółowoProjekt Hurtownia, realizacja rejestracji dostaw produktów
Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące
Bardziej szczegółowoSerwis jest dostępny w internecie pod adresem www.solidnyserwis.pl. Rysunek 1: Strona startowa solidnego serwisu
Spis treści 1. Zgłoszenia serwisowe wstęp... 2 2. Obsługa konta w solidnym serwisie... 2 Rejestracja w serwisie...3 Logowanie się do serwisu...4 Zmiana danych...5 3. Zakładanie i podgląd zgłoszenia...
Bardziej szczegółowoTworzenie pliku źródłowego w aplikacji POLTAX2B.
Tworzenie pliku źródłowego w aplikacji POLTAX2B. Po utworzeniu spis przekazów pocztowych klikamy na ikonę na dole okna, przypominającą teczkę. Następnie w oknie Export wybieramy format dokumentu o nazwie
Bardziej szczegółowo1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3
DODAJEMY TREŚĆ DO STRONY 1. Dockbar, CMS + wyszukiwarka aplikacji... 2 2. Dodawanie portletów... 3 Widok zawartości stron... 3 Omówienie zawartości portletu (usunięcie ramki itd.)... 4 3. Ikonki wybierz
Bardziej szczegółowoBudowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych
Budowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych widok ankiety w przeglądarce Rozpoczniemy od zaprojektowania bazy danych w programie SYBASE/PowerDesigner umieszczamy
Bardziej szczegółowoBaza danych sql. 1. Wprowadzenie
Baza danych sql 1. Wprowadzenie Do tej pory operowaliście na listach. W tej instrukcji pokazane zostanie jak stworzyć bazę danych. W zadaniu skorzystamy z edytora graficznego struktury bazy danych, który
Bardziej szczegółowo1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika.
Tematy zajęć: 1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika. 2. Posługiwanie się podstawowymi kontrolkami. 3. Własności i zdarzenia w WPF. 4. Zadania aplikacji. Okna. 5. Polecenia. Zasoby.
Bardziej szczegółowoBudowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości
Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości Rozpoczniemy od zaprojektowania bazy danych w programie SYBASE/PowerDesigner umieszczamy dwie Encje (tabele) prawym
Bardziej szczegółowoInstrukcja laboratoryjna
Zaawansowane techniki obiektowe 2016/17 Instrukcja laboratoryjna Testy funkcjonalne Prowadzący: Tomasz Goluch Wersja: 1.0 Testowanie aplikacji z bazą danych Większość współczesnych aplikacji korzysta z
Bardziej szczegółowoUruchamianie bazy PostgreSQL
Uruchamianie bazy PostgreSQL PostgreSQL i PostGIS Ten przewodnik może zostać pobrany jako PostgreSQL_pl.odt lub PostgreSQL_pl.pdf Przejrzano 10.09.2016 W tym rozdziale zobaczymy, jak uruchomić PostgreSQL
Bardziej szczegółowoObszar Logistyka/Zamówienia Publiczne
Obszar Logistyka/Zamówienia Publiczne Plany Zamówień Publicznych EG_LOG Plany Zamówień Publicznych Instrukcja Użytkownika. Instrukcja użytkownika 2 Spis treści SPIS TREŚCI... 3 NAWIGACJA PO SYSTEMIE...
Bardziej szczegółowoProjektowanie i programowanie aplikacji biznesowych. Wykład 2
Projektowanie i programowanie aplikacji biznesowych Wykład 2 Kontrolki w Windows API Aby korzystać z kontrolek należy dołączyć plik nagłówkowy o nazwie commctrl.h oraz bibliotekę o nazwie libcomctl32.a.
Bardziej szczegółowoKonfiguracja szablonu i wystawienie pierwszej aukcji allegro
Konfiguracja szablonu i wystawienie pierwszej aukcji allegro Metod na wystawienie aukcji na allegro jest co najmniej 2. W pierwszej przechodzimy do zakładki MOJA SPRZEDAŻ, w USTAWIENIACH SPRZEDAŻY odnajdujemy
Bardziej szczegółowoProgram dla praktyki lekarskiej
Program dla praktyki lekarskiej ErLab Instrukcja konfiguracji i obsługi Spis Treści 1. Wstęp... 2 2. Konfiguracja... 3 2.1. Serwer... 3 2.2. Laboratorium... 3 2.3. Punkt pobrań... 4 3. Wysyłanie skierowania...
Bardziej szczegółowoFormularz MS Word. 1. Projektowanie formularza. 2. Formularze do wypełniania w programie Word
Formularz MS Word Formularz to dokument o określonej strukturze, zawierający puste pola do wypełnienia, czyli pola formularza, w których wprowadza się informacje. Uzyskane informacje moŝna następnie zebrać
Bardziej szczegółowoASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3
3 ASP.NET MVC Podstawy 1 1. Cel zajęć Celem zajęć jest zapoznanie się z podstawami ASP.NET MVC 2.0 Framework. 2. Zadanie Proszę zbudować prostą aplikację WWW przy zastosowaniu framework a ASP.NET MVC 2.0
Bardziej szczegółowoKarty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.
Karty pracy W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne. Ustawienia Pierwszym krokiem w rozpoczęciu pracy z modułem Karty Pracy jest definicja
Bardziej szczegółowoWstawianie nowej strony
Wstawianie nowej strony W obszernych dokumentach będziemy spotykali się z potrzebą dzielenia dokumentu na części. Czynność tę wykorzystujemy np.. do rozpoczęcia pisania nowego rozdziału na kolejnej stronie.
Bardziej szczegółowoBudowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych
Budowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych widok ankiety w przeglądarce Rozpoczniemy od zaprojektowania bazy danych w programie SYBASE/PowerDesigner umieszczamy
Bardziej szczegółowoĆwiczenie 4 Aktualizacja tabel. 1. Skopiuj aplikację przygotowaną na poprzednich zajęciach w katalogu SKOKI1 do nowego katalogu SKOKI2.
Wydział: Zarządzania i Modelowania Komputerowego Kierunek: Inżynieria Danych Przedmiot: Programowanie baz danych w środowisku RAD-C++ Rok 2 Semestr 4 Ćwiczenie 4 Aktualizacja tabel. 1. Skopiuj aplikację
Bardziej szczegółowoBudowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości
Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości część 3 przejdziemy teraz do zaprojektowania strony przegladaj_dzialami.aspx na której użytkownicy będą przeglądać
Bardziej szczegółowoInstalacja systemu zarządzania treścią (CMS): Joomla
Instalacja systemu zarządzania treścią (CMS): Joomla Na stronie http://www.cba.pl/ zarejestruj nowe konto klikając na przycisk:, następnie wybierz nazwę domeny (Rys. 1a) oraz wypełnij obowiązkowe pola
Bardziej szczegółowoAdobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.
Spis treści: 1 Podstawy pracy z aplikacją... 2 1.1 Układ strony... 2 strona 1 z 7 1 Podstawy pracy z aplikacją InDesign jest następcą starzejącego się PageMakera. Pod wieloma względami jest do niego bardzo
Bardziej szczegółowoInstrukcja obsługi programu Profile GT
Instrukcja obsługi programu Profile GT 1. Instalacja i pierwsze uruchomienie Instalacja programu jest prosta. Należy uruchomić plik setup.exe i w zasadzie wszystkie pytania można pominąć przyjmując domyślne
Bardziej szczegółowoJak zainstalować i skonfigurować komunikator MIRANDA, aby wyglądał i funkcjonował jak Gadu Gadu Tutorial by t800.
Jak zainstalować i skonfigurować komunikator MIRANDA, aby wyglądał i funkcjonował jak Gadu Gadu Tutorial by t800. Wraz z niniejszym tutorialem, dołączone są 4 pliki (krok0, krok1, itd). Nie należy ich
Bardziej szczegółowoTelesprzedaż by CTI Instrukcja
Telesprzedaż by CTI Instrukcja 1 Spis treści 1. Opis programu...4 2. Konfiguracja...5 2.1. Połączenie z serwerem MS SQL...6 2.2. Połączenie z serwerem MS SQL systemu Call Center...7 2.3. Nawiązanie połączenia
Bardziej szczegółowoBazy danych Karta pracy 1
Bazy danych Karta pracy 1 Bazy danych Karta pracy 1 1. Utwórz katalog Bazy danych służący do przechowywania wszelkich danych dotyczących kursu. 2. W katalogu Bazy danych stwórz podkatalog BD1 służący jako
Bardziej szczegółowoPodział na strony, sekcje i kolumny
Formatowanie stron i sekcji Formatowanie stron odnosi się do całego dokumentu lub jego wybranych sekcji. Dla całych stron ustalamy na przykład marginesy, które określają odległość tekstu od krawędzi papieru.
Bardziej szczegółowoInstrukcja laboratoryjna cz.3
Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:
Bardziej szczegółowoWprowadzenie do projektu QualitySpy
Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować
Bardziej szczegółowoZmiany funkcjonalne i lista obsłużonych zgłoszeń Comarch DMS
Zmiany funkcjonalne i lista obsłużonych zgłoszeń Spis treści 1 Zmiany funkcjonalne... 3 Automatyczny zapis karty obiegu w pierwszym etapie... 3 Mapowanie wielu kontrolek typu Załącznik do dokumentu generowanego
Bardziej szczegółowoWindows Server Active Directory
Windows Server 2012 - Active Directory Active Directory (AD) To usługa katalogowa a inaczej mówiąc hierarchiczna baza danych, która przynajmniej częściowo musi być ściśle związana z obiektową bazą danych.
Bardziej szczegółowoPierwsza niedogodność dotyczy strony zarządzaj działami.
Zaprojektowana aplikacja umożliwia wprawdzie pełne zarządzanie danymi w bazie jednak w pewnych przypadkach funkcjonalność wykonywania operacji bazodanowych może nie być zadawalająca. Pierwsza niedogodność
Bardziej szczegółowo,Aplikacja Okazje SMS
, jest rozwiązaniem, które umożliwia bez umiejętności programistycznych uruchomić własną aplikację na fanpage-u firmy lub marki. Pozwala ona na dodanie numeru telefonu do swojej bazy w SerwerSMS.pl, umożliwiając
Bardziej szczegółowoKalipso wywiady środowiskowe
Kalipso wywiady środowiskowe Instrukcja obsługi INFO-R Spółka Jawna - 2017 43-430 Pogórze, ul. Baziowa 29, tel. (33) 479 93 29, (33) 479 93 89 fax: (33) 853 04 06 e-mail: admin@ops.strefa.pl Spis treści:
Bardziej szczegółowoINSTRUKCJA OBSŁUGI PROGRAMU PRZEDSZKOLE (CZ.1)
INSTRUKCJA OBSŁUGI PROGRAMU PRZEDSZKOLE (CZ.1) Uruchomienie programu Po uruchomieniu programu wyświetlane jest okno logowania, w którym wprowadza się nazwę użytkownika (opis w dalszej części instrukcji)
Bardziej szczegółowoInstrukcja obsługi Modułu Płatności dla Moodle 1.7, 1.8, 1.9
Instrukcja obsługi Modułu Płatności dla Moodle 1.7, 1.8, 1.9 Wersja z 4 kwietnia 2011r. Spis treści 1. Wymagania............................................ 1 2. Jak kupić.............................................
Bardziej szczegółowoSystem rezerwacji online
Spis treści 1. Część widoczna dla klientów dokonujących rezerwacji...1 1.a. Ogólne informacje...1 1.b. Etapy w rezerwacji...3 I. Etap 1 wybór dat początku i końca pobytu oraz wybór pokoi...3 II. Etap 2
Bardziej szczegółowoZanim zaczniesz. Warto ustawić kartę sieciową naszego serwera.
Zanim zaczniesz. Warto ustawić kartę sieciową naszego serwera. Wchodzimy w Centrum sieci -> Połączenia sieciowe -> następnie do właściwości naszej karty sieciowej. Następnie przechodzimy do Protokół internetowy
Bardziej szczegółowoInstrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.
Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2 Instrukcja tworzenia bazy danych dla programu AUTOSAT 3 wersja 0.0.4 2z12 1. Wymagania systemowe. Przed rozpoczęciem instalacji
Bardziej szczegółowoNotowania Mobilne wersja Java
Notowania Mobilne wersja Java Instrukcja obsługi programu Notowania Mobilne to aplikacja, która pozwala na dostęp do notowań giełdowych w czasie rzeczywistym z każdego miejsca na świecie, gdzie tylko możliwe
Bardziej szczegółowoFAQ Systemu EKOS. 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen?
27.06.11 FAQ Systemu EKOS 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen? Procedura rejestracji ocen wymaga podpisywania protokołów (w postaci wypełnionych formularzy InfoPath Forms
Bardziej szczegółowoCel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)
W odcinku III tworzyliśmy paski narzędzi. Umieszczaliśmy na panelach ikony, reprezentujące czynności (charakterystyczne dla edytorów tekstu). Musimy teraz przypisać każdemu przyciskowi jego czynność (wycinanie,
Bardziej szczegółowoTworzenie szablonów użytkownika
Poradnik Inżyniera Nr 40 Aktualizacja: 12/2018 Tworzenie szablonów użytkownika Program: Plik powiązany: Stratygrafia 3D - karty otworów Demo_manual_40.gsg Głównym celem niniejszego Przewodnika Inżyniera
Bardziej szczegółowoPlatforma e-learningowa
Dotyczy projektu nr WND-RPPD.04.01.00-20-002/11 pn. Wdrażanie elektronicznych usług dla ludności województwa podlaskiego część II, administracja samorządowa realizowanego w ramach Decyzji nr UDA- RPPD.04.01.00-20-002/11-00
Bardziej szczegółowoDOKUMENTY I GRAFIKI. Zarządzanie zawartością Tworzenie folderu Dodawanie dokumentu / grafiki Wersje plików... 7
DOKUMENTY I GRAFIKI SPIS TREŚCI Zarządzanie zawartością... 2 Tworzenie folderu... 3 Dodawanie dokumentu / grafiki... 4 Wersje plików... 7 Zmiana uprawnień w plikach... 9 Link do dokumentów i dodawanie
Bardziej szczegółowoKurs walut. Specyfikacja projektu. Marek Zając 2013-12-16
Kurs walut Specyfikacja projektu Marek Zając 2013-12-16 Spis treści 1. Podsumowanie... 2 1.1 Wstęp... 2 1.2 Projekt interfejsu... 2 1.2.1 Rozmiar głównego okna... 2 2. Słownik pojęć... 2 2.1 Definicja
Bardziej szczegółowoDODAJEMY TREŚĆ DO STRONY
DODAJEMY TREŚĆ DO STRONY SPIS TREŚCI Pasek narzędzi i wyszukiwarka aplikacji... 2 Dodawanie portletów... 3 Widok zawartości stron... 4 Zawartość portletu... 5 Ikonki wybierz oraz dodaj zawartość stron...
Bardziej szczegółowoZmiany w programie VinCent Office v.1.09
Zmiany w programie VinCent Office v.1.09 1. Zmiany ogólne dotyczące modułów FK i GM. a) Zmiana sposobu wyświetlania danych w tabelach Do wersji 1.08 dane prezentowane w tabelach miały zdefiniowane określone
Bardziej szczegółowoJeżeli pole Krawędź będzie zaznaczone uzyskamy obramowanie w całej wstawianej tabeli
Tabela Aby wstawić tabelę do dokumentu należy wybrać z górnego menu Tabela-->Wstaw-->Tabela W kategorii Rozmiar określamy z ilu kolumn i ilu wierszy ma się składać nasza tabela. Do dokumentu tabelę możemy
Bardziej szczegółowoInstrukcja użytkownika
Instrukcja użytkownika ul. Zawalna 1/5 51-118 Wrocław e-mail: biuro@innotechtion.pl www.innotechtion.pl Spis treści 1 Instalacja oprogramowania SMS Studio...2 2 Pierwsze uruchomienie... 4 2.1 Rejestracja...
Bardziej szczegółowoInstrukcja obsługi systemu zarządzania treścią dwajeden.pl
Instrukcja obsługi systemu zarządzania treścią dwajeden.pl Tworzenie i edycja danych na stronie www 1. Rozpoczęcie pracy. Logowanie się do systemu zarządzania treścią dwajeden.pl ropocząć należy od podania
Bardziej szczegółowoAKTYWNY SAMORZĄD. Instrukcja użytkownika. www.as.tylda.pl
AKTYWNY SAMORZĄD Instrukcja użytkownika TYLDA Sp. z o.o. 65-001 Zielona Góra ul. Wazów 6a tel. 68 324-24-72 68 325-75-10 www.tylda.pl tylda@tylda.pl wersja 1.1 2014.12.01 2 Spis treści 1. Konta użytkowników...
Bardziej szczegółowoArkusz kalkulacyjny MS Excel 2010 PL.
Arkusz kalkulacyjny MS Excel 2010 PL. Microsoft Excel to aplikacja, która jest powszechnie używana w firmach i instytucjach, a także przez użytkowników domowych. Jej główne zastosowanie to dokonywanie
Bardziej szczegółowoZaznaczanie komórek. Zaznaczenie pojedynczej komórki polega na kliknięciu na niej LPM
Zaznaczanie komórek Zaznaczenie pojedynczej komórki polega na kliknięciu na niej LPM Aby zaznaczyć blok komórek które leżą obok siebie należy trzymając wciśnięty LPM przesunąć kursor rozpoczynając od komórki
Bardziej szczegółowoDodatek. Instrukcja instalacji i konfiguracji. dla Subiekt nexo. Wersja:
Dodatek dla Subiekt nexo Instrukcja instalacji i konfiguracji Wersja: 1.0.1., ul. Zwoleńska 127 lok. 32, 04-761 Warszawa Spis treści 1. Informacje ogólne... 3 O programie... 3 Wymagania systemowe i sprzętowe...
Bardziej szczegółowoSkrócona instrukcja obsługi programu EndymionKOL 2012-12-17
Skrócona instrukcja obsługi programu EndymionKOL 2012-12-17 1. Do czego służy ten program: Program został stworzony z myślą o ułatwieniu wyliczania danych na temat kolejek oczekujących sprawozdawanych
Bardziej szczegółowoWprowadzenie do Doctrine ORM
Wprowadzenie do Doctrine ORM Przygotowanie środowiska Do wykonania ćwiczenia konieczne będzie zainstalowanie narzędzia Composer i odpowiednie skonfigurowanie Netbeans (Tools->Options->Framework & Tools->Composer,
Bardziej szczegółowoInstalacja programu:
Instrukcja programu Konwerter Lido Aktualizacja instrukcji : 2012/03/25 INSTALACJA PROGRAMU:... 1 OKNO PROGRAMU OPIS... 3 DODANIE MODUŁÓW KONWERSJI... 3 DODANIE LICENCJI... 5 DODANIE FIRMY... 7 DODAWANIE
Bardziej szczegółowoMiejskie Wodociągi i Oczyszczalnia sp. z o.o. w Grudziądzu. ibok. Internetowe Biuro Obsługi Klienta. Instrukcja obsługi
Miejskie Wodociągi i Oczyszczalnia sp. z o.o. w Grudziądzu ibok Internetowe Biuro Obsługi Klienta Instrukcja obsługi SPIS TREŚCI 1. AUTORYZACJA UŻYTKOWNIKA W SYSTEMIE IBOK... 3 1.1 Logowanie... 3 1.2 Przywracanie
Bardziej szczegółowo