

Delphi projekt
Zdravim .. dělám projekt do školy a narazil jsem na malý problém ..
Jedná se o program který má za ukol vytvorit evidenci darců krve :d ..
Jednim z podukolu ma byt vypis vsech darcu kteri prichazeji v uvahu pro odber - tzn. dárci kteri maji odpovidajici krevni skupinu a jejichz datum odberu je nejméně 3 mesice stare.
at se snazim jak se snazim nemuzu na to prijit .. ocenim jakoukoliv radu ;)
(popripade program poslu pro lepsi orientaci)
PS docela to spechá .. datum odevzdáni je dneska vecer :/
Neuvedl jsi žádné relevantní informace, takže pouze obecně. Projdeš všechny dárce a u každého zkontroluješ krevní skupinu a datum odběru.
S tou krevni skupinou to neni problem .. problem je s datumem ..
http://www.edisk.cz/stahni/30102/Krevni_Skupiny.ra r_211.22KB.html
jestli mas cas tak se na to koukni prosim jsem bezradnej :d
Je to ve formu 5..
Ukládáš si datum jako string? Proč ne jako TDateTime?
Ale i tam, v čem je problém? Nedokážeš poznat, že je datum 3 měsíce starý?
Ja na programovani moc nejsem .. (TDateTime) slysim poprve ;) .. a ano nedokaze poznat ze je 3 mesice stary. :)
Od aktuálního měsíce odečteš 3, pokud je výsledek menší než 1, sniž aktuální rok o 1 a k měsíci přičti 12.
Výsledný datum porovnávej s datumem posledního odběru, pokud je datum odběru větší, byl před méně než 3 měsíci.
Nejede mi to ;) ..Uz jsem vyzkousel vsechno ^^ .. Jestli bych te mohl poprosit aby jsi mi to tam dopsal a poslal mi to :d
Tak sem napiš co máš, psát ti to rozhodně nebudu.
:d
var
Form5: TForm5;
pom,pom2,dd,mm,rr,d,m,r,p,j,s,k:string;
x,y,a,b,c,h:integer;
implementation
uses unit1,unit2;
{$R *.dfm}
procedure TForm5.Button2Click(Sender: TObject);
begin
form5.Close;
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
dd:=combobox2.text;
mm:=combobox3.text;
rr:=combobox4.text;
x:=strtoint(mm)-3;
y:=strtoint(rr);
if x<1 then
begin
x:=12-x;
y:=strtoint(rr)-1;
end;
edit1.Text:=dd+'.'+inttostr(x)+'.'+inttostr(y);
assignfile(f,'databaze.dat');
if fileexists('databaze.dat')
then reset(f)
else
begin
showmessage('Databáze dosud neexistuje!');exit;
end;
listbox1.clear;
pom:=combobox1.Text;
if dat.datum<=edit1.text then
pom:=combobox1.Text;
while not eof(f) do
begin
read(f,dat);
if pom=dat.Skupina then
listbox1.items.add(dat.Prijmeni +' ' +dat.Jmeno+' ' +dat.Skupina+' ' +dat.Datum);
begin
p:=dat.prijmeni;
j:=dat.jmeno;
s:=dat.Skupina;
k:=dat.Datum;
end;
dd:=combobox2.text;
mm:=combobox3.text;
rr:=combobox4.text;
x:=strtoint(mm)-3;
y:=strtoint(rr);
d:=copy(dat.datum,1,2);
m:=copy(dat.datum,4,2);
r:=copy(dat.datum,7,4);
c:=strtoint(rr)-strtoint(r);
a:=strtoint(d)+strtoint(m)*30;
b:=strtoint(dd)+strtoint(mm)*30;
h:=0;
if c=0 then
begin
if (b-a)>=90 then
listbox1.items.add(p +' ' +j+' ' +s+' ' +k);
end
else
h:=(c*365-a)+b;
if h>=90 then
listbox1.items.add(p +' ' +j+' ' +s+' ' +k);
end;
closefile(f);
end;
end.
To je to, co jsi měl původně. Myslel jsem to, co jsem psal já.
TDateTime si ešte nepočul? Tak to máš blbéé...
Len narýchlo som si pozrel ten Tvoj program a navrhujem nasledovné:
1. datum zmeň zo string na TDateTime !
2. čo ak niekto zadá 31.2.xxxx ? Nahraď tie 3 ComboBoxy pre zadávanie dátumu komponentou TDateTimePicker - ušetríš kód a budeš mať ošetrené korektné zadanie dátumu
3. Pre porovnanie či je dátum väčší ako 3 mesiace použi funkciu:
function IncMonth(Date: TDateTime; Months: Integer) : TDateTime; zväčšíš dátum načítaný zo súboru o 3 mesiace a výsledok porovnáš s aktuálnym dátumom, ten zistíš
funkciou Now: TDateTime
čiže asi takto:
if IncMonth(porovnavany_datum,3) > now then (nemôže darovať)
else (môže darovať)
Good luck!
díky ;)
Nemáš zač, už Ti to funguje?
jo jo ;) díky moc =) ..už jenom ladim detaily ;)