Файл: Проектирование реализации операций бизнес- процесса «Движение библиотечного фонда».pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 26.05.2023

Просмотров: 339

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Приложение 1

unit Unit1;

interface

uses

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

Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBTables, StdCtrls, Mask,

ComCtrls, Menus,ShellAPI,DateUtils,IniFiles;

type

TForm1 = class(TForm)

DBGrid1: TDBGrid;

DataSource1: TDataSource;

Table1: TTable;

Button1: TButton;

Button2: TButton;

Edit2: TEdit;

Edit3: TEdit;

Button3: TButton;

Button4: TButton;

Button5: TButton;

DataSource2: TDataSource;

Table2: TTable;

DBGrid2: TDBGrid;

Button6: TButton;

MaskEdit3: TMaskEdit;

MaskEdit4: TMaskEdit;

Button7: TButton;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

DataSource3: TDataSource;

Table3: TTable;

Button8: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

DBGrid3: TDBGrid;

MainMenu1: TMainMenu;

Options1: TMenuItem;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

Button9: TButton;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Button9Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

i:integer;

implementation

uses Unit2, Unit3;

{$R *.dfm}

function ReadIni(ASection, AString : String) : String;

var //Функция чтения данных из INI файла

sIniFile: TIniFile;

sPath : String[60];

const

S = 'xyz'; { стандартная строка для выдачи ошибок чтения }

begin

sPath:={'c:\Library_DB'}ExtractFileDir(Application.ExeName);

sIniFile := TIniFile.Create(sPath + '\Options.INI');

Result := sIniFile.ReadString(ASection, AString, S); { [Section] String=Value }

sIniFile.Free;

end;

procedure WriteIni(ASection, AString, AValue : String);

var //Процедура записи данных в INI файл

sIniFile: TIniFile;

sPath : String[60];

begin

sPath:={'c:\Library_DB'}ExtractFileDir(Application.ExeName);

sIniFile := TIniFile.Create(sPath + '\Options.INI');

sIniFile.WriteString(ASection, AString, AValue);; { [Section] String=Value }

sIniFile.Free;

end;

procedure TForm1.FormCreate(Sender: TObject);

var t3:Longint;

begin

t3:=GetTickCount div 1000; //Вркмя показа заставки

while (GetTickCount div 1000)<t3+3 do;

//Подключение таблиц и их активизация

Table1.DatabaseName:=ExtractFileDir(Application.ExeName){'c:\Library_DB'}+'\DB\';

Table1.TableName:='DB_Books.db';

Table2.DatabaseName:=ExtractFileDir(Application.ExeName){'c:\Library_DB'}+'\DB\';

Table2.TableName:='DB_Readers.db';

Table3.DatabaseName:=ExtractFileDir(Application.ExeName){'c:\Library_DB'}+'\DB\';

Table3.TableName:='DB_Out.db';

Table1.Active:=true;

Table2.Active:=true;

Table3.IndexName:='qqq'; //Связывание таблиц

Table3.IndexFieldNames:='Number_R';

Table3.MasterFields:='Number';

Table3.Active:=true;

RadioButton1.Checked:=true;

//Установки для отображения таблиц

DBGrid1.Columns.Items[1].Width:=200;

DBGrid1.Columns.Items[2].Width:=200;


DBGrid1.Columns.Items[3].Width:=200;

DBGrid1.Columns.Items[4].Width:=70;

DBGrid2.Columns.Items[1].Width:=200;

DBGrid2.Columns.Items[2].Width:=200;

DBGrid3.Columns.Items[0].Width:=75;

DBGrid3.Columns.Items[1].Visible:=false;

DBGrid3.Columns.Items[2].Width:=200;

DBGrid3.Columns.Items[3].Width:=80;

DBGrid3.Columns.Items[4].Width:=85;

DBGrid3.Columns.Items[5].Width:=85;

DBGrid1.Columns[0].Title.Caption:='Номер';

DBGrid1.Columns[1].Title.Caption:='Название';

DBGrid1.Columns[2].Title.Caption:='Автор';

DBGrid1.Columns[3].Title.Caption:='Издательство';

