You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
3.8 KiB
Plaintext

program login;
uses
md5, crt;
type
CONNECTION = record
hotel : string;
distance : integer;
end;
HOTEL = record
name : string;
conn : CONNECTION;
end;
USER = record
un: string;
pw: string;
l: boolean;
end;
const
users: array [0..4] of USER = (
(un: 'user1'; pw: '16d7a4fca7442dda3ad93c9a726597e4'; l: false),
(un: 'user2'; pw: 'ccd2fc33d2d423d7209035dbfff82b29'; l: false),
(un: 'user3'; pw: '57c2877c1d84c4b49f3289657deca65c'; l: false),
(un: 'user4'; pw: '4101bef8794fed986e95dfb54850c68b'; l: false),
(un: 'root'; pw: '63a9f0ea7bb98050796b649e85481845'; l: false)
);
hotels: array [0..4] of HOTEL = (
(name: 'Hotel 1'; conn: (hotel: 'Hotel 2'; distance: 11)),
(name: 'Hotel 2'; conn: (hotel: 'Hotel 3'; distance: 5)),
(name: 'Hotel 3'; conn: (hotel: 'Hotel 4'; distance: 11)),
(name: 'Hotel 4'; conn: (hotel: 'Hotel 5'; distance: 5)),
(name: 'Hotel 5'; conn: (hotel: ''; distance: 0))
);
var
readinput: string;
i, j, distance_total, hnum1, hnum2: integer;
correct, exit: boolean;
usersuccess: boolean = false;
velocity, time: real;
{ Calculates the total distance between hotels based on the hotel number input.
(Only numbers accepted!). After printing the total distance a velocity can be
input to calculate the estimated time. }
procedure hotelmain;
var
i : integer;
begin
while exit = false do
begin
distance_total := 0;
for i := 0 to 4 do
begin
distance_total += hotels[i].conn.distance
end;
Writeln('Total tour length: ', distance_total, ' km');
Write('First Hotel Number: ');
ReadLn(hnum1);
Writeln;
Write('Second Hotel Number: ');
ReadLn(hnum2);
If ((hnum1 <= 5) and (hnum2 <= 5)) then
begin
distance_total := 0;
if (hnum1 > hnum2) then
for i := (hnum1-2) downto (hnum2-1) do
distance_total := distance_total + hotels[i].conn.distance
else
for i := (hnum1-1) to (hnum2-2) do
distance_total := distance_total + hotels[i].conn.distance;
Writeln('Distance between hotels is ', distance_total);
Write('Velocity (km/h): ');
ReadLn(velocity);
time := (distance_total / velocity);
WriteLn('Estimated Time: ', time: 10: 2, ' hours');
end;
Write('Exit? (y/n)');
ReadLn(readinput);
if readinput = 'y' then
exit := true
else
exit := false;
end;
end;
begin
TextColor(8);
Writeln('Tourplanner');
Writeln('Written by J.Riegel.');
TextColor(White);
{ endless loop/main loop of the program. Exit with CTRL-C }
while true do
begin
Write('User: ');
ReadLn(readinput);
usersuccess := false;
{ Iterate over all 5 user entries to find the one
that fits the input. set usersuccess to true if found
else it remains false and an user not found error
is printed to the console. }
for i := 0 to 4 do
if readinput = users[i].un then
begin
usersuccess := true;
if (users[i].l) then
begin
TextColor(Red);
Writeln('This user is locked.');
TextColor(White);
Break;
end;
{ 3 tries for password input. Return to the username
input after failure. correct is set to true if
the loggin was a success. }
for j := 0 to 2 do
begin
WriteLn('Password: ');
ReadLn(readinput);
if MD5Print(MD5String(readinput)) = users[i].pw then
begin
WriteLn('Login Successful!');
correct := true;
Break;
end
else
WriteLn('Wrong password! ', 2 - j, ' trys left.');
end;
{ @section userfunctions }
if correct = true then
hotelmain()
else
users[i].l := true;
end;
if usersuccess = false then
WriteLn('User not found');
end;
end.