VISOKOŠOLSKI STROKOVNI ŠTUDIJ. Informatika in tehnologije komuniciranja. Sistemska podpora informatiki in tehnologijam komuniciranja

Similar documents
VISOKOŠOLSKI STROKOVNI ŠTUDIJ. Računalništvo in informacijske tehnologije POROČILO PRAKTIČNEGA IZOBRAŽEVANJA. HAKL IT, d.o.o.

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA

sodobne poslovnoinformacijske rešitve Birokrat Kratka navodila za namestitev demo verzije programa Birokrat

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

Q: Do You made a backup before upgrade? A: Only cowards make backups!

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

Hitra rast hranjenih podatkov

Transakcije v MariaDB/MySQL (transakcija A)

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

Kosovnica. Marko Obid. Kosovnica. Marko Obid

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja

Sistemske zahteve za SAOP

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

Prirejanje in preverjanje tipov

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

POSTAVITEV SPLETNEGA SISTEMA ZA PRIKAZ NAČRTA PROIZVODNJE

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje.

VISOKOŠOLSKI STROKOVNI ŠTUDIJ RAČUNALNIŠTVO IN TEHNOLOGIJE KOMUNICIRANJA

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

Navodila za namestitev CREO 3.0 in Audax nastavitev

Navodila za uporabo izdelkov programske opreme Microsoft

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool

Navodila za nastavitev varne povezave po protokolu SSH

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

Postavitev in upravljanje zasebnega oblaka z uporabo Microsoft System Center 2012 R2 in Windows Azure Pack za ponudnike storitev

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

UPORABA SILVERLIGHT 4 ZA PODPORO PRI ELEKTRONSKEM PREVERJANJU ZNANJA

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

Navodila za interaktivne naloge Bober

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

Šolski center Novo mesto Srednja elektro šola in tehniška gimnazija Šegova ulica 112, 8000 Novo mesto. Maturitetna seminarska naloga

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev

Prometno načrtovanje xdsl

ZBIRNI IZKAZI IZRAČUNA EBITDA ZA HOTELE SKUPINE UNION HOTELI

PRISOTNOST PRI POUKU S POMOČJO RFID

DB2 podatkovna baza v praksi

Selitev aplikacije iz Oracle Forms v Oracle ADF (Application migration from Oracle Forms to Oracle ADF)

Primerjava izvornega in hibridnega razvoja mobilne aplikacije

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA v Amis d.o.o., Maribor

IZDELAVA SCADA SISTEMA ZA VODENJE IN NADZOR PROIZVODNJE RAZDELILNIKOV TOPLOTE

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5

Mobilna aplikacija za pregledovanje slik visokih ločljivosti

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

Kontrola smučarskih kart z mobilnim čitalcem RFID

SPLETNE SESTAVLJANKE IN POSLOVNI PORTALI

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

