Ich würde die Prüfung vom Jahr über den Monat zum Tag herunter abarbeiten.
Und dem Nutzer nach Möglichkeit auch gleich verraten, was an seinem Wert falsch ist.
Beispiel:
Delphi-Quellcode:
program ueb03;
{$APPTYPE CONSOLE}
{$R+,Q+ X-}
uses
SysUtils;
var
Tag: integer;
Monat: integer;
Jahr: integer;
MaxTage: integer;
begin
write('Bitte den Tag eingeben ');
readln(Tag);
write('Bitte den Monat eingeben ');
readln(Monat);
write('Bitte das Jahr eingeben ');
readln(Jahr);
if (Jahr >= 1) and (Jahr <= 3000)then begin
writeln ('Jahr OK');
if (Monat >= 1) and (Monat <= 12) then begin
writeln ('Monat OK');
case Monat of
1,3,5,7,8,10,12: begin
MaxTage := 31;
end;
2: begin
if (
(Jahr mod 4 = 0) and
(Jahr mod 100 <> 0)
) or
(Jahr mod 400 = 0) then begin
MaxTage := 29;
end
else
begin
MaxTage := 28;
end;
end;
else begin
MaxTage := 30;
end;
end;
if (Tag >=1) and (Tag <= MaxTage) then begin
writeln ('Tag OK');
// an dieser Stelle kann man dann noch solche Dinge wie Osterprüfung etc. einbauen und den User informieren
end
else begin
writeln ('Tag ungültig: Wert muss zwischen 1 und '
+ IntToStr(MaxTage) + ' liegen!');
end;
end
else begin
writeln('Monat ungültig: Wert muss zwischen 1 und 12 liegen!');
end;
end
else begin
writeln('Jahr ungültig: Wert muss zwischen 1 und 3000 liegen');
end;
writeln ('Bitte ENTER drücken');
readln;
end.