[ Vladica Savić @ 15.09.2005. 12:25 ] @
Caos ljudi, treba da napravim neki programcic koji ce da kreira porodicno stablo, a iskreno nemam predstavu kako da sve to organizujem i odradim
Pa ako bi neko bio ljubazan da mi detaljno objasni kako da to odradim ili jos bolje ako bi mi neko od vas iskusnijih programera poslao gotov program koji bi mogao da samo jos malo preuredim, ili slicno...
Svaka pomoc bi mi dobro dosla

Unapred zahvalan Vladica Savic
[ nikola.j @ 15.09.2005. 14:17 ] @
>


idi na delphi-gems, to ti je maticni sajt VirtualTreeView komponente. Jes' da
mozda pocetniku nije lako snaci se sa VTV-om, ali je tamo bio jedan od primera
upotrebe VTV-a bas porodicno stablo. Nadam se da ce ti koristiti.
[ Vladica Savić @ 17.09.2005. 07:13 ] @
OK, ali da li bi mi neko objasnio kako da to odradim od nule...
[ PeraKojotSuperGenije @ 17.09.2005. 20:30 ] @
Ako porodicno stablo treba da sadrzi samo podatke "centralnoj osobi", njiovim roditeljima , roditeljima njihovih roditelja itd.(znaci bez brace i sestara) onda je najbolje da podatke o porodicnom stablu drzis u binarnom stablu. Ako se sluzis engleskim jezikom na www.wikipedia.org ces naci definiciju, karakteristike, realizaciju, primere...

Ako porodicno stablo treba da sadrzi podatke i o braci i sestrama... onda treba koristiti drvo umesto binarnog drveta i cini mi se (nisam nikad koristio) da je ova implementacija nesto teza ali nista nesavladivo. I ovo mozes naci na wikipediji.

Ne znam koliko imas iskustva i da li ti ovo ista pomaze? Ako treba opsirnije, reci.
[ Vladica Savić @ 18.09.2005. 16:18 ] @
Naravno da bi mi opsirnija pomoc dobro dosla...
Dakle, dobio sam zadatak da napravim program porodicno stablo, ali nemam pojma kako da sve to odradim >bas kako sam vam i na pocetku rekao<, sto se tice brace, sestaqra, i osatale mnogobrojne rodbine, za pocetak bi bilo bolje da ih izostavimo iz ovoga da mi nebi dodatno komplikovali stvari
Video sam da se ovako nesto radi u Prologu, ali posto tek sad pocinjem da ucim Prolog, odlucio sam da se sa ovim problemom izborim kosteci Delphi.
Dakle p o m a g a j t e
[ PeraKojotSuperGenije @ 19.09.2005. 14:25 ] @
Ja sad trenuto nemam vremena pa cu se javiti za koji dan. Ti se raspitaj za bracu i sestre zato sto to BITNO menja stvari.

U koju skolu ides? (ako nije tajna)
[ Vladica Savić @ 20.09.2005. 09:35 ] @
Citat:
PeraKojotSuperGenije: Ti se raspitaj za bracu i sestre zato sto to BITNO menja stvari.

U koju skolu ides? (ako nije tajna)

Raspitao sam se za bracu i sestre i nazalost mora i to da se uzme u obzir...
Sto se skole tice nije nikakva tajna, idem u Gimnaziju Leskovac

[Ovu poruku je menjao VladaLe dana 20.09.2005. u 10:37 GMT+1]

[Ovu poruku je menjao VladaLe dana 20.09.2005. u 10:38 GMT+1]
[ PeraKojotSuperGenije @ 20.09.2005. 13:23 ] @
Cim budem imao sta da ti pokazem, javicu se (to ce biti za 2-3-4 dana). Usput kako stojis sa klasama u Delphiju?
[ marcha @ 20.09.2005. 13:38 ] @
Da li bi ti ovako nesto odgovaralo :

http://www.delmax.co.yu/stablogrupaart.jpg

(naravno umesto naziva grupa mogu da dodju imena i prezimena, ziveo od-do i sl...)
[ bondja @ 20.09.2005. 14:20 ] @
Mozes da dobijes prinicip kako to da uradis, ali sam program... malo teze, potrudi se :)

Pitanje je kako kreirati porodicno stablo, kakva je to struktura?
Na osnovu toga kako prikazati unete podatke? Kako ih sacuvati... itd...

Porodicno stablo picinje od jednog clana: osobe (musko ili zensko) dakle imamo:

TOsoba = class (TObject)
property Ime: string read FIme write FIme;
property Musko: boolean read FMusko write FMusko;
end;

Osoba moze da stupi u brak sa drugom osobom, tzv Partner (uslov: da je suportnog pola):

TOsoba = class( TObject)
public
property Ime: string read FIme write FIme;
procedure BrakSa( aPartner: TOsoba);
property Musko: boolean read FMusko write FMusko; // true, false
end;