namespace spojneice { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

Metodologija migracije iz Exchange v Office 365

Sistem za dinamično upravljanje izgleda klienta IPTV

PROGRAMSKA REŠITEV ZA PODROJE PRODAJE V OKOLJU.NET

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine

SPLETNA APLIKACIJA ZA SPREMLJANJE PODATKOV O FILMIH

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

Aplikacija za podporo delovanja svetovalcev

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA DIPLOMSKO DELO GREGOR IVANŠEK

Zasnova spletnega orodja za prijavo na govorilne ure v sistemu Plone

Razširitve CMS z lastnimi moduli

BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5

Izrada VI laboratorijske vježbe

E R S Š G L J U B L J A N A Š O L S K O L E T O

Mobilna aplikacija za pregled informacij o prometu v Sloveniji

DOKUMENTACIJA ZA POTRDITEV NAROČILA EANCOM ORDRSP D96A (EAN005) Version: 1.0 Draft

Izdelava aplikacij s podporo delovnih tokov za okolje SharePoint Server

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi

Mobilna aplikacija za parkiranje

Povezava DEQ v omrežje

pojedinačnom elementu niza se pristupa imeniza[indeks] indeks od 0 do n-1

Razvoj aplikacije Baliranje trave za mobilno platformo Android

Spletna aplikacija za izdelavo in urejanje spletnih vsebin

Razvoj orodja za centralni nadzor posodobitev v platformi WordPress

IBM Lotus Notes in Domino 8

CPSC Tutorial 6

Univerza v Mariboru Fakulteta za organizacijske vede. Programska rešitev za grafično prikazovanje najema in rezervacij vozil

Poročilo praktičnega izobraževanja v Unior d.d.

THE ANIMAL SOUND ARCHIVE AT THE HUMBOLDT-UNIVERSITY OF BERLIN: CURRENT ACTIVITIES IN CONSERVATION AND IMPROVING ACCESS FOR BIOACOUSTIC RESEARCH

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

Spletno luščenje podatkov z uporabo Pythona in knjižnice BeautifulSoup

Enterprise modelling with UML

PREPREČEVANJE IZPADA IN ZAGOTAVLJANJE VARNOSTI JAVNIH RAČUNALNIŠKIH SISTEMOV

Primerjava dveh ogrodij za izdelavo grafičnih uporabniških vmesnikov: Windows Presentation Foundation in Windows Forms

Časovno omejevanje dostopa do interneta

Daljinsko krmiljena vtičnica z vmesnikom Bluetooth

Specification and Implementation of a Light-Weight Internet Content Delivery Platform

SPLETNA REŠITEV ZA POTREBE DRUŠTVA UPOKOJENCEV

New Media & Language Technologies Jozef Stefan International Postgraduate School January Speech apps. Jerneja Žganec Gros

APLIKACIJE ZA SOCIALNA

Aplikacija za prikaz prostorskih podatkov

Razvoj aplikacij na platformi Google App Engine

RAZVOJ ENOSTAVNE SPLETNE APLIKACIJE Z UPORABO FLEKSIBILNEGA OGRODJA NA ODPRTOKODNIH KNJIŢNICAH

Primož Hadalin IZDELAVA SPLETNEGA PORTALA POSLOVNE APLIKACIJE Z UPOŠTEVANJEM RAZLIK MED SPLETNIMI BRSKALNIKI

Uputa: Zabranjeno je koristiti bilo kakva pomagala. Rje²enja pi²ete desno od zadatka. Predajete samo ovaj list.

Naslavljanje v IP. Miran Meža

Transcription:

VISOKOŠOLSKI STROKOVNI ŠTUDIJ Informatika in tehnologije komuniciranja Sistemska podpora informatiki in tehnologijam komuniciranja POROČILO PRAKTIČNEGA IZOBRAŢEVANJA V HAKL IT, d.o.o. Murska Sobota Študent: Miha Jerič E-pošta: miha.jeric@uni-mb.si GSM: 041-502-031 Vpisna številka: E1014145 Mentor v GD: Makovecki Boris Čas izobraţevanja: 21.3.2011 20.5.2011

2

3

Kazalo vsebine Uvod... 6 Opis gospodarske druţbe... 6 Programske rešitve... 7 Samostojne aplikacije... 8 Spletne rešitve... 8 Sharepoint rešitve... 9 Opis praktičnega izobraţevanja projektno delo... 10 Scheduler service... 10 Flash banerji... 10 Glavni projekt Prikazovalnik za lekarne... 12 Oblikovanje izgleda... 12 Branje podatkov iz baze... 13 Prikaz plavajočega teksta... 14 Predvajanje medija... 15 Prikaz zaposlenih... 17 Konfiguracijska datoteka... 19 Zaključek... 20 Sklep... 22 4

Kazalo slik Slika 1: Moduli informacijskega sistema ORKA.erp... 7 Slika 2: Desno spodaj je izdelan baner za Terme3000 na www.thermencheck.com... 11 Slika 3: Drugi baner... 11 Slika 4: Osnovni izgled aplikacije... 12 Slika 5: Prikazovalnik - prikazovanje slik... 20 Slika 6: Prikazovalnik - prikazovanje videa... 21 5

Uvod Podjetje Hakl IT, d.o.o. je največji in vodilni ponudnik lekarniških informacijskih sistemov v Sloveniji, ter največji ponudnik IT rešitev v Prekmurju. Kot praktikant, sem bil dodeljen v oddelek za razvoj.net aplikacij (v C#), razvijal pa sem še nekaj aplikacij za sodelavce tudi v drugih programskih jezih (php, Flash, Android aplikacije). Glavni del mojega praktičnega izobraţevanja, je bil razvoj aplikacije»prikazovalnik«za lekarne, ki je bil naročen iz strani Pomurskih lekarn in sluţi za prikazovanje informacij o trenutnih zaposlenih, predvajanje reklam o zdravilih, plavajočega besedila ter še drugih informacij na zaslonu v lekarnah. Podrobnejši opis projekta bom opisal v naslednjih točkah poročila. Opis gospodarske družbe Osnovna dejavnost podjetja Hakl IT, ki ima 28 zaposlenih, je oskrba z računalniškimi programi, svetovanje in nabava ter vzdrţevanje informacijsko-komunikacijskih sistemov. Z lastnim razvojem programskih rešitev in načrtovanjem kompleksne informacijske infrastrukture ob uporabi najsodobnejših tehnologij implementirajo celovite informacijske sisteme ter jih vzdrţujejo. Korenine podjetja segajo v leto 1994, ko je bilo ustanovljeno druţinsko podjetje z imenom Hakl & Hakl d.n.o., ki se od vsega začetka ukvarja z razvojem poslovno informacijskih sistemov. Z pridobivanjem novih strank in povečevanjem števila prodanih licenc se je povečevalo tudi število zaposlenih. Da bi zagotovili dolgoročni razvoj so se zdruţili z skupino podjetij INTERING HOLDING ter ustanovili novo podjetje Hakl & Hakl IT d.o.o. ter mu poleg obstoječih nalog zaupali še načrtovanje in vzdrţevanje celovitih informacijskih sistemov. V začetku leta 2009 so se preimenovali v Hakl IT, d.o.o. 6

Programske rešitve ORKA.erp celovit informacijski sistem Orka je celovita poslovna informacijska rešitev, ki je namenjena majhnim in srednje velikim podjetjem in predstavlja vsestransko zdruţljivo, prilagodljivo in učinkovito programsko opremo. Slika 1: Moduli informacijskega sistema ORKA.erp 7

ORKA.aor lekarniško poslovanje Aplikacija omogoča načrtovanje, spremljanje in številne analize poslovanja lekarne, predvsem pa zagotavlja odlično podporo izdaji/prodaji zdravil in medicinsko tehničnih pripomočkov ter prodaji blaga v lekarnah. Program zagotavlja dosledno sledljivost prometa zdravil in blaga z omejenim rokom trajanja od trenutka prejema do končne izdaje/prodaje. ORKA.bi podpora poslovnemu odločanju Vsebuje podatkovno skladišče, v katerega se prepisujejo, zdruţujejo in organizirajo podatki iz različnih podatkovnih baz, z namenom podpore poslovnemu odločanju. Samostojne aplikacije ORKA.aor ORKA.fin o ORKA.fin.VIDA o ORKA.fin.GK o ORKA.fin.BP o ORKA.fin.OS o ORKA.fin.BP+P ORKA.vp ORKA.pro o ORKA.pro.MAT o ORKA.pro.MEH ORKA.bi Plače Vozni park Tehtnice Spletne rešitve E-ceste Upravljanje spletne vsebine 8

Sharepoint rešitve Microsoft Office SharePoint Server 2007 Sharepoint services Celovite rešitve Poslovanje komunalno stanovanjskega podjetja Upravljanje podatkov v porazdeljenih podatkovnih bazah 9

Opis praktičnega izobraževanja projektno delo Na prvi delovni dan v podjetju Hakl IT, d.o.o. sem bil najprej seznanjen z delom ter oddelki v podjetju. Kot praktikant sem bil nameščen v pisarno skupaj z še tremi sodelavci. Moja naloga je bila razvoj aplikacij v.net okolju, ko sem imel čas, pa sem pomagal sodelavcem še v php-ju, Flashu, ter Android aplikacij. V začetku, ko sem se še privajal na delovno okolje, sem dobil za nalogo izdelat krajše programe, ki jih bom opisal v naslednjih točkah. Kasneje, ko sem se privadil na delovno okolje, sem dobil za izdelat večji projekt»prikazovalnik za lekarne«. To je aplikacija, ki je ţe nameščena na 13 Pomurskih lekarnah, in je vidna obiskovalcem ob vstopu v lekarno. Prikazuje pa podatke o trenutno prisotnih zaposlenih, razne oglase o zdravilih, plavajoči tekst, ter še druge stvari, katere pa bom opisal v spodnjih točkah. Scheduler service To je bila prva aplikacija, ki sem jo moral izdelati. Aplikacija je dokaj enostavna, njena funkcionalnost pa je, da teče v ozadju kot servis, ter na vsakih x minut, poţene določeno aplikacijo ali skripto. Minute ter aplikacijo, ki se naj zaţene določimo v pripadajoči konfiguracijski datoteki. Flash banerji Med praktičnim izobraţevanjem, sem dobil za nalogo izdelati dva flash banerja za Terme 3000. Ker sem v flashu ţe malo delal, mi izdelava banerjev ni povzročala dosti preglavic. Pri tej nalogi sem se zelo sponznal z delom s strankami, saj sem moral baner kar nekajkrat popravljati da je bil v skladu z strankinimi pričakovanji, pa čeprav so bile to malenkosti, kot je sprememba pisave za 1px, in podobno. Na koncu je stranka potrdila izdelan baner, in sedaj ju ţe lahko vidimo na http://www.thermencheck.com/ ter http://www.pons.eu. 10

Slika 2: Desno spodaj je izdelan baner za Terme3000 na www.thermencheck.com Slika 3: Drugi baner 11

Glavni projekt Prikazovalnik za lekarne Večji del mojega praktičnega izobraţevanja je bil povezan z izdelavo ter testiranjem aplikacije»prikazovalnik za lekarne«. To je program, ki prikazuje različne informacije za posamezno lekarno. Podatki se pridobivajo iz podatkovne baze, glede na ID posamezne lekarne v kateri se nahaja. Program prikazuje različne informacije obiskovalcem lekarne, kot so trenutno prisotni zaposleni, plavajoči tekst z informacijami, verz, ter diaprojekcijo slik oziroma videa. Program je izdelan v.net C# WPF projektu, kjer izgled aplikacije pišemo v XML obliki. Oblikovanje izgleda Ker je ţe sodelavec pričel z delom na tem projektu, sem imel ţe vnaprej pripravljeno bazo z podatki, ter spletni servis ki pridobiva podatke iz baze. Pravtako je bil ţe izdelan osnovni izgled aplikacije. Slika 4: Osnovni izgled aplikacije 12

Na sliki vidimo osnovni izgled aplikacije, kjer se bodo nahajali naslednji podatki: 1 Naziv lekarne 2 Prikazani podatki o trenutnih zaposlenih (prikazujejo se glede na čas kdaj delajo) 3 Prikaz verza ali misli 4 Prikaz slik ali video reklam za zdravila 5 Plavajoči tekst z informacijami Ker je koda programa zelo obseţna, bom na kratko opisal postopek izdelave ter funkcionalnost aplikacije. Branje podatkov iz baze Ob zagonu aplikacije se najprej preko spletnega servisa pridobijo najnovejši podatki o zaposlenih, mediji, text... ti se nato shranijo v mapo določeno v konfiguracijski datoteki. namespace Prikazovalnik class DataReciever public static void RecieveData() service.service1 klient = new service.service1(); // povezava na web service datoteke string pot = ConfigurationManager.AppSettings["pot"]; // pot kamor shranimo // poti do posameznih datotek string imezap = pot + "xml\\" + ConfigurationManager.AppSettings["imeDatZaposlenih"]; string imebesedila = pot + "xml\\" + ConfigurationManager.AppSettings["imeDatBesedila"]; string imebesedila2 = pot + "xml\\" + ConfigurationManager.AppSettings["imeDatBesedila2"]; string imemedia1 = pot + "xml\\" + ConfigurationManager.AppSettings["imeDatMediaZgoraj"]; string imemedia2 = pot + "xml\\" + ConfigurationManager.AppSettings["imeDatMediaSpodaj"]; string mapazap = pot + ConfigurationManager.AppSettings["imeMapeZap"]; string mapamedia1 = pot + ConfigurationManager.AppSettings["imeMapeM1"]; string mapamedia2 = pot + ConfigurationManager.AppSettings["imeMapeM2"]; int stlek = Int32.Parse(ConfigurationManager.AppSettings["stLek"]); // ID lekarne IDatotekaFileSystem f = new DatotekaFileSystem(); try // prenesemo datoteke f.prenesidatotekeftp(klient, stlek, mapazap, "zaposleni"); f.prenesidatotekeftp(klient, stlek, mapamedia1, "media1"); f.prenesidatotekeftp(klient, stlek, mapamedia2, "media2"); Directory.CreateDirectory(pot + "xml\\"); // prenesemo xml f.shranizaposleni(klient, imezap, stlek); // zaposleni f.shranibesedilo(klient, imebesedila, 1, stlek); // leteci text f.shranibesedilo(klient, imebesedila2, 2, stlek); // ostali text 13

f.shranimedio(klient, imemedia1, stlek, 1); // media1 f.shranimedio(klient, imemedia2, stlek, 2); // media2 catch //... Podatki se osveţujejo glede na določen čas v konfiguracijski datoteki. Prikaz plavajočega teksta Po pridobljenih podatkih, lahko sedaj te podatke preberemo ter prikaţemo na prikazovalniku private void plavajocitextm() // spodnji text XMLReader reader = new XMLReader(); Besedilo plavajocitext = new Besedilo(); readingdata = true; try plavajocitext = reader.vrniflowtext(); catch plavajocitext.vsebina = "Pozdravljeni!"; plavajocitext.naslov = ""; readingdata = false; textanim1.text = Regex.Replace(plavajociText.Vsebina, "[^a-za-z0-9ššċđţţććĉĉ,:!?/_.]+", " ", RegexOptions.Compiled);//plavajociText.Vsebina; /**/ textanim1.fontsize = 40; System.Globalization.CultureInfo enuscultureinfo = System.Globalization.CultureInfo.GetCultureInfo("en-us"); Typeface fonttf = new Typeface(this.textAnim1.FontFamily, this.textanim1.fontstyle, this.textanim1.fontweight, this.textanim1.fontstretch); ; FormattedText frmmttext = new FormattedText(textAnim1.Text, enuscultureinfo, FlowDirection.LeftToRight, fonttf, this.textanim1.fontsize, this.textanim1.foreground); double stringsize = frmmttext.width; /**/ Storyboard storyboardbottomtext = new Storyboard(); DoubleAnimation tmp1 = new DoubleAnimation(); tmp1 = new DoubleAnimation(); tmp1.from = 0; tmp1.to = okno.actualwidth + stringsize; //tmp1.repeatbehavior = RepeatBehavior.Forever; Timeline.SetDesiredFrameRate(tmp1, 40); double equslope = 0.022546419; double offsety = 10.96286472; double fromsecvalue = ((stringsize * equslope) + offsety) / 3; tmp1.duration = new Duration(new TimeSpan(0, 0, (int)fromsecvalue)); tmp1.completed += new EventHandler(storyboardBottomText_Completed); textanim1.beginanimation(textbox.widthproperty, tmp1); 14

Zgornja koda preko objekta XMLReader prebere xml datoteko za plavajoči tekst, ter nato ustvari animacijo plavajočega teksta. Predvajanje medija Na desni strani prikazovalnika, se ves čas prikazuje projekcija slik ali video reklam. Metoda nextmedia() se kliče vedno ko se konča predvajanje video posnetka, ali pa preteče čas za prikaz slike (čas je nastavljen v bazi). Funkcija najprej preveri če je naslednji medij video ali slika, in v primeru da je video, ga razširi po 2/3 zaslona nadomesti sredinski napis z verzom, v primeru da pa je medij slika, pa ga prikaţe v desni tretjini. private void nextmedia() // predvajanje naslednje medije try if (currentvideo == 0) // loadmedia(); // vedno ko pridemo na zaĉetek medijev, gremo preverit ĉe so se posodobili. if (seznammedije.count == 0) // ĉe trenutno ni medije timernextmedia.stop(); timernextmedia.interval = new TimeSpan(0, 0, 10); // poskusimo ponovno preveriti vsakih 10 sekund. timernextmedia.start(); return; if (okno.findname("videovideo") == null) okno.registername("videovideo", videoelement); if (okno.findname("videoslike") == null) okno.registername("videoslike", videoelementslike); if (seznammedije[currentvideo].tip == 2) // 2 = tip za video // prikaţemo samo element za predvajanje videa videoelement.visibility = Visibility.Visible; // vse ostale skrijemo videoelementslike.visibility = Visibility.Hidden; rect.visibility = Visibility.Hidden; txtb.visibility = Visibility.Hidden; spslike.visibility = Visibility.Hidden; // stretch videoelement.horizontalalignment = System.Windows.HorizontalAlignment.Stretch; videoelement.verticalalignment = System.Windows.VerticalAlignment.Stretch; BrushConverter bc = new BrushConverter(); modul2.background = Brushes.Black; // nastavimo trenuten video ter ga zaĉnemo predvajati videoelement.source = new Uri(seznamMedije[currentVideo].pot, UriKind.RelativeOrAbsolute); // seznamvideov timernextmedia.stop(); videoelement.loadedbehavior = MediaState.Manual; videoelement.volume = 0; videoelement.play(); if (seznammedije[currentvideo].tip == 0) // 0 = tip za slike // skrijemo element za predvajanje videa 15

videoelement.visibility = Visibility.Hidden; // vse ostale prikaţemo videoelementslike.visibility = Visibility.Visible; rect.visibility = Visibility.Visible; txtb.visibility = Visibility.Visible; spslike.visibility = Visibility.Visible; modul2.background = new SolidColorBrush(Color.FromRgb(213, 214, 198)); // pozicija slike Grid.SetRow(videoElementSlike, 1); Grid.SetColumn(videoElementSlike, 2); // align slike videoelementslike.verticalalignment = VerticalAlignment.Top; videoelementslike.horizontalalignment = HorizontalAlignment.Center; // nastavimo trenutno sliko ter jo predvajamo toliko ĉasa kot je nastavljeno v media2.xml videoelementslike.source = new Uri(seznamMedije[currentVideo].pot, UriKind.RelativeOrAbsolute); videoelementslike.width = 560; timernextmedia.stop(); timernextmedia.interval = new TimeSpan(0, 0, seznammedije[currentvideo].castrajanja); timernextmedia.start(); videoelementslike.loadedbehavior = MediaState.Manual; videoelementslike.play(); // animacija - fade in DoubleAnimation animation = new DoubleAnimation(); animation.from = 0; animation.to = 1; animation.duration = new Duration(new TimeSpan(0, 0, 3)); videoelement.beginanimation(mediaelement.opacityproperty, animation); videoelementslike.beginanimation(mediaelement.opacityproperty, animation); currentvideo++; // nastavimo naslednji medij // ko pridemo do konca, gremo od zaĉetka if (currentvideo == seznammedije.count) currentvideo = 0; catch // ĉe pride do napake (npr. pri branju xml-a) poskusimo ponovno od zaĉetka seznama medijev currentvideo = 0; loadmedia(); nextmedia(); private void timernextmedia_tick(object sender, EventArgs e) // ko se konĉa predvajanje ene slike (glede na ĉas ki je nastavljen v media2.xml) gremo na naslednji medij nextmedia(); private void mediaelement1_mediaended(object sender, RoutedEventArgs e) // ko se konĉa predvajanje videa, gremo na naslednji medij okno.children.remove(videoelement); nextmedia(); 16

Prikaz zaposlenih Zaposleni se prikazujejo dinamično, in sicer so prikazani zaposleni ki so trenutno na delovnem mestu. To je rešeno tako, da ima vsak zaposleni v bazi vpisan svoj delovni čas, program pa potem preveri kateri zaposleni so v določeni lekarni ob določenem času prisotni. Tiste prikaţe na levi strani prikazovalnika. V konfiguracijski datoteki je nastavljeno število prikazanih zaposlenih na eni strani. V kolikor je zaposlenih več kot jih lahko prikaţemo naenkrat, jih menjujemo vsakih nekaj sekund (nastavitev). Koda za prikaz zaposlenih: private void showemployes() // prikaz zaposlenih Storyboard employesstoryboard = new Storyboard(); // odstranimo prejšnje zaposlene (ĉe so) if (gridzaposleni.children.contains(panelzaposleni)) gridzaposleni.children.remove(panelzaposleni); panelzaposleni = new StackPanel(); // barva ozadja BrushConverter bc = new BrushConverter(); Brush b = (Brush)bc.ConvertFrom("#37686C"); panelzaposleni.background = b; // nastavimo pozicijo v gridu Grid.SetRow(panelZaposleni, 1); //Grid.SetColumn(panelZaposleni, 0); // naslov TextBlock naslov = new TextBlock(); naslov.text = "Danes z vami:"; naslov.fontsize = 25; BrushConverter bc0 = new BrushConverter(); naslov.foreground = (Brush)bc0.ConvertFrom("#99CAC7"); naslov.margin = new Thickness(40, 20, 0, 15); panelzaposleni.children.add(naslov); // ko pridemo do zaĉetka zaposlenih na novo preberemo xml za morebitno spremembo if (currentemploye == 0) readingdata = true; try XMLReader reader2 = new XMLReader(); zaposleni = reader2.vrnizaposlene(); catch readingdata = false; int count = 0; // spremenljivka z katero bomo preverili kdaj bo število prikaznih na eni "strani" enako nastavljenemu v appconfig (steviloprikazanihzaposlenih) if (zaposleni.count > 0) // ĉe so zaposleni sploh vnešeni // dodajamo zaposlene na stackpanel, dokler jih na eni strani ne prikaţemo toliko kot je nastavljeno v appconfig (steviloprikazanihzaposlenih) while (count < shownumber && currentemploye < zaposleni.count) 17

Zaposleni zap = (Zaposleni)zaposleni[currentEmploye]; // ĉe ni vnešenega delovnega ĉasa, potem ga prikazujemo ves ĉas if(zap.zacetek == "") zap.zacetek = "00:00"; if (zap.konec == "") zap.konec = "23:59"; //************************************************************* DateTime now = DateTime.Now; // trenutni datum // preverimo ĉe trenutni zaposleni dela na ta dan, ob tem ĉasu - ĉe ne ga preskoĉimo in gremo na naslednjega if ((zap.datum == now.day + "." + now.month + "." + now.year) && (DateTime.Parse(zap.Zacetek).TimeOfDay <= now.timeofday) && (DateTime.Parse(zap.Konec).TimeOfDay > now.timeofday)) StackPanel panel = new StackPanel(); if (okno.findname("panelz" + count)!= null) okno.unregistername("panelz" + count); okno.registername("panelz" + count, panel); Grid.SetRow(panel, 0); Grid.SetColumn(panel, 0); // ime, priimek, naziv, pisava... TextBlock imepriimek = new TextBlock(); imepriimek.text = Regex.Replace(zap.Ime, @"\s", "") + " " + Regex.Replace(zap.Priimek, @"\s", ""); imepriimek.foreground = Brushes.White; imepriimek.fontsize = 23; BrushConverter bc1 = new BrushConverter(); imepriimek.foreground = (Brush)bc1.ConvertFrom("#F0FAFF"); panel.children.add(imepriimek); TextBlock naziv = new TextBlock(); naziv.text = zap.naziv; naziv.fontsize = 20; BrushConverter bc2 = new BrushConverter(); naziv.foreground = (Brush)bc2.ConvertFrom("#99CAC7"); naziv.margin = new Thickness(0, 0, 0, 15); panel.children.add(naziv); // slika zaposlenega (ĉe obstaja) Image slika = new Image(); if (zap.slika!= "") Uri uri = new Uri(zap.Slika, UriKind.RelativeOrAbsolute); ImageSource imgsource = new BitmapImage(uri); slika.width = 100; slika.source = imgsource; slika.margin = new Thickness(0, 5, 10, 0); // dockpanel (slika na levi strani; ime, priimek, naziv na desni) DockPanel dockpanel = new DockPanel(); dockpanel.margin = new Thickness(40, 0, 0, 0); if (slika.height!= 0) dockpanel.children.add(slika); dockpanel.children.add(panel); if (slika.height!= 0) DockPanel.SetDock(slika, Dock.Left); DockPanel.SetDock(panel, Dock.Right); panelzaposleni.children.add(dockpanel); // ĉe imamo veĉ zaposlenih kot jih lahko prikaţemo na eni strani, potem dodamo fade animacijo za prikaz naslednjih zaposlenih if (checknextemployees(0) > shownumber) DoubleAnimation animation = new DoubleAnimation(); animation.from = 0; 18

animation.to = 1; animation.begintime = new TimeSpan(0, 0, 0); animation.duration = new Duration(new TimeSpan(0, 0, 1)); Storyboard.SetTargetName(animation, "panelz" + count); Storyboard.SetTargetProperty(animation, new PropertyPath(Panel.OpacityProperty)); employesstoryboard.children.add(animation); count++; currentemploye++; // naslednji zaposleni // ĉe nimamo veĉ zaposlenih za prikazati, gremo na zaĉetek if (checknextemployees(currentemploye) == 0) currentemploye = 0; if (count > 0) // ĉe imamo zaposlene za prikazati // fade naslednjih zaposlenih if (checknextemployees(0) > shownumber) employesstoryboard.begin(this, true); gridzaposleni.children.add(panelzaposleni); //prikaz zaposlenih Grid.SetRow(panelZaposleni, 0); Konfiguracijska datoteka V konfiguracijski datoteki so nastavljeni vsi pomembnejši parametri za pravilno delovanje prikazovalnika. Tukaj nastavimo lokacijo kamor naj se shranjujejo vsi podatki za prikazovanje (video, slike, text), ID lekarne, ter nastavitve povezane z prikazom (čas prikazovanja, čas posodabljanja novih podatkov iz spletnega servisa, ) Konfiguracija: <?xml version="1.0"?> <configuration> <configsections> <sectiongroup name="applicationsettings" type="system.configuration.applicationsettingsgroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="prikazovalnik.properties.settings" type="system.configuration.clientsettingssection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirepermission="false"/> </sectiongroup> </configsections> <applicationsettings> <Prikazovalnik.Properties.Settings> <setting name="prikazovalnik_service_service1" serializeas="string"> <value>http://****/service1.asmx</value> </setting> </Prikazovalnik.Properties.Settings> </applicationsettings> <appsettings> <!--pot--> <add key="pot" value="d:\lekarna\lekarna_podatki\"/> <!--imena xml-jev--> <add key="imedatzaposlenih" value="zaposleni.xml"/> <add key="imedatbesedila" value="besedilo.xml"/> <add key="imedatbesedila2" value="besedilo2.xml"/> <add key="imedatmediazgoraj" value="media1.xml"/> <add key="imedatmediaspodaj" value="media2.xml"/> <!--imena map kjer se naj shranjujejo slike, filmi...--> <add key="imemapezap" value="zaposleni"/> <add key="imemapem1" value="media1"/> <add key="imemapem2" value="media2"/> <add key="imemapexml" value="xml"/> 19

<!--podatki enote--> <add key="stlek" value="11"/> <add key="nazivlekarne" value="lekarna"/> <add key="kontaktnipodatki" value="pomurske Lekarne Kocljeva 2 9000 Murska Sobota www.pomurske-lekarne.si"/> <!--ĉas osveţevanja podatkov o zaposlenih, medije,... --> <add key="casosvezevanjapodatkov" value="5"/> <!-- minute --> <!-- število naenkrat prikazanih zaposlenih --> <add key="steviloprikazanihzaposlenih" value="4"/> <!-- na koliko sekund naj se prikaţe naslednjih n-zaposlenih ĉe jih ne moremo prikazati na eni strani (v sekundah) --> <add key="hitrostprikazovanjazaposlenih" value="5"/> <!-- sekunde --> </appsettings> <startup><supportedruntime version="v2.0.50727"/></startup></configuration> Zaključek V zgornjih točkah je le na kratko opisano delovanje prikazovalnika. Celotna koda je zelo obširna, zato sem opisal le glavne funkcije programa. Na spodnji sliki je prikazano delovanje prikazovalnika na eni izmed pomurskih lekarn. Slika 5: Prikazovalnik - prikazovanje slik 20

Slika 6: Prikazovalnik - prikazovanje videa Na sliki 5 je prikazano delovanje prikazovalnika ko prikazuje sliko. Trajanje prikaza slike je nastavljeno v bazi za vsako sliko posebej. To si nastavljajo lekarne same, preko uporabniškega vmesnika kjer dodajajo nove medije, podatke o zaposlenih, ter druge nastavitve. Na sliki 6 je prikazano delovanje prikazovalnika ko prikazuje video. Takrat se video prikazuje po 2/3 celotnega prikazovalnika. Ko se predvajanje videa konča, prikazovalnik preveri naslednji medij ter ga prikaţe. Če je naslednji medij slika, preklopi nazaj v pogled kakršen je viden na sliki 5, sicer pa se nadaljuje predvajanje videa kot na sliki 6. 21

Sklep Še enkrat bi se rad zahvalil podjetju Hakl IT, d.o.o. za omogočeno praktično izobraţevanje. Delo mi je bilo zelo všeč, saj so bili vsi zelo prijazni, ter so mi rade volje pomagali v primeru teţav. V sklopu praktičnega izobraţevanja sem dobil dosti izkušenj, ki mi bodo prav gotovo pomagale v prihodnosti. Spoznal sem delo v kolektivu, delo na projektih, pa tudi delo z strankami. Pridobil sem tudi dosti novega znanja iz podatkovnih baz, saj je v podjetju dosti opravka z le temi. Prav tako sem nadgradil svoje znanje iz programskih jezikov, saj sem se poleg nadgradnje jezika c# ter podatkovnih baz, naučil tudi izdelavo flash animacij. 22