Информационная система "Каталог игрушек" - Курсовая работа

бесплатно 0
4.5 75
Разработка информационной системы "Каталог игрушек", в которой содержится информация об игрушках с фотографиями и полным описанием согласно заданию. Отладка и тестирование системы. Создания отчетов в MS Word и в MS Excel с помощью шаблонов и Delphi 7.


Аннотация к работе
Постановка задания Проектирование 2.

Список литературы
Приложение

Введение информационный тестирование отладка

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

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

Несколько лет назад рядовому программисту оставалось только мечтать о создании собственных программ, работающих в среде Windows, т.к. единственным средством разработки был Borland C for Windows, явно ориентированный на профессионалов, обладающих серьезными знаниями и опытом.

Delphi - это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi - строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

Существует четыре варианта пакета Borland Delphi 7 Studio: Personal, Professional, Enterprise и Architect. Каждый из этих комплектов включает стандартный набор средств, обеспечивающих разработку высокоэффективных программ различного назначения, в том числе для работы с базами данных. Вместе с тем, чем выше уровень комплекта (от Personal до Architect), тем большие возможности он предоставляет программисту. Так, комплект Enterprise позволяет разрабатывать приложения работы с удаленными базами данных (например, INTERBASE), а комплект Personal - нет.

1.

Постановка задания

Создать информационную систему, согласно своего варианта. Программа должна быть реализована по технологии клиент-сервер с использованием СУБД MYSQL или SQL Server.

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

Программа имеет привлекательную форму-заставку, которая содержит информацию о программе (название и версия), год создания на фоне произвольного рисунка. Форма должна иметь скругляющиеся углы.

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

Программа строится на основе MDI интерфейса. Главная форма должна иметь меню, панель инструментов, строка статусу. Строка состояния содержит дату/ время, состояние клавиш NUMLOCK, CAPSLOCK.

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

Формы должны иметь единый внешний стиль оформления, средства защиты программы от ошибок пользователя (шаблоны ввода, выпадающие списки с набором значений, календари, ограничение ввода определенного набора символов).

Области задания условий фильтрации должны отображаться вверху текущей формы.

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

Программа должна иметь систему помощи и инсталлятор для установки на компьютер.

2. Проектирование

2.1 Проектирование данных

База данных «Toys» имеет две таблицы. Таблица «Vidy» для хранения информации о видах игрушек; таблица «Igra» для хранения подробной информации об игрушках.

Эти таблицы связаны между собой по полю id_grup.

Структура базы данных: Таблица 1 - Структура таблицы Vidy

Название поля Тип поля Описание поля id_grup int номер вида, ключевое, счетчик id_nom int номер вида nazv_grup varchar(20) название вида

Таблица 2 - Структура таблицы Igra

Название поля Тип поля Описание поля shifr int ключевое поле id_grup int поле для связи nazv varchar(15) название strana varchar(15) страна производитель material varchar(20) материал cena decimal(7, 2) цена foto image фото игрушки opisanie text описание игрушки

Связывание таблиц проходит по полям id_grup.

2.2 Проектирование функции

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

Рисунок 1 - Форма-регистрация

После ввода всех необходимых данных открывается главная форма «Каталог игрушек» для просмотра, редактирования, поиска, сортировки, добавления и удаления данных.

Рисунок 2 - Главная форма

Редактирование главной таблицы можно осуществить в самой сетке. А редактирование подчиненной таблицы осуществляется только после двойного клика на нужной записи.

Рисунок 3 - Форма редактирование данных

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

Для добавления данных в подчиненную таблицу нужно нажать на кнопку «Добавить» под второй сеткой. Открывается форма добавления данных. После заполнения полей необходимо кликнуть на кнопку «Сохранить». Данные отобразятся во второй сетке.

Рисунок 4 - Форма добавления данных

Для удаления данных нужно нажать на кнопку «Удалить» и подтвердив запрос удаления, запись будет удалена.

Для реализации поиска данных нужно нажать на кнопку «Поиск данных». С правой стороны окна отобразится панель поиска, в которой нужно ввести условия и нажать на соответствующую кнопку. При этом найденные записи будут отображены во второй сетке.

Рисунок 5 - Панель поиска данных

В программе есть возможность сформировать отчеты в MS Word и MS Excel.

В отчет можно вывести одну активную запись, все записи и отобранные записи.

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

Рисунок 6 - Информационная панель

Меню программы помогает быстрее выполнить определенные операции над данными.

Рисунок 7 - Меню программы

После отображения панели поиска в меню появляется новый пункт «Поиск данных».

Рисунок 8 - Меню программы после открытия панели поиска данных

3. Программная реализация

Код формы регистрации unit Unit2;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, STDCTRLS, inifiles, stohtmlhelp;

type

TFORM2 = class(TFORM)

GROUPBOX1: TGROUPBOX;

GROUPBOX2: TGROUPBOX;

Edit1: TEDIT;

Label1: TLABEL;

Edit2: TEDIT;

Label2: TLABEL;

Edit3: TEDIT;

Label3: TLABEL;

Edit4: TEDIT;

Label4: TLABEL;

Button1: TBUTTON;

Button2: TBUTTON;

rocedure Button2Click(Sender: TOBJECT);

procedure Button1Click(Sender: TOBJECT);

procedure FORMSHOW(Sender: TOBJECT);

procedure FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);

procedure FORMCREATE(Sender: TOBJECT);

procedure FORMKEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

private

{ Private declarations } public

{ Public declarations } end;

var

Form2: TFORM2;

login, password, server, port:string;

implementation

{$R *.dfm} procedure TFORM2.Button2Click(Sender: TOBJECT);

begin exitprocess(0);

end;

procedure TFORM2.Button1Click(Sender: TOBJECT);

begin login:=edit1.Text;

password:=edit2.Text;

server:=edit3.Text;

port:=edit4.Text;

close;

end;

procedure TFORM2.FORMSHOW(Sender: TOBJECT);

begin

Left:= (Screen.Width - Width)div 2;

Top:= (Screen.Height - Height)div 2;

ANIMATEWINDOW(Handle, 1000, $10 OR $20000);

if edit1.Text"" then edit2.SETFOCUS;

end;

procedure TFORM2.FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);

var ini:tinifile;

begin ini:=tinifile.Create(extractfilepath(application.EXENAME) "file.ini");

ini.writestring("Components","loginname",edit1.Text);

ini.writestring("Components","servername",edit3.Text);