DBGrid1.Columns[4].Title.Caption:='Год издания';

DBGrid2.Columns[0].Title.Caption:='Номер';

DBGrid2.Columns[1].Title.Caption:='Ф.И.О';

DBGrid2.Columns[2].Title.Caption:='Адрес';

DBGrid2.Columns[3].Title.Caption:='Телефон';

DBGrid3.Columns[0].Title.Caption:='Номер книги';

DBGrid3.Columns[2].Title.Caption:='Название';

DBGrid3.Columns[3].Title.Caption:='Дата выдачи';

DBGrid3.Columns[4].Title.Caption:='Дата возврата';

DBGrid3.Columns[5].Title.Caption:='Сумма штрафа';

Button9.Click; //Пересчет и заполнение поля Fine

CreateDir(ExtractFileDir(Application.ExeName)+'\Temp');

end;

procedure TForm1.Button1Click(Sender: TObject);

begin //Удаление записей из таблицы DB_Books.db (Table1)

if Table1.RecordCount>0 then

if MessageDlg('Удалить запись о данной книге?',mtWarning,[mbYes,mbNo],0)= mrYes then

Table1.Delete

else Abort;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin//Вызов формы для заполнения данных о новой книге

Form2.WindowState:=wsNormal;

Form2.Show;

Form2.Button2.Visible:=false;

Form2.Button1.Visible:=true;

Form2.Button3.Visible:=false;

Form2.Caption:='Добавление книги в каталог';

end;

procedure TForm1.Button4Click(Sender: TObject);

begin //Дабавление данных о новом читателе

if RadioButton2.Checked=true then Abort;

if (trim(MaskEdit3.Text)<>'') and (trim(Edit2.Text)<>'') and (trim(Edit3.Text)<>'') then

begin

if Form1.Table2.Locate('Number',trim(MaskEdit3.Text),[])=true then

begin

MessageDlg('Билет с таким номером уже существует!',mtError,[mbOK],0);

Abort;

end;

if Form1.Table2.Locate('FNP',trim(MaskEdit3.Text),[])=true then

begin

MessageDlg('Читатель с такой фамилией уже зарегестрироан',mtInformation,[mbOK],0);

Abort;

end;

Form1.Table2.Insert;

Form1.Table2.FieldByName('Number').AsInteger:=strtoint(trim(MaskEdit3.Text));

Form1.Table2.FieldByName('FNP').AsString:=trim(Edit2.Text);

Form1.Table2.FieldByName('Adress').AsString:=trim(Edit3.Text);

if trim(MaskEdit4.Text)<>'' then Form1.Table2.FieldByName('Phone').AsInteger:=strtoint(trim(MaskEdit4.Text));

Form1.Table2.Post;

end

else MessageDlg('Заполните необходимые поля!',mtInformation,[mbOK],0);

end;

procedure TForm1.Button3Click(Sender: TObject);

begin //Поиск читателя по введенным реквизитам

if trim(MaskEdit3.Text)<>'' then

begin

Form1.Table2.Locate('Number',trim(MaskEdit3.Text),[loPartialKey]);

Abort;

end;

if trim(Edit2.Text)<>'' then

begin

Form1.Table2.FilterOptions:=[foCaseInsensitive];

Form1.Table2.Filter:='FNP = '''+trim(Edit2.Text)+'*''';

Form1.Table2.Filtered:=true;

end;

if trim(Edit2.Text)='' then Form1.Table2.Filtered:=false;

if trim(Edit3.Text)<>'' then

begin

Form1.Table2.Locate('Adress',trim(Edit3.Text),[loPartialKey,loCaseInsensitive ]);

Abort;

end;

if trim(MaskEdit4.Text)<>'' then

begin

Form1.Table2.Locate('Phone',trim(MaskEdit4.Text),[loPartialKey]);

Abort;

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin //Удаление записи о читателе (Table2) и


//каскадное удаление всех подчиненных записей из Table3

if (RadioButton1.Checked=true) and (Table2.RecordCount>0) then

if MessageDlg('Удалить запись о данном читателе?',mtWarning,[mbYes,mbNo],0)= mrYes then

