Отчет по курсовой (Курсовая работа - Информационная служба учета времени работы сотрудника)
Описание файла
Файл "Отчет по курсовой" внутри архива находится в папке "Курсовая работа - Информационная служба учета времени работы сотрудника". Документ из архива "Курсовая работа - Информационная служба учета времени работы сотрудника", который расположен в категории "". Всё это находится в предмете "базы данных" из 6 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "базы данных (бд)" в общих файлах.
Онлайн просмотр документа "Отчет по курсовой"
Текст из документа "Отчет по курсовой"
МОСКВОСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ
КУРСОВАЯ РАБОТА
по дисциплине: «Базы данных»
на тему: "Информационная служба учета времени работы сотрудника."
ВЫПОЛНИЛ:
Студент 3-го курса гр ИТ-6
Васильев О.М.
ПРОВЕРИЛ:
Доцент кафедры ИТ-6
Филатов В.В.
Москва 2012г.
Оглавление:
1. Задание
2. Реализованная схема связи таблиц
3. Распечатка SQL скриптов
4. Исходный код программы
5. Скриншоты программы
1. Задание
100 | Информационная служба учета времени работы сотрудника. | Информация о сотруднике (его отделе, руководителе), сроках работы ( с учетом смены), контроль времени прихода/ухода | 4 | 3 |
2. Реализованная схема связи таблиц
3. Распечатка SQL скриптов
Представления
1. Для отображения руководителей в форме списка таблицы Сотрудники
CREATE VIEW V_Employee AS
SELECT
A.ID,
A.ID_Boss,
A.ID_Department,
A.Name,
A.Boss,
ISNULL(D.Name, 'Нет отдела') AS Depatrment
FROM
(SELECT
GlavS.ID,
GlavS.Name,
GlavS.ID_Department,
GlavS.ID_Boss,
ISNULL(E.Name, 'Нет руководителя') AS Boss
FROM
S_Employees AS GlavS
LEFT OUTER JOIN
(SELECT
ID,
Name
FROM
S_Employees) AS E
ON
GlavS.ID_Boss = E.ID) AS A
LEFT OUTER JOIN
(SELECT
ID, Name
FROM
S_Departments) AS D
ON
A.ID_Department = D.ID
2.Для отображения документов в форме списка документов
CREATE VIEW V_TimeControl AS
SELECT
Doc.ID,
Doc.ID_Employee,
Doc.DocumentDate,
Doc.DocumentNumber,
ISNULL(E.Name, 'Не установлен') AS Employee
FROM
D_Timecontrol AS Doc
LEFT OUTER JOIN
(SELECT
ID, Name
FROM
S_Employees) AS E
ON
Doc.ID_Employee = E.ID
Хранимые процедуры на изменение записей
1. Изменение отделов
CREATE PROCEDURE updateDepartments
@ID int,
@Name Varchar(50),
@Adress Varchar(50),
@Phone Varchar(50)
AS
BEGIN
UPDATE S_Departments
SET
Name = @Name,
Adress = @Adress,
Phone = @Phone
WHERE ID = @ID
END
2. Изменение Сотрудников
CREATE PROCEDURE updateEmployees
@ID int,
@Name Varchar(50),
@ID_Department int,
@ID_Boss int
AS
BEGIN
UPDATE S_Employees
SET
Name = @Name,
ID_Department = @ID_Department,
ID_Boss = @ID_Boss
WHERE ID = @ID
END
3. Изменение документов Контроль времени
CREATE PROCEDURE updateTimeControl
@ID int,
@DocumentDate Date,
@DocumentNumber Varchar(50),
@ID_Employee int
AS
BEGIN
UPDATE D_TimeControl
SET
DocumentDate = @DocumentDate,
DocumentNumber = @DocumentNumber,
ID_Employee = @ID_Employee
WHERE ID = @ID
END
4. Изменение табличной части документа контроль времени
Для данной таблице написана процедура которая при редактировании выбранного документа по переданному его ID, ищет все строки и копирует для редактирования без заполненым значением ID_TimeControl которое хранит в себе номер привязки к документу.
CREATE PROCEDURE CopyDTable_TimeControlForUpdate @ID int
AS
INSERT INTO
DTable_TimeControl(ID_Employee, InWork, OutWork)
SELECT
ID_Employee,
InWork,
OutWork
FROM
DTable_TimeControl
WHERE ID_TimeControl = @ID
На форме документа отображение данных в табличной части всегда установленно с фильтром на пустое значение привязки, сделано для того что бы пользователь мог откатиться в случае отмены изменений. При нажатии на кнопку "Записать" если добавление то осуществляется привязка введенных им строк к отрытому документу, в случае редактирования, предварительно база очищается от старых привязок путем запуска второй хранимой процедуры сделанной для данной таблицы.
CREATE PROCEDURE DeleteInDTable_TimeControl @ID int
AS
Delete from DTable_TimeControl WHERE ID_TimeControl = @ID
5. Общая процедура удаления записей из таблиц
CREATE PROCEDURE DeleteElement
@ID int,
@Name Varchar(50),
AS
BEGIN
IF @Name = 'Departments'
Delete from S_Departments Where id = @ID
IF @Name = 'Employees'
Delete from S_Employeess Where id = @ID
IF @Name = 'TimeControl'
Delete from D_TimeControl Where id = @ID
END
6. Процедура вывода статистики
CREATE PROCEDURE ShowStatistic
@ID int,
@DateDown Date,
@DateUp Date
AS
BEGIN
SELECT
DAY(InWork),
DATEDIFF(hh, InWork, OutWork)
FROM
DTable_TimeControl
WHERE
InWork > @DateDown AND InWork < @DateUp AND ID_Employee = @ID
END
Триггеры таблиц базы данных
1. Триггер срабатывающий при удалении документа "Контроль времени"
CREATE TRIGGER DeleteTimeControl
ON D_TimeControl
AFTER DELETE
AS
BEGIN
Delete from DTable_TimeControl where ID_TimeControl in (Select id from deleted)
END
GO
2. Триггер срабатывающий при удалении сотрудника
CREATE TRIGGER DeleteEmployee
ON S_Employees
AFTER DELETE
AS
BEGIN
Delete from D_TimeControl where ID_Employee in (Select id from deleted)
END
GO
3. Триггер срабатывающий при удалении отдела
CREATE TRIGGER DeleteDEpartment
ON S_Departments
AFTER DELETE
AS
BEGIN
Delete from S_Employees where ID_Department in (Select id from deleted)
END
GO
Функции
1. Функция по поиску записей в справочнике Сотрудники
CREATE FUNCTION SearchInTable (@Name Varchar(50), @Value Varchar)
RETURNS TABLE
AS
RETURN
(SELECT ID,
Name,
Department,
Boss
FROM V_Employee
WHERE
Name Like CASE WHEN @Name = 'Name' THEN @Value ELSE Name END And
Department Like CASE WHEN @Name = 'Department' THEN @Value ELSE Department END And
Boss Like CASE WHEN @Name = 'Boss' THEN @Value ELSE Boss END
)
GO
2. Функция по поиску документов "Контроль времени"
CREATE FUNCTION SearchInTimeConrtol(@Name Varchar(50), @Value Varchar(50))
RETURNS TABLE
AS
RETURN
(SELECT ID,
Employee,
DocumentDate,
DocumentNumber
FROM V_TimeControl
WHERE
Employee Like CASE WHEN @Name = 'Employee' THEN @Value ELSE Employee END And
DocumentDate Like CASE WHEN @Name = 'DocumentDate' THEN @Value ELSE DocumentDate END And
DocumentNumber Like CASE WHEN @Name = 'DocumentNumber' THEN @Value ELSE DocumentNumber END
)
GO
3. Функция по поиску записей в справочнике Отделы
CREATE FUNCTION SearchInDepartments(@Name Varchar(50), @Value Varchar)
RETURNS TABLE
AS
RETURN
(SELECT ID,
Name,
Adress,
Phone
FROM S_Departments
WHERE
Name Like CASE WHEN @Name = 'Name' THEN @Value ELSE Name END And
Adress Like CASE WHEN @Name = 'Adress' THEN @Value ELSE Adress END And
Phone Like CASE WHEN @Name = 'Phone' THEN @Value ELSE Phone END
)
4. Исходный код программы
Unit 1 . pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ValEdit, DB, DBTables, DBGrids, TeEngine, Series,
ComCtrls, ExtCtrls, TeeProcs, Chart, Menus;
type
TForm1 = class(TForm)
Statistic: TChart;
Button5: TButton;
StatisticEmployee: TComboBox;
StatisticMonth: TDateTimePicker;
Label3: TLabel;
Label4: TLabel;
Series1: TFastLineSeries;
Label5: TLabel;
Shape1: TShape;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
HourCount: TLabel;
procedure Button5Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit4;
{$R *.dfm}
procedure TForm1.Button5Click(Sender: TObject);
Begin
DM.ShowStatistic(StatisticEmployee.Text, StatisticMonth.DateTime);
End;
procedure TForm1.FormShow(Sender: TObject);
Begin
StatisticEmployee.Text := '';
StatisticEmployee.Items.Clear;
DM.Employees.First;
While Not DM.Employees.Eof Do Begin
StatisticEmployee.Items.Add(DM.Employees.FieldByName('Name').AsString);
DM.Employees.Next;
End;
End;
//Контроль времени
procedure TForm1.N3Click(Sender: TObject);
begin
DM.CreateFormList('TimeControl');
end;
//Отделы
procedure TForm1.N4Click(Sender: TObject);
begin
DM.CreateFormList('Departments');
end;
//Сотрудники
procedure TForm1.N5Click(Sender: TObject);
begin
DM.CreateFormList('Employees');
end;
//Выход
procedure TForm1.N7Click(Sender: TObject);
begin
Close();
end;
procedure TForm1.N8Click(Sender: TObject);
begin
DM.CreateRandomDocumentsAutomiticly();
end;
end.
Unit 2. pas
unit Unit2;
interface
uses
SysUtils, Classes, DB, ADODB, Dialogs, Forms, StdCtrls, DBGrids, Unit3, DateUtils;
type
TDM = class(TDataModule)
Connecter: TADOConnection;
Departments: TADOTable;
DS_Departments: TDataSource;
Employees: TADOTable;
TimeControl: TADOTable;
DS_Employees: TDataSource;
DS_TimeControl: TDataSource;
DepartmentsID: TIntegerField;
DepartmentsName: TStringField;
DepartmentsAdress: TStringField;
DepartmentsPhone: TStringField;
EmployeesID: TIntegerField;
EmployeesName: TStringField;
EmployeesID_Department: TIntegerField;
TimeControlID: TIntegerField;
TimeControlID_Employee: TIntegerField;
TimeControlDocumentDate: TWideStringField;
TimeControlDocumentNumber: TStringField;
Table_TimeControl: TADOTable;
DS_Table_TimeControl: TDataSource;
Table_TimeControlID: TIntegerField;
Table_TimeControlID_TimeControl: TIntegerField;
Table_TimeControlID_Employee: TIntegerField;
Table_TimeControlInWork: TDateTimeField;
Table_TimeControlOutWork: TDateTimeField;
EmployeesDepartment: TStringField;
EmployeesBoss: TStringField;
RunQuery: TADOQuery;
Table_TimeControlEmployee: TStringField;
TimeControlEmployee: TStringField;