Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Сергей Бендер
Статус: Профессионал
Рейтинг: 5
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 0
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 0
∙ повысить рейтинг »

∙ Pascal / Delphi / Lazarus

Номер выпуска:1699
Дата выхода:23.09.2016, 21:51
Администратор рассылки:Зенченко Константин Николаевич (Модератор)
Подписчиков / экспертов:22 / 17
Вопросов / ответов:1 / 1

Консультация # 189792: Здравствуйте! У меня возникли сложности с таким вопросом: На Pascal ABC.Net Как сделать в этом коде, что бы на каждом пользователе задавался разный пароль при входе?
Код (Pascal) :: выделить код

Консультация # 189792:

Здравствуйте! У меня возникли сложности с таким вопросом: На Pascal ABC.Net
Как сделать в этом коде, что бы на каждом пользователе задавался разный пароль при входе?

Код (Pascal) :: выделить код
program Bezopasnost';
  uses crt;
  type TRights=set of (RRead,RWrite,RGrant); { Виды прав }
  const FullRights: TRights=[RRead,RWrite,RGrant]; { Полные права }
        MaxObj=5; { Число объектов }
        MaxUsers=6; { Число пользователей }
        MaxPass=32;{сам пароль}
  var Users: array [1..MaxUsers] of string[20]; { Имена пользователей }
      UserRights: array [1..MaxObj,1..6] of TRights; { Права пользователей }
      i,j,CurrUser: byte; { Счетчики, номер текущего пользователя }
      SCommand: string[20]; { Текущая команда или имя пользователя }
      tmpRight: TRights; { Временное хранилище типа передаваемых прав }
   
begin
  clrscr;
  { Инициализируем пользователей }
  Users[1]:='Оксана';
  Users[2]:='Женя';
  Users[3]:='Игорь';
  Users[4]:='Настя';
  Users[5]:='Гость1';
  Users[6]:='Гость2';
  { Инициализируем права - первый пользователь - админ }
  randomize;
  for i:=1 to MaxObj do begin
    UserRights[i,1]:=FullRights;
    for j:=2 to MaxUsers do begin
      UserRights[i,j]:=[];
      if random(2)=1 then UserRights[i,j]:=UserRights[i,j]+[RRead];
      if random(2)=1 then UserRights[i,j]:=UserRights[i,j]+[RWrite];
      if random(2)=1 then UserRights[i,j]:=UserRights[i,j]+[RGrant];
    end;
  end;
  { Главный цикл - по пользователям }
  CurrUser:=0;
  repeat
    write('Имя пользователя: ');
    readln(SCommand);
 
end;
    { Проверяем выход}
    if SCommand='выход' then break;
    { Проверяем вход пользователя }
    for i:=1 to MaxUsers do
      if Users[i]=SCommand then begin
        CurrUser:=i;
        break;
      end;
    if CurrUser=0 then
      writeln('Неправильное имя пользователя!')
    else begin { Успешный вход }
      { Выводим права }
      for i:=1 to MaxObj do begin
        write('Объект ',i,': ');
        if UserRights[i,CurrUser]=[] then { Нет прав }
          write('Запрет')
        else if UserRights[i,CurrUser]=FullRights then { Полные права }
          write('Полные права')
        else begin
          if RRead in UserRights[i,CurrUser] then write('Чтение, ');
          if RWrite in UserRights[i,CurrUser] then write('Запись, ');
          if RGrant in UserRights[i,CurrUser] then write('Передача, ');
          GotoXY(WhereX-2,WhereY);
          write('  ');
        end;
        writeln;
      end;
      { Цикл по командам пользователя }
      repeat
        write('Жду ваших указаний >');
        readln(SCommand);
        { Проверяем команды }
        if SCommand='выход' then break { Выход }
          else if (SCommand='чтение') or (SCommand='запись') or (SCommand='передача') then begin
            write('Над каким объектом производится операция? ');
            readln(j);
            { Проверим диапазон }
            if j>MaxObj then writeln('Нет такого объекта') else
            begin
              { Команда read }
              if SCommand='чтение' then
                if RRead in UserRights[j,CurrUser] then
                  writeln('Операция прошла успешно') else writeln('Отказ. Нет прав');
              { Команда write }
              if SCommand='запись' then
                if RWrite in UserRights[j,CurrUser] then
                  writeln('Операция прошла успешно') else writeln('Отказ. Нет прав');
              { Команда grant }
              if SCommand='передача' then
                if RGrant in UserRights[j,CurrUser] then begin
                  write('Какое право передается? ');
                  readln(SCommand);
                  { Проверим команды }
                  if (SCommand='чтение') or (SCommand='запись') or (SCommand='передача') then begin
                    { Запомним передаваемое право }
                    if SCommand='чтение' then tmpRight:=[RRead] else
                      if SCommand='запись' then tmpRight:=[RWrite] else tmpRight:=[RGrant];
                    write('Какому пользователю передается право? ');
                    readln(SCommand);
                    { Найдем пользователя }
                    i:=1;
                    while i<=MaxUsers do begin
                      if Users[i]=SCommand then break;
                      inc(i);
                    end;
                    { Если пользователь не найден выведем сообщение }
                    if i>MaxUsers then
                      writeln('Неправильное имя пользователя!')
                    else begin{ Иначе передадим права }
                      UserRights[j,i]:=UserRights[j,i]+tmpRight;
                    end;
                  end else
                    writeln('Неправильно задан вид прав');
                end else writeln('Отказ. Нет прав');
            end;
          end else
            writeln('Неверная команда');
      until false;
      CurrUser:=0;
    end;
  until false;
  { Завершение работы }
  writeln('Пока!');