begin

Table3.First;

for i:=1 to Table3.RecordCount do

begin

Table3.Delete;

Table3.Next;

end;

Table2.Delete

end

else Abort;

end;

procedure TForm1.RadioButton1Click(Sender: TObject);

begin//Показ таблицы "Список читателей"

DBGrid2.Visible:=true;

DBGrid3.Visible:=false;

Label5.Caption:='Список читателей';

end;

procedure TForm1.RadioButton2Click(Sender: TObject);

begin//Показ списка книг взятых указанным читателем

DBGrid2.Visible:=false;

DBGrid3.Visible:=true;

Label5.Caption:='Читатель: '+Form1.Table2.FieldByName('FNP').AsString+'. Список взятых книг:';

end;

procedure TForm1.Button6Click(Sender: TObject);

begin//Показ Form3 для заполнения ее

//полей редактирования

if RadioButton2.Checked=true then

begin

Form3.WindowState:=wsNormal;

Form3.Show;

Form3.Button1.Visible:=true;

Form3.Button2.Visible:=false;

Form3.Caption:='Заполнение карточки читателя';

end;

end;

procedure TForm1.Button8Click(Sender: TObject);

begin //Удаление книги из списка книг взятых

//указанным читателем

if (RadioButton2.Checked=true) and (Table3.RecordCount>0) then

if MessageDlg('Удалить эти данные?',mtWarning,[mbYes,mbNo],0)= mrYes then

Table3.Delete

else Abort;

end;

procedure TForm1.Button7Click(Sender: TObject);

begin //Вызов формы Form2 для поиска книг по имени автора

Form2.WindowState:=wsNormal;

Form2.Show;

Form2.Button2.Visible:=true;

Form2.Button1.Visible:=false;

Form2.Button3.Visible:=false;

Form2.Caption:='Поиск книг';

end;

procedure TForm1.N1Click(Sender: TObject);

var i2,t,i3:integer;HTMLStr: TStringList;

n_r,sh: array [1..100000] of integer;

path:string;

begin

t:=-10; //Первая строчка, первого пункта главного меню

i3:=1; //Вывод на экран списка должников и суммы штрафа

for i2:=1 to i3 do

sh[i2]:=0;

Form1.Table3.IndexName:=''; //Удаление связи таблиц

Form1.Table3.IndexFieldNames:='';

Form1.Table3.MasterFields:='';

Form1.Table3.FilterOptions:=[foCaseInsensitive];

Form1.Table3.Filter:='Fine > 0'; //Установка фильтра

Form1.Table3.Filtered:=true; //Долг>0

Form1.Table3.IndexFieldNames:='Number_r';

Form1.Table3.First;//Просмотр всех записей отфильтрованной

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

for i2:=1 to Form1.Table3.RecordCount do

begin

if Form1.Table3.FieldByName('Number_r').AsInteger<>t then

begin

n_r[i3]:=Form1.Table3.FieldByName('Number_r').AsInteger;

t:=n_r[i3]; //Добавление должника в массив

i3:=i3+1;

end;

sh[i3-1]:=sh[i3-1]+Form1.Table3.FieldByName('Fine').AsInteger;

//Сумма штрафа для данного должника

Form1.Table3.Next;

end;

Form1.Table3.Filtered:=false; //Отмена фильтрации

Form1.Table3.IndexName:='qqq'; //и востановление связи таблиц

Form1.Table3.IndexFieldNames:='Number_R';

Form1.Table3.MasterFields:='Number';

HTMLStr:=TStringList.Create;//Создание файла отчета

HTMLStr.Clear; //формат:HTML

HTMLStr.Add('<HTML>');

HTMLStr.Add('<HEAD>');

HTMLStr.Add('<TITLE>'+''+'</TITLE>');

HTMLStr.Add('</HEAD>');

HTMLStr.Add('<H1 align=center> Должники и сумма штрафа на '+datetostr(Date)+'</H1>');


HTMLStr.Add('<table border=1 cellspacing=0 cellpadding=0 width=100%>');

HTMLStr.Add('<tr>');

HTMLStr.Add('<td width=10%>'+'<b>Номер</b>'+'</td>');

