В данной работе был спроектирован и реализован проект автоматизированного рабочего места менеджера по продаже автомобилей, которое представляет собой программное приложение, организующее доступ к базе данных по работе с клиентами автомобильного салона.
Взаимодействие пользователя с системой осуществляется в диалоговом режиме [1-4]. При запуске программы выводится следующее окно, предлагающее пройти авторизацию и аутентификацию для начала работы (Рис. 1)

Механизм авторизации и аутентификации реализован следующим образом.
procedure Tfrmlogin.BitBtn1Click(Sender: TObject);
var salt,pass:shortString;
begin
with dmMain do begin
Q1.Sql.Clear;
Q1.Sql.Add('SELECT * FROM `user` WHERE login= :Plogin');
Q1.Parameters.ParamByName('Plogin').Value:=edtLogin.Text;
Q1.Open;
If Q1.RecordCount=0 then
MessageDlg('Неверное имя пользователя',mtError,[mbOk],0)
else
begin
salt:=Q1.FieldValues['salt'];
pass:=copy(salt,1,5)+edtPassword.text+copy(salt,6,5);
if md5string(pass)Q1.FieldValues['pass'] then
MessageDlg('Неверный пароль',mtError,[mbOk],0)
else
begin
if not q1.FieldValues['active'] then
MessageDlg('Ваша учетная запись отключена!!!'#10#13'Обратитесь к директору салона',mtError,[mbOk],0)
else
begin
userid:=Q1.FieldValues['id'];
UserName:=Q1.FieldValues['fio'];
UserLogin:=Q1.FieldValues['login'];
Userpost:=Q1.FieldValues['post'];
Autorizationneeded:=false;
Q2.SQL.Clear;
Q2.SQL.Add(SQLUpdate([Variant(Now)],'user',['doll'],'`id`='+IntTostr(userid)));
Q2.ExecSQL;
frmLogin.ModalResult:=mrOk;
end;
end;
end;
edtPassword.Clear;
Q1.Close;
end;
end; Сначала составляется запрос на поиск в таблице пользователей записи с заданным логином. Если результат запроса пустой, то значит логин введен неверно, в противном случае извлекает значение поля salt (соль) и password (хэш пароля). Из введенного пользователем пароля и соли строится новая строка, от которой затем берется хэш-функция md5 и результат сравнивается с тем, что был сохранен. Соль для пароля генерируется для каждого пользователя в виде случайной десятисимвольной строки и служит для защиты от «слабых» паролей и «радужных» таблиц.
Главная форма приложения имеет следующий вид:

Пункт «Пользователи» (Рис. 2) позволяет управлять пользователями системы (для администратора) или сменить пароль для входа в систему для текущего пользователя (для менеджера по продажам). Управление пользователями состоит в добавлении, редактировании, временном отключении учетных записей пользователей. (Рис. 3).

Процедура смены пароля для выбранного пользователя:
procedure TfrmUserList.btnPassClick(Sender: TObject);
var pass,cpass, salt,cmdStr:string;
begin
pass:='';cpass:='';
if InputQuery('Смена пароля','Введите новый пароль', pass) then
if pass='' then MessageDlg('Пароль не может быть пустым',mtError,[mbcancel],0)
else
if InputQuery('Смена пароля','Повторите пароль пароль', cpass) then
if passcpass then MessageDlg('Пароли не совпадают',mtError,[mbcancel],0)
else
begin
salt:=generatesalt(10);
pass:=md5string(copy(salt,1,5)+pass+copy(salt,6,5));
cmdStr:=SQLUpdate([pass,salt],'user',['pass','salt'],'`id`='+inttostr(dmMain.Q1.FieldValues['id']));
with dmMain do
begin
Q2.Close;
Q2.SQL.Clear;
Q2.SQL.Add(cmdStr);
Q2.ExecSQL;
end;
MessageDlg('Пароль успешно изменен',mtInformation,[mbOk],0);
end;
end;
Пункт «Процесс продаж» (Рис. 2). При выборе данного пункта на экране появляется форма, которая позволит просматривать ход продаж за текущий день: плановое время события, менеджер, клиент, к какой стадии и рабочему листу принадлежит это событие, а также сведения о выполнении данного события (Рис. 4).

Кнопка «Рабочие листы» (Рис. 2) позволит просмотреть информацию о рабочих листах, стадиях и событиях, привязанных к этому листу (Рис. 5). В режиме администратора можно видеть информацию по всем менеджерам, а в режиме менеджера — только свои листы.

Кнопка «Отчеты» (Рис. 2) позволит просмотреть статистические данные по результатам работы каждого менеджера и центра в целом (Рис. 6). Причем можно выбирать период отчета: сегодня, вчера, за неделю, за месяц, кварта, год иди за все время.

Кнопка «Клиенты» (Рис. 2) позволят управлять данными о клиентах дилерского центра (Рис. 7). Данные можно добавлять, редактировать, фильтровать по заданным критериям. Удаление данных запрещено по причине ограничения на ссылочную целостность.

Таком образом, проект реализован в современной и перспективной среде разработки Delphi, связь которого с базой данных Access осуществляется с использованием компонент Ado. Подобный подход позволил использовать данное приложение на большинстве компьютеров без установки дополнительного программного обеспечения. В проекте разработан удобный, интуитивно понятный интерфейс, не требующий дополнительного обучения для работы с ним.