procedure TOsoba.BrakSa ( aPartner: TOsoba);
begin
if aPartner.Musko <> Self.Musko then // moraju da su razlicitog pola!
FDrugaOsoba := aDrugaOsoba
else
ShowMessage('Greska: ne moze osoba da bude istog pola!');
end;

Sada mogu da imaju decu (uz uslov da postoji partner), dakle imamo spisak (listu dece):

TOsoba = class( TObject)
public
property Ime: string read FIme write FIme;
procedure BrakSa( aDrugaOsoba: TOsoba);
procedure NovoDete ( aDete: TOsoba)
property Musko: boolean read FMusko write FMusko; // true, false
end;

procedure TOsoba.NovoDete( aDete: TOsoba);
begin
if Assigned( FPartner) then // ako postoji partner!
begin
if not assigned( FDeca) then
FDeca := TStringList.Create; // <--- jednostavno spisak dece!

FDeca.AddObject ( aDete.Ime, aDete);
end else begin
ShowMessage('Partner nije naveden, ne postoji!')
end;
end;

Kao sto se vidi, aDete je isto tipa TOsoba, i moze se na njega dodavati drugi partner, pa na to nadovezati jos dece itd...

Da ne smaram dalje, i ovo je suvisno, pogledaj atacment :)

PS: snimanje / ucitavanje podataka tako napravljenog drveta ... pa napravi sam :)

Takodje imas i sliku (runtime.bmp) kako izgleda aplikacija u toku rada...

Poz.





[Ovu poruku je menjao bondja dana 20.09.2005. u 15:22 GMT+1]
[ Srki_82 @ 20.09.2005. 14:25 ] @
Sta je ustvari problem... prikazivanje ili cuvanje podataka?
Za podatke mozes iskoristiti klasu slicnu ovoj
Code:
TOsoba = class
  ID: Cardinal;
  Otac, Majka: TOsoba;
  BratSestra: array of TOsoba;
  SinCerka: array of TOsoba;
  Ime, Prezime: String;
  DatumiVremeRodjenja: TDateTime;
  .
  .
  .
end;

Kada snimas podatke na disk snimis prvo ID (sam odluci kako zelis da ga kreiras... bitno je samo da ne postoje osobe sa itim ID), ID osoba koji su roditelji, brace, sestre, sinovi, i posle snimis ime, prezime i ostale podatke koji ti trebaju.
Prikaz bi mogao da uradis samo do nekog odredjenog kolena... recimo prikazujes 5 generacija... sto je se vise udaljavas od pocetne osobe prikazujes sve manje detalja kako bi ti ostali vise prostora za ispis podataka na ekranu. Za cukunbabu je dovoljno da ispises samo ime i datum... nema potrede prikazivati njene brace i sestre... ako korisnik zeli i to da vidi pomerise kroz stablo blize njoj. Ako hoces da prikazujes kompletno stablo od recimo 5 generacija to ce biti bas komplikovano prikazati na ekranu.
[ Vladica Savić @ 20.09.2005. 16:28 ] @
Trenutno je problem organizacija, za prikaz nema problema, a za cuvanje, hm, mislio sam da za to napravim bazu podataka u koju ce da se cuvaju podaci.
Naravno ako neko ima bolji predlog ili jos bolje vec uradjen primer slobodno nek postuje...
[ bondja @ 21.09.2005. 08:30 ] @
Snimanje podataka nije bas toliki problem! Pogledaj atachment :)

Da bi prikazao bracu / seste u TOsoba dodas property:

property Roditelj: TOsoba read FRoditelj write FRoditelj;

i prosiris metodu NovoDete:

procedure TOsoba.NovoDete( aDete: TOsoba);
begin
assert( assigned( FPartner), 'Partner nije naveden, ne mogu imati decu!');

if not assigned( FDeca) then
FDeca := TStringList.Create; // <--- jednostavno: spisak dece!

FDeca.AddObject( aDete.Ime, aDete);
// da zapamtimo ko je rodtelj detetu:
aDete.Roditelj := Self; //<--- OVO JE DODATO!
end;

Tako da kada osoba hoce da sazna ko su braca i sestre, dovoljno je da pita svog roditelja da mu to izlista (pogledaj attachment).

E sada jos samo ostaje snimanje podataka u bazu. Da bi to ostvarili, potrebno je da svaka osoba dobije svoj ID, dakle dodajemo property:

property ID: integer read FID write FID;

i prosirujemo Create metodu da generise taj ID
FID := Random( MaxInt);

I to je sve! Naravno glavnu aplikaciju prosirimo da prikazuje podatke izabrane osobe, da snima i ucitava stablo...

OVO JE SADA SASVIM FUNKCIONALNA APLIKACIJA (MOZES DA PO ZELJI DODAJES JOS PODATAKA (datum rodjenja svake osobe, kada su se uzeli (brak), gde zive, odakle su... itd)

Poz!



[ Vladica Savić @ 21.09.2005. 09:48 ] @
Ja sam mislio da koristim bazu samo da bih mogao da ubacim i slike kao BLOB polja, ali i ovako je S U P E R
Hvala na pomoci, Vladica.