Информационная система "Каталог игрушек"
Разработка информационной системы "Каталог игрушек", в которой содержится информация об игрушках с фотографиями и полным описанием согласно заданию. Отладка и тестирование системы. Создания отчетов в MS Word и в MS Excel с помощью шаблонов и Delphi 7.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 14.09.2016 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Постановка задания
2. Проектирование
2.1 Проектирование данных
2.2 Проектирование функций
3. Программная реализация
4. Тестирование
5. Сопровождение
5.1 Пособия пользователя
5.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;
//стаим курсор в первую ячейку следующей строки (Aі)
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 Пособие разработчика
Для того, чтобы запустить программу нужно установить на компьютер SQL Server 2005 или новее.
После, устанавливаем на компьютер программу «Каталог игрушек» при помощи инсталлятора Game.exe. После установки программы на рабочем столе появится ярлык запуска программы.
Заключение
Во время выполнения курсовой работы я разработала информационную систему «Каталог игрушек». В ней содержится информация об игрушках с фотографиями и полным описанием.
Овладела навыками работы с SQL Server 2008 и Delphi 7.
На практике научилась работать с ini-файлами, с компонентами программы, с диалогами открытия файлов. Научилась работать с технологией ADO, создавать форму - регистрацию. Закрепила знания о создании запросов. Научилась создавать файл помощи для программы. Овладела способами создания отчетов в MS Word и в MS Excel с помощью шаблонов и Delphi 7. Научилась работать с MDI интерфейсом и с программой - компилятором.
Система прошла отладку и тестирование. Были исправлены все ошибки и недочеты. Программа полностью готова к использованию.
Список литературы
1. Конспект лекций по предмету «Инструментальные средства визуального программирования»
2. Архангельский А. Я. Программирование в Delphi 7: Бином-Пресс, 2003
3. Архангельский А. Я. Работа с локальными базами данных в Delphi 5: Бином, 2000
4. Аткинсон Л. MySQL. Библиотека профессионала: Диалектика, 2002
5. Понамарев В. Базы данных в Delphi 7. Самоучитель: Питер, 2003
6. Гофман В.Э., Хомоненко А.Д. Delphi. Быстрый старт. - СПб: БХВ-Петербург, 2003. - 288 с.: ил.
Размещено на Allbest.ru
...Подобные документы
Разработка информационной системы для ведения каталога книг/читателей, поисковой системы, предварительных заказов на приобретение книг. Анализ затрат на разработку системы. Архитектура объектно-ориентированной системы. Диаграмма классов, модули системы.
курсовая работа [906,1 K], добавлен 24.06.2013Теоретические основы разработки web-сайта. Сбор и анализ данных для качественной реализации программного продукта. Разработка модели сайта магазина детских игрушек. Графическое оформление страниц. Выбор средств и технологий, тестирование и отладка.
курсовая работа [349,2 K], добавлен 09.04.2015Рассмотрение структуры и схемы базы данных. Описание таблиц и архитектура приложения информационной системы "Музыкальный каталог". Изучение интерфейса пользователя: страниц регистрации, главной и страницы поиска. Приложение для работы с базами данных.
курсовая работа [821,2 K], добавлен 27.07.2014Цель создания информационной системы. Автоматизированная информационная система "Строительное предприятие". Использование вычислительной техники и программного обеспечения для создания автоматизированной информационной системы управления на предприятии.
курсовая работа [2,5 M], добавлен 04.01.2011Анализ предметной области разрабатываемой информационной системы "Библиотека". Проектирование базы данных в среде MS Access. Физическая реализация данной информационной системы средствами Delphi 7 и MS Access 2003. Области применения технологии BDE.
курсовая работа [2,4 M], добавлен 12.01.2016Особенности создания базы данных. Характеристика программного и технического обеспечений. Анализ создания информационной системы по оплате студентов за обучение. Состав Borland Delphi 7: компилятор, генератор отчетов, библиотека визуальных компонент.
курсовая работа [641,2 K], добавлен 29.02.2012Приложения MS Word, MS Excel, Open Office в деятельности менеджера, категории задач, для решения которых они используются. Составление операционной математической модели, максимизирующей общий доход фабрики за месяц. Поиск решения с помощью MS Excel.
контрольная работа [511,4 K], добавлен 27.11.2011Разработка программы для ввода данных из актов о возврате бракованных ванн в БД учета брака. Проектирование информационных систем. Разработка модели БД с помощью ERWin, приложения ввода данных в Borland Delphi 7, системы создания отчётности в MS Excel.
курсовая работа [2,6 M], добавлен 30.03.2011Сущность тестирования и отладки, методика выявления ошибок в программном обеспечении. Практика отладки приложений в среде Delphi, системы управления версиями приложения и отслеживания ошибок. Применение точек остановки и модификация локальных переменных.
курсовая работа [303,4 K], добавлен 19.01.2016Выбор методологии проектирования и разработка информационной системы "Расчёт зарплаты" для предприятия ОАО РТП "Авторемонтник". Архитектурное проектирование базы данных информационной системы и разработка её интерфейса. Тестирование программного модуля.
дипломная работа [2,3 M], добавлен 25.05.2014Создание автоматизированной системы "Медицинские организации города" с помощью MS Access 2002: создание таблиц с данными, разработка запросов и отчетов. Создание программы на языке Visual Basic, содержащей сведения об ассортименте игрушек в магазине.
курсовая работа [4,3 M], добавлен 13.11.2009Проектирование информационной системы предприятия "Ниссан-Авто" с помощью табличного процессора Excel. Условия для выполнения расчетной части. Макросы, используемые в программе. Создание проекта по разделам: база данных, сводная таблица, график.
контрольная работа [3,6 M], добавлен 16.01.2011Язык Delphi как строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal, его главные особенности. Стадии создания автоматизированной системы. Листинг программы, разработка интерфейса.
курсовая работа [933,9 K], добавлен 08.12.2011Общее понятие про отчет. Системы формирования отчетов. Возможности Сrystal Reports 2008. Формирование сложных отчетов на основе ранее подготовленных шаблонов и правил с помощью T-FLEX DOCs. Анализ идеальной модели отчетов для языков программирования.
курсовая работа [54,2 K], добавлен 05.06.2009Создание сложных текстовых документов с помощью шаблонов и мастеров Word. Разработка собственных шаблонов. Разоаботка общей структуры документа, настройка параметров страницы, перемещение по тексту с помощьюпанели схемы документа. Внешний вид текста.
методичка [30,1 K], добавлен 14.02.2009Создание системы управления данными для информационной системы ВУЗа с помощью MS Access. Разработка таблиц и схемы базы данных, запросов в MS SQL Server, основных форм и отчетов. Организация формы главного меню для автоматического вызова объектов БД.
курсовая работа [3,0 M], добавлен 09.04.2012Разработка системы, поддерживающей формирование итоговых отчетов из данной базы и обеспечивает ввод, удаление, хранение и редактирование информации, которая содержится в таблицах данных. Обоснование выбора среды разработки Delphi 7 для WINDOWS–приложений.
дипломная работа [2,1 M], добавлен 20.05.2012Создание структуры базы данных. Таблица реквизитов входных данных информационной системы "Видеобиблиотека". Процессы, составляющие действие в базе данных. Формирование ведомостей с использованием MS Excel. Использование интегрированной среды Delphi.
курсовая работа [455,8 K], добавлен 05.01.2013Разработка автоматизированной информационной системы "Супермаркет DNS" с опорой на платформу NET, в среде MS Visual Studio, на языке программирования C. Объектная модель программной системы согласно методологии ОМТ. Описание алгоритмов обработки данных.
курсовая работа [394,0 K], добавлен 21.10.2012Требования к системе проектирования информационной системы финансового контроля. Информационное, программное и техническое обеспечение автоматизированной системы. Алгоритмы и модели работы базы данных, созданной в среде разработки Borland Delphi 7.0.
дипломная работа [1,2 M], добавлен 25.10.2013