ini.writestring("Components","portname",edit4.Text);

ini.free;

ANIMATEWINDOW(Handle, 1000, $10 OR $10000);

end;

procedure TFORM2.FORMCREATE(Sender: TOBJECT);

var ini:tinifile;

begin ini:=tinifile.create(extractfilepath(application.exename) "file.ini");

edit1.Text:=ini.readstring("Components","loginname",login);

edit3.Text:=ini.readstring("Components","servername",server);

edit4.Text:=ini.readstring("Components","portname",port);

ini.free;

end;

procedure TFORM2.FORMKEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

begin if key=vk_f1 then application.helpcontext(screen.activecontrol.helpcontext);

end;

end.

Код главной формы: unit Unit1;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGRIDS, DB, ADODB, APPEVNTS, STDCTRLS, DBCTRLS, COMCTRLS, EXTCTRLS, dateutils, Menus, comobj, jpeg, stohtmlhelp;

type

TFORM1 = class(TFORM)

ADOCONNECTION1: TADOCONNECTION;

ADOTABLE1: TADOTABLE;

DATASOURCE1: TDATASOURCE;

DBGRID1: TDBGRID;

ADOTABLE2: TADOTABLE;

DATASOURCE2: TDATASOURCE;

DBGRID2: TDBGRID;

ADOTABLE1id_grup: TAUTOINCFIELD;

ADOTABLE1id_nom: TINTEGERFIELD;

ADOTABLE1nazv_grup: TSTRINGFIELD;

ADOTABLE2shifr: TAUTOINCFIELD;

ADOTABLE2id_grup: TINTEGERFIELD;

ADOTABLE2nazv: TSTRINGFIELD;

ADOTABLE2strana: TSTRINGFIELD;

ADOTABLE2material: TSTRINGFIELD;

ADOTABLE2data: TDATETIMEFIELD;

ADOTABLE2cena: TBCDFIELD;

ADOTABLE2foto: TBLOBFIELD;

ADOTABLE2opisanie: TMEMOFIELD;

APPLICATIONEVENTS1: TAPPLICATIONEVENTS;

Button1: TBUTTON;

Button2: TBUTTON;

Button3: TBUTTON;

Button4: TBUTTON;

DBIMAGE1: TDBIMAGE;

Label1: TLABEL;

DBMEMO1: TDBMEMO;

GROUPBOX1: TGROUPBOX;

Label2: TLABEL;

Edit1: TEDIT;

Label3: TLABEL;

Edit2: TEDIT;

Label4: TLABEL;

Edit3: TEDIT;

Label5: TLABEL;

Edit4: TEDIT;

Label6: TLABEL;

Edit5: TEDIT;

Label7: TLABEL;

Edit6: TEDIT;

Label8: TLABEL;

Edit7: TEDIT;

GROUPBOX2: TGROUPBOX;

Button5: TBUTTON;

DATETIMEPICKER1: TDATETIMEPICKER;

DATETIMEPICKER2: TDATETIMEPICKER;

ADOQUERY1: TADOQUERY;

Button6: TBUTTON;

Button7: TBUTTON;

Button8: TBUTTON;

RADIOGROUP1: TRADIOGROUP;

GROUPBOX3: TGROUPBOX;

Label9: TLABEL;

Label10: TLABEL;

Label11: TLABEL;

Label12: TLABEL;

Label13: TLABEL;

Label14: TLABEL;

Label15: TLABEL;

Label16: TLABEL;

HEADERCONTROL1: THEADERCONTROL;

STATUSBAR1: TSTATUSBAR;

Timer1: TTIMER;

MAINMENU1: TMAINMENU;

N1: TMENUITEM;

N2: TMENUITEM;

N3: TMENUITEM;

N4: TMENUITEM;

N5: TMENUITEM;

N6: TMENUITEM;

N7: TMENUITEM;

N8: TMENUITEM;

Button9: TBUTTON;

Button10: TBUTTON;

POPUPMENU1: TPOPUPMENU;

N10: TMENUITEM;

N11: TMENUITEM;

GROUPBOX4: TGROUPBOX;

Button11: TBUTTON;

Button12: TBUTTON;

POPUPMENU2: TPOPUPMENU;

N12: TMENUITEM;

N13: TMENUITEM;

N9: TMENUITEM;

N14: TMENUITEM;

N16: TMENUITEM;

N17: TMENUITEM;

Word1: TMENUITEM;

Excel1: TMENUITEM;

N15: TMENUITEM;

N18: TMENUITEM;

N19: TMENUITEM;

N20: TMENUITEM;

Word2: TMENUITEM;

N21: TMENUITEM;

N22: TMENUITEM;

Excel2: TMENUITEM;

Jlyfpfgbcm1: TMENUITEM;

N23: TMENUITEM;

Image1: TIMAGE;

N24: TMENUITEM;

N25: TMENUITEM;

N26: TMENUITEM;

N27: TMENUITEM;

ADOQUERY1shifr: TAUTOINCFIELD;

ADOQUERY1id_grup: TINTEGERFIELD;

ADOQUERY1nazv: TSTRINGFIELD;

ADOQUERY1strana: TSTRINGFIELD;

ADOQUERY1material: TSTRINGFIELD;

ADOQUERY1data: TDATETIMEFIELD;

ADOQUERY1cena: TBCDFIELD;

ADOQUERY1foto: TBLOBFIELD;

ADOQUERY1opisanie: TMEMOFIELD;

procedure FORMCREATE(Sender: TOBJECT);

procedure FORMDESTROY(Sender: TOBJECT);

procedure DBGRID1TITLECLICK(Column: TCOLUMN);

procedure APPLICATIONEVENTS1Message(var Msg: TAGMSG;

var Handled: Boolean);

procedure Button1Click(Sender: TOBJECT);

procedure Button2Click(Sender: TOBJECT);

procedure Button3Click(Sender: TOBJECT);

procedure Button4Click(Sender: TOBJECT);

procedure DBGRID2DBLCLICK(Sender: TOBJECT);

procedure Button5Click(Sender: TOBJECT);

procedure Edit4Enter(Sender: TOBJECT);

procedure Edit5Enter(Sender: TOBJECT);

procedure DATETIMEPICKER1Exit(Sender: TOBJECT);

procedure DATETIMEPICKER2Exit(Sender: TOBJECT);

procedure Button6Click(Sender: TOBJECT);

procedure Button7Click(Sender: TOBJECT);

procedure Button8Click(Sender: TOBJECT);

procedure RADIOGROUP1Click(Sender: TOBJECT);

procedure info;

procedure FORMSHOW(Sender: TOBJECT);

procedure ADOTABLE1AFTERDELETE(DATASET: TDATASET);

procedure ADOTABLE1AFTERSCROLL(DATASET: TDATASET);

procedure ADOTABLE2AFTERPOST(DATASET: TDATASET);

procedure ADOTABLE2AFTERDELETE(DATASET: TDATASET);

procedure Timer1Timer(Sender: TOBJECT);

procedure FORMKEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

procedure N2Click(Sender: TOBJECT);

procedure N3Click(Sender: TOBJECT);

procedure N5Click(Sender: TOBJECT);

procedure N6Click(Sender: TOBJECT);

procedure Button9Click(Sender: TOBJECT);

procedure spisok;

procedure N10Click(Sender: TOBJECT);

procedure N11Click(Sender: TOBJECT);

procedure Button11Click(Sender: TOBJECT);

procedure N12Click(Sender: TOBJECT);

procedure Button10Click(Sender: TOBJECT);

procedure N13Click(Sender: TOBJECT);

procedure Button12Click(Sender: TOBJECT);

procedure Spisok1;

procedure N8Click(Sender: TOBJECT);

procedure N14Click(Sender: TOBJECT);

procedure N16Click(Sender: TOBJECT);

procedure N19Click(Sender: TOBJECT);

procedure N21Click(Sender: TOBJECT);

procedure N22Click(Sender: TOBJECT);

procedure N23Click(Sender: TOBJECT);

procedure Edit6KEYPRESS(Sender: TOBJECT; var Key: Char);

procedure Edit7KEYPRESS(Sender: TOBJECT; var Key: Char);

procedure N27Click(Sender: TOBJECT);

procedure N25Click(Sender: TOBJECT);

procedure Button5KEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TFORM1;

w:variant;

s:string;

e:variant;

p:string;

implementation uses Unit2, Unit4, Unit5;

{$R *.dfm} procedure Tform1.Spisok1;

var i,n:integer;

begin

//стараемся подключиться к запущенной программе excel try e:=getactiveoleobject("excel.application");

//если подключение не удачное, запускаем excel except e:=createoleobject("excel.application");

end;

//создаем новую книгу на основе шаблона e.workbooks.add(extractfilepath(application.Exename) "shablon\spisok.xlt");

//становимся на первую запись в списке adoquery1.First;

//счетчику строк присваиваем 2, потому что в первую строку таблицы (шапка)

//находится во второй строке листа книги i:=2;

//n - счетчик записей для столбика № п/п n:=0;

//выделяем шапку таблицы (при условии, что она находится на 2 строке)

//и состоит из колонок a:f e.activeworkbook.sheets.item[3].range["a2:f2"].select;

//копируем выделенную шапку в буфер обмена e.activeworkbook.sheets.item[3].range["a2:f2"].copy;

//в цикле проходим по всем записях запроса while not adoquery1.Eof do begin

//увеличиваем количество строк на 1 i:=i 1;

//увеличиваем счетчик записей на 1 n:=n 1;

//стаим курсор в первую ячейку следующей строки (Аі) e.activeworkbook.sheets.item[3].range["a" inttostr(i)].select;

//вставляем из буфера в следующую строку скопированную шапку e.activeworkbook.sheets.item[3].paste;

//заполняем столбик № п/п в новой строке e.activeworkbook.sheets.item[3].cells[i,1].value:=n;

//заполняем столбик Название в новой строке e.activeworkbook.sheets.item[3].cells[i,2].value:=adoquery1.Fieldbyname("nazv").asstring;

//заполняем столбик Страна в новой строке e.activeworkbook.sheets.item[3].cells[i,3].value:=adoquery1.Fieldbyname("strana").asstring;

//заполняем столбик Материал в новой строке e.activeworkbook.sheets.item[3].cells[i,4].value:=adoquery1.Fieldbyname("material").asstring;

//заполняем столбик Дата рождения в новой строке e.activeworkbook.sheets.item[3].cells[i,5].value:=adoquery1.Fieldbyname("data").asstring;

//заполняем столбик Цена в новой строке e.activeworkbook.sheets.item[3].cells[i,6].value:=adoquery1.Fieldbyname("cena").asstring;

//переходим на следующую запись adoquery1.Next;

end;

//в отдельной строке рассчитываем количество сотрудников в списке

//увеличиваем число строк в таблице на 1 i:=i 1;

//становимся в первую ячейку новой строки e.activeworkbook.sheets.item[3].range["a" inttostr(i)].select;

//в таблице в новую строку вставляем скопированную шапку e.activeworkbook.sheets.item[3].paste;

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

//очищаем скопированную новую строку от данных e.activeworkbook.sheets.item[3].range["a" inttostr(i) ":f" inttostr(i)].clearcontents;

e.visible:=true;

end;

procedure tform1.spisok;

//допоміжні змінні

//r - лічильник рядків

//c - кількість стовпців

//p - лічильник малюнків із Blob поля var r,c,d:integer;

begin w:=createoleobject("word.application");

w.documents.add(extractfilepath(application.Exename) "shablon\spisok.dot");

adoquery1.first;

r:=0;

d:=0;

while not adoquery1.Eof do begin w.activedocument.tables.item(1).rows.add;

r:=r 1;

w.activedocument.tables.item(1).cell(r 1,1).range.text:=inttostr(r);

w.activedocument.tables.item(1).cell(r 1,2).range.text:=adoquery1.Fieldbyname("nazv").asstring;

w.activedocument.tables.item(1).cell(r 1,3).range.text:=adoquery1.Fieldbyname("strana").asstring;

w.activedocument.tables.item(1).cell(r 1,4).range.text:=adoquery1.Fieldbyname("material").asstring;

w.activedocument.tables.item(1).cell(r 1,5).range.text:=adoquery1.Fieldbyname("data").asstring;

w.activedocument.tables.item(1).cell(r 1,6).range.text:=adoquery1.Fieldbyname("cena").asstring;

//перевіряємо, чи заповнене поле foto if adoquery1.Fieldbyname("foto").Asstring "" then

//якщо поле не порожнє begin

//збільшуємо кількість малюнків на 1 d:=d 1;

//зберігаємо вміст поля у файл із ім"ям "pict" з номером N tblobfield(adoquery1.Fieldbyname("foto")).savetofile(extractfilepath(application.Exename) "pict" inttostr(d));