end.

Дата отправки: 18.09.2016, 21:36
Вопрос задал: zasulskaya.oksana (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, zasulskaya.oksana!

Код паскаль ВР7.0, как-то так:

Код (Pascal) :: выделить код
uses
  Crt;
type
  tData=record
    name:string;
    pass:string;
    data:string;
    end;
  pUser=^tUser;
  tUser=record
    data:tData;
    next:pUser;
    end;
var
  a:tData;{переменная для записи чтения данных и текущий пользователь}
  b:string;{строка для ввода данных}
  c:char;{символ для меню}
  f:file of tData;{}
  head{},temp{}:pUser;{}
function GetData(z:string):string;
  begin
    write(z);
    readln(z);
    GetData:=z;
  end;
procedure ShowMenu;
  begin
    writeln;
    write('current user ');
    if a.name='' then
      begin
        writeln('no pressent');
        writeln('1 - login');
        writeln('2 - register');
        writeln('0 - exit');
      end
      else
      begin
      writeln(a.name);
        writeln('1 - view user');
        writeln('2 - change password');
        writeln('0 - log off');
      end;
  end;
procedure LogOffUser;
  begin
    a.name:='';
  end;
procedure LoginUser;
  begin
    a.name:=GetData('Enter user name:');
    a.pass:=GetData('Enter you password:');
    temp:=head;
    while(temp<>nil)and(a.name<>temp^.data.name)do
      temp:=temp^.next;
    if(temp^.data.name=a.name)and(temp^.data.pass=a.pass)then
      a.data:=temp^.data.data
      else
      begin
        writeln('wrong user name');
        a.name:='';
      end;
  end;
procedure NewUser;
  begin
    b:='Enter New User Name:';
    repeat
      temp:=head;
      a.name:=GetData(b);
      while(temp<>nil)and(a.name<>temp^.data.name)do
        temp:=temp^.next;
      b:='User pressent in system, Enter New User Name:';
    until temp=nil;
    repeat
      a.pass:=GetData('Enter you password:');
    until a.pass=GetData('Confirm you password:');
      new(temp);
      temp^.data.name:=a.name;
      temp^.data.pass:=a.pass;
      temp^.data.data:='arwd';
      temp^.next:=head;
      head:=temp;
  end;
procedure ExitProgram;
  begin
    c:='e';
  end;
procedure ViewUser;
  begin
    temp:=head;
    while temp<>nil do
      begin
        writeln('user:',temp^.data.name,' acess:',temp^.data.data);
        temp:=temp^.next;
      end;
  end;
procedure ChangePass;
  begin
    repeat
    until a.pass=GetData('Enter you old password:');
    repeat
      a.pass:=GetData('Enter you password:');
    until a.pass=GetData('Confirm you password:');
  end;
begin
  assign(f,'dataUser.dat');
  head:=nil;
  reset(f);
  while not(eof(f)) do
    begin
      read(f,a);
      new(temp);
      temp^.data.name:=a.name;
      temp^.data.pass:=a.pass;
      temp^.data.data:=a.data;
      temp^.next:=head;
      head:=temp;
    end;
  close(f);
  {begin main loop}
  ClrScr;
  a.name:='';
  repeat
    ShowMenu;
    c:=ReadKey;
    if c in ['0'..'2'] then
      begin
        if a.Name='' then
          begin
            case c of{}
              '0':ExitProgram;
              '1':LoginUser;
              '2':NewUser;
              end;
          end
          else
          begin
            case c of{}
              '0':LogOffUser;
              '1':ViewUser;
              '2':ChangePass;
              end;
          end
      end
      else c:='z';
    writeln('press any key ...');
    ReadKey;
  until c='e';
  {end main loop}
  rewrite(f);{}
  while head<>nil do
    begin
      temp:=head;
      head:=head^.next;
      a.name:=temp^.data.name;
      a.pass:=temp^.data.pass;
      a.data:=temp^.data.data;
      write(f,a);
      dispose(temp);
    end;
  close(f);
end.

Перед запуском нужно создать пустой файл dataUser.dat.
Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 23.09.2016, 16:55
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное