![]() |
|
|
|
|
#1
|
|||
|
|||
|
Помогите найти ошибку.
Суть: -Программа с 4 пользователями, 1 админ, и 3 остальных. -Админ назначает доступ пользователям кто какие функции может выполнять. Проблема: Если каждому назначать по отдельности(войти-назначить-выйти), всё работает, ежели определить доступ сразу всем 3, то работает только тот, кому назначили доступ последнему, остальным запрещает всё. Файл приложил, там чуть все разбросано, разбирался...Но пока не понял... Помогите разобраться... Пароли: Администратор - admin Вова - vova Дима - dima Стас - stas Последний раз редактировалось M.A.D.M.A.N., 28.02.2014 в 22:45. |
|
#2
|
|||
|
|||
|
Качать лень поэтому лишь предположу что ты неправильно сохраняешь изменения. Правильно ли у тебя указано условие цикла? Выложи лучше код.
|
|
#3
|
|||
|
|||
|
Всё,я исправил. А можете помочь с этим... При не правильном вводе пароля, показывает ShowMessage по всем пользователям а не по одному...как надо...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
p,p1,p2,p3,p4:integer;
st,par:string;
begin
st:=ComboBox1.Text;
par:=Edit1.Text;
if (st='Артём') and (par='artem') then
begin
ShowMessage('Зравствуйте, Артём! У вас высший уровень доступа!');
RadioButton1.Visible:=true;
RadioButton2.Visible:=true;
RadioButton3.Visible:=true;
RadioButton4.Visible:=true;
end
else
begin
p:=p+1;
if p=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!');
if p=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!');
if p=3 then form1.Close;
end;
if (st='Максим') and (par='maxim') then
begin
ShowMessage('Зравствуйте, Максим! Вам доступны секретные данные!');
RadioButton1.Visible:=true;
RadioButton2.Visible:=true;
RadioButton3.Visible:=true;
RadioButton4.Visible:=false;
end
else
begin
p1:=p1+1;
if p1=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!');
if p1=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!');
if p1=3 then form1.Close;
end;
if (st='Александр') and (par='sasha') then
begin
ShowMessage('Зравствуйте, Александр! Вам доступны открытые данные!');
RadioButton1.Visible:=true;
RadioButton2.Visible:=false;
RadioButton3.Visible:=false;
RadioButton4.Visible:=false;
end
else
begin
p2:=p2+1;
if p2=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!');
if p2=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!');
if p2=3 then form1.Close;
end;
if (st='Владислав') and (par='vlad') then
begin
ShowMessage('Зравствуйте, Владислав! Вам доступны открытые данные!');
RadioButton1.Visible:=true;
RadioButton2.Visible:=false;
RadioButton3.Visible:=false;
RadioButton4.Visible:=false;
end
else
begin
p3:=p3+1;
if p3=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!');
if p3=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!');
if p3=3 then form1.Close;
end;
if (st='Анатолий') and (par='tolik') then
begin
ShowMessage('Зравствуйте, Анатолий! Вам доступны секретные данные!');
RadioButton1.Visible:=true;
RadioButton2.Visible:=true;
RadioButton3.Visible:=true;
RadioButton4.Visible:=false;
end
else
begin
p4:=p4+1;
if p4=1 then ShowMessage('Пароль введен не верно, осталось 2 попытки!');
if p4=2 then ShowMessage('Пароль введен не верно, осталось 1 попытка!');
if p4=3 then form1.Close;
end;
end; |
|
#4
|
||||
|
||||
|
Потому что при вводе неправильного пароля сработают все else, ведь условие ни одного if не выполняется.
Только предупреждаю сразу. Никогда, даже под дулом пистолета, нельзя писать такой код. Строго заданные имена пользователей и пароли, которые находятся открытием программы любым текстовым редактором, и без права изменить эту информацию. А также многократное дублирование одного и того же кода. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Aks67rus (01.03.2014)
| ||
|
#5
|
|||
|
|||
|
Это практическое задание, поэтому не сильно страшно. А как лучше реализовывать это, если делать серьёзный программный продукт?
|
|
#6
|
||||
|
||||
|
Цитата:
Код:
if st='Артём' then
begin
if par='artem' then
begin
ShowMessage('Зравствуйте, Артём! У вас высший уровень доступа!');
RadioButton1.Visible:=...
end else
begin
ShowMessage('Пароль введен не верно, осталось ...
end;
end else
if st='Максим' then
begin
if par='maxim' then
begin
ShowMessage('Зравствуйте, Максим! Вам доступны секретные данные!');
RadioButton1.Visible:=...
end else
begin
ShowMessage('Пароль введен не верно, осталось ...
end;
end else
if st='Александр' then
begin
if par='sasha' then
begin
ShowMessage('Зравствуйте, Александр! Вам доступны открытые данные!');
RadioButton1.Visible:=...
end else
begin
ShowMessage('Пароль введен не верно, осталось ...
end else
if st=...А вообще массив здесь так и напрашивается. Или же отдельная таблица базы данных. |
|
#7
|
||||
|
||||
|
Цитата:
Код:
var
errcnt: integer = 3;
ms: array[0..2] of array[0..4] of string =
(('Артём','Максим','Александр','Владислав','Анатолий'),
('artem','maxim','sasha','vlad','tolik'),
('Здравствуйте, Артём! У вас высший уровень доступа!',
'Здравствуйте, Максим! Вам доступны секретные данные!',
'Здравствуйте, Александр! Вам доступны открытые данные!',
'Здравствуйте, Владислав! Вам доступны открытые данные!',
'Здравствуйте, Анатолий! Вам доступны секретные данные!'));
procedure TForm1.Button1Click(Sender: TObject);
var
user, pwd, i :integer;
begin
user:= 0;
pwd:= -1;
for i:= 0 to 4 do
begin
if ComboBox1.Text = ms[0,i] then user:= i;
if Edit1.Text = ms[1,i] then pwd := i;
end;
if pwd >= 0 then
begin
if user = pwd then
begin
{ case user of
0: что-то делаем для каждого пользователя
1:
2:
3:
4:
end;
}
errcnt:= 3;
ShowMessage(ms[2, user]);
end;
end else
begin
Dec(errcnt);
if errcnt = 2 then ShowMessage('Пароль введен не верно, осталось 2 попытки!');
if errcnt = 1 then ShowMessage('Пароль введен не верно, осталась 1 попытка!');
if errcnt = 0 then form1.Close;
end;
end;З.Ы. Посмотрел архив - у меня форматёр завис намертво кстати, у компонента Edit есть свойство PasswordChar, замените #0 на * и будут звёздочки вместо пароляПоследний раз редактировалось Alegun, 01.03.2014 в 03:19. |
|
#8
|
||||
|
||||
|
Цитата:
Имена и их конфигурации должны быть во внешнем (шифрованном) файле или базе и загружаться при старте программы. Пароли - в виде хешей, тоже где-то снаружи. Далее нужно найти пользователя (пройти по загруженному массиву и сравнить), потом проверить соответствующий пароль. Подгрузить соответствующую конфигурацию (в данном случае конфиг - требуемые RadioButton'ы). Все это делается легко и просто. А вот если продукт действительно серьезный - то нужно защитить информацию в файле от несанкционированной модификации и привязать выполнение любой операции к правильности пароля и конфига. Чтобы нельзя было тупо найти окна радиобаттонов и сделать их видимыми снаружи программы. |