VISOKOŠOLSKI STROKOVNI ŠTUDIJ Informatika in tehnologije

Transcription

VISOKOŠOLSKI STROKOVNI ŠTUDIJ Informatika in tehnologije
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: [email protected]
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
string pot = ConfigurationManager.AppSettings["pot"]; // pot kamor shranimo
datoteke
// 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-Z09šŠĊĐţŢćĆĉĈ,:!?/_.]+", " ", 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