HTMLStr.Add('<td width=70%>'+'<b>Ф.И.О</b>'+'</td>');

HTMLStr.Add('<td width=20%>'+'<b>Сумма штрафа</b>'+'</td>');

HTMLStr.Add('</tr>');

for i2:=1 to i3-1 do

begin

Form1.Table2.Locate('Number',n_r[i2],[]);

HTMLStr.Add('<tr>');

HTMLStr.Add('<td>'+inttostr(i2)+'</td>');

HTMLStr.Add('<td>'+Table2.Fields[1].DisplayText+'</td>');

HTMLStr.Add('<td>'+inttostr(sh[i2])+'</td>');

HTMLStr.Add('</tr>');

end;

HTMLStr.Add('</table>');

HTMLStr.Add('</BODY>');

HTMLStr.Add('</HTML>');

path:=ExtractFileDir(Application.ExeName)+'\Temp\Fine.html';

HTMLStr.SaveToFile({'c:\1.html'}path); //Сохранение на жесткий диск

HTMLStr.Free;

ShellExecute(Application.MainForm.Handle,PChar('open'),PChar({'c:\1.html'}path),nil,nil,SW_SHOWNORMAL);

//и вывод на экран

end;

procedure TForm1.N2Click(Sender: TObject);

begin //Вторая строчка, первого пункта главного меню

//Вызов второй формы для поиска читателей, которые

//должны сдать книги в определенную дату

Form3.WindowState:=wsNormal;

Form3.Show;

Form3.Button1.Visible:=false;

Form3.Button2.Visible:=true;

Form3.Caption:='Поиск читателей, которые должны сдать книги в определенную дату';

end;

procedure TForm1.N3Click(Sender: TObject);

begin //Третья строчка, первого пункта главного меню

//Вызов второй формы для

//поиска всех книг определенного автора

Form2.WindowState:=wsNormal;

Form2.Show;

Form2.Button3.Visible:=true;

Form2.Button1.Visible:=false;

Form2.Button2.Visible:=false;

Form2.Caption:='Поиск всех книг определенного автора';

end;

procedure TForm1.Button9Click(Sender: TObject);

var nd,f,i2:integer;

begin //Пересчет суммы штрафа для всех должников

//на сегодняшний день

try

f:=strtoint(ReadIni('Fine','Fine'));

except

MessageDlg('Файл Options.ini не найден',mtError,[mbOK],0);

WriteIni('Fine','Fine',InputBox('Размер штрафа','Введите штраф, взимаемый за один день пользования книгой дольше установленного срока','10'));

end;

Form1.Table3.IndexName:=''; //

Form1.Table3.IndexFieldNames:='';

Form1.Table3.MasterFields:='';

Form1.Table3.First;

for i2:=1 to Form1.Table3.RecordCount do

begin

if strtodate(Form1.Table3.FieldByName('Date_return').AsString)<Date then

begin

nd:=DaysBetween(strtodate(Form1.Table3.FieldByName('Date_return').AsString),Date);

Form1.Table3.Edit;

Form1.Table3.FieldByName('Fine').AsInteger:=nd*f;

Form1.Table3.Post;

end;

Form1.Table3.Next;

end;

Form1.Table3.IndexName:='qqq'; //

Form1.Table3.IndexFieldNames:='Number_R';

Form1.Table3.MasterFields:='Number';

end;

procedure TForm1.N5Click(Sender: TObject);

begin //Изменение размера штрафа

//(запись в INI файл Options.ini)

WriteIni('Fine','Fine',InputBox('Размер штрафа','Введите штраф, взимаемый за один день пользования книгой дольше установленного срока',ReadIni('Fine','Fine')));

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Application.HelpFile:={'c:\Library_DB\'}ExtractFileDir(Application.ExeName)+'\Help_User';

Application.HelpCommand(Help_Contents,0);

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Application.HelpFile:={'c:\Library_DB\'}ExtractFileDir(Application.ExeName)+'\Help_Prog';


Application.HelpCommand(Help_Contents,0);

end;

end.

unit Unit2;

interface

uses

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

Dialogs, Mask, StdCtrls,unit1, DB, DBTables,Printers,ShellAPI;

type

TForm2 = class(TForm)

Edit3: TEdit;

Edit4: TEdit;

MaskEdit1: TMaskEdit;

Edit1: TEdit;

MaskEdit2: TMaskEdit;

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button2: TButton;

Button3: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin//Добавление новой (записи) книги в базу данных Table1

if (trim(MaskEdit1.Text)<>'') and (trim(Edit1.Text)<>'')

{and (trim(Edit3.Text)<>'') and (trim(Edit4.Text)<>'') and

(trim(MaskEdit2.Text)<>'')} then

begin

if Form1.Table1.Locate('Number',trim(MaskEdit1.Text),[])=true then

begin

MessageDlg('Книга с таким номером уже существует!',mtError,[mbOK],0);

Abort;

end;

Form1.Table1.Insert;

Form1.Table1.FieldByName('Number').AsInteger:=strtoint(trim(MaskEdit1.Text));

Form1.Table1.FieldByName('Title').AsString:=trim(Edit1.Text);

Form1.Table1.FieldByName('Writer').AsString:=trim(Edit3.Text);

Form1.Table1.FieldByName('Publish').AsString:=trim(Edit4.Text);

if (trim(MaskEdit2.Text)<>'') then Form1.Table1.FieldByName('Year').AsInteger:=strtoint(trim(MaskEdit2.Text));

Form1.Table1.Post;

end

else MessageDlg('Заполните необходимые поля!',mtInformation,[mbOK],0);

end;

procedure TForm2.Button2Click(Sender: TObject);

begin //Фильтрация по имени автора

if trim(Edit3.Text)<>'' then

begin

Form1.Table1.FilterOptions:=[foCaseInsensitive];

Form1.Table1.Filter:='Writer = '''+trim(Edit3.Text)+'*''';

Form1.Table1.Filtered:=true;

end;

if trim(Edit3.Text)='' then Form1.Table1.Filtered:=false;

end;

procedure TForm2.Button3Click(Sender: TObject);

var i2:integer;HTMLStr: TStringList;

path:string;

begin //Сохранение в файл и вывод на экран списка всех книг

//указанного автора

if trim(Edit3.Text)='' then

begin

MessageDlg('Введите имя автора!',mtInformation,[mbOK],0);

Abort;

end;

Form1.Table1.FilterOptions:=[foCaseInsensitive];

Form1.Table1.Filter:='Writer = '''+trim(Edit3.Text)+'''' ;

Form1.Table1.Filtered:=true;

if Form1.Table1.RecordCount=0 then

begin

MessageDlg('Не найдена ни одна книга данного автора!',mtInformation,[mbOK],0);

Form1.Table1.Filtered:=false;

Abort;

end;

HTMLStr:=TStringList.Create;//

HTMLStr.Clear;

HTMLStr.Add('<HTML>');

HTMLStr.Add('<HEAD>');

HTMLStr.Add('<TITLE>'+''+'</TITLE>');

HTMLStr.Add('</HEAD>');

HTMLStr.Add('<H1 align=center> Автор: '+ Edit3.Text+'. Cписок книг:'+'</H1>');

HTMLStr.Add('<table border=1 cellspacing=0 cellpadding=0 width=100%>');

HTMLStr.Add('<tr>');

HTMLStr.Add('<td width=10%>'+'<b>Номер</b>'+'</td>');

HTMLStr.Add('<td width=70%>'+'<b>Название</b>'+'</td>');

HTMLStr.Add('</tr>');

for i2:=1 to Form1.Table1.RecordCount do

begin

HTMLStr.Add('<tr>');

HTMLStr.Add('<td>'+inttostr(i2)+'</td>');

HTMLStr.Add('<td>'+Form1.Table1.Fields[1].DisplayText+'</td>');

HTMLStr.Add('</tr>');

Form1.Table1.Next;

end;

HTMLStr.Add('</table>');

HTMLStr.Add('</BODY>');

HTMLStr.Add('</HTML>');

path:=ExtractFileDir(Application.ExeName)+'\Temp\list.html';