//вставляємо в шосту чарунку збережений малюнок w.activedocument.tables.item(1).cell(r 1,7).range.inlineshapes.Addpicture(Filename:=extractfilepath(application.exename) "pict" inttostr(d), Linktofile:=False,Savewithdocument:=True);

//форматуємо малюнок у таблиці, задаючи ширину й висоту w.activedocument.Inlineshapes.item(d).width:=50;

w.activedocument.Inlineshapes.item(d).height:=60;

//після додавання малюнка в таблицю видаляємо файл deletefile(extractfilepath(application.exename) "pict" inttostr(d));

end;

w.activedocument.tables.item(1).cell(r 1,8).range.text:=adoquery1.Fieldbyname("opisanie").asstring;

//переходимо на наступний запис adoquery1.Next;

end;

//після формування списку робимо вікно word видимим w.visible:=true;

end;

procedure tform1.info;

begin adoquery1.Active:=false;;

adoquery1.sql.clear;

adoquery1.sql.add("select count(shifr) as kolvo, round(max(cena),2) as maxcen, round(min(cena),2) as mincen, round(avg(cena),2) as sredcen from igra");

adoquery1.Active:=true;

label9.Caption:="Общее количество игрушек: " vartostr(adoquery1.fieldbyname("kolvo").Value);

label10.Caption:="Общая максимальная цена: " vartostr(adoquery1.fieldbyname("maxcen").Value);

label11.Caption:="Общая минимальная цена: " vartostr(adoquery1.fieldbyname("mincen").Value);

label12.Caption:="Общая средняя цена: " vartostr(adoquery1.fieldbyname("sredcen").Value);

adoquery1.Active:=false;

adoquery1.sql.clear;

if adotable1.fieldbyname("id_grup").asstring"" then adoquery1.sql.add("select count(shifr) as kolvo, round(max(cena),2) as maxcen, round(min(cena),2) as mincen, round(avg(cena),2) as sredcen from igra where id_grup=" adotable1.fieldbyname("id_grup").asstring) else adoquery1.sql.add("select null as kolvo, null as maxcen, null as mincen, null as sredcen from igra");

adoquery1.Active:=true;

label13.Caption:="Количество игрушек в разделе: " vartostr(adoquery1.fieldbyname("kolvo").Value);

label14.Caption:="Максимальная цена в разделе: " vartostr(adoquery1.fieldbyname("maxcen").Value);

label15.Caption:="Минимальная цена в резделе: " vartostr(adoquery1.fieldbyname("mincen").Value);

label16.Caption:="Средняя цена в разделе: " vartostr(adoquery1.fieldbyname("sredcen").Value);

end;

procedure TFORM1.FORMCREATE(Sender: TOBJECT);

var a:tdatetime;

begin a:=now;

statusbar1.panels[2].Text:="Сегодня: " longdaynames[dayofweek(a)] " " datetostr(a) " " timetostr(a);

adoconnection1.connected:=false;

adoconnection1.CONNECTIONSTRING:="Provider=SQLOLEDB.1;Password=" password ";Persist Security Info=True;User ID=" login ";Initial Catalog=Toys;Data Source=" server "," port;

try adoconnection1.connected:=true;

except begin application.messagebox("Неверные данные регистрации","Ошибка!",mb_ok mb_iconerror);

exitprocess(0);

end;

end;

adotable1.active:=true;

adotable2.active:=true;

end;

procedure TFORM1.FORMDESTROY(Sender: TOBJECT);

begin adoconnection1.Connected:=false;

end;

procedure TFORM1.DBGRID1TITLECLICK(Column: TCOLUMN);

begin if adotable1.Indexfieldnames=column.Fieldname " DESC" then adotable1.Indexfieldnames:=column.Fieldname else adotable1.Indexfieldnames:=column.Fieldname " DESC";

end;

procedure TFORM1.APPLICATIONEVENTS1Message(var Msg: TAGMSG;

var Handled: Boolean); var i: SMALLINT;

begin if (dbgrid1.Focused = true) or (dbgrid2.Focused = true) then if Msg.message = WM_MOUSEWHEEL then begin

Msg.message := WM_KEYDOWN;

Msg.LPARAM := 0;

i := HIWORD(Msg.WPARAM) ;

if i > 0 then

Msg.WPARAM := VK_UP else

Msg.WPARAM := VK_DOWN;

Handled := False;

end;

end;

procedure TFORM1.Button1Click(Sender: TOBJECT);

begin adotable1.Append;

adotable1.FIELDBYNAME("id_grup").FOCUSCONTROL;

end;

procedure TFORM1.Button2Click(Sender: TOBJECT);

