Автоматизировать процесс учета, при этом сохранить простоту и удобство управления процессом. В целом, программа должна хранить информацию, предоставить возможность просмотра и редактирования данных. Помимо этого нужно реализовать поиск по имени. Что собственно и было реализовано в моей курсовой работе, а также были добавлены некоторые дополнительные функции, которые будут описаны далее в разделе «Алгоритм решения задачи».
Алгоритм решения задачи
Программа написана на языке программирования Delphi версии 6.0. При написании программы использовались лишь стандартные компоненты интегрированной среды разработки. Технологии и типы, которые получили реализации в проекте:
- Borland Database Engine (BDE) – орган управления базами данных (в нашем случае мы используем БД Paradox версии 7.0).
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Buttons, Menus, DB, DBTables, ImgList – юниты, с помощью которых я получил доступ к процедурам и фукнциям работы с операционной системой, меню, базами данных, визуальными компонентами Delphi.
- String, Integer, Boolean – типы данных, на которых основана данная программа. Соответственно строковый, целочисленный, логический типы.
При написании курсовой работы я обращался к использованию визуальных и не визуальных компонентов. Давайте, перечислим всех их:
- TButton — обычная кнопка, нам нужно лишь ее событие onClick(для обработки).
- TCombobox – представляет собой TEdit с выпадающим вниз меню, элементы которого можно программировать.
- TDBGrid – компоненты отображения таблиц базы данных в удобочитаемой форме, в виде сетки ячеек и столбцов.
- TDBNavigator – набор соединенных вместе кнопок навигации по таблице БД. Действия: Назад, Вперед, Вставить, Удалить, Сохранить, Отменить и т.д. над ячейками и строками таблиц.
- TDatasource – компонент управления потоком данных между базой данных и программой.
- TTable – является виртуальной таблицей, копией физической таблицы, все операции над ней затем сохраняются в физической таблице.
- TImage – список графических изображений.
- TQuery – компоненты для реализации в своей программе SQL-запросов. В данном проекте только для реализации выборки из других таблиц БД.
БД создавалась с помощью SQL Explorer. Имя псевдонима – “mishel ”. Тип драйвера «STANDART».
После создания локальных БД, я приступил к написанию исходного кода будущей программы. Заострять особого внимания на данной стадии разработки мы не будем, а сразу перейдем к рассмотрению принципа работы продукта.
После запуска на экране форма с размещенными на ней визуальными компонентами работы с базами данных, кнопками запроса и компонентами для вывода изображения. Имена компонентов остались стандартными, т.е. не менялись с целью наглядного просмотра кода. Активной таблица делается с помощью установки свойства Active в значение true.
Поиск в программе реализован при помощи SQL запроса. Задавая определенные критерии в появившемся окне, мы можем без проблем отыскать интересующую нас информацию.
Добавление новых людей в базу осуществить можно двумя способами:
- Нажав на панели на кнопку «Вставить» и вручную заполнить все поля.
- Далее нажать «Готово», и программа сама заполнит и создаст за вас новую запись в БД.
Завершение работы программы осуществляется либо нажатием кнопки «крестик» в заголовке программы, либо выбором кнопки «EXIT.
Инструкция пользователя
В принципе программа предоставляет очень простой и понятный интерфейс, никаких загвоздок или непонятных пунктов там нет, так что считаю, что зацикливаться на данном разделе не стоит. Все кнопки подписаны.
Исходный код
unit UnitMishel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, DB, DBTables, ExtCtrls, Grids, DBGrids,
ImgList, jpeg, ShellCtrls, Outline, DirOutln, FileCtrl;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
Label4: TLabel;
DBNavigator1: TDBNavigator;
Table2: TTable;
DBGrid1: TDBGrid;
Button1: TButton;
Query1: TQuery;
Button2: TButton;
Button3: TButton;
DataSource3: TDataSource;
DBEdit5: TDBEdit;
Label5: TLabel;
Image1: TImage;
DBMemo1: TDBMemo;
DBMemo2: TDBMemo;
DirectoryListBox1: TDirectoryListBox;
DriveComboBox1: TDriveComboBox;
procedure DBEdit5KeyPress(Sender: TObject; var Key: Char);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure Table1BeforeOpen(DataSet: TDataSet);
procedure Table1AfterScroll(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
BmpPath: string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Close
end;
procedure TForm1.Button2Click(Sender: TObject);
var
nickname: ShortString;
begin
nickname:=InputBox(‘Sample of information from DB’,
‘Enter name of star and click on OK.’, »);
if nickname <> » then
begin
with form1.Query1 do begin
Close;
SQL.Clear;
SQL.Add(‘SELECT * from stars where ‘);
SQL.Add(‘upper(Nickname) like «%’ + UpperCase(nickname) + ‘%» ‘);
SQL.Add(‘ORDER BY Nickname’);
Open;
end;
if Query1.RecordCount = 0 then
ShowMessage(‘In a database there is not record’);
end;
image1.Picture.LoadFromFile(‘D:\000Student\STARS\DATA\’ + DBEdit5.Text);
//Edit2.Text := DirectoryListBox1.Directory;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Query1.Active := false;
Query1.SQL.Clear;
Query1.SQL.Text := ‘select * from stars order by nickname’;
Query1.Active := true;
end;
procedure ShowFoto(foto: string);
begin
try
Form1.Image1.Picture.LoadFromFile(BmpPath+foto);
Form1.Image1.Visible:=True;
except
on EFOpenError do
begin
ShowMessage(‘picture ‘+foto+’ not found.’) ;
end;
end;
end;
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if form1.DBEdit5.Visible then
begin
form1.DBEdit5.Visible:= False;
form1.Label5.Visible:=False;
end;
if Form1.DBEdit5.Text <> »
then ShowFoto(Form1.DBEdit5.Text)
else form1.Image1.Visible:=False;
end;
procedure TForm1.DBEdit5KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then
if Form1.DBEdit5.Text <>»
then ShowFoto(Form1.DBEdit5.Text)
else form1.Image1.Visible:=False;
end;
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
//image1.Picture.LoadFromFile(DirectoryListBox1.Directory + ‘\’ + DBEdit5.Text);
//’D:\000Student\STARS\DATA\’ + DBEdit5.Text);
case Button of
nbinsert: begin
Image1.Visible:=False;
DBEdit5.Visible:=True;
Label5.Visible:=True;
end;
nbEdit: begin
DBEdit5.Visible:=True;
Label5.Visible:=True;
end;
end;
end;
procedure TForm1.Table1BeforeOpen(DataSet: TDataSet);
begin
BmpPath:=ExtractFilePath(ParamStr(0))+’data\’;
end;
end.
Блок-схема