Skoro svaka kompanija u svojim bazama podataka ima tabelu klijenata, zaposlenih ili tabelu osoba. Jedna od takvih tabela uglavnom sadrži kolone za ime, srednje ime i prezime klijenta. Kod kompanija koje se bave trgovinom se uglavnom očekuje da klijent ili službenik unese puno ime klijenta kao na kreditnim karticama u bazu putem softvera, sistema ili web stranice i to je najjednostavnije napraviti. Čak je to svugde praksa. Ali šta ako to nama nije dovoljno? Kad vidite nečije ime vi ne znate da li je to ime osobe rođenjem, da li osoba nosi prezime udajom ili je jednostavno promenila svoje ime i prezime. MBS je vaš lični sistem i on se od starta pravi da sadrži maksimalno što više informacija i zato MBS sadrži informacije o svim vašim imenima. Jedino nema potrebe da pamti svako prezime iz više brakova, već samo iz onog zadnjeg. Sva imena su takođe ispisana na 4 strana jezika. Kad bi ste sve te mogućnosti stavili u jednu tabelu, dobili bi ste mnoštvo praznih polja u tabeli i ponavljanje podataka što je neprihvatljivo. Ali ako taj posao podelite u više tabela na pametan način, onda nema potrebe da odustajemo od naših želja čak iako se negde podaci ponavljaju ili tabela sadrži i po neko prazno polje.
( Window FirstName povezan sa window-ima Languages i Flags )
Možda će te se pitati zašto morate pisati nečije ime na više jezika. Što komplikujem? Na primer; imate napisano puno ime Stefani Joanne Angelina Germanotta. Prvo većina ljudi i ne zna pročitati ovo ime, čak ne zna ni koja je ovo osoba. Vaš sistem vama mora biti jasan u potpunosti. Bez jasnoće nema znanja ni boljeg pamćenja. Sa MBS vi će te znati i kako se ovo ime piše na engleskom, srpskom, nemačkom i na nekom četvrtom jeziku po vašoj volji. Pored vašeg punog imena MBS takođe mora da sadrži i polja za vaš nadimak i za umetničko ime. Inače navedeno ime osobe vam ništa ne znači. Ali ako znate da je navedeno ime, puno ime Lady Gaga-e, onda definitivno i samo ime kod vas dobija neki smisao. Zato su zahtevi MBS-a mnogo veći od 3 polja u jednoj tabeli. Razumem da je kompleksnost programiranja svega toga tolika da bi većina programera digla ruke od takvog posla, jer ako se MBS samo sa nazivom osobe ovoliko bavi, kako tek izgledaju ostale stavke u tabeli osobe. Ali razumite i vi da MBS je MBS, pametan sistem baziran na što više detalja i informacija a ne na puki prioritet. MBS je čak osnova za pravljenje veštačke inteligencije. Nema potrebe da ne umete da pročitate nečije ime. Znači prvo su bitni zahtevi jer sve što hoćete u vašem sistemu to treba i da implementirajte ukoliko to nije nešto nemoguće. U MBS-u, imena su postavljena u više window-a i tabela:
- Ime osobe
- Srednje ime osobe ili svega što može stojati između imena i prezimena
- Prezime osobe
Zatim:
- Puno ime i prezime osobe rođenjem
- Puno ime i prezime udajom
- Puno ime i prezime promenom imena i prezimena
Zatim:
- Nadimak osobe
- Umetničko ime osobe
I svi ovi zahtevi moraju biti na engleskom, srpskom, nemačkom jeziku i četvrti jezik je vaš izbor. Ukoliko upisujemo u sistem Brus Li-ja, četvrti jezik će logički predstavljati kineski jezik. Znači nama četvrti jezik nije poznat ukoliko ga sami ne odredimo i zbog toga mora imati i izbor jezika što je dodatno polje u tabeli. Radi jednostavnosti četvrti jezik sam nazvao ime pod lokalnim jezikom i on se bira sa window-a Languages o kojem je pisano u prethodnom postu ovde.
Kako da tu kompleksnost pojednostavimo i smanjimo toliki unos podataka?
Kako da tu kompleksnost pojednostavimo i smanjimo toliki unos podataka?
( Window FirstNames je osnova za 5 identičnih window-a u nazivima osobe )
Kao što vidite na slici u window-u FirstNames unosite samo ime neke osobe. Svako ime se unosi samo jednom a koristi se gde god vam treba. Takođe imena prevodite u tabeli za imena jednom i koliko god da koristite to ime vi više nikad ne morate ponovo unositi prevod imena. Tačnije, vaše ime sa svim prevodima je samo jedan broj u tabeli koja će koristiti tabelu sa imenima. Na takav način vi ste eliminisali mnoga polja u tabelama gde bi inače pisali i prevode imena.
Obratite pažnju na kontrolu ListBox. Do sada ListBox kontrole zastava i jezika nisu u preteranom broju i neće praviti problem, ali s obzirom da ListBox kontrola sa imenima može sadržati i hiljade imena, prvo je neophodno da kontroli omogućite VirtualizingPanel i to u pikselima:
<ListBox x:Name="listBoxFirstNames" Canvas.Top="50" Canvas.Left="10" Height="311" Width="240"
ItemTemplate="{StaticResource FirstNameDataTemplate}"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.ScrollUnit="Pixel"
SelectionChanged="listBoxLanguages_SelectionChanged">
</ListBox>
private void textBoxSearch_TextChanged(object sender, TextChangedEventArgs e)
{
if
(textBoxSearch.Text != String.Empty)
{
string textOriginal = textBoxSearch.Text.Trim();
string upper = textOriginal.ToUpper();
string lower = textOriginal.ToLower();
try
{
using (FirstNamesEntities db = new FirstNamesEntities())
{
var searchFiltered = from fName in db.FirstNamesViews.ToList()
let fNameText =
fName.FirstNameENG
where fNameText.StartsWith(lower)
||
fNameText.StartsWith(upper)
||
fNameText.Contains(textOriginal)
select fName;
listBoxFirstNames.ItemsSource = searchFiltered;
}
}
catch (Exception)
{
textBoxSearch.Text =
textOriginal;
}
}
}
Na ovaj način takođe dolazite lakše do imena koje vam
treba. Ime na engleskom, nemačkom i srpskom mogu biti ista, ali u svakom
slučaju poželjno ih je unositi nego ostavljati prazna polja. Za početak unos imena nije
obavezan ali u kasnijoj fazi bi bilo poželjno da budu. Pored kontrole TextBox-a
koji predstavlja kontrolu za unos lokalnog jezika se nalazi dugme sa slikom
umesto natpisa. Ovo dugme poziva window sa jezicima i kad vi izaberete neki
jezik, na dugmetu se iscrta i zastava za jezik koji predstavlja. Takođe,
ukoliko niste sigurni koja zastava predstavlja koji jezik, dovoljno je da
postavite kursor miša iznad zastave na dugmetu i da vam se pojavi ToolTip sa
natpisom jezika. Pogledajte prvo na sledećoj slici window LastNames koji je
identičan FirstNames window-u.
( Window LastNames je identičan window-ima FirstName i MiddleName )
Kad postavite kursor na bilo koje ime, na ToolTip-u
se iscrtaju zastave na nemačkom i srpskom jeziku, sa nazivom imena na tim
jezicima. To se može proširiti i da se prikazuje izabrani jezik promenom
DataTemplate-a kontrole ListBox ukoliko je polje za lokalni jezik uneseno. Ali
kod ToolTip-a od dugmeta za jezike, je nešto drugo. To je isprogramirano kodom,
u događaju SelectionChanged kontrole ListBox i koristi se Content umesto
kontrole koja bi sadržavala tekst.
// ToolTip for language
ToolTip toolTipLanguage = new ToolTip();
toolTipLanguage.Background = new SolidColorBrush(Colors.Black);
toolTipLanguage.Foreground = new SolidColorBrush(Colors.Yellow);
toolTipLanguage.Content =
firstNames.LanguageENG;
buttonLanguages.ToolTip
= toolTipLanguage;
Međutim problem je šta kad je ToolTip prazan? To jest kad u njemu ne piše ništa. Onda vam se pojavljuje prazan kvadrat. Da bi se rešio taj problem, neophodno je da u fajl stilova, napišete stil koji će se pobrinuti da vam se ToolTip ne prikazuje ako je prazan. U MBS-u ovaj stil je dodat fajlu MbsStyle.xaml zaduženom za sve stilove celog sistema.
<!-- Style to hide tool tips that have
an empty content. -->
<Style
x:Key="{x:Type ToolTip}" TargetType="ToolTip">
<Style.Triggers>
<Trigger Property="Content"
Value="{x:Static sys:String.Empty}">
<Setter Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger
Property="Content"
Value="{x:Null}">
<Setter
Property="Visibility"
Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
Da bi vaš window funkcionisao sa window-ima Languages
i Flags, morate uvesti i napraviti reference za navedene window-e.
Window-i FirstNames i LastNames imaju ograničene TextBox kontrole na 20
karaktera. Window MiddleNames morate proširiti na 30 karaktera jer kao što
vidite, Lejdi Gaga ima dva imena koje tretiramo kao jedno polje srednjeg imena.
( Window MiddleName može sadržavati više imena )
Nastaviće se!
Srećno sa
programiranjem!
Nema komentara:
Objavi komentar