Теоретический раздел
Постановка задачи
Основной задачей данного курсового проекта является разработка базы данных и соответствующего приложения для автоматизации ведения кадрового учёта некоторого предприятия. Конечная цель этой задачи формирование таблицы анкетных данных. В программе используется много информации, и ее нужно где то хранить. Поэтому мы будем использовать базу данных. Очевидно, что первой задачей и является разработка базы данных для хранения всей необходимой информации. В зависимости от расположения программы, использующей данные, и самих данных, а также способа разделения данных между несколькими пользователями различают локальные (Paradox, dBase, FoxPro и Access) и удаленные (Interbase Sybase, Oracle и т.д.) базы данных. В данном случае мы будем создавать удалённую базу данных. Данные удалённой базы данных (файлы данных) находятся на одном удалённом устройстве, в качестве которого может выступать диск компьютера.
База данных — это набор файлов (таблиц), в которых находится информация. Как правило, база данных состоит из нескольких таблиц, которые размещают в одном каталоге. Каталог для новой базы данных создается обычным образом, например, при помощи Проводника. Таблицу мы будем создавать, воспользовавшись утилитой IBConsole. Сначала при помощи этой утилиты мы создадим сами таблицы, а затем еще генераторы и триггеры. Генератор – это специальная функция InterBase, с помощью которой создается счетчик для поля базы данных. А триггер нужен для того, чтобы привязать генератор к нужной таблице и к нужному полю.
Таким образом, процесс создания базы данных может быть представлен как последовательность следующих шагов:
· создание каталога;
· создание таблиц;
· создание генераторов;
· создание триггеров.
Следующей задачей является разработка графического интерфейса пользователя клиентских приложений. Говоря понятным языком, данный программный продукт ориентирован на конечного пользователя (в нашем случае на преподавателя), не обладающего высокой квалификацией в области вычислительной техники. Поэтому наше приложение должно обладать простым, удобным, легко осваиваемым интерфейсом, который предоставляет конечному пользователю все необходимые для работы функции и в то же время не дает ему возможность выполнять какие-либо лишние действия.
И последняя наша задача - это связать нашу программу с базой данных, и обеспечить возможность подключиться к удаленной базе данных по сети с любого компьютера.
Итак, чтобы перейти к конечной цели нашего курсового проекта надо разобраться со следующими задачами:
· разработка структуры таблиц базы данных;
· создание таблиц;
· создание генераторов и триггеров;
· связать программу с базой данных, находящейся на удалённом компьютере;
· разработка графического интерфейса пользователя клиентских приложений;
· обеспечить работоспособность программного продукта на любом компьютере.
Описание входной информации
В данной программе в качестве входной информации выступают данные в таблицу: Анкета. В этой таблице хранится фамилия, имя, отчество, пол, рост, вес, фото, дата рождения, адрес(страна), адрес(область), адрес(город), адрес(улица), адрес(квартира), адрес(индекс), адрес(телефон), место рождения(страна), место рождения(область), место рождения(город), гражданство, образование, номер страхового свидетельства, ИНН, серия трудовой книжки, номер трудовой книжки, номер паспорта, серия паспорта, выдан паспорт, дата выдачи паспорта.
Визуально ввод данных обеспечивается следующими компонентами:
· TRadioButton – визуальный компонент, позволяющий зафиксировать одно значение, из нескольких, принадлежащих к одной группе.
· TEdit – однострочный текстовый редактор, при помощи которого вводится нужная информация, например пароль и имя преподавателя.
· TDBEdit – компонент, имеющий такие же свойства как и TEdit, но с дополнительной возможностью связи с каким либо полем таблицы базы данных;
· TComboBox – визуальный компонент, позволяет выбрать одно значение из списка.
Экспериментальный раздел
Описание процесса отладки
Успешное завершение процесса компиляции не означает, что в программе нет ошибок. Убедиться, что программа работает правильно можно только в процессе проверки ее работоспособности, который называется тестирование.
Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки. Процесс поиска и устранение ошибок называется отладкой.
Delphi обладает мощнейшим, встроенным в редактор графическим отладчиком, позволяющим находить и устранять ошибки в коде. Мы можем установить точки остановки, проверить и изменить переменные, при помощи пошагового выполнения в точности понять поведение программы.
В процессе отладки программы я столкнулся с ошибкой. Эта ошибка возникла, когда программой не была найдена база данных.
Исправил я эту ошибку, создав папку «BD» и поместил в неё базу «BD». Далее в свойстве DatabaseName компонента IBDatabase1 я написал следуюшее:
BD\BD.gdb
Программа автоматически определяет свое место положения и сообщает компоненту IBDatabase путь до базы данных.
Характеристика программы
Разработанный программный продукт представляет собой программу, которая формирует базу данных и соответствующее приложение для автоматизации ведения кадрового учёта некоторого предприятия.
При запуске программы появляется окошко, содержащее компоненты визуализирующие содержимое базы данных, кнопки, с помощью которых можно добавлять, изменять, удалять записи в базе данных.
Окно о программе
Инструкция пользователя
Для работы в данной программе вам не потребуются большие навыки работы с Windows-приложениями. Сам интерфейс программы прост и ясен.
Для начала работы необходимо в корневой директории диска открыть папку «Анкетные данные», в которой находиться программа и запустить файл Анкетные данные.exe. При запуске программы на экране появиться главное окно в котором вы можите просмотреть все личные данные. При нажатии на кнопку «Поиск» можно произвести поиск по трем полям: фамилия, пол, ИНН. При нажатии на кнопку «Сортировка» можно провести сортировку по полям указанным в программе.
При нажатии на вкладку «Редактировать» возникает окошко с данными той записи, на которой стоит указатель. Здесь можно изменить информацию любую информацию, имеющуюся в базе данных.
При нажатии на кнопку «Фильтрация» можно включить или выключить фильтр. Фильтрация происходит по всем полям базы данных.
При выборе вкладки «Добавление записи» можно добавить в базу свои анкетные данные предварительно заполнив все поля после чего нажимаем на кнопку «Добавить» поля добавляются. Также можно добавить свою фотографию нажав на кнопку «Добавить фото» и прописать путь к своей фотографии.
При нажатии на вкладку «Редактирование записей» возникает окошко с данными той записи, на которой стоит указатель. Здесь можно изменить информацию любую информацию, имеющуюся в базе данных.
Чтобы вывести распечатать анкетные данные в главном окне выбираем нужное поле нажимаем кнопку «Отчет» и распечатываем.
При нажатии на кнопку «О программе» на панели сверху, возникает окно с информацией о разработчике данного программного продукта.
Заключение
Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую "быструю разработку", среди которых можно выделить Borland Delphi и Microsoft Visual Basic. В основе систем быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий.
Программный продукт, разработанный в рамках данного курсового проекта, предназначается для проектирования баз данных и соответствующего приложение для автоматизации ведения кадрового учёта некоторого предприятия.
Программа имеет возможности фильтровать записи, осуществлять поиск необходимой записи, печатать записи, содержащиеся в базе.
Литература
1. Бобровский С.И. Delphi7. Учебный курс.- СПб.: Питер.2004.
2. Избачков Ю. С., Петров В. Н. Информационные системы: Учебник. - СПб.: Питер, 2005.
3. Волков Ю.С., Петров В.Н. Информационные системы. - СПб.: Питер. 2005.
4. Рудаков А. В. Технология разработки программных продуктов: Учеб. пособие. – М.: Издательский центр «Академия», 2005.
5. Стандартная документация Delphi.
Приложение
Основной модуль приложения
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {DataModule2: TDataModule},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {Form5};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Àíêåòíûå äàííûå';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TDataModule2, DataModule2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm5, Form5);
Application.Run;
end.
Модуль хранения невизуальных компонентов
unit Unit2;
interface
uses
SysUtils, Classes, IBDatabase, DB;
type
TDataModule2 = class(TDataModule)
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule2: TDataModule2;
implementation
{$R *.dfm}
end.
Модуль основной формы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, IBCustomDataSet, IBTable, ExtCtrls,
StdCtrls, Mask, DBCtrls, XPMan, Menus, IBQuery, ComCtrls, ExtDlgs;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Panel1: TPanel;
Panel2: TPanel;
DBGrid1: TDBGrid;
XPManifest1: TXPManifest;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
IBQuery1: TIBQuery;
IBQuery2: TIBQuery;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
GroupBox4: TGroupBox;
Label19: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Edit18: TEdit;
Edit20: TEdit;
Edit21: TEdit;
Edit22: TEdit;
GroupBox5: TGroupBox;
Label24: TLabel;
Label25: TLabel;
Edit23: TEdit;
Edit24: TEdit;
GroupBox2: TGroupBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit15: TEdit;
Edit14: TEdit;
GroupBox3: TGroupBox;
Label17: TLabel;
Label18: TLabel;
Label20: TLabel;
Edit16: TEdit;
Edit17: TEdit;
Edit19: TEdit;
GroupBox6: TGroupBox;
Label28: TLabel;
Label29: TLabel;
Edit27: TEdit;
Edit28: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label26: TLabel;
Label27: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit5: TEdit;
Edit4: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit25: TEdit;
Edit26: TEdit;
Button1: TButton;
Button3: TButton;
TabSheet3: TTabSheet;
IBQuery1NOM: TSmallintField;
IBQuery1FAM: TIBStringField;
IBQuery1NAME: TIBStringField;
IBQuery1OTCH: TIBStringField;
IBQuery1POL: TIBStringField;
IBQuery1ROST: TIBStringField;
IBQuery1VES: TIBStringField;
IBQuery1FOTO: TBlobField;
IBQuery1DR: TDateField;
IBQuery1ADR_STR: TIBStringField;
IBQuery1ADR_OBL: TIBStringField;
IBQuery1ADR_GOR: TIBStringField;
IBQuery1ADR_YL: TIBStringField;
IBQuery1ADR_DOM: TIBStringField;
IBQuery1ADR_KV: TIBStringField;
IBQuery1ADR_IND: TIBStringField;
IBQuery1ADR_TEL: TIBStringField;
IBQuery1MROZ_STR: TIBStringField;
IBQuery1MROZ_OBL: TIBStringField;
IBQuery1MROZ_GOR: TIBStringField;
IBQuery1GRAZDAN: TIBStringField;
IBQuery1OBRAZOV: TIBStringField;
IBQuery1NOM_STRAX_SVED: TIBStringField;
IBQuery1INN: TIBStringField;
IBQuery1TRYD_KN_SERIYA: TIBStringField;
IBQuery1TRYD_KN_NOMER: TIBStringField;
IBQuery1PASPOST_NOM: TIBStringField;
IBQuery1PASPOST_SER: TIBStringField;
IBQuery1PASPOST_VIDAN: TIBStringField;
IBQuery1PASPOST_DATA: TDateField;
GroupBox8: TGroupBox;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label38: TLabel;
Label39: TLabel;
GroupBox9: TGroupBox;
Label40: TLabel;
Label41: TLabel;
GroupBox10: TGroupBox;
Label42: TLabel;
Label43: TLabel;
Label44: TLabel;
GroupBox11: TGroupBox;
Label45: TLabel;
Label46: TLabel;
Label47: TLabel;
Label48: TLabel;
Label49: TLabel;
Label50: TLabel;
Label51: TLabel;
Label52: TLabel;
GroupBox12: TGroupBox;
Label53: TLabel;
Label54: TLabel;
Label55: TLabel;
Label56: TLabel;
GroupBox13: TGroupBox;
Label57: TLabel;
Label58: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
DBEdit10: TDBEdit;
DBEdit11: TDBEdit;
DBEdit12: TDBEdit;
DBEdit13: TDBEdit;
DBEdit14: TDBEdit;
DBEdit15: TDBEdit;
DBEdit16: TDBEdit;
DBEdit17: TDBEdit;
DBEdit18: TDBEdit;
DBEdit19: TDBEdit;
DBEdit20: TDBEdit;
DBEdit21: TDBEdit;
DBEdit22: TDBEdit;
DBEdit23: TDBEdit;
DBEdit24: TDBEdit;
DBEdit25: TDBEdit;
DBEdit26: TDBEdit;
DBEdit27: TDBEdit;
DBEdit28: TDBEdit;
GroupBox7: TGroupBox;
ComboBox1: TComboBox;
Edit500: TEdit;
Button2: TButton;
DBNavigator3: TDBNavigator;
IBQueryFoto: TIBQuery;
OpenPictureDialog1: TOpenPictureDialog;
DBImage2: TDBImage;
DBImage1: TDBImage;
GroupBox14: TGroupBox;
Label59: TLabel;
Label60: TLabel;
Label61: TLabel;
Label62: TLabel;
Label63: TLabel;
Label64: TLabel;
Label65: TLabel;
Label66: TLabel;
Label67: TLabel;
Label68: TLabel;
Edit29: TEdit;
Edit30: TEdit;
Edit31: TEdit;
Edit32: TEdit;
Edit33: TEdit;
Edit34: TEdit;
Edit35: TEdit;
Edit36: TEdit;
Edit37: TEdit;
GroupBox15: TGroupBox;
Label69: TLabel;
Label70: TLabel;
Edit38: TEdit;
Edit39: TEdit;
GroupBox16: TGroupBox;
Label71: TLabel;
Label72: TLabel;
Label73: TLabel;
Edit40: TEdit;
Edit41: TEdit;
Edit42: TEdit;
GroupBox17: TGroupBox;
Label74: TLabel;
Label75: TLabel;
Label76: TLabel;
Label77: TLabel;
Label78: TLabel;
Label79: TLabel;
Label80: TLabel;
Label81: TLabel;
Edit43: TEdit;
Edit44: TEdit;
Edit45: TEdit;
Edit46: TEdit;
Edit47: TEdit;
Edit48: TEdit;
Edit49: TEdit;
Edit50: TEdit;
GroupBox18: TGroupBox;
Label82: TLabel;
Label83: TLabel;
Edit51: TEdit;
Edit52: TEdit;
GroupBox19: TGroupBox;
Label84: TLabel;
Label85: TLabel;
Label86: TLabel;
Label87: TLabel;
Edit53: TEdit;
Edit54: TEdit;
Edit55: TEdit;
Edit56: TEdit;
Button4: TButton;
IBQuery3: TIBQuery;
DBImage3: TDBImage;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
Button5: TButton;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
IBQuery4: TIBQuery;
N18: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure IBQuery1AfterScroll(DataSet: TDataSet);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N18Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure TForm1.FormDestroy(Sender: TObject);
begin
IBQuery1.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute Then
begin
DBImage2.Picture.LoadFromFile(OpenPictureDialog1.FileName);
IBQueryFoto.ParamByName('FOTO').LoadFromFile(OpenPictureDialog1.FileName,ftBlob);
IBQueryFoto.ParamByName('Nom').Value := IBQuery1.FieldByName('Nom').Value;
Try
IBQueryFoto.ExecSQL;
Except
DataModule2.IBTransaction1.RollbackRetaining;
ShowMessage('Ошибка установки фотографии');
Exit;
End;
DataModule2.IBTransaction1.CommitRetaining;
IBQuery1.Close;
IBQuery1.Open;
ShowMessage('Фотография установлена');
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s : String;
begin
case ComboBox1.ItemIndex of
0 : S := 'Fam';
1 : S := 'Pol';
2 : S := 'INN';
end;
IBQuery1.Locate(S, Edit500.Text,[loPartialKey]);
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form3.QuickRep1.Preview;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
IBQuery2.Params.ParamByName('Fam').Value:=Edit1.Text;
IBQuery2.Params.ParamByName('Name').Value:=Edit2.Text;
IBQuery2.Params.ParamByName('Otch').Value:=Edit3.Text;
IBQuery2.Params.ParamByName('Pol').Value:=Edit4.Text;
IBQuery2.Params.ParamByName('DR').Value:=Edit5.Text;
IBQuery2.Params.ParamByName('Ves').Value:=Edit6.Text;
IBQuery2.Params.ParamByName('Rost').Value:=Edit7.Text;
IBQuery2.Params.ParamByName('Adr_str').Value:=Edit8.Text;
IBQuery2.Params.ParamByName('Adr_obl').Value:=Edit9.Text;
IBQuery2.Params.ParamByName('Adr_gor').Value:=Edit10.Text;
IBQuery2.Params.ParamByName('Adr_yl').Value:=Edit11.Text;
IBQuery2.Params.ParamByName('Adr_dom').Value:=Edit12.Text;
IBQuery2.Params.ParamByName('Adr_kv').Value:=Edit13.Text;
IBQuery2.Params.ParamByName('Adr_ind').Value:=Edit14.Text;
IBQuery2.Params.ParamByName('Adr_tel').Value:=Edit15.Text;
IBQuery2.Params.ParamByName('Mroz_str').Value:=Edit16.Text;
IBQuery2.Params.ParamByName('Mroz_obl').Value:=Edit17.Text;
IBQuery2.Params.ParamByName('Paspost_nom').Value:=Edit18.Text;
IBQuery2.Params.ParamByName('Mroz_gor').Value:=Edit19.Text;
IBQuery2.Params.ParamByName('Paspost_ser').Value:=Edit20.Text;
IBQuery2.Params.ParamByName('Paspost_vidan').Value:=Edit21.Text;
IBQuery2.Params.ParamByName('Paspost_data').Value:=Edit22.Text;
IBQuery2.Params.ParamByName('Tryd_kn_seriya').Value:=Edit23.Text;
IBQuery2.Params.ParamByName('Tryd_kn_nomer').Value:=Edit24.Text;
IBQuery2.Params.ParamByName('Obrazov').Value:=Edit25.Text;
IBQuery2.Params.ParamByName('Grazdan').Value:=Edit26.Text;
IBQuery2.Params.ParamByName('Nom_strax_sved').Value:=Edit27.Text;
IBQuery2.Params.ParamByName('INN').Value:=Edit28.Text;
try
IBQuery2.ExecSQL;
Except
DataModule2.IBTransaction1.RollbackRetaining;
ShowMessage('Невозможно передать запись');
Exit;
end;
DataModule2.IBTransaction1.CommitRetaining;
ShowMessage('Запись добавлена');
IBQuery1.Close;
IBQuery1.Open;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if MessageDlg('Обновить анкетные данные?', mtConfirmation, [mbYes, mbNo],0)=mrYes then
begin
IBQuery4.Params.ParamByName('Nom').Value:=IBQuery1NOM.Value;
IBQuery4.Params.ParamByName('Fam').Value:=Edit29.Text;
IBQuery4.Params.ParamByName('Name').Value:=Edit30.Text;
IBQuery4.Params.ParamByName('Otch').Value:=Edit31.Text;
IBQuery4.Params.ParamByName('Pol').Value:=Edit33.Text;
IBQuery4.Params.ParamByName('DR').Value:=Edit32.Text;
IBQuery4.Params.ParamByName('Ves').Value:=Edit34.Text;
IBQuery4.Params.ParamByName('Rost').Value:=Edit35.Text;
IBQuery4.Params.ParamByName('Adr_str').Value:=Edit43.Text;
IBQuery4.Params.ParamByName('Adr_obl').Value:=Edit44.Text;
IBQuery4.Params.ParamByName('Adr_gor').Value:=Edit45.Text;
IBQuery4.Params.ParamByName('Adr_yl').Value:=Edit46.Text;
IBQuery4.Params.ParamByName('Adr_dom').Value:=Edit47.Text;
IBQuery4.Params.ParamByName('Adr_kv').Value:=Edit48.Text;
IBQuery4.Params.ParamByName('Adr_ind').Value:=Edit50.Text;
IBQuery4.Params.ParamByName('Adr_tel').Value:=Edit49.Text;
IBQuery4.Params.ParamByName('Mroz_str').Value:=Edit40.Text;
IBQuery4.Params.ParamByName('Mroz_obl').Value:=Edit41.Text;
IBQuery4.Params.ParamByName('Paspost_nom').Value:=Edit53.Text;
IBQuery4.Params.ParamByName('Mroz_gor').Value:=Edit42.Text;
IBQuery4.Params.ParamByName('Paspost_ser').Value:=Edit54.Text;
IBQuery4.Params.ParamByName('Paspost_vidan').Value:=Edit55.Text;
IBQuery4.Params.ParamByName('Paspost_data').Value:=Edit56.Text;
IBQuery4.Params.ParamByName('Tryd_kn_seriya').Value:=Edit51.Text;
IBQuery4.Params.ParamByName('Tryd_kn_nomer').Value:=Edit52.Text;
IBQuery4.Params.ParamByName('Obrazov').Value:=Edit36.Text;
IBQuery4.Params.ParamByName('Grazdan').Value:=Edit37.Text;
IBQuery4.Params.ParamByName('Nom_strax_sved').Value:=Edit38.Text;
IBQuery4.Params.ParamByName('INN').Value:=Edit39.Text;
try
IBQuery4.ExecSQL;
Except
DataModule2.IBTransaction1.RollbackRetaining;
ShowMessage('Запись не добавлена');
exit;
end;
DataModule2.IBTransaction1.CommitRetaining;
ShowMessage('Запись обновлена');
IBQuery1.Close;
IBQuery1.Open;
end;
end;
procedure TForm1.IBQuery1AfterScroll(DataSet: TDataSet);
begin
if IBQuery1.FieldValues['Fam']<> null then
Edit29.Text:=IBQuery1.FieldValues['Fam'];
if IBQuery1.FieldValues['Name']<> null then
Edit30.Text:=IBQuery1.FieldValues['Name'];
if IBQuery1.FieldValues['Otch']<> null then
Edit31.Text:=IBQuery1.FieldValues['Otch'];
if IBQuery1.FieldValues['Pol']<> null then
Edit33.Text:=IBQuery1.FieldValues['Pol'];
if IBQuery1.FieldValues['DR']<> null then
Edit32.Text:=IBQuery1.FieldValues['DR'];
if IBQuery1.FieldValues['Ves']<> null then
Edit34.Text:=IBQuery1.FieldValues['Ves'];
if IBQuery1.FieldValues['Rost']<> null then
Edit35.Text:=IBQuery1.FieldValues['Rost'];
if IBQuery1.FieldValues['Adr_str']<> null then
Edit43.Text:=IBQuery1.FieldValues['Adr_str'];
if IBQuery1.FieldValues['Adr_obl']<> null then
Edit44.Text:=IBQuery1.FieldValues['Adr_obl'];
if IBQuery1.FieldValues['Adr_gor']<> null then
Edit45.Text:=IBQuery1.FieldValues['Adr_gor'];
if IBQuery1.FieldValues['Adr_yl']<> null then
Edit46.Text:=IBQuery1.FieldValues['Adr_yl'];
if IBQuery1.FieldValues['Adr_dom']<> null then
Edit47.Text:=IBQuery1.FieldValues['Adr_dom'];
if IBQuery1.FieldValues['Adr_kv']<> null then
Edit48.Text:=IBQuery1.FieldValues['Adr_kv'];
if IBQuery1.FieldValues['Adr_ind']<> null then
Edit50.Text:=IBQuery1.FieldValues['Adr_ind'];
if IBQuery1.FieldValues['Adr_tel']<> null then
Edit49.Text:=IBQuery1.FieldValues['Adr_tel'];
if IBQuery1.FieldValues['Mroz_str']<> null then
Edit40.Text:=IBQuery1.FieldValues['Mroz_str'];
if IBQuery1.FieldValues['Mroz_obl']<> null then
Edit41.Text:=IBQuery1.FieldValues['Mroz_obl'];
if IBQuery1.FieldValues['Paspost_nom']<> null then
Edit53.Text:=IBQuery1.FieldValues['Paspost_nom'];
if IBQuery1.FieldValues['Mroz_gor']<> null then
Edit42.Text:=IBQuery1.FieldValues['Mroz_gor'];
if IBQuery1.FieldValues['Paspost_ser']<> null then
Edit54.Text:=IBQuery1.FieldValues['Paspost_ser'];
if IBQuery1.FieldValues['Paspost_vidan']<> null then
Edit55.Text:=IBQuery1.FieldValues['Paspost_vidan'];
if IBQuery1.FieldValues['Paspost_data']<> null then
Edit56.Text:=IBQuery1.FieldValues['Paspost_data'];
if IBQuery1.FieldValues['Tryd_kn_seriya']<> null then
Edit51.Text:=IBQuery1.FieldValues['Tryd_kn_seriya'];
if IBQuery1.FieldValues['Tryd_kn_nomer']<> null then
Edit52.Text:=IBQuery1.FieldValues['Tryd_kn_nomer'];
if IBQuery1.FieldValues['Obrazov']<> null then
Edit36.Text:=IBQuery1.FieldValues['Obrazov'];
if IBQuery1.FieldValues['Grazdan']<> null then
Edit37.Text:=IBQuery1.FieldValues['Grazdan'];
if IBQuery1.FieldValues['Nom_strax_sved']<> null then
Edit38.Text:=IBQuery1.FieldValues['Nom_strax_sved'];
if IBQuery1.FieldValues['INN']<> null then
Edit39.Text:=IBQuery1.FieldValues['INN'];
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Form4.Notebook1.PageIndex := 0;
Form4.GroupBox1.Caption := ' По фамилии: ';
Form4.ShowModal;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
Form4.Notebook1.PageIndex := 1;
Form4.GroupBox1.Caption := ' По полу: ';
Form4.ShowModal;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
Form4.Notebook1.PageIndex := 2;
Form4.GroupBox1.Caption := ' По дате рождения: ';
Form4.ShowModal;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from anketa order by fam');
IBQuery1.Open;
end;
procedure TForm1.N10Click(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from anketa order by dr');
IBQuery1.Open;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from anketa order by rost');
IBQuery1.Open;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute Then
begin
DBImage3.Picture.LoadFromFile(OpenPictureDialog1.FileName);
IBQueryFoto.ParamByName('FOTO').LoadFromFile(OpenPictureDialog1.FileName,ftBlob);
IBQueryFoto.ParamByName('Nom').Value := IBQuery1.FieldByName('Nom').Value;
Try
IBQueryFoto.ExecSQL;
Except
DataModule2.IBTransaction1.RollbackRetaining;
ShowMessage('Ошибка установки фотографии');
Exit;
End;
DataModule2.IBTransaction1.CommitRetaining;
IBQuery1.Close;
IBQuery1.Open;
ShowMessage('Фотография установлена');
end;
end;
procedure TForm1.N13Click(Sender: TObject);
begin
PageControl1.ActivePageIndex := 1;
end;
procedure TForm1.N14Click(Sender: TObject);
begin
PageControl1.ActivePageIndex := 2;
end;
procedure TForm1.N15Click(Sender: TObject);
begin
if MessageBox(Handle,'Вы действительно хотите удалить запись?','Подтверждение удаления', MB_YESNO or MB_ICONWARNING)=mrYes then
begin
IBQuery3.ParamByName('NOM').Value := IBQuery1.FieldByName('NOM').Value;
Try
IBQuery3.ExecSQL;
Except
DataModule2.IBTransaction1.RollbackRetaining;
MessageBox(Handle,'Невозможно удалить запись.','Ошибка удаления записи', MB_OK or MB_ICONERROR);
Exit;
End;
DataModule2.IBTransaction1.CommitRetaining;
IBQuery1.Close;
IBQuery1.Open;
MessageBox(Handle,'Запись удалина.','Событие', MB_OK or MB_ICONINFORMATION);
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
IBQuery1.Open;
end;
procedure TForm1.N16Click(Sender: TObject);
begin
Form5.ShowModal;
end;
procedure TForm1.N18Click(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT * FROM ANKETA');
IBQuery1.Open;
end;
end.
Модуль формы с фильтрацией
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm4 = class(TForm)
GroupBox1: TGroupBox;
Notebook1: TNotebook;
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button4: TButton;
Button5: TButton;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit3: TEdit;
Button6: TButton;
Button7: TButton;
Button8: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit1, Unit2, Unit3;
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
Form1.IBQuery1.Close;
form1.IBQuery1.SQL.Clear;
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA WHERE Fam='+#39+Edit1.text+#39'');
Form1.IBQuery1.Open;
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
Form1.IBQuery1.Close;
form1.IBQuery1.SQL.Clear;
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA');
Form1.IBQuery1.Open;
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
Edit1.Text:='';
end;
procedure TForm4.Button5Click(Sender: TObject);
begin
Form1.IBQuery1.Close;
form1.IBQuery1.SQL.Clear;
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA');
Form1.IBQuery1.Open;
end;
procedure TForm4.Button4Click(Sender: TObject);
begin
Form1.IBQuery1.Close;
form1.IBQuery1.SQL.Clear;
if RadioButton1.Checked=true then
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA WHERE POL='+#39+'М'+#39);
if RadioButton2.Checked=true then
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA WHERE POL='+#39+'Ж'+#39);
Form1.IBQuery1.Open;
end;
procedure TForm4.Button6Click(Sender: TObject);
begin
Form1.IBQuery1.Close;
form1.IBQuery1.SQL.Clear;
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA WHERE(DR>='+#39+Edit2.text+#39+') and (DR<='+#39+Edit3.text+#39+') ');
Form1.IBQuery1.Open;
end;
procedure TForm4.Button8Click(Sender: TObject);
begin
Edit2.Text:='';
Edit3.Text:='';
end;
procedure TForm4.Button7Click(Sender: TObject);
begin
Form1.IBQuery1.Close;
form1.IBQuery1.SQL.Clear;
Form1.IBQuery1.SQL.Add('SELECT * FROM ANKETA');
Form1.IBQuery1.Open;
end;
end.
Теоретический раздел
Постановка задачи
Основной задачей данного курсового проекта является разработка базы данных и соответствующего приложения для автоматизации ведения кадрового учёта некоторого предприятия. Конечная цель этой задачи формирование таблицы анкетных данных. В программе используется много информации, и ее нужно где то хранить. Поэтому мы будем использовать базу данных. Очевидно, что первой задачей и является разработка базы данных для хранения всей необходимой информации. В зависимости от расположения программы, использующей данные, и самих данных, а также способа разделения данных между несколькими пользователями различают локальные (Paradox, dBase, FoxPro и Access) и удаленные (Interbase Sybase, Oracle и т.д.) базы данных. В данном случае мы будем создавать удалённую базу данных. Данные удалённой базы данных (файлы данных) находятся на одном удалённом устройстве, в качестве которого может выступать диск компьютера.
База данных — это набор файлов (таблиц), в которых находится информация. Как правило, база данных состоит из нескольких таблиц, которые размещают в одном каталоге. Каталог для новой базы данных создается обычным образом, например, при помощи Проводника. Таблицу мы будем создавать, воспользовавшись утилитой IBConsole. Сначала при помощи этой утилиты мы создадим сами таблицы, а затем еще генераторы и триггеры. Генератор – это специальная функция InterBase, с помощью которой создается счетчик для поля базы данных. А триггер нужен для того, чтобы привязать генератор к нужной таблице и к нужному полю.
Таким образом, процесс создания базы данных может быть представлен как последовательность следующих шагов:
· создание каталога;
· создание таблиц;
· создание генераторов;
· создание триггеров.
Следующей задачей является разработка графического интерфейса пользователя клиентских приложений. Говоря понятным языком, данный программный продукт ориентирован на конечного пользователя (в нашем случае на преподавателя), не обладающего высокой квалификацией в области вычислительной техники. Поэтому наше приложение должно обладать простым, удобным, легко осваиваемым интерфейсом, который предоставляет конечному пользователю все необходимые для работы функции и в то же время не дает ему возможность выполнять какие-либо лишние действия.
И последняя наша задача - это связать нашу программу с базой данных, и обеспечить возможность подключиться к удаленной базе данных по сети с любого компьютера.
Итак, чтобы перейти к конечной цели нашего курсового проекта надо разобраться со следующими задачами:
· разработка структуры таблиц базы данных;
· создание таблиц;
· создание генераторов и триггеров;
· связать программу с базой данных, находящейся на удалённом компьютере;
· разработка графического интерфейса пользователя клиентских приложений;
· обеспечить работоспособность программного продукта на любом компьютере.
Описание входной информации
В данной программе в качестве входной информации выступают данные в таблицу: Анкета. В этой таблице хранится фамилия, имя, отчество, пол, рост, вес, фото, дата рождения, адрес(страна), адрес(область), адрес(город), адрес(улица), адрес(квартира), адрес(индекс), адрес(телефон), место рождения(страна), место рождения(область), место рождения(город), гражданство, образование, номер страхового свидетельства, ИНН, серия трудовой книжки, номер трудовой книжки, номер паспорта, серия паспорта, выдан паспорт, дата выдачи паспорта.
Визуально ввод данных обеспечивается следующими компонентами:
· TRadioButton – визуальный компонент, позволяющий зафиксировать одно значение, из нескольких, принадлежащих к одной группе.
· TEdit – однострочный текстовый редактор, при помощи которого вводится нужная информация, например пароль и имя преподавателя.
· TDBEdit – компонент, имеющий такие же свойства как и TEdit, но с дополнительной возможностью связи с каким либо полем таблицы базы данных;
· TComboBox – визуальный компонент, позволяет выбрать одно значение из списка.
Описание выходной информации
Выходной информацией являются отчёты, которые формируются программой из записей, содержащейся в базе данных.
Пример отчета
Дата: 2019-05-28, просмотров: 192.