Автор: Пользователь скрыл имя, 22 Февраля 2013 в 10:25, дипломная работа
Целью дипломной работы является разработка программного продукта «Автоматизация учета и контроля принятых решений в ВУЗе», который специализируется на управлении массивом информации одним или множеством одновременно работающих пользователей.
Данный программный продукт должен обеспечивать:
набор средств для поддержки таблиц и отношений между связанными таблицами;
развитый пользовательский интерфейс, который позволяет вводить и модифицировать информацию, выполнять поиск и представлять информацию в текстовом режиме;
средства программирования высокого уровня, с помощью которых можно создавать собственные приложения.
Таблица ukaz служит для хранения всех приказов, которые были отправлены сотрудникам. Данная таблица необходима для отправки приказов сотрудникам, так же можно просмотреть, доставлено ли сотруднику данное письмо. Состоит из следующих полей:
Таблица opisanie служит для хранения всех полученных приказов, которые были получены сотрудниками. Данная таблица необходима для возможности отчитываться каждому сотруднику, по выполнению приказа, на каком этапе находится выполнение, так же секретарь может отказать в выполнении и отправить на переделывание. Состоит из следующих полей:
2.3 Описание
используемых процедур и
В этом разделе изложены несколько сложных, но в то же время важных процедур. Первая рассмотренная процедура – это процедура создания иконки в трее. Первоначально нужно подключить библиотеку ShellApi. Далее процедуру необходимо описать следующим образом:
procedure Ic(n:Integer;Icon:Ticon);
После этого можно приступать к созданию элемента, которого нет в стандартных компонентах Delphi.
Procedure TForm1.Ic(n:Integer;Icon:
Var Nim:TNotifyIconData;
begin With Nim do
Begin
cbSize:=SizeOf(Nim);
Wnd:=Form1.Handle;
uID:=1;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
hicon:=Icon.Handle;
uCallbackMessage:=wm_user+1;
szTip:='Деканат';
End;
Case n OF
1: Shell_NotifyIcon(Nim_Add,@Nim)
2: Shell_NotifyIcon(Nim_Delete,@
3: Shell_NotifyIcon(Nim_Modify,@
End;
end;
Данная процедура в зависимости от параметра n возвращает различные значения работы с иконкой: добавление, удаление и редактирование иконки. Процедуру можно использовать следующим образом:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form5.close;
Ic(2, Application.Icon);
end;
При закрытии формы из трея удаляется иконка. А так же для наглядности и для того, чтоб иконка служила не только «для красоты» можно создать меню, которое будет появляться при нажатии правой кнопкой мыши на иконке. Для этого на форме необходимо разместить компонент с именем PopupMenu1. Процедура выглядит следующим образом:
procedure TForm1.IconMouse(var Msg: TMessage);
var p: tpoint;
begin
GetCursorPos(p); // Запоминаем координаты курсора
case Msg.LParam of // Проверяем, какая кнопка была нажата
WM_RBUTTONUP: //Действия выполняемые по одинарному щелчку правой кнопкой мыши
Begin
SetForegroundWindow(Handle);
PopupMenu1.Popup(p.X, p.Y); // Всплывает TPopupMenu
PostMessage(Handle, WM_NULL, 0, 0)
end;
end;
end;
При регистрации нового пользователя необходимо проверять существует ли уже данный пользователь или нет, для этого предназначена следующая процедура
ADOTable1.Active:=true;
ADOQuery1.Active:=true;
if adoquery1.Locate('Login',
begin
MessageDlg('Такой пользователь уже существует!', mtInformation,[mbOk], 0);
edit9.Text:='';
labelededit1.Text:='';
edit2.Text:='';
end
Метод Locate в качестве первого параметра ‘Login’, строка, которая содержит список ключевых полей. Следующий параметр edit2.text – массив ключевых значений, то есть те значения, которые необходимо искать. loCaseInsensitive – это элемент параметра Options, необходим для поиска, нечувствительного к регистру. Данный метод возвращает значение false, если искомая запись не найдена.
Если запись не найдена, значит, ее можно регистрировать. Для этого необходимо вставить новую запись и разрешить ее редактирование.[11]
else if adoquery1.Locate('Login',
begin
ADOTable1.Active:=true;
ADOTable1.Insert;
ADOTAble1.Edit;
adotable1Fam.AsString:=edit3.
adotable1Name.AsString:=edit4.
adotable1Otch.AsString:=edit5.
adotable1Kafedra.AsString:=
adotable1dolzhnost.AsString:=
adotable1stepen.AsString:=
ADOTable1Login.AsString:=
adotable1Password.AsString:=
ADOtable1.Post;
adoquery1.Active:=false;
adotable1.Active:=false;
MessageDlg(‘Данные внесены успешно!’, mtInformation,[mbOk], 0);
form3.Close;
end;
Для того чтобы при получении какого-либо сообщения появлялась подсказка в трее, необходимо было создать следующие 3 функции, которые используют библиотеку ShellApi:
function DZBalloonTrayIcon(const Window: HWND; const IconID: Byte; const Timeout: TBalloonTimeout; const BalloonText, BalloonTitle: String; const BalloonIconType: TBalloonIconType): Boolean;
const
aBalloonIconTypes : array[TBalloonIconType] of Byte = (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR);
var
NID_50 : NotifyIconData_50;
begin
FillChar(NID_50, SizeOf(NotifyIconData_50), 0);
with NID_50 do begin
cbSize := SizeOf(NotifyIconData_50);
Wnd := Window;
uID := IconID;
uFlags := NIF_INFO;
StrPCopy(szInfo, BalloonText);
uTimeout := Timeout * 1000;
StrPCopy(szInfoTitle, BalloonTitle);
dwInfoFlags := aBalloonIconTypes[
end{with};
Result := Shell_NotifyIcon(NIM_MODIFY, @NID_50);
end;
Данная функция создает иконку в трее, которая в своих параметрах имеет возможность создания подсказки. Но для изменения данной подсказки необходимо было создать еще одну функцию:
function DZAddTrayIcon(const Window: HWND; const IconID: Byte; const Icon: HICON; const Hint: String = ''): Boolean;
var
NID : NotifyIconData;
begin
FillChar(NID, SizeOf(NotifyIconData), 0);
with NID do begin
cbSize := SizeOf(NotifyIconData);
Wnd := Window;
uID := IconID;
if Hint = '' then begin
uFlags := NIF_ICON;
end{if} else begin
uFlags := NIF_ICON or NIF_TIP;
StrPCopy(szTip, Hint);
end{else};
hIcon := Icon;
end{with};
Result := Shell_NotifyIcon(NIM_ADD, @NID);
end;
Также для удаления иконки была создана следующая функция:
function DZRemoveTrayIcon(const Window: HWND; const IconID: Byte): Boolean;
var
NID : NotifyIconData;
begin
FillChar(NID, SizeOf(NotifyIconData), 0);
with NID do begin
cbSize := SizeOf(NotifyIconData);
Wnd := Window;
uID := IconID;
end{with};
Result := Shell_NotifyIcon(NIM_DELETE, @NID);
end;
Используются данные функции следующим образом:
DZAddTrayIcon(application.
DZBalloonTrayIcon(application.
Сначала добавляется иконка, а после этого уже задаются остальные параметры, такие как тип подсказки, можно выбирать либо информационная подсказка (См. Рисунок 3), либо предупреждающая.
Рисунок 3 – Информационная подсказка «Для Вас нет новых писем»
При создании всплывающих окон, которые предназначены для наглядности, была создана следующая процедура:
procedure TForm5.fShowHint(Text:String);
var H:HWND;
Rec:TRect;
NeededTop:integer;
HintForm:TForm;
HintLabel:TLabel;
aw:hwnd;
begin
H := FindWindow('Shell_TrayWnd', nil);
if h=0 then exit;
GetWindowRect(h, Rec);
HintForm:=TForm.Create(nil);
with HintForm do
begin
Width:=245;
Height:=100;
Color:=clSkyBlue;
BorderStyle:=bsToolWindow;
caption:='Сообщение';
//Создаем текст
HintLabel:=TLabel.Create(nil);
with HintLabel do
begin
Parent:=HintForm;
autosize:=false;
WordWrap:=true;
Caption:=' '+Trim(Text)+' ';
Align:=alClient;
Layout:=tlCenter;
Alignment:=taCenter;
end;
AlphaBlend:=true;
AlphaBlendValue:=220;
aw:=GetActiveWindow;
ShowWindow(handle,SW_
SetActiveWindow(aw);
Left:=Screen.Width-Width;
Top:=Screen.Height-20;
//Выезжаем вверх
NeededTop:=Rec.Top-Height;
while Top>NeededTop do
begin
Top:=Top-2;
Repaint;
IdAntiFreeze1.Sleep(10);
IdAntiFreeze1.Process;
end;
IdAntiFreeze1.Sleep(2000);
//Выезжаем вниз
NeededTop:=Screen.Width-20;
while Top<NeededTop do
begin
Top:=Top+2;
Repaint;
IdAntiFreeze1.Sleep(10);
IdAntiFreeze1.Process;
end;
HintLabel.Free;
Free;
end;
end;
Для создания анимации при получении сообщения была создана еще одна иконка, которая мигает, указывая на то, что получено сообщение, данная процедура описана следующим кодом:[12]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Interval:=500;
form1.Icon.LoadFromFile(
Ic(3, form1.Icon);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
timer2.Interval:=750;
form1.Icon.LoadFromFile(
Ic(3, form1.Icon);
timer1.Enabled:=true;
end;
Было создано два таймера, которые включаются попеременно, при этом меняется иконка в трее, путем загрузки попеременно разных иконок (См. Рисунок 4).
Рисунок 4 –Анимированная иконка
Для того чтобы вся программа была меньше загромождена формами, была создана форма «Напоминание» (См. Рисунок 5) при помощи программного кода, на которой появляется надпись-напоминание, данная форма не визуальная, то есть редактировать ее можно только написанием дополнительных процедур, это является плюсом и минусом данного решения. Форма не занимает места на диске, что уменьшает программу, делая ее менее громоздкой. Но так же с ней сложнее работать, так как на нее нельзя обычным способом поместить компоненты.[13]
Рисунок 5 – Форма «Напоминание»
Данная форма скрывается автоматически после небольшого промежутка времени.
Таким образом, реализованы основные процедуры программы «Автоматизация учета и контроля принятых решений в ВУЗе».
3 Руководство по эксплуатации программы
3.1 Руководство по установке программы
При установке программы необходимо установить Micrsoft SQL Server 2000 на той ЭВМ, которая будет в качестве сервера. При установке и создании сервера необходимо на встроенного пользователя «sa» установить пароль «P@ssw0rd». После этого необходимо скопировать файл «Reshenie_Data.MDF» и «Reshenie_Log.LDF» в директорию «C:\Program Files\Microsoft SQL Server\MSSQL\Data». Далее запускаем Enterprise Manager. Подключаемся к серверу и нажимаем правой кнопкой мыши в правой части окна на вкладке «Database». Далее выбираем «Все задачи» и Attach database (См. Рисунок 6).
Рисунок 6 – Создание базы данных
После этого указываем путь до файлов «Reshenie_Data.MDF» и «Reshenie_Log.LDF». Нажимаем «Ok» (См. Рисунок 7). База данных добавлена. Остается только скопировать папку «Учет» на жесткий диск программы и запустить файл «Project1.exe».[14]
Информация о работе Автоматизация учета и контроля принятых решений в ВУЗе