Автоматизация учета и контроля принятых решений в ВУЗе

Автор: Пользователь скрыл имя, 22 Февраля 2013 в 10:25, дипломная работа

Описание работы

Целью дипломной работы является разработка программного продукта «Автоматизация учета и контроля принятых решений в ВУЗе», который специализируется на управлении массивом информации одним или множеством одновременно работающих пользователей.
Данный программный продукт должен обеспечивать:
набор средств для поддержки таблиц и отношений между связанными таблицами;
развитый пользовательский интерфейс, который позволяет вводить и модифицировать информацию, выполнять поиск и представлять информацию в текстовом режиме;
средства программирования высокого уровня, с помощью которых можно создавать собственные приложения.

Работа содержит 1 файл

Дипломная работа_Автоматизация учета и контроля принятых решений в ВУЗе.doc

— 1.18 Мб (Скачать)

Таблица ukaz служит для хранения всех приказов, которые были отправлены сотрудникам. Данная таблица необходима для отправки приказов сотрудникам, так же можно просмотреть, доставлено ли сотруднику данное письмо. Состоит из следующих полей:

  • Organ – данное поле хранит информацию о том, какой коллегиальный орган направил данное письмо, тип поля Char, размер 25 символов;
  • Data_nachala – дата принятия решения, тип поля Datetime, размер 8 символов;
  • Protokol – номер протокола, тип поля Char, размер 10 символов;
  • Reshenie – содержит информацию о принятом решении, тип поля Charб размер 150 символов;
  • Data_okonch – дата, до которого необходимо выполнить принятое решение, тип поля Datetime, размер 8 символов;
  • Alarm – поле, в котором хранится информация о том, когда должно прозвучать следующее напоминание, тип поля Datetime, размер 8 символов;
  • Login1 – информация о том кому было отправлено принятое решение;
  • Podt1 – хранит информацию о доставке решения.

Таблица opisanie служит для хранения всех полученных приказов, которые были получены сотрудниками. Данная таблица необходима для возможности отчитываться каждому сотруднику, по выполнению приказа, на каком этапе находится выполнение, так же секретарь может отказать в выполнении и отправить на переделывание. Состоит из следующих полей:

  • Organ – данное поле хранит информацию о том, какой коллегиальный орган направил данное письмо, тип поля Char, размер 25 символов;
  • Data_nachala – дата принятия решения, тип поля Datetime, размер 8 символов;
  • Protokol – номер протокола, тип поля Char, размер 10 символов;
  • Reshenie – содержит информацию о принятом решении, тип поля Charб размер 150 символов;
  • Data_okonch – дата, до которого необходимо выполнить принятое решение, тип поля Datetime, размер 8 символов;
  • Alarm – поле, в котором хранится информация о том, когда должно прозвучать следующее напоминание, тип поля Datetime, размер 8 символов;
  • Result – содержит информацию о результате выполнения приказа, тип поля Int, размер поля 4 символа;
  • Opisanie – содержит информацию об отчете, по выполнению решения, тип поля Char, размер 150 символов;
  • Prirost – частота напоминаний, тип поля Int, размер поля 4 символа;
  • Login – должность занимаемая сотрудником, тип поля Char, размер 45 символов;
  • N – номер записи в таблице, тип поля Int, размер 4 символа;
  • Podt – информация о получении приказа или о получении напоминания, тип поля Int, размер 4 символа;
  • Rezultpodt – подтверждение секретарем о выполнении приказа, или отказ, тип поля Int, размер 4 символа;
  • Otkaz – пояснительная записка секретарем о причине отказа, тип поля Char, размер 150 символов.

 

2.3 Описание  используемых процедур и функций

 

В этом разделе изложены несколько сложных, но в то же время важных процедур. Первая рассмотренная процедура – это процедура создания иконки в трее. Первоначально нужно подключить библиотеку ShellApi. Далее процедуру необходимо описать следующим образом:

procedure Ic(n:Integer;Icon:Ticon);

После этого можно приступать к созданию элемента, которого нет в стандартных компонентах Delphi.

Procedure TForm1.Ic(n:Integer;Icon:TIcon);

  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,@Nim);

3: Shell_NotifyIcon(Nim_Modify,@Nim);

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',edit2.text,[locaseinsensitive])=true then

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',edit2.text,[locaseinsensitive])=false then

begin

ADOTable1.Active:=true;

ADOTable1.Insert;

ADOTAble1.Edit;

adotable1Fam.AsString:=edit3.Text;

adotable1Name.AsString:=edit4.Text;

adotable1Otch.AsString:=edit5.Text;

adotable1Kafedra.AsString:=edit6.Text;

adotable1dolzhnost.AsString:=edit7.Text;

adotable1stepen.AsString:=edit8.Text;

ADOTable1Login.AsString:=edit2.Text;

adotable1Password.AsString:=edit9.Text;

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[BalloonIconType];

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.Handle, 1, Icon.Handle, 'Вам пришло новое сообщение!');

DZBalloonTrayIcon(application.Handle, 1, 5, ' Вам пришло новое сообщение!', 'Сообщение', bitInfo);

Сначала добавляется  иконка, а после этого уже задаются остальные параметры, такие как  тип подсказки, можно выбирать либо информационная подсказка (См. Рисунок 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_SHOWNOACTIVATE);

    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(extractFilePath(Application.ExeName)+'icon\pismo2.ico');

Ic(3, form1.Icon);

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

timer2.Interval:=750;

form1.Icon.LoadFromFile(extractFilePath(Application.ExeName)+'icon\pismo3.ico');

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]

Информация о работе Автоматизация учета и контроля принятых решений в ВУЗе