begin if adotable1.FIELDBYNAME("id_grup").asstring"" then if application.MESSAGEBOX(pchar("Удалить запись""" adotable1.FIELDBYNAME("nazv_grup").ASSTRING """?"), "Подтвердите",mb_yesno mb_iconquestion)=idyes then adotable1.Delete;

end;

procedure TFORM1.Button3Click(Sender: TOBJECT);

begin adotable2.Append;

adotable2.FIELDBYNAME("shifr").FOCUSCONTROL;

adotable2.Edit;

form4:=tform4.create(nil);

form4.showmodal;

form4.Repaint;

end;

procedure TFORM1.Button4Click(Sender: TOBJECT);

begin if adotable2.FIELDBYNAME("shifr").asstring"" then if application.MESSAGEBOX(pchar("Удалить запись """ adotable2.FIELDBYNAME("nazv").ASSTRING """?"), "Подтвердите",mb_yesno mb_iconquestion)=idyes then adotable2.Delete;

end;

procedure TFORM1.DBGRID2DBLCLICK(Sender: TOBJECT);

begin adotable2.Edit;

form4:=tform4.create(nil);

form4.showmodal;

form4.Repaint;

end;

procedure TFORM1.Button5Click(Sender: TOBJECT);

begin while width<1023 do begin width:=width 5;

left:=(screen.width-width) div 2;

end;

//edit1.Setfocus;

N9.Visible:=true;

end;

procedure TFORM1.Edit4Enter(Sender: TOBJECT);

begin datetimepicker1.Visible:=true;

datetimepicker1.setfocus;

end;

procedure TFORM1.Edit5Enter(Sender: TOBJECT);

begin datetimepicker2.Visible:=true;

datetimepicker2.setfocus;

end;

procedure TFORM1.DATETIMEPICKER1Exit(Sender: TOBJECT);

begin datetimepicker1.Visible:=false;

edit4.Text:=datetostr(datetimepicker1.date);

end;

procedure TFORM1.DATETIMEPICKER2Exit(Sender: TOBJECT);

begin datetimepicker2.Visible:=false;

edit5.Text:=datetostr(datetimepicker2.date);

end;

procedure TFORM1.Button6Click(Sender: TOBJECT);

var s:string;

begin s:="";

//задаем условие поиска для поля "nazv" (текстовое) if edit1.text"" then if s"" then s:=s " and nazv like """ edit1.Text "%""" else s:=s "nazv like """ edit1.Text "%""";

//задаем условие поиска для поля "material" (текстовое) if edit2.text"" then if s"" then s:=s " and material like """ edit2.Text "%""" else s:=s "material like """ edit2.Text "%""";

//задаем условие поиска для поля "strana" (текстовое) if edit3.text"" then if s"" then s:=s " and strana like """ edit3.Text "%""" else s:=s "strana like """ edit3.Text "%""";

//задаем условие поиска для поля "data" (дата от) (дата/время) if edit4.text"" then if s"" then s:=s " and data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """" else s:=s "data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """";

//задаем условие поиска для поля "data" (дата до) (дата/время) if edit5.text"" then if s"" then s:=s " and data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """" else s:=s "data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """";

//задаем условие поиска для поля "cena" (цена от) (числовое) if edit6.text"" then if s"" then s:=s " and cena >= " edit6.Text else s:=s "cena >= " edit6.Text;

//задаем условие поиска для поля "cena" (цена до) (числовое) if edit7.text"" then if s"" then s:=s " and cena <= " edit7.Text else s:=s "cena <= " edit7.Text;

if s="" then exit;

adoquery1.Active:=false;

adoquery1.sql.text:="select * from igra where " s;

adoquery1.Active:=true;

datasource2.Dataset:=adoquery1;

end;

procedure TFORM1.Button7Click(Sender: TOBJECT);

begin edit1.Clear;

edit2.Clear;

edit3.Clear;

edit4.Clear;

edit5.Clear;

edit6.Clear;

edit7.Clear;

edit1.Setfocus;

datasource2.Dataset:=adotable2;

end;

procedure TFORM1.Button8Click(Sender: TOBJECT);

begin

Button7Click(Sender);

while width>800 do begin width:=width-5;

left:=(screen.width-width) div 2;

end;

dbgrid1.Setfocus;

N9.Visible:=false;

end;

procedure TFORM1.RADIOGROUP1Click(Sender: TOBJECT);

begin case radiogroup1.ITEMINDEX of

0: adotable2.mastersource:=datasource1;

1: adotable2.mastersource:=nil;

end;

adotable2.Active:=false;

adotable2.Active:=true;

end;

procedure TFORM1.FORMSHOW(Sender: TOBJECT);

begin info;

end;

procedure TFORM1.ADOTABLE1AFTERDELETE(DATASET: TDATASET);

begin info;

end;

procedure TFORM1.ADOTABLE1AFTERSCROLL(DATASET: TDATASET);

begin info;

end;

procedure TFORM1.ADOTABLE2AFTERPOST(DATASET: TDATASET);

begin info;

end;

procedure TFORM1.ADOTABLE2AFTERDELETE(DATASET: TDATASET);

begin info;

end;

procedure TFORM1.Timer1Timer(Sender: TOBJECT);

var a:tdatetime;

begin a:=now;

statusbar1.panels[2].Text:="Сегодня: " longdaynames[dayofweek(a)] " " datetostr(a) " " timetostr(a);

end;

procedure TFORM1.FORMKEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

begin

//если нажата F1 if key=vk_f1 then

//запускаем соответствующую страницу Помощи application.helpcontext(screen.activecontrol.helpcontext);

if (getkeystate(vk_capital) and 1) = 1 then statusbar1.Panels[0].Text:="Caps Lock" else statusbar1.Panels[0].text:="";

if (getkeystate(vk_numlock) and 1) = 1 then statusbar1.Panels[1].Text:="Num Lock" else statusbar1.Panels[1].text:="";

end;

procedure TFORM1.N2Click(Sender: TOBJECT);

begin adotable1.Append;

adotable1.FIELDBYNAME("id_grup").FOCUSCONTROL;

end;

procedure TFORM1.N3Click(Sender: TOBJECT);

begin adotable2.Append;

adotable2.FIELDBYNAME("shifr").FOCUSCONTROL;

adotable2.Edit;

form4:=tform4.create(nil);

form4.showmodal;

form4.Repaint;

end;

procedure TFORM1.N5Click(Sender: TOBJECT);

begin if adotable1.FIELDBYNAME("id_grup").asstring"" then if application.MESSAGEBOX(pchar("Удалить запись""" adotable1.FIELDBYNAME("nazv_grup").ASSTRING """?"), "Подтвердите",mb_yesno mb_iconquestion)=idyes then adotable1.Delete;

end;

procedure TFORM1.N6Click(Sender: TOBJECT);

begin if adotable2.FIELDBYNAME("shifr").asstring"" then if application.MESSAGEBOX(pchar("Удалить запись """ adotable2.FIELDBYNAME("nazv").ASSTRING """?"), "Подтвердите",mb_yesno mb_iconquestion)=idyes then adotable2.Delete;

end;

procedure TFORM1.Button9Click(Sender: TOBJECT);

begin popupmenu1.popup(form1.left groupbox2.left button9.left,form1.top groupbox2.top button9.top button9.height);

end;

procedure TFORM1.N10Click(Sender: TOBJECT);

begin try w:=getactiveoleobject("word.application");

except w:=createoleobject("word.application");

end;

w.documents.add(extractfilepath(application.exename) "shablon\Anketa1.dot");

w.selection.find.text:="#nazv_vid#";

w.selection.find.replacement.text:=adotable1.fieldbyname("nazv_grup").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#nazv#";

w.selection.find.replacement.text:=adotable2.fieldbyname("nazv").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#strana#";

w.selection.find.replacement.text:=adotable2.fieldbyname("strana").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#material#";

w.selection.find.replacement.text:=adotable2.fieldbyname("material").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#data#";

w.selection.find.replacement.text:=adotable2.fieldbyname("data").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#cena#";

w.selection.find.replacement.text:=adotable2.fieldbyname("cena").value;

w.selection.find.execute(replace:=2);

w.visible:=true;

end;

procedure TFORM1.N11Click(Sender: TOBJECT);

begin if radiogroup1.ITEMINDEX=1 then begin adoquery1.active:=false;

adoquery1.sql.clear;

adoquery1.sql.add("select * from igra");

adoquery1.active:=true;

spisok;

end else application.messagebox("Выберите пункт "Просмотр общим списком"!","Ошибка!",mb_ok mb_iconerror);

end;

procedure TFORM1.Button11Click(Sender: TOBJECT);

begin p:="";

//задаем условие поиска для поля "nazv" (текстовое) if edit1.text"" then if p"" then p:=p " and nazv like """ edit1.Text "%""" else p:=p "nazv like """ edit1.Text "%""";

//задаем условие поиска для поля "material" (текстовое) if edit2.text"" then if p"" then p:=p " and material like """ edit2.Text "%""" else p:=p "material like """ edit2.Text "%""";

//задаем условие поиска для поля "strana" (текстовое) if edit3.text"" then if p"" then p:=p " and strana like """ edit3.Text "%""" else p:=p "strana like """ edit3.Text "%""";

//задаем условие поиска для поля "data" (дата от) (дата/время) if edit4.text"" then if p"" then p:=p " and data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """" else p:=p "data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """";

//задаем условие поиска для поля "data" (дата до) (дата/время) if edit5.text"" then if p"" then p:=p " and data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """" else p:=p "data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """";

//задаем условие поиска для поля "cena" (цена от) (числовое) if edit6.text"" then if p"" then p:=p " and cena >= " edit6.Text else p:=p "cena >= " edit6.Text;

//задаем условие поиска для поля "cena" (цена до) (числовое) if edit7.text"" then if p"" then p:=p " and cena <= " edit7.Text else p:=p "cena <= " edit7.Text;

if p="" then exit;

adoquery1.active:=false;

adoquery1.sql.clear;

adoquery1.sql.add("select * from igra where " p);

adoquery1.active:=true;

spisok;

// else

// application.messagebox("Условия для отчета не заданы","Ошибка!",mb_ok mb_iconstop);

end;

procedure TFORM1.N12Click(Sender: TOBJECT);

begin

// пытаемся подключиться к работающемы Excel try e:=getactiveoleobject("excel.application");

//если подключение не удачное, то запускаем Excel except e:=createoleobject("excel.application");

end;

//создаем новую книгу на основе шаблона e.workbooks.add(extractfilepath(application.Exename) "shablon\Anketa.xlt");

//присваиваем имени листа название игрушки e.activeworkbook.sheets.item[1].name:=adotable2.Fieldbyname("nazv").asstring;

//заменяем имя #nazv_grup# на значение поля nazv_grup e.activeworkbook.sheets.item[1].cells.replace

(what:="#nazv_grup#", replacement:=adotable1.Fieldbyname("nazv_grup").asstring);

//заменяем имя #nazv# на значение поля nazv e.activeworkbook.sheets.item[1].cells.replace

(what:="#nazv#", replacement:=adotable2.Fieldbyname("nazv").asstring);

//заменяем имя #strana# на значение поля strana e.activeworkbook.sheets.item[1].cells.replace

(what:="#strana#", replacement:=adotable2.Fieldbyname("strana").asstring);

//заменяем имя #material# на значение поля strana e.activeworkbook.sheets.item[1].cells.replace

(what:="#material#", replacement:=adotable2.Fieldbyname("material").asstring);

//заменяем имя #data# на значение поля data e.activeworkbook.sheets.item[1].cells.replace

(what:="#data#", replacement:=adotable2.Fieldbyname("data").asstring);

//заменяем имя #cena# на значение поля cena e.activeworkbook.sheets.item[1].cells.replace

(what:="#cena#", replacement:=adotable2.Fieldbyname("cena").asstring);

//делаем видимым окно Excel e.visible:=true;

end;

procedure TFORM1.Button10Click(Sender: TOBJECT);

begin popupmenu2.popup(form1.left groupbox2.Left button10.left,form1.top groupbox2.Top button10.top button10.height);

end;

procedure TFORM1.N13Click(Sender: TOBJECT);

begin if radiogroup1.ITEMINDEX=1 then begin adoquery1.Active:=false;

adoquery1.SQL.clear;

adoquery1.sql.add("select * from igra");

adoquery1.Active:=true;

spisok1;

end else application.messagebox("Выберите пункт "Просмотр общим списком"!","Ошибка!",mb_ok mb_iconerror);

end;

procedure TFORM1.Button12Click(Sender: TOBJECT);

begin s:="";

//если первое поле заполнено if edit1.text"" then

//добавляем условие поиска по полю nazv if s"" then s:=s " and nazv like """ edit1.Text "%""" else s:=s "nazv like """ edit1.Text "%""";

//если второе поле заполнено if edit2.text"" then

//добавляем условие поиска по полю strana if s"" then s:=s " and strana like """ edit2.Text "%""" else s:=s "strana like """ edit2.Text "%""";

//если третье поле заполнено if edit3.text"" then

//добавляем условие поиска по полю material if s"" then s:=s " and material like """ edit3.Text "%""" else s:=s "material like """ edit3.Text "%""";

//задаем условие поиска для поля "data" (дата от) (дата/время) if edit4.text"" then if s"" then s:=s " and data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """" else s:=s "data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """";

//задаем условие поиска для поля "data" (дата до) (дата/время) if edit5.text"" then if s"" then s:=s " and data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """" else s:=s "data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """";

//задаем условие поиска для поля "cena" (цена от) (числовое) if edit6.text"" then if s"" then s:=s " and cena >= " edit6.Text else s:=s "cena >= " edit6.Text;

//задаем условие поиска для поля "cena" (цена до) (числовое) if edit7.text"" then if s"" then s:=s " and cena <= " edit7.Text else s:=s "cena <= " edit7.Text;

//проверяем, заданно ли условие поиска

//если условие задано if s="" then exit;

adoquery1.active:=false;

adoquery1.sql.clear;

adoquery1.sql.add("select * from igra where " s);

adoquery1.active:=true;

spisok1;

end;

procedure TFORM1.N8Click(Sender: TOBJECT);

begin adotable2.Edit;

form4:=tform4.create(nil);

form4.showmodal;

form4.Repaint;

end;

procedure TFORM1.N14Click(Sender: TOBJECT);

var s:string;

begin s:="";

//задаем условие поиска для поля "nazv" (текстовое) if edit1.text"" then if s"" then s:=s " and nazv like """ edit1.Text "%""" else s:=s "nazv like """ edit1.Text "%""";

//задаем условие поиска для поля "material" (текстовое) if edit2.text"" then if s"" then s:=s " and material like """ edit2.Text "%""" else s:=s "material like """ edit2.Text "%""";

//задаем условие поиска для поля "strana" (текстовое) if edit3.text"" then if s"" then s:=s " and strana like """ edit3.Text "%""" else s:=s "strana like """ edit3.Text "%""";

//задаем условие поиска для поля "data" (дата от) (дата/время) if edit4.text"" then if s"" then s:=s " and data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """" else s:=s "data >= """ formatdatetime("dd.mm.yyyy",strtodate(edit4.text)) """";

//задаем условие поиска для поля "data" (дата до) (дата/время) if edit5.text"" then if s"" then s:=s " and data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """" else s:=s "data <= """ formatdatetime("dd.mm.yyyy",strtodate(edit5.text)) """";

//задаем условие поиска для поля "cena" (цена от) (числовое) if edit6.text"" then if s"" then s:=s " and cena >= " edit6.Text else s:=s "cena >= " edit6.Text;

//задаем условие поиска для поля "cena" (цена до) (числовое) if edit7.text"" then if s"" then s:=s " and cena <= " edit7.Text else s:=s "cena <= " edit7.Text;

if s="" then exit;

adoquery1.Active:=false;

adoquery1.sql.text:="select * from igra where " s;

adoquery1.Active:=true;

datasource2.Dataset:=adoquery1;

end;

procedure TFORM1.N16Click(Sender: TOBJECT);

begin edit1.Clear;

edit2.Clear;

edit3.Clear;

edit4.Clear;

edit5.Clear;

edit6.Clear;

edit7.Clear;

edit1.Setfocus;

datasource2.Dataset:=adotable2;

end;

procedure TFORM1.N19Click(Sender: TOBJECT);

begin while width<1023 do begin width:=width 5;

left:=(screen.width-width) div 2;

end;

edit1.Setfocus;

N9.Visible:=true;

end;

procedure TFORM1.N21Click(Sender: TOBJECT);

begin try w:=getactiveoleobject("word.application");

except w:=createoleobject("word.application");

end;

w.documents.add(extractfilepath(application.exename) "shablon\Anketa1.dot");

w.selection.find.text:="#nazv_vid#";

w.selection.find.replacement.text:=adotable1.fieldbyname("nazv_grup").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#nazv#";

w.selection.find.replacement.text:=adotable2.fieldbyname("nazv").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#strana#";

w.selection.find.replacement.text:=adotable2.fieldbyname("strana").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#material#";

w.selection.find.replacement.text:=adotable2.fieldbyname("material").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#data#";

w.selection.find.replacement.text:=adotable2.fieldbyname("data").value;

w.selection.find.execute(replace:=2);

w.selection.find.text:="#cena#";

w.selection.find.replacement.text:=adotable2.fieldbyname("cena").value;

w.selection.find.execute(replace:=2);

w.visible:=true;

end;

procedure TFORM1.N22Click(Sender: TOBJECT);

begin if radiogroup1.ITEMINDEX=1 then begin adoquery1.Active:=false;

adoquery1.SQL.clear;

adoquery1.sql.add("select * from igra");

adoquery1.Active:=true;

spisok;

end else application.messagebox("Выберите пункт "Просмотр общим списком"!","Ошибка!",mb_ok mb_iconerror);

end;

procedure TFORM1.N23Click(Sender: TOBJECT);

begin if radiogroup1.ITEMINDEX=1 then begin adoquery1.Active:=false;

adoquery1.SQL.clear;

adoquery1.sql.add("select * from igra");

adoquery1.Active:=true;

spisok1;

end else application.messagebox("Выберите пункт "Просмотр общим списком"!","Ошибка!",mb_ok mb_iconerror);

end;

procedure TFORM1.Edit6KEYPRESS(Sender: TOBJECT; var Key: Char);

begin if (key=".") or (key=",") then key:=DECIMALSEPARATOR;

//если символ не цифра, не запятая, не минус и не Backspace if not (key in ["0".."9",",","-",#8]) or ((key=",") and (pos(",",edit6.Text)>0)) or ((key="-") and (pos("-",edit6.Text)>0)) or ((key="-") and (edit6.SELSTART>0)) then key:=#0;

end;

procedure TFORM1.Edit7KEYPRESS(Sender: TOBJECT; var Key: Char);

begin if (key=".") or (key=",") then key:=DECIMALSEPARATOR;

//если символ не цифра, не запятая, не минус и не Backspace if not (key in ["0".."9",",","-",#8]) or ((key=",") and (pos(",",edit7.Text)>0)) or ((key="-") and (pos("-",edit7.Text)>0)) or ((key="-") and (edit7.SELSTART>0)) then key:=#0;

end;

procedure TFORM1.N27Click(Sender: TOBJECT);

begin form5:=tform5.create(nil);

form5.showmodal;

form5.Repaint;

end;

procedure TFORM1.N25Click(Sender: TOBJECT);

begin application.helpcommand(help_contents, 0);

end;

procedure TFORM1.Button5KEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

begin if key=vk_f1 then application.helpcontext(screen.activecontrol.helpcontext);

end;

end.

Код формы-заставки: unit Unit3;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, EXTCTRLS;

type

TFORM3 = class(TFORM)

Image1: TIMAGE;

procedure FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);

procedure FORMSHOW(Sender: TOBJECT);

procedure FORMCREATE(Sender: TOBJECT);

private

{ Private declarations } public

{ Public declarations } end;

var

Form3: TFORM3;

implementation

{$R *.dfm} procedure TFORM3.FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);

begin

ANIMATEWINDOW(Handle, 1000, $10 OR $10000);

action:=cafree;

end;

procedure TFORM3.FORMSHOW(Sender: TOBJECT);

begin

Left:= (Screen.Width - Width)div 2;

Top:= (Screen.Height - Height)div 2;

ANIMATEWINDOW(Handle, 1000, $10 OR $20000);

end;

procedure TFORM3.FORMCREATE(Sender: TOBJECT);

var myregion:hrgn;

begin myregion:=createroundrectrgn(0,0,clientwidth,clientheight,35,35);

setwindowrgn(handle,myregion,true);

end;

end.

Код формы редактирования/добавления данных: unit Unit4;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, STDCTRLS, Mask, DBCTRLS, db, EXTDLGS, COMCTRLS, ADODB;

type

TFORM4 = class(TFORM)

DBEDIT1: TDBEDIT;

DBEDIT2: TDBEDIT;

DBEDIT3: TDBEDIT;

DBEDIT4: TDBEDIT;

DBEDIT5: TDBEDIT;

Label1: TLABEL;

Label2: TLABEL;

Label3: TLABEL;

Label4: TLABEL;

Label5: TLABEL;

DBIMAGE1: TDBIMAGE;

Label6: TLABEL;

Label7: TLABEL;

DBMEMO1: TDBMEMO;

OPENPICTUREDIALOG1: TOPENPICTUREDIALOG;

Button1: TBUTTON;

Button2: TBUTTON;

DATETIMEPICKER1: TDATETIMEPICKER;

procedure FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);

procedure DBIMAGE1Click(Sender: TOBJECT);

procedure Button1Click(Sender: TOBJECT);

procedure Button2Click(Sender: TOBJECT);

procedure DBEDIT4Enter(Sender: TOBJECT);

procedure DATETIMEPICKER1Exit(Sender: TOBJECT);

procedure DBEDIT5KEYPRESS(Sender: TOBJECT; var Key: Char);

procedure FORMKEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

private

{ Private declarations } public

{ Public declarations } end;

var

Form4: TFORM4;

implementation uses Unit1, Unit3, Unit2;

{$R *.dfm} procedure TFORM4.FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);

