Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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 :/

Předmět Autor Datum
Neuvedl jsi žádné relevantní informace, takže pouze obecně. Projdeš všechny dárce a u každého zkontr…
Wikan 03.04.2011 15:58
Wikan
S tou krevni skupinou to neni problem .. problem je s datumem .. http://www.edisk.cz/stahni/30102/Kr…
Krakonosh 03.04.2011 16:04
Krakonosh
Ukládáš si datum jako string? Proč ne jako TDateTime? Ale i tam, v čem je problém? Nedokážeš poznat,…
Wikan 03.04.2011 16:13
Wikan
Ja na programovani moc nejsem .. (TDateTime) slysim poprve ;) .. a ano nedokaze poznat ze je 3 mesic…
Krakonosh 03.04.2011 16:19
Krakonosh
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č…
Wikan 03.04.2011 16:23
Wikan
Nejede mi to ;) ..Uz jsem vyzkousel vsechno ^^ .. Jestli bych te mohl poprosit aby jsi mi to tam dop…
Krakonosh 03.04.2011 16:36
Krakonosh
Tak sem napiš co máš, psát ti to rozhodně nebudu.
Wikan 03.04.2011 16:39
Wikan
: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 u…
Krakonosh 03.04.2011 16:43
Krakonosh
To je to, co jsi měl původně. Myslel jsem to, co jsem psal já.
Wikan 03.04.2011 16:45
Wikan
TDateTime si ešte nepočul? Tak to máš blbéé... Len narýchlo som si pozrel ten Tvoj program a navrhu…
pme 03.04.2011 17:13
pme
díky ;)
Krakonosh 03.04.2011 18:17
Krakonosh
Nemáš zač, už Ti to funguje?
pme 03.04.2011 18:18
pme
jo jo ;) díky moc =) ..už jenom ladim detaily ;) poslední
Krakonosh 03.04.2011 20:07
Krakonosh

: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.

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! ;-)

Zpět do poradny Odpovědět na původní otázku Nahoru