Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Проектирование реализации операций бизнес-процесса «Управление персоналом» в организации

Содержание:

Введение

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

Если вчера, автоматизировать какой-либо отдел могли позволить себе только крупные компании, то сегодня уже маленькие фирмы могут позволить себе автоматизировать даже целые отделы в работе фирмы.

Автоматизация одела кадров – это следующие после бухгалтерского отдела, который следует автоматизировать.

Сегодня перед руководством фирм стоит вопрос – покупать готовый продукт или заказать программу с учетом индивидуальных особенностей фирмы. Следует отметить, что при приобретении готового программного продукта в любом случае потребуется серьезная настройка программы под конкретные требования, а также обязательное дальнейшее программное сопровождение, и обучение персонала, что выразится в ощутимых финансовых и временных затратах, а офисные средства способны в полной мере решить поставленные задачи и приемлемы по цене.

Таким образом, тема данной курсовой работы является актуальной с практической точки зрения.

Объектом анализа данной работы является отдел кадров, предметом исследования является, выступает автоматизации отдела кадров предприятия.

Целью исследования является изучение БД и СУБД и разработки программы БД для автоматизации работы отдела кадров

Цель исследования определили постановку следующих задач:

Описать документооборот в отделе кадров;

Описать бизнес-процессы;

  • Обосновать проектные решения по информационному обеспечению;
  • Обосновать проектные решения по программному обеспечению;
  • Описать информационную модель программы;
  • Описать программное обеспечение;
  • И описать пример реализации программы.

Работа состоит из введения, двух глав, заключения и списка использованной литературы.

1 ГЛАВА. АНАЛИТИЧЕСКАЯ ЧАСТЬ.

1.1. Характеристика комплекса задач

 Выбор комплекса задач автоматизации

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

Автоматизация отдела кадров позволит хранить большие объемы информации, работать с ними, и с легкостью выполнять прием и увольнение работников на работу, и управлять переводом сотрудников из одного отдела фирмы с другой (случае перевода например).

Таким образом, цель курсового проекта – разработка информационной системы (ИС) для автоматизации работы отдела кадров предприятия.

 Характеристика и существующих бизнес –процессов

Бизнес-процессы которые происходят в отделе кадров схематично показаны на рисунке 1.

Рисунок 1 – Бизнес-процессы

Характеристика документооборота, возникающего при решении задачи

Документооборот, который происходит в отделе кадров предприятия представлен на рисунке 2.

Рисунок 2 – Схема документооборота в отделе кадров

Из данных рисунка 2 следует, что процесс найма или увольнения работника происходит в обычном режиме, то есть не автоматизированном.

Но данный метод обработки информации является очень неудобный, так как ведение всей документации в бумажной форме не актуально на данный момент и имеет существенные недостатки, а именно:

Большой объем информации;

Выполнение рутинных работы;

Сложной составления отчетности;

Большая вероятность ошибки и трудность ее исправления.

Так как весь объем работы выполняется как правило один работник, то его работу можно представить с помощью следующих диаграмм (См. Рисунок 3 и 4).

Рисунок 3 – Обработка запроса работником отдела кадров в обычном режиме

Рисунок 4 – Детализация процесса в обычном режиме

Если автоматизировать работу работника отдела кадров, тогда выше представленные схемы будут иметь вид:

Рисунок 5 - Обработка запроса работником отдела кадров в автоматизированном режиме

Рисунок 6 – Детализация процесса в автоматизированном режиме

Из последних двух рисунков видно, что сокращается не только количество кадров (если их больше чем один работник), но и количество операций, нужных для получения документа.

1.2. Обоснование проектных решений

Обоснование проектных решений по информационному обеспечению

Информационное обеспечение - совокупность данных, представленных в определенной форме для компьютерной обработки.

ИО это совокупность следующих трех компонент:

• Системы классификации и кодирования;

• Системы унифицированной документации, которая используется в ИО;

• Информационная база.

Классификатор представляет сгруппированный, по различным признакам, перечень наименованных объектов, где каждому из них присвоен уникальный код, в соответствии с их общими признаками или различиями. Классификаторы применяются для упрощения работы по сбору информации и систематизации данных, а также используются для указания кодов в различных унифицированных документах.

В был употреблен локальный классификатор. Локальная классификатор имеет область видимости – всю программу.

В программе используется один классификатор, который имеет следующее описание:

Классификатор номер работника:

Структурная формула классификатора следующая

F = [Наименование]:[XXX] — номер работника

Пример заполнения — 1212.

В теории информатике есть следующие типы баз данных:

Иерархическая модель;

Сетевая модель;

Реляционная модель.

Для иерархической модели характерно, то, что данные представлены в древовидной форме. Если сравнить с файловой системой компьютера, то принцип построения иерархической модели такой же.

В этой модели представление данных организовано в виде деревьев. Каждое дерево выступает в качестве структуры данных, тип сегмента потомка в которой связан исключительно с 1-м типом сегмента предка.

Для иерархической модели, свойственны следующие ограничения:

1. Если необходимо представить неиерархические отношения данных, то потребуются дополнительные манипуляции.

2. Нет четкого разграничения физических и логических характеристик модели.

3. В случае с непредвиденными запросами может потребоваться реорганизация базы данных.

Для сетевой модели данных характерно, то что данные организованы в виде сети. И у одного узла может более одного потомка, по сравнению с иерархической – где только один потомок.

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

Недостатки – сложность, применение для организации доступа к данным только навигационного принципа.

Для реляционной модели характерно:

  • Имеет структурный аспект;
  • Таблицы БД удовлетворяют свойству целостности;
  • Есть возможность манипулировать данными, которые хранятся в базе.

Таким образом, для разработки БД использовалась реляционная модель баз данных.

Обоснование проектных решений по программному обеспечению

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

Delphi - это комбинация нескольких важнейших технологий:

  • Высокопроизводительный компилятор в машинный код
  • Объектно-ориентированная модель компонент
  • Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов
  • Масштабируемые средства для построения баз данных.

Компилятор, встроенный в Delphi, обеспечивает высокую производительность, необходимую для построения приложений в архитектуре “клиент-сервер». Он предлагает легкость разработки и быстрое время проверки готового программного блока, характерного для языков четвертого поколения (4GL) и в тоже время обеспечивает качество кода, характерного для компилятора 3GL. Кроме того, Delphi обеспечивает быструю разработку без необходимости писать вставки на Си или ручного написания кода (хотя это возможно)[1].

В процессе построения приложения разработчик выбирает из палитры компонент готовые компоненты как художник, делающий крупные мазки кистью. Еще до компиляции он видит результаты своей работы - после подключения к источнику данных их можно видеть отображенными на форме, можно перемещаться по данным, представлять их в том или ином виде.

В Delphi компиляция производится непосредственно в родной машинный код, в то время как существуют компиляторы, превращающие программу в так называемый p-код, который затем интерпретируется виртуальной p-машиной. Это не может не сказаться на фактическом быстродействии готового приложения[2].

Основной упор в Delphi делается на максимальном реиспользовании кода. Это позволяет разработчикам строить приложения весьма быстро из заранее подготовленных объектов, а также дает им возможность создавать свои собственные объекты для среды Delphi. Никаких ограничений по типам объектов, которые могут создавать разработчики, не существует. Действительно, все в Delphi написано на нем же, поэтому разработчики имеют доступ к тем же объектам и инструментам, которые использовались для создания среды разработки. В результате нет никакой разницы между объектами, поставляемыми Borland или третьими фирмами, и объектами, которые вы можете создать. В стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов. На Delphi можно одинаково хорошо писать как приложения к корпоративным базам данных, так и, к примеру, игровые программы. Во многом это объясняется тем, что традиционно в среде Windows было достаточно сложно реализовывать пользовательский интерфейс. Событийная модель в Windows всегда была сложна для понимания и отладки. Но именно разработка интерфейса в Delphi является самой простой задачей для программиста.

В первую очередь Delphi предназначен для профессионалов-разработчиков корпоративных информационных систем. Однако, Delphi может использоваться и преподавателями ВУЗов, студентами, учителями, бизнесменами, всеми теми, кто использует компьютер с чисто прикладной целью[3].

Для разработки информационной системы мы использовали интегрированную среду разработки Borland Delphi 7. Эта среда представляет богатые возможности для разработки приложений Win32, обеспечивает дружественный интерфейс пользователя для приложений.

2 глава. ПРОЕКТНАЯ ЧАСТЬ

2.1. Информационное обеспечение задачи

Информационная модель и её описание

В программе используется база данных, куда заносится вся информация.

Эта БД состоит из 1 таблицы со следующими полями: фамилия, имя, отчество, паспортные данные, сумма заработной платы, должность и дополнительные сведения.

И тогда информационная модель будет следующей:

Рисунок 7 – Информационная модель программы

Характеристика нормативно-справочной, входной и оперативной информации

Входной информацией является информация о работнике предприятия – фамилия, имя, отчество, должность, заработная плата. Входная информация вводится в ниже представленную форму (См. Рисунок 8):

Рисунок 8 – Ввод данных о работнике

Вся информация хранится в одно таблице.

Входная информация обновляется в процессе работы программы, могут быть корректировки, если была допущена ошибка или есть какие-то изменения, например в заработной плате.

Характеристика результатной информации

К результирующей информации относится информация которая получается в процессе работы программы. А именно:

Заполненная база данных (отдельный документ);

Отчеты по заработной плате сотрудников.

2.2. Программное обеспечение задачи

Общие положения (дерево функций и сценарий диалога)

Программа создается для одного пользователя – работника отдела кадров.

Дерево функций разрабатываемой программы представлено на рисунке 9.

Рисунок 9 - Дерево функций программы

Сценарий диалога программы представлен на рисунке 10.

Рисунок 10 – Сценарий функций программы

Характеристика базы данных

Базой данных (БД) называется совокупность материалов, которые систематизированы таким образом, чтобы их было легко найти и обработать с помощью ПК или другой ЭВМ (электронно-вычислительной машины). Под материалами может пониматься все, что угодно: статьи, различные документы, отчеты и т.д.

БД называется также такая совокупность данных, которая хранится на ПК в соответствии с определенной схемой.

В нашем случае БД – это единственная таблица (состоящая из полей familia, name, surname, pasport, zarplata, dolzhnost, info), а именно:

Таблица 1 – Описание полей БД

№ п/п

Название

Тип

Значение

1

Номер кадра

Integer

Табельный номер работника

2

familia

String

Фамилия

3

name

String

Имя

4

surname

String

Отчество

5

Passport

Integer

Номер паспорта

6

Zarplata

Integer

Сумма заработной платы

7

dolzhnost

String

Занимаемая должность

8

info

String

Дополнительная информация (образование, и опыт работы)

Структурная схема пакета (дерево вызова программных модулей)

При запуске программы, открывается окно с приветствием, и только после нажатия кнопки «Далее», происходит переход на основную форму программы.

Для создания данной программы использовались следующие модули:

Unit1.pas – модуль приветствия;

Unit2.pas – модуль основной формы программы. На нем находится – меню – элемент MainMenu1, компонент для открытия базы данных – OpenDialog1, компонент для сохранения базы данных SaveDialog1,

Unit3.pas – модуль, который представляет собой форму для добавления данных – форма «Добавление записи»;

Unit4.pas – модуль, который представляет собой форму для редактирования данных – форма «Редактирование записи»;

Unit5.pas – модуль, который используется для поиска;

Unit6.pas - график, то есть представление размера заработной платы сотрудников в графической форме;

Unit7.pas - окно, которое появляется после того, как была нажата кнопка «Выход» , так называемое окно «Завершение работы приложения».

Дерево вызова программных модулей программы представлено на рисунке 11.

Рисунок 11 – Дерево вызова программных модулей приложения

Описание программных модулей

Алгоритм работы программы можно представить в виде диаграммы последовательности:

Рисунок 12 – Алгоритм работы программы

Что бы добавить нового пользователя необходимо заполнить форму, а для этого разработан модуль Unit5, который представлен на рисунку ниже:

Рисунок 13 – Блок-схема работы модуля Unit5

2.3. Контрольный пример реализации проекта и его описание

Основное окно программы изображено на рисунке 14.

Рисунок 14 – Общий вид главного окна

Интерфейс пользователя максимально прост. Основным элементом управления является таблица данных о сотрудниках. В ней отображается фамилия, имя, отчество, занимаемая должность, паспортные данные, зарплата, также имеется независимое поле, в котором указывается дополнительная информация о сотруднике предприятия.

Также в программе предусмотрена возможность сохранения базы данных в файл, поиск сотрудника по базе данных, загрузка базы из файла в программу и возможность просмотра сравнительного графика о заработной плате сотрудников предприятия.

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

Для организации ввода информации в программе предусмотрены диалоги с проверкой введенных данных (рисунок 15):

Рисунок 15 - Удаление записи

Для того, что бы получить статистические данные о заработной плате работников необходимо нажать на кнопку меню «График» - «По паспортным данным», и в результате будет представлен график в виде гистограммы, число столбцов зависит от числа работников:

Рисунок 16 – График заработной платы сотрудников

Программа позволяет отсортировать все записи БД. Для того, что бы отсортировать в двух направления по алфавиту и наоборот. Для этого следует нажать либо соответствующую кнопку либо выбрать пункт меню «Отсортировать». И все записи от сортируются в соответствии с заданными требованиями.

Для выхода из программы следует нажать кнопку «Выход». Затем появится «прощальное» окно.

Рисунок 17 – Завершение работы программы

ЗАКЛЮЧЕНИЕ

Цель курсового проекта – разработка программы для автоматизации отдела кадров выполнена.

Для реализации поставленной цели изучены теоретические вопросы по автоматизации работы отдела кадров.

Так же:

  • Описан документооборот, который имеет место на предприятию;
  • Описаны бизнес-процессы в автоматизированном и не автоматизированном режиме;
  • обоснован выбор проектных решений по информационному обеспечению – выбрана реляционная модель баз данных,
  • обоснован выбор проектных решений по программному обеспечению – выбрана среда разработки Borland Delphi 7.

Автоматизация рабочего места работника отдела кадров, позволит уменьшить время на обработку информации; произойдет сокращение затрат на обработку информации; уменьшатся затраты времени на поиск необходимой информации; улучшится качества контроля и учета обрабатываемой информации; повысится эффективность работы не только кадровика, но и остальных подразделений фирмы.

Можно заключить, что применение информационные технологий значительно повышает эффективность работы кадровых служб за счет использования преимуществ информационных систем.

Внедрение современных технологий классического кадрового учета оставит сотрудникам гораздо больше времени на работу с современными инструментами управления персоналом - управления мотивацией, планированием расходов и прочее, и прочее.

БИБЛИОГРАФИЯ

  1. Карпова Т.С. Базы данных: модели, разработка, реализация. СПб.: Питер, 2001. –304с.
  2. Фаронов В.В. Программирование баз данных в Delphi 7. Учебный курс. – СПб: Питер, 2006. – 459с.
  3. Конноли Т., Бегг Л., Страчан А. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. – 2-е изд. – Вильямс, 2000.
  4. Хомоненко А.Д. и др. Delphi 7./ Под общей редакцией А. Д. Хомоненко – СПб.: BHV, 2004.

Приложение А

Код программы

unit my_class_methods; //модуль с методами класса

interface

uses

SysUtils, Dialogs;

type

RDannue=record //переменная типа запись с полями фамилия, имя , отчество, должность,

familia: string[20]; //паспортные данные, заработная плата, дополнительная информация

name: string[15];

surname: string[30];

dolzhnost:string[255];

info: string[255];

pasport:integer;

zarplata:integer;

end;

//описания класса методов для

//автоматизированной работы отдела кадров

TDannue = class

public

otdelkadrov : array[0..100] of RDannue; // массив записей

kol_vo:integer; // количество записей

number: integer; //номер текущей строки

constructor Create; //конструктор класса

//метод для добав-

//ления записи

procedure Dannue_add(familia, name, surname, dolzhnost, info: string; pasport,

zarplata : integer);

//удаляет запись

procedure Del_Dannue (number : integer);

//сохраняет базу

//в файл

procedure Save (filename : string);

//загружает базу

//из файла

procedure Load (filename : string);

procedure Sort; //сортировка по алфавиту

procedure Sorted; //сортировка против алфавита

procedure Dannue_update(number: integer;familia, name, surname, dolzhnost, info : string; pasport,

zarplata : integer);

end;

implementation

constructor TDannue.Create; //конструктор для

begin //класса TDannue

inherited Create; //вызов родительского

//конструктора

Kol_vo := 1; // количество записей =1

end;

procedure TDannue.Sort(); // сортировка по алфавиту(выборкой)

var

i, j : integer;

k : integer;

m : RDannue;

begin

for i := 1 to (kol_vo - 2) do

for j := (i + 1) to (kol_vo - 1) do

begin

k := i;

if (otdelkadrov[j].familia[1]<otdelkadrov[k].familia[1]) and (otdelkadrov[j].familia[1] <> '') then

k := j;

m := otdelkadrov[i];

otdelkadrov[i] := otdelkadrov[k];

otdelkadrov[k] := m;

end;

end;

procedure TDannue.Dannue_add(familia, name, surname, dolzhnost, info : string; pasport, zarplata : integer);

begin //процедура для добавления

//записи

otdelkadrov[kol_vo].name:= name;

otdelkadrov[kol_vo].familia := familia;

otdelkadrov[kol_vo].surname := surname;

otdelkadrov[kol_vo].dolzhnost := dolzhnost;

otdelkadrov[kol_vo].info := info;

otdelkadrov[kol_vo].pasport := pasport;

otdelkadrov[kol_vo].zarplata := zarplata;

inc (kol_vo);

end;

procedure TDannue.Dannue_update(number: integer;familia, name, surname, dolzhnost, info : string;

pasport, zarplata : integer);

begin //процедура для добавления

//записи

otdelkadrov[number].name:= name;

otdelkadrov[number].familia := familia;

otdelkadrov[number].surname := surname;

otdelkadrov[number].dolzhnost := dolzhnost;

otdelkadrov[number].info := info;

otdelkadrov[number].pasport := pasport;

otdelkadrov[number].zarplata := zarplata;

end;

procedure TDannue.Del_Dannue(number : integer); // процедура удаления записи из базы

var

i : integer;

begin

dec (number);

for i := number to (kol_vo - 1) do

otdelkadrov[i] := otdelkadrov[i+1];

kol_vo := kol_vo - 1;

end;

procedure TDannue.Save(filename : string); // процедура сохранения базы в типизированный файл *.bas

var

data_file : file of RDannue;

i : integer;

begin

if pos ('.bas', filename) = 0 then

filename := filename + '.bas';

assignfile (data_file, filename);

rewrite (data_file);

for i := 1 to kol_vo do

write (data_file, otdelkadrov[i]);

closefile (data_file);

end;

procedure TDannue.Sorted(); //процедура сортировки данных против алфавита(выборкой)

var

i, j : integer;

k : integer;

m : RDannue;

begin

for i := 1 to (kol_vo - 2) do

for j := (i + 1) to (kol_vo - 1) do

begin

k := i;

if otdelkadrov[j].familia[1] > otdelkadrov[k].familia[1] then

k := j;

m := otdelkadrov[i];

otdelkadrov[i] := otdelkadrov[k];

otdelkadrov[k] := m;

end;

end;

procedure TDannue.Load(filename : string); //процедура открытия файла

var

data_file : file of RDannue;

begin

kol_vo := 1;

assignfile (data_file, filename);

reset (data_file);

while not(eof(data_file)) do

begin

read (data_file, otdelkadrov[kol_vo]);

inc (kol_vo);

end;

dec (kol_vo);

closefile (data_file);

end;

end.

unit Unit1; // модуль первой формы

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, XPMan, my_class_methods;

type

TForm1 = class(TForm)

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label6: TLabel;

XPManifest1: TXPManifest;

Label7: TLabel;

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2, Unit7;

{$R *.dfm}

procedure TForm1.BitBtn2Click(Sender: TObject); // Уверены, что хотите выйди?

begin

if MessageDlg('Вы уверены, что хотите выйти?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

form7.show;

form1.Hide;

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject); //открываем следующую форму

begin

form2.show;

form1.hide;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); // обработчик на закрытие формы

begin

//закрыта форма

//закрываем все приложение

application.Terminate;

end;

end.

unit Unit2; // модуль формы управления приложением

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, ComCtrls, ToolWin, ImgList,

Menus, my_class_methods, ShellAPI;

type

TForm2 = class(TForm)

StringGrid1: TStringGrid;

Image1: TImage;

SaveDialog1: TSaveDialog;

OpenDialog1: TOpenDialog;

ImageList1: TImageList;

ToolBar1: TToolBar;

ToolButton1: TToolButton;

ToolButton2: TToolButton;

ToolButton3: TToolButton;

ToolButton4: TToolButton;

ToolButton5: TToolButton;

ToolButton6: TToolButton;

ToolButton7: TToolButton;

ToolButton9: TToolButton;

ToolButton11: TToolButton;

ToolButton12: TToolButton;

ToolButton8: TToolButton;

ToolButton13: TToolButton;

ToolButton10: TToolButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

Label1: TLabel;

Memo1: TMemo;

N15: TMenuItem;

N16: TMenuItem;

procedure BitBtn1Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure ToolButton13Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure N8Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

otdel : TDannue ;

curent_row:integer;

change:boolean;

implementation

uses Unit1, Unit3, Unit4, Unit5, Unit6, Unit7;

{$R *.dfm}

procedure TForm2.BitBtn1Click(Sender: TObject); // Хотите сохранить измененные данные?

begin

if change=true then

begin

if MessageDlg('Вы хотите сохранить измененные данные?',

mtInformation, [mbYes, mbNo], 0) = mrYes then

begin

if savedialog1.Execute then

begin

otdel.Save(savedialog1.filename);

end;

end;

end;

form1.show;

form2.Hide;

form2.StringGrid1.RowCount:=2;

form2.StringGrid1.Rows[1].Clear;

form2.Memo1.Lines.Clear;

change:=false;

end;

procedure TForm2.N7Click(Sender: TObject); // редактирование записи

if otdel.kol_vo>1 then

begin

form4.LabeledEdit1.Text:=otdel.otdelkadrov[curent_row].familia;

form4.LabeledEdit2.Text:=otdel.otdelkadrov[curent_row].name;

form4.LabeledEdit3.Text:=otdel.otdelkadrov[curent_row].surname;

form4.LabeledEdit5.Text:=inttostr(otdel.otdelkadrov[curent_row].pasport);

form4.LabeledEdit6.Text:=inttostr(otdel.otdelkadrov[curent_row].zarplata);

form4.LabeledEdit4.Text:=otdel.otdelkadrov[curent_row].dolzhnost;

form4.Memo1.Lines.Text:=otdel.otdelkadrov[curent_row].info;

form4.show;

end else

showmessage('редактирование невожможно')

end;

procedure TForm2.BitBtn3Click(Sender: TObject); //Хотите сохранить измененные данные?

begin

if change=true then

begin

if MessageDlg('Вы хотите сохранить измененные данные?',

mtInformation, [mbYes, mbNo], 0) = mrYes then

begin

if savedialog1.Execute then

begin

otdel.Save(savedialog1.filename);

end;

end;

end;

if MessageDlg('Вы уверены, что хотите выйти?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

form7.show;

form2.Hide;

end;

end;

procedure TForm2.N11Click(Sender: TObject); // выходим из прриложения

begin

if change=true then

begin

if MessageDlg('Вы хотите сохранить измененные данные?',

mtInformation, [mbYes, mbNo], 0) = mrYes then

begin

if savedialog1.Execute then

begin

otdel.Save(savedialog1.filename);

end;

end;

end;

if MessageDlg('Вы уверены, что хотите выйти?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

form7.show;

form2.Hide;

end;

end;

procedure TForm2.N5Click(Sender: TObject); // создаем базу данных

begin

form3.show;

end;

procedure TForm2.ToolButton13Click(Sender: TObject); // форма поиска

begin

form5.show;

form2.Hide;

end;

procedure TForm2.N14Click(Sender: TObject); // рисуем график, выводим максимальную, минимальную, среднюю

var i:integer; max, min, sum : integer; //суммарную заработную плату

begin

if otdel.kol_vo>1 then

begin

form6.Show;

form2.Hide;

form6.series1.clear;

form6.LabeledEdit1.Clear;

form6.LabeledEdit2.Clear;

form6.LabeledEdit3.Clear;

form6.LabeledEdit4.Clear;

for i:=1 to otdel.kol_vo-1 do

form6.series1.AddY(strtoint(form2.StringGrid1.cells[6,i]),form2.StringGrid1.Cells[1,i]);

max:=strtoint(form2.StringGrid1.Cells[6,1]);

min:=strtoint(form2.StringGrid1.Cells[6,1]);

sum:=0;

for i:=1 to otdel.kol_vo-1 do

begin

sum:=sum + strtoint(form2.StringGrid1.cells[6,i]);

if strtoint(form2.StringGrid1.cells[6,i])>max then

max:=strtoint(form2.StringGrid1.cells[6,i]);

if strtoint(form2.StringGrid1.cells[6,i])<min then

min:=strtoint(form2.StringGrid1.cells[6,i]);

end;

form6.LabeledEdit3.Text:=floattostr(sum/(otdel.kol_vo-1));

form6.LabeledEdit1.Text:=inttostr(max);

form6.LabeledEdit2.Text:=inttostr(min);

form6.LabeledEdit4.Text:=inttostr(sum);

end

else showmessage('Данных в таблице нет');

end;

procedure TForm2.BitBtn2Click(Sender: TObject);// выходим из приложения

begin

if change=true then

begin

if MessageDlg('Вы хотите сохранить измененные данные?',

mtInformation, [mbYes, mbNo], 0) = mrYes then

begin

if savedialog1.Execute then

begin

otdel.Save(savedialog1.filename);

end;

end;

end;

form7.Show;

form2.Hide;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

otdel := TDannue.Create;

curent_row:=1;

change:=false;

form2.StringGrid1.Cells[0,0]:='№';

form2.StringGrid1.Cells[1,0]:='Фамилия';

form2.StringGrid1.Cells[2,0]:=' Имя ';

form2.StringGrid1.Cells[3,0]:='Отчество';

form2.StringGrid1.Cells[4,0]:='Должность ';

form2.StringGrid1.Cells[5,0]:='Паспорт';

form2.StringGrid1.Cells[6,0]:='Зарплата';

end;

procedure TForm2.N10Click(Sender: TObject); // сохраняем базу

begin

if savedialog1.Execute then

begin

otdel.Save(savedialog1.filename);

end;

end;

procedure TForm2.N9Click(Sender: TObject); // открываем базу

var

i:integer;

begin

for i:=1 to 100 do

form2.StringGrid1.Rows[i].Clear;

if opendialog1.Execute then

begin

otdel.load(opendialog1.filename);

for i:= 1 to (otdel.kol_vo - 1 ) do

begin

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[2,i]:= otdel.otdelkadrov[i].name;

stringgrid1.cells[1,i]:= otdel.otdelkadrov[i].familia ;

stringgrid1.cells[3,i]:= otdel.otdelkadrov[i].surname;

stringgrid1.cells[4,i]:= otdel.otdelkadrov[i].dolzhnost;

memo1.Lines[i]:=otdel.otdelkadrov[i].info;

stringgrid1.cells[5,i]:= inttostr(otdel.otdelkadrov[i].pasport);

stringgrid1.cells[6,i]:= inttostr(otdel.otdelkadrov[i].zarplata);

StringGrid1.RowCount := stringgrid1.RowCount + 1;

end;

end;

end;

procedure TForm2.StringGrid1SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

curent_row:=arow;

memo1.Clear;

memo1.Lines.text:=otdel.otdelkadrov[arow].info;

if form5.StringGrid1.Cells[0, curent_row] <> '' then

begin

form5.Memo1.Clear;

form5.Memo1.Lines.text:=otdel.otdelkadrov[strtoint(stringgrid1.cells[0, curent_row])].info;

end;

end;

procedure TForm2.N8Click(Sender: TObject); //удаляем запись

var i : integer;

begin

if otdel.kol_vo>1 then

begin

//выводим предупреждение

if MessageDlg('Вы уверены, что хотите удалить запись?',

mtWarning, [mbYes, mbNo], 0) = mrYes then

begin

//упертый пользователь -- уверен

otdel.Del_Dannue(curent_row);

//сдвигаем все записи на одну назад

//в таблице

for i := curent_row to (otdel.kol_vo) do

begin

stringgrid1.Cells[1, i] := stringgrid1.Cells[1, i+1];

stringgrid1.Cells[2, i] := stringgrid1.Cells[2, i+1];

stringgrid1.Cells[3, i] := stringgrid1.Cells[3, i+1];

stringgrid1.Cells[4, i] := stringgrid1.Cells[4, i+1];

stringgrid1.Cells[5, i] := stringgrid1.Cells[5, i+1];

stringgrid1.Cells[6, i] := stringgrid1.Cells[6, i+1];

end;

stringgrid1.Rows[otdel.kol_vo].Clear;

//убираем лишнюю строку

stringgrid1.RowCount := stringgrid1.RowCount - 1;

change:=true;

end;

end else

showmessage('невозможно удалить запись');

end;

procedure TForm2.N12Click(Sender: TObject);

var i,j:integer; l : integer;

begin

//сортировка от а до я

otdel.Sort;

stringgrid1.RowCount := 2;

for i := 1 to (otdel.kol_vo - 1) do

begin

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[2,i]:= otdel.otdelkadrov[i].name;

stringgrid1.cells[1,i]:= otdel.otdelkadrov[i].familia ;

stringgrid1.cells[3,i]:= otdel.otdelkadrov[i].surname;

stringgrid1.cells[4,i]:= otdel.otdelkadrov[i].dolzhnost;

memo1.Lines[i]:=otdel.otdelkadrov[i].info;

stringgrid1.cells[5,i]:= inttostr(otdel.otdelkadrov[i].pasport);

stringgrid1.cells[6,i]:= inttostr(otdel.otdelkadrov[i].zarplata);

stringgrid1.RowCount := stringgrid1.RowCount + 1;

end;

end;

procedure TForm2.N13Click(Sender: TObject);

var i,j:integer;

begin

//сортировка от я до а

otdel.Sorted;

stringgrid1.RowCount := 2;

for i := 1 to (otdel.kol_vo - 1) do

begin

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[2,i]:= otdel.otdelkadrov[i].name;

stringgrid1.cells[1,i]:= otdel.otdelkadrov[i].familia ;

stringgrid1.cells[3,i]:= otdel.otdelkadrov[i].surname;

stringgrid1.cells[4,i]:= otdel.otdelkadrov[i].dolzhnost;

memo1.Lines[i]:=otdel.otdelkadrov[i].info;

stringgrid1.cells[5,i]:= inttostr(otdel.otdelkadrov[i].pasport);

stringgrid1.cells[6,i]:= inttostr(otdel.otdelkadrov[i].zarplata);

stringgrid1.RowCount := stringgrid1.RowCount + 1;

end;

end;

procedure TForm2.N16Click(Sender: TObject);

begin

//показываем окно О программе

ShellAbout(Form2.Handle, 'Автоматизированный отдел кадров',

'(c) Калпащикова Олеся ПИЭ-202д 2007 год', Application.Icon.Handle);

end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//закрыта главная форма

//закрываем все приложение

application.Terminate;

end;

end.

unit Unit3; // модуль формы создания записи

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, Unit2,my_class_methods;

type

TForm3 = class(TForm)

Image1: TImage;

LabeledEdit1: TLabeledEdit;

LabeledEdit2: TLabeledEdit;

LabeledEdit3: TLabeledEdit;

LabeledEdit4: TLabeledEdit;

LabeledEdit5: TLabeledEdit;

LabeledEdit6: TLabeledEdit;

Memo1: TMemo;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label1: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

current:integer;

implementation

{$R *.dfm}

procedure TForm3.BitBtn1Click(Sender: TObject);// отмена создания записи/базы

begin

form2.show;

form3.Hide;

end;

procedure TForm3.FormCreate(Sender: TObject);

begin

current:=1;

end;

procedure TForm3.BitBtn2Click(Sender: TObject); // вводим данные, сохраняем их в массив

begin

if (form3.LabeledEdit1.Text<>'') and (form3.LabeledEdit2.Text<>'') and

(form3.LabeledEdit3.Text<>'') and (form3.LabeledEdit4.Text<>'') and

(form3.LabeledEdit5.Text<>'') and (form3.LabeledEdit6.Text<>'') and

(form3.Memo1.Lines.Count<>0)

then

begin

otdel.Dannue_add(form3.LabeledEdit1.Text,form3.LabeledEdit2.Text,form3.LabeledEdit3.Text,

form3.LabeledEdit4.Text,form3.Memo1.Lines.Text,strtoint(form3.LabeledEdit5.Text),

strtoint(form3.LabeledEdit6.Text));

form2.StringGrid1.cells[0, current] := inttostr( current);

form2.stringgrid1.cells[1, current]:= form3.LabeledEdit1.text;

form2.stringgrid1.cells[2, current]:= form3.LabeledEdit2.Text;

form2.stringgrid1.cells[3, current]:= form3.LabeledEdit3.Text;

form2.stringgrid1.cells[4, current]:= form3.LabeledEdit4.Text;

form2.stringgrid1.cells[5, current]:= form3.LabeledEdit5.Text;

form2.stringgrid1.cells[6, current]:= form3.LabeledEdit6.Text;

otdel.otdelkadrov[current].info:=form3.Memo1.lines.Text;

form2.Memo1.Lines.Text:= otdel.otdelkadrov[current].info;

LabeledEdit1.Clear;

LabeledEdit2.Clear;

LabeledEdit3.Clear;

LabeledEdit4.Clear;

LabeledEdit5.Clear;

LabeledEdit6.Clear;

memo1.Clear;

inc(current);

form2.StringGrid1.RowCount:=form2.StringGrid1.RowCount+1;

change:=true;

form3.Close;

end else

begin

showmessage('наобходимо ввести все поля');

end;

end;

End.

unit Unit4; // модуль формы редактирования записи

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, unit2, my_class_methods;

type

TForm4 = class(TForm)

Image1: TImage;

LabeledEdit1: TLabeledEdit;

LabeledEdit2: TLabeledEdit;

LabeledEdit3: TLabeledEdit;

LabeledEdit4: TLabeledEdit;

LabeledEdit5: TLabeledEdit;

LabeledEdit6: TLabeledEdit;

Memo1: TMemo;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label1: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.BitBtn1Click(Sender: TObject);//отмена редактирования записи

begin

form2.show;

form4.Hide;

end;

procedure TForm4.BitBtn2Click(Sender: TObject);// редактирование записи

begin

if (form4.LabeledEdit1.Text<>'') and (form4.LabeledEdit2.Text<>'') and

(form4.LabeledEdit3.Text<>'') and (form4.LabeledEdit4.Text<>'') and

(form4.LabeledEdit5.Text<>'') and (form4.LabeledEdit6.Text<>'') and

(form4.Memo1.Lines.Count<>0)

then

begin

otdel.Dannue_update(curent_row,form4.LabeledEdit1.Text,form4.LabeledEdit2.Text,form4.LabeledEdit3.Text, form4.LabeledEdit4.Text,form4.Memo1.Lines.Text,strtoint(form4.LabeledEdit5.Text),strtoint(form4.LabeledEdit6.Text));

form2.StringGrid1.cells[0, curent_row] := inttostr( curent_row);

form2.stringgrid1.cells[1, curent_row]:= form4.LabeledEdit1.text;

form2.stringgrid1.cells[2, curent_row]:= form4.LabeledEdit2.Text;

form2.stringgrid1.cells[3, curent_row]:= form4.LabeledEdit3.Text;

form2.stringgrid1.cells[4, curent_row]:= form4.LabeledEdit4.Text;

form2.stringgrid1.cells[5, curent_row]:= form4.LabeledEdit5.Text;

form2.stringgrid1.cells[6, curent_row]:= form4.LabeledEdit6.Text;

otdel.otdelkadrov[curent_row].info:=form4.Memo1.lines.Text;

form2.Memo1.Lines.Text:= otdel.otdelkadrov[curent_row].info;

LabeledEdit1.Clear;

LabeledEdit2.Clear;

LabeledEdit3.Clear;

LabeledEdit4.Clear;

LabeledEdit5.Clear;

LabeledEdit6.Clear;

memo1.Clear;

change:=true;

form4.Close;

end else

begin

showmessage('наобходимо ввести все поля');

end;

end;

end.

unit Unit5;//модуль формы поиска

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Grids, Buttons, my_class_methods;

type

TForm5 = class(TForm)

Image1: TImage;

StringGrid1: TStringGrid;

LabeledEdit1: TLabeledEdit;

Bevel1: TBevel;

BitBtn1: TBitBtn;

Label2: TLabel;

Label3: TLabel;

Memo1: TMemo;

Label1: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure LabeledEdit1Change(Sender: TObject);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses Unit2, Unit7;

{$R *.dfm}

procedure TForm5.BitBtn1Click(Sender: TObject); // назад на форму управления

begin

form2.show;

form5.Hide;

end;

procedure TForm5.LabeledEdit1Change(Sender: TObject); // собственно поиск

var

i : integer;

j : integer;

begin

j := 1;

form5.StringGrid1.RowCount := 2;

form5.StringGrid1.Rows[1].Clear;

form5.StringGrid1.Rows[2].Clear;

for i := 1 to otdel.kol_vo do

if pos(labelededit1.Text, otdel.otdelkadrov[i].familia) <> 0 then

begin

form5.StringGrid1.Cells[0, j] := form2.StringGrid1.Cells[0, i];

form5.StringGrid1.Cells[1, j] := form2.StringGrid1.Cells[1, i];

form5.StringGrid1.Cells[2, j] := form2.StringGrid1.Cells[2, i];

form5.StringGrid1.Cells[3, j] := form2.StringGrid1.Cells[3, i];

form5.StringGrid1.Cells[4, j] := form2.StringGrid1.Cells[4, i];

form5.StringGrid1.Cells[5, j] := form2.StringGrid1.Cells[5, i];

form5.StringGrid1.Cells[6, j] := form2.StringGrid1.Cells[6, i];

inc (j);

form5.StringGrid1.RowCount := form5.StringGrid1.RowCount + 1;

end;

end;

procedure TForm5.StringGrid1SelectCell(Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

form5.Memo1.Clear;

curent_row:=arow;

if form5.StringGrid1.Cells[0, curent_row] <> '' then

begin

form5.Memo1.Clear;

form5.Memo1.Lines.text:=otdel.otdelkadrov[strtoint(stringgrid1.cells[0, curent_row])].info;

end;

end;

procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//возвращаем пользователя на главную форму

form2.Show;

form5.Hide;

end;

procedure TForm5.FormCreate(Sender: TObject);

begin

//ставим подписи столбцов

form5.StringGrid1.Cells[0,0]:='№';

form5.StringGrid1.Cells[1,0]:='Фамилия';

form5.StringGrid1.Cells[2,0]:=' Имя ';

form5.StringGrid1.Cells[3,0]:='Отчество';

form5.StringGrid1.Cells[4,0]:='Должность ';

form5.StringGrid1.Cells[5,0]:='Паспорт';

form5.StringGrid1.Cells[6,0]:='Зарплата';

end;

end.

unit Unit6; //форма с графиком

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, TeEngine, Series, StdCtrls, Buttons, ExtCtrls, TeeProcs, Chart, my_class_methods;

type

TForm6 = class(TForm)

Chart1: TChart;

LabeledEdit1: TLabeledEdit;

LabeledEdit2: TLabeledEdit;

LabeledEdit3: TLabeledEdit;

LabeledEdit4: TLabeledEdit;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Series1: TBarSeries;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form6: TForm6;

implementation

uses Unit2, Unit7;

{$R *.dfm}

procedure TForm6.BitBtn1Click(Sender: TObject); //на главную форму

begin

form2.show;

form6.Hide;

end;

procedure TForm6.BitBtn2Click(Sender: TObject); // если решили выйдти

begin

if change=true then

begin

if MessageDlg('Вы хотите сохранить измененные данные?',

mtInformation, [mbYes, mbNo], 0) = mrYes then

begin

if form2.SaveDialog1.Execute then

begin

otdel.Save(form2.SaveDialog1.filename);

end;

end;

end;

if MessageDlg('Вы уверены, что хотите выйти?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

form7.show;

form6.Hide;

end;

end;

end.

unit Unit7; //модуль последней завершающей формы

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, my_class_methods;

type

TForm7 = class(TForm)

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form7: TForm7;

implementation

{$R *.dfm}

procedure TForm7.BitBtn1Click(Sender: TObject);

begin

application.Terminate;

end;

procedure TForm7.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//форма закрыта

//закрываем все приложение

application.Terminate;

end;

end.

  1. Фаронов В.В. Программирование баз данных в Delphi 7. Учебный курс. – СПб: Питер, 2006. – 459с

  2. Фаронов В.В. Программирование баз данных в Delphi 7. Учебный курс. – СПб: Питер, 2006. – 459с

  3. Хомоненко А.Д. и др. Delphi 7./ Под общей редакцией А. Д. Хомоненко – СПб.: BHV, 2004