begin action:=cafree;

end;

procedure TFORM4.DBIMAGE1Click(Sender: TOBJECT);

begin if openpicturedialog1.Execute = true then tblobfield(form1.adotable2.fieldbyname("foto")).loadfromfile(openpicturedialog1.Filename);

end;

procedure TFORM4.Button1Click(Sender: TOBJECT);

begin if dbedit1.text"" then begin form1.adotable2.post;

close;

end;

end;

procedure TFORM4.Button2Click(Sender: TOBJECT);

begin form1.adotable2.cancel;

close;

end;

procedure TFORM4.DBEDIT4Enter(Sender: TOBJECT);

begin datetimepicker1.Visible:=true;

if dbedit4.text"" then datetimepicker1.Date:=strtodate(dbedit4.text);

datetimepicker1.setfocus;

end;

procedure TFORM4.DATETIMEPICKER1Exit(Sender: TOBJECT);

begin datetimepicker1.Visible:=false;

dbedit4.text:=datetostr(datetimepicker1.Date);

end;

procedure TFORM4.DBEDIT5KEYPRESS(Sender: TOBJECT; var Key: Char);

begin if (key=".") or (key=",") then key:=DECIMALSEPARATOR;

//если символ не цифра, не запятая, не минус и не Backspace if not (key in ["0".."9",",","-",#8]) or ((key=",") and (pos(",",dbedit5.Text)>0)) or ((key="-") and (pos("-",dbedit5.Text)>0)) or ((key="-") and (dbedit5.SELSTART>0)) then key:=#0;

end;

procedure TFORM4.FORMKEYDOWN(Sender: TOBJECT; var Key: Word;

Shift: TSHIFTSTATE);

begin if key=vk_f1 then application.helpcontext(screen.activecontrol.helpcontext);

end;

end.

Код формы «О программе»: unit Unit5;

interface uses

Windows, Messages, SYSUTILS, Variants, Classes, Graphics, Controls, Forms, Dialogs, STDCTRLS, jpeg, EXTCTRLS;

type

TFORM5 = class(TFORM)

Image1: TIMAGE;

Label1: TLABEL;

Label2: TLABEL;

Label3: TLABEL;

private

{ Private declarations } public

{ Public declarations } end;

var

Form5: TFORM5;

implementation

{$R *.dfm} end.

4 Тестирование

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

Откроем главную форму и нажмем кнопку «Добавить» под главной сеткой.

Рисунок 9 - Добавление в таблицу «Vidy»

Выполним проверку добавления в таблицу «Igra». Нажмем на кнопку «Добавить» под второй сеткой.

Рисунок 10 - Добавление в таблицу «Igra»

Проверим, что данные были добавлены.

Рисунок 11 - Проверка добавления в таблицу «Igra»

Выполним проверку удаления из таблицы «Igra». Кликнем на кнопку «Удалить» под второй сеткой. Нажмем «Да» для подтверждения действия.

Рисунок 12 - Удаление записи из таблицы «Igra»

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

Рисунок 13 - Проверка удаления

Проверим удаление из главной таблицы «Vidy». Нажмем на «Удалить» под первой сеткой и подтвердим выполненное действие нажатием пункта «Да».

Рисунок 14 - Удаление из главной таблицы «Vidy»

Проверим, что удаление выполнилось.

Рисунок 15 - Проверка удаления из таблицы «Vidy»

Выберем пункт «Просмотр общим списком» и проверим отображение всех данных в таблице «Igra».

Рисунок 16 - Просмотр общим списком

Проверим работу функции «Редактирование данных». Для этого дважды кликнем на нужной записи. Появится форма редактирования. Изменим нужные характеристики и нажмем на кнопку «Сохранить».

Рисунок 17-18 - Редактирование данных

Проверим, что данные сохранились.

Рисунок 19 - Проверка редактирования данных

Проверим работу функции «Поиск данных». Нажмем на кнопку «Поиск данных», с правой стороны формы появится панель поиска. Введем критерии поиска и нажмем на кнопку «Поиск».

Рисунок 20 - Поиск данных по условию

Протестируем функцию «Отчет», как в MS Word, так и в MS Excel. (см. Дополнение 1 - 6).

5. Сопровождение

5.1 Пособие пользователя

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

Добавить записи в первую и вторую таблицы можно с помощью кнопок «Добавить». В первой таблице добавление осуществляется в самой сетке, а во второй - при помощи формы добавления. В эту форму нужно ввести необходимую информации, в числовые поля можно ввести только числа. Кнопка «Сохранить» сохраняет данные, а кнопка «Отменить» - отменяет добавление и выходит из формы.

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

При помощи кнопки F1 можно узнать подробно, как пользоваться разными функциями программы.

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

Если необходимо вывести информацию в отчет, то это можно выполнить с помощью нажатия кнопки «Отчет». В отчет можно вывести одну активную запись, все записи и отобранные данные с помощью функции «Поиск». Отчет создается как в MS Word, так и в MS Excel.

5.2 Пособие разработчика

Для того, чтобы запустить программу нужн
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?