ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ»
ФАКУЛЬТЕТ ЭКОНОМИКИ И ИНФОРМАТИКИ
КАФЕДРА ИНФОРМАТИКИ
КУРСОВОЙ ПРОЕКТ
по дисциплине «Программирование» на тему: “Разработка автоматизированного рабочего места менеджера розничной торговли”
Выполнил: студент III курса гр.: И-04-2 Пивков В.А. Проверил: асс. Гаршин И.Л.
Липецк 2006
ЗАДАНИЕ.
Разработать клиентское приложение для СУБД mySQL 5.0.x на примере создания автоматизированного рабочего места менеджера розничной торговли.
ОГЛАВЛЕНИЕВведение
Глава 1. Постановка задачи 1.1.Литературный и патентный обзор постановки подобных задач. Анализ аналогичных информационных систем (ИС) 1.2.Характеристика организационной либо производственной структуры объекта или структуры предметной области 1.3.Назначение и цели создания системы
Глава 2. Проектная 2.1.Схема функциональной структуры системы с кратким описанием 2.2.Описание информационныхфункций и комплекса решаемых задач
2.3. Разработка решений по специальному математическому обеспечению ИС 2.3.1.Общий алгоритм функционирования системыРазработка алгоритмов решения отдельных функциональных задачРазработка решений по информационному обеспечению ИСРазработка решений по техническому обеспечению ИС
2.3.5. Разработка решений по программному обеспечению Библиографический список ПРИЛОЖЕНИЯ
Приложение 1. «Руководство оператора» Приложение 2. «Листинг исходного кода ИС»
ВВЕДЕНИЕ.
В настоящее время существует множество ИС для розничной торговли и каждая из них обладает своими достоинствами и недостатками. К основным недостаткам наверное можно отнести достаточно высокую цену за данные программные пакеты. Из-за этого еще многие торговые предприятия, не могут перейти на современные технологии ведения своего бизнеса.
Целью данной работы является разработка клиент-серверного приложения на основе свободно распространяемой СУБД mySQL 5.0 для ведения розничной торговли. В качестве примера в данной работе мы используем некую ООО Компания “X” для которой разрабатывается данная ИС.
Для достижения поставленной нами цели система должна решать следующие задачи:Учет поставленной и реализованной продукции Предоставлять актуальную информацию о наличии товара Осуществлять поиск по базе данных Генерировать отчет о продажах
ГЛАВА I. ПОСТАНОВКА ЗАДАЧИ
1.1 Литературный и патентный обзор постановки подобных задач. Анализ аналогичных систем
Информационные системы, в наше время, уже прочно заняли свои законные места в экономической сфере общества, в частности розничной торговле. Уже трудно представить себе, уважающее себя торговое предприятие, не использующее специализированного программного обеспечения для ведения своей деятельности. Спрос, как известно, рождает предложение и в настоящее время на рынке представлено множество систем, как отечественных, так и зарубежных. В данном материале рассмотрены некоторые российские и зарубежные разработки. Оставшуюся долю рынка занимает ряд малораспространенных продуктов, а также локализованные версии иностранных систем. Кроме того, существует довольно большое количество компаний, предлагающих проектные решения по реализации розничной торговли.
Рассмотрим системы для управления розничной торговлей, которые широко представлены на российском рынке.
Продукт LS Retail Axapta представляет собой единое программное решение для компаний, занимающихся розничной торговлей. Он может использоваться как в головных офисах, так и в офисах магазинов и на кассовых аппаратах (POS). Технически решение LS Retail Axapta состоит из ERP системы Microsoft Dynamics™ AX и двух специально разработанных к ней модулей. Это решение подходит для крупных компании, которые себе могут позволить покупку дорогостоящего программного обеспечения, ибо затраты на внедрение данного продукта в небольшую сеть, могут оказаться чрезмерно высокими.
Для малого бизнеса подходит отечественная разработка “1С: Предприятие”. Этот продукт является универсальной системой автоматизации деятельности предприятия. Основная его особенность – это настройка под особенности конкретного предприятия. Для использования данного пакета требуется не только покупка базового комплекта, но и так же написание собственной конфигурации, которая сможет удовлетворить нужды компании, что отразится на стоимости владения системой.
После анализа этих систем было решено начать разработку собственной системы управления розничной продажи, так как ни одна из приведенных систем не отвечает нуждам нашего предприятия.
1.2 Характеристика структуры предметной области.
Предметной областью системы является продукция, реализуемая ООО Компания “X”. Для любого продукта существуют несколько характеристик:Код товара Наименование товара Цена товара за шт. Страна производитель Гарантия
Исходя, из этих характеристик мы можем выделить некоторые задачи, которые должна реализовывать наша система:Отбор наименовании имеющихся в наличии Ведение учета по каждому наименованию Обеспечение поиска по наименованиям Добавление наименований Удаление наименований Редактирование характеристик наименований Генерация отчета при реализации продукции
С точки зрения организационной структуры наша система используется сотрудниками компании, непосредственно задействованным в розничной торговле.
1.3. Назначение и цели создания системы.
Разрабатываемая мною система предназначается для автоматизации деятельности сотрудников задействованных непосредственно в розничной торговле в магазинах ООО Компания “X”.
Цели создания:
• Ускорение обслуживания клиентов
• Предоставление актуальной информации о наличии товара в магазинеАвтоматический расчет стоимости покупки Автоматическая генерация отчета Реализация единого представления информации
ГЛАВА II ПРОЕКТНАЯ ЧАСТЬ.
2.1 Описание функциональной структуры системы.
Автоматизируемые функции данной программы определяются необходимыми данными для ведения розничной торговли./>
Схема 1. Функциональная структура системы
2.2. Описание информационных функции и комплекса решаемых задач.
Все информационные функции системы так или иначе связаны с ведением учета товара, или организацией этого процесса.
1. Подключение к серверу Входная информация – учетная запись пользователя на сервере БД. Выходная информация – получение доступа к БД При запуске системы требуется пройти аутентификацию на сервере БД
для получения подключения. Подключение реализовано в модуле Unit8 и предоставляет пользовательские интерфейсы на специально организованной форме — Form8.
2. Добавление товара Входная информация – это перечень характеристик товара. Обычно
предоставляется в бумажной форме Выходная информация – это запись о товаре в базе данных. По своей структуре информация выглядит так:Код товара Наименование товара Цена товара Количество Страна – производитель
• Гарантийный срок Добавление товара происходит на специально выделенной форме Form4. Для добавления надо заполнить находящиеся на форме поля
типа TEdit и выбрать из списка типа TComboBox значение характеристики товара – страна-производитель. В случае успешного завершения операции будет сообщение.
3. Редактирование характеристик товара Входная информация – исходная запись Выходная информация – исправленная запись Редактирование записей происходит на специально выделенных полях
типа TEdit находящихся на форме Form5. Для редактирования доступны лишь следующие поля:Наименование товара Цена товара Гарантийный срок
Оставшиеся поля не могут быть редактированы, чтобы не нарушать целостности данных.
4. Удаление товара Входные данные – исходная запись Выходные данные – сообщение о завершении операции удаления
Удаление записей происходит на специально выделенной форме Form3. На данной форме находятся таблица с данными типа DBGrid и две кнопки “Удалить” и “Выход” типа TBinBtn. При выбранной записи и нажатой кнопки “Удалить” из нашей БД сначала удаляются все подчиненные ей записи, только после этого удаляется сама запись о товаре и выводится сообщение о успешном завершении операции удаления.
5. Поиск товара Входные данные – исходная строка для поиска Выходные данные – записи БД удовлетворяющие исходному значению
либо пустой набор данных
Функция поиска реализована на главной форме проекта Form1 и предоставляет поле для ввода данных типа TEdit и кнопку для запуска операции типа TSpeedButton. В поле вводится исходная строка-шаблон и нажимается кнопка. Если операция завершена успешно то на главной форме мы получаем список соответствующих строке-шаблону товаров иначе мы получаем пустой набор данных.
6. Формирование списка покупки Входные данные – выбранная запись в DBGrid1 Выходные данные – полученная запись в StringGrid1 Формирования списка покупки происходит, на главной форме проекта
и предоставляет две таблицы типа TDBGrid и TStringGrid. При двойном нажатии левой клавиши мыши по записи находящейся в таблице DBGrid1 происходит перемещение одной единицы товара в список покупки – таблица StringGrid1. Одновременно в таблицы tbrko и tbrko_ware БД происходит занесение соответствующих записей о выбранном товаре.
7. Отмена покупки. Входные данные – массив строк содержащийся в StringGrid1 Выходные данные – восстановление исходных данных (до выполнения
последней сессии Формирование списка покупки) в DBGrid1
Данная функция удаляет все записи сделанные в БД последней сессией функции формирования списка покупки, очищает StringGrid1.
8. Генерация отчета (товарного чека) Входные данные – массив строк содержащийся в StringGrid1 Выходные данные – Excel – лист, бумажный товарный чек Генерирует товарный чек на основе содержимого SringGrid1
2.3 Разработка решений по специальному математическому обеспечению ИС. Общий алгоритм работы программы. Общий алгоритм моей программы можно представить так: Загружается клиентская часть программы. Пользователь вводит свои данные в форму для подключения к серверу БД Подключение к серверу БД Пользователь начинает работу с программой Завершение работы с системой, отключение от сервера БД Действия в п.4. полностью зависят от пользователя. Общего алгоритма работы системы нет, т.к. невозможно узнать какие задачи и в какой последовательности будет выполнять пользователь. Графическое изображение алгоритма представлено ниже. />
Схема 2. Общий алгоритм работы программы
2.3.2 Разработка алгоритма для решения отдельных функциональных задач. Поиск товара Алгоритм решения данной задачи достаточно прост, после ввода исходной строки -шаблона пользователь нажимает на кнопку “Поиск” вызывается функция которая: Формируется запрос Оправляет запрос на сервер БД Обрабатывает полученный ответ Выводит результат поиска Проверка корректности работы осуществляется путём ввода различных строк
– шаблонов. Генерация товарного чека При готовом наборе покупки пользователь нажимает на кнопку “Оплатить” вызывается функция, которая: Отображает форму отчета Form9 Создает на форме Form9 объект отчета типа Excel.Sheet Оформляет отчет и импортирует строковый массив о покупке из Form1.StringGrid1 в отчет Отображает отчет Проверка корректности работы осуществляется путём генерации отчетов с различными наборами данных.
2.3.3. Разработка решений по информационному обеспечению ИС
Принципы организации информационного обеспечения ИС
Основные принципы организации информационного обеспечения, необходимого для корректной работы программы “Розничная торговля ”:
• отделение данных от интерфейса пользователя;
2.3.4. Разработка решений по техническому обеспечению ИС. Минимальные требования к аппаратному обеспечению приложения “Розничная торговля ”Процессор: Pentium – 2 450 Mhz ОЗУ: 64 Mb Video: int LAN
2.3.5. Разработка решений по программному обеспечению Структура программного обеспечения/>
Схема 3. Структура программного обеспечения
Краткая характеристика общего программного обеспечения Операционная система Приложение “Розничная торговля ” может функционировать в компьютерах с установленной ОС Window 2000 и новее, также для корректной работы приложения на машине должен быть установлен MS EXCEL XP.
ЗАКЛЮЧЕНИЕ
В ходе данной работы была разработана система «Розничная торголя», которая полностью выполняет необходимые функции. Система полностью разработана в среде программирования Delphi 7 Studio с использованием компонента TmySQLDataBase.
Система «Розничная торговля» является открытой и легко может быть дополнена произвольными функциями, реализующими дополнительные возможности, например:система авторизации; дополнительные отчёты; интеграция со складом, бухгалтерией и тп.;
БИБЛИОГРАФИЧЕСКИЙ СПИСОКАрхангельский А.Я. “Delphi 2006 Справочное пособие” ”Бином” 2006 Богомолов С. “MySQL: установка, настройка, описание”
www.mysql.ru/docs Дархвелидзе П., Марков Е. “Delphi 2005 для WIN 32” “БВХ-ПЕТЕРБУРГ” 2005 Дархвелидзе П., Марков Е. “Программирование в Delphi 7” “БВХ-ПЕТЕРБУРГ” 2004 Елманова Н., Трепалин С., Тенцер А. “Delphi и технология COM” “Питер” 2003 Ильин М. “MySQL (введение)” www.mysql.ru/docs Марков Е., Никифоров В. “Delphi 2005 для .NET” “БВХ-ПЕТЕРБУРГ” 2005 Мишенин А.И. Теория экономических информационных систем: Учебник. – 4-е изд. доп. и перераб. – М.: Финансы и статистика, 2001. Паутов А. “Описание СУБД MySQL” www.mysql.ru/docs 10.Ревич Ю. “Нестандартные приемы программирования на Delphi” “БВХ-ПЕТЕРБУРГ” 2005
11.Романов В.П., Емельянова Н.З., Партыка Т.Л. Проектирование экономических информационных систем: методология и современные технологии. Учебное пособие. – М.: Издательство «Экзамен», 2005.
12.Руссинович М., Соломон Д. Внутреннее устройство MS Windows: Windows 2003 Server, Windows XP, Windows 2000. Мастер-класс. / Пер. с англ. – 4-е издание – СПб.: Питер, 2005
13.Семенов М.И. Автоматизированные информационные технологии в экономике. – М.: Финансы и статистика, 2002.
14.Справочное руководство по MySQL mysql.ru/docs 15.Стиввене Род “Delphi готовые алгоритмы” “Питер” 2004 16.В.Фаронов “Программирование БД в Delphi 7” “Питер” 2003 17.Флёнов М.Е. “Delphi 2005 Секреты программирования” “Питер” 2006
ПРИЛОЖЕНИЕ 1 РУКОВОДСТВО ОПЕРАТОРА
При запуске программы мы попадаем на главную форму системы см. рис. 1/>
Рис. 1 Главная форма системы “Розничная торговля”
Для того чтобы начать работу с системой необходимо пройти установить подключение к серверу БД. Для этого следует нажать на кнопку
/>. После нажатия на данную кнопку перед вами появится окно “Настройки подключения” см. рис.2/>
Рис. 2 Окно “Настройки соединения”
После подключения к серверу БД окно автоматически закроется, и вы можете начинать работу с системой.
Товар может быть добавлен в список покупок двойным щелчком по либо клавише мыши, либо через контекстное меню “Добавить”. Выбрав в контекстном меню “Добавить” перед вами появится окно см. рис 3./>
Рис 3. Ввод количества выбранного товара После ввода значения и нажатия клавиши “Ok” выбранный вами товар окажется в списке покупок см. Рис. 4/>
Рис. 4 Список покупок Для того чтобы очистить весь список покупок, воспользуйтесь клавишей “ОТМЕНА”, если же вы хотите удалить только один пункт из списка покупок, то воспользуйтесь контекстным меню.
Если надо оформить покупку, то нажмите на кнопку “ОПЛАТИТЬ”, перед Вами появится см рис 5./>
Рис 5. Товарный чек. Если на этой форме нажать “ПЕЧАТЬ”, то бланк указанный на форме будет распечатан на принтере. Если же В нажимаете закрыть, то чек напечатан не будет, но данные о покупке все равно будут сохранены.
Для добавления товара в БД воспользуйтесь кнопкой
/>или в горизонтальном меню Правка => Добавить При нажатии на данную клавишу появится см рис.6/>
Рис. 6 Окно добавления товаров/>
Для редактирования характеристик товара в БД воспользуйтесь кнопкой или в горизонтальном меню Правка => Редактировать При нажатии на данную клавишу появится см рис. 7/>
Рис 7. Окно редактирования информации о товаре Для удаления товара из БД воспользуйтесь кнопкой
/>или в горизонтальном меню Правка => Удалить При нажатии на данную клавишу появится см рис. 8/>
Рис. 8 Окно удаления товара
В системе розничная торговля также присутствует функция поиска в БД см. рис. 9/>
Рис. 9 Поиск При вводе строки в поле поиска нажатии клавиши
/>запустится процедура поиска по введенной вами строке. Если результат поиска успешен, то вы получите результаты поиска на месте списка товаров. Если нет, то пустое поле.
При нажатии клавиши
/>вы вернетесь к исходному списку товаров.Листинг 1 Unit1.pas
procedure SpeedButton5Click(Sender: TObject);unit Unit1;
procedure SpeedButton4Click(Sender: TObject);
procedure Action1Execute(Sender: TObject);interface
procedure Action2Execute(Sender: TObject);uses
procedure Edit1KeyPress(Sender: TObject; var Key:Windows, Messages, SysUtils, Variants, Classes,Char);
Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, Buttons,
procedure Action3Execute(Sender: TObject);Grids, DBGrids, ExtCtrls, DB, DBClient, ComCtrls, ActnList;
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);type
procedure N10Click(Sender: TObject);TForm1 = class(TForm)
Panel1: TPanel;
privateDBGrid1: TDBGrid;
{ Private declarations }BitBtn1: TBitBtn;
publicBitBtn2: TBitBtn;
{ Public declarations }StringGrid1: TStringGrid;
end;Label1: TLabel;
Label2: TLabel;
varLabel3: TLabel;
Form1: TForm1;SpeedButton2: TSpeedButton;
sql: String;SpeedButton3: TSpeedButton;
Rec: Integer;SpeedButton4: TSpeedButton;
d: Integer;SpeedButton6: TSpeedButton;
e: Boolean;MainMenu1: TMainMenu;
r: Word;N1: TMenuItem;
procedure Init;N2: TMenuItem;
implementationN3: TMenuItem;
usesN4: TMenuItem;
Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8,N5: TMenuItem;
Unit9, Other;N6: TMenuItem;
{$R *.dfm}N7: TMenuItem;
procedure Init;N8: TMenuItem;
beginN9: TMenuItem;
Form1.Label2.Caption:= '0';N11: TMenuItem;
Form1.BitBtn1.Enabled:= False;N13: TMenuItem;
Form1.BitBtn2.Enabled:= False;SpeedButton1: TSpeedButton;
with Form1.StringGrid1 doActionList1: TActionList;
beginPanel2: TPanel;
Cells[0, 0]:= 'Код товара';Action4: TAction;
Cells[1, 0]:= 'Наименование товара';Edit1: TEdit;
Cells[2, 0]:= 'Цена за ед.';SpeedButton5: TSpeedButton;
Cells[3, 0]:= 'Количество';Action1: TAction;
Cells[4, 0]:= 'Стоимость';Action2: TAction;
Cells[5, 0]:= 'Гарантия';Action3: TAction;
end;PopupMenu1: TPopupMenu;
end;N14: TMenuItem;
PopupMenu2: TPopupMenu;
procedure TForm1.FormCreate(Sender: TObject);N10: TMenuItem;
beginprocedure FormCreate(Sender: TObject);
init;procedure DBGrid1DblClick(Sender: TObject);
end;procedure BitBtn2Click(Sender: TObject);
procedure TForm1.DBGrid1DblClick(Sender: TObject);procedure BitBtn1Click(Sender: TObject);
varprocedure Action4Execute(Sender: TObject);
s: Integer;
begin s:= 0; //ShowMessage(IntToStr(Rec)); Form1.BitBtn1.Enabled:= True; Form1.BitBtn2.Enabled:= True; if StringGrid1.RowCount = 1 then begin
sql:= 'INSERT INTO tbrko(date) VALUES (' + #39 +
DBDate + #39 + ');'; Query(MyData.Query2, sql, True); Rec:= count(MyData.Query2, 'tbrko');
end; if StringGrid1.RowCount > 1 then s:= FindART(StringGrid1, MyData.Query1.Fields[0].AsString); sql:= 'INSERT INTO tbrko_ware(ware, rko) VALUES (' + #39 + MyData.Query1.Fields[0].AsString + #39 + ',' +
IntToStr(Rec) + ');'; Query(MyData.Query2, sql, True); if (s > 0) then begin
with StringGrid1 do
begin Cells[3, s]:= FloatToStr(StrToInt(Cells[3, s]) + 1); Cells[4, s]:= FloatToStr(StrToInt(Cells[3, s]) *
StrToFloat(Cells[2, s]));
end; end else begin
with StringGrid1 do begin Cells[0, RowCount]:= MyData.Query1.Fields[0].AsString; Cells[1, RowCount]:= MyData.Query1.Fields[1].AsString; Cells[2, RowCount]:=
MyData.Query1.Fields[2].AsString; Cells[3, RowCount]:= '1'; Cells[4, RowCount]:= FloatToStr(StrToInt(Cells[3,
RowCount]) * StrToInt(Cells[2, RowCount])); Cells[5, RowCount]:= MyData.Query1.Fields[5].AsString; RowCount:= RowCount + 1;
end; end; Label2.Caption:=
FloatToStr(StrToFloat(Label2.Caption) + StrToFloat(MyData.Query1.Fields[2].AsString)); MyData.Query1.Refresh; end;
procedure TForm1.BitBtn2Click(Sender: TObject); begin sql:= 'DELETE FROM tbrko_ware WHERE rko = ' +
FloatToStr(Rec) + ';'; Query(MyData.Query2, sql, True); sql:= 'DELETE FROM tbrko WHERE code = ' +
FloatToStr(Rec) + ';'; Query(MyData.Query2, sql, True); StringGrid1.RowCount:= 1; MyData.Query1.Refresh; Label2.Caption:= '0'; BitBtn1.Enabled:= False; BitBtn2.Enabled:= False; Rec:= 0;
end; procedure TForm1.BitBtn1Click(Sender: TObject); begin
Form9.ShowModal; Rec:= 0; BitBtn1.Enabled:= False; BitBtn2.Enabled:= False; Label2.Caption:= '0'; StringGrid1.RowCount:= 1;
end;
procedure TForm1.Action4Execute(Sender: TObject); begin Form8.ShowModal; end;
procedure TForm1.SpeedButton5Click(Sender: TObject); begin sql:= 'SELECT art, name, price, country, garant FROM tbware, tbmanufacturer WHERE tbware.man = ' + 'tbmanufacturer.code AND tbware.name LIKE ' + #39
+ '%' + Edit1.Text + '%' + #39 + ';';
Query(MyData.Query1, sql, False); end;
procedure TForm1.SpeedButton4Click(Sender: TObject); begin sql:= 'SELECT art, name, price, country, garant FROM tbware, tbmanufacturer WHERE tbware.man = ' + 'tbmanufacturer.code;'; Query(MyData.Query1, sql, False); end;
procedure TForm1.Action1Execute(Sender: TObject); begin Form4.ShowModal; end;
procedure TForm1.Action2Execute(Sender: TObject);
begin Unit5.Form5.ShowModal; end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then SpeedButton4Click(Sender); end;
procedure TForm1.Action3Execute(Sender: TObject); begin Form3.ShowModal; end;
procedure TForm1.N13Click(Sender: TObject); begin AboutBox.ShowModal; end;
procedure TForm1.N14Click(Sender: TObject); var
i: Word; r, k: String;
begin if StringGrid1.Row > 0 then begin k:= StringGrid1.Cells[4, StringGrid1.Row]; r:= StringGrid1.Cells[0, StringGrid1.Row];;
with StringGrid1 do begin for i:=Row to RowCount do Rows[i].Assign(Rows[i+1]);
RowCount:= RowCount — 1; end; sql:= 'DELETE FROM tbrko_ware WHERE rko = ' +
IntToStr(Rec) + ' AND ware = ' + #39 + r + #39 + ';'; Query(MyData.Query2, sql, True); Label2.Caption:= IntToStr(StrToInt(Label2.Caption) -
StrToInt(k)); MyData.Query1.Refresh; end
else exit; end;
procedure TForm1.N10Click(Sender: TObject); var k,i: Word;
begin if MyData.Query1ART.AsString '' then begin
Form7.ShowModal;
if r > MyData.Query1.Fields[3].AsInteger then r:= MyData.Query1.Fields[3].AsInteger; for i:= 1 to r do
DBGrid1DblClick(Sender); end else exit;
end; end.
Листинг 2 Unit2.pas
unit Unit2;
interface
uses SysUtils, Classes, DB, mySQLDbTables;
type
TMyData = class(TDataModule) Connection1: TmySQLDatabase; Query1: TmySQLQuery; Query2: TmySQLQuery; Query3: TmySQLQuery; DataSource1: TDataSource; DataSource2: TDataSource; DataSource3: TDataSource; Query1ART: TStringField; Query1NAME: TStringField; Query1PRICE: TFloatField; Query1COUNTRY: TStringField; Query1GARANT: TLargeintField; Query1COUNT: TWordField; DataSource4: TDataSource; Query4: TmySQLQuery; procedure Query1CalcFields(DataSet: TDataSet); procedure Query1FilterRecord(DataSet: TDataSet; var
Accept: Boolean); private { Private declarations } public { Public declarations } end;
var MyData: TMyData; sql: String;
function MyConnection: Boolean; function Query(var name: TmySQLQuery; sql: String;
Ex: Boolean): Boolean; procedure a(var m, n: Word); function count(name: TMySQLQuery; table: String) :
Word; implementation {$R *.dfm} // Подключение к СУБД function MyConnection: Boolean; begin
try Unit2.MyData.Connection1.Open; MyConnection:= True;
except MyConnection:= False;
end; end; //Выполняем запрос function Query(var name: TmySQLQuery; sql: String;
Ex: Boolean): Boolean; var
sql:= 'SELECT * FROM tbpko_ware WHERE ware =' + #39 +
myData.Query1.Fields[0].AsString + #39 +';'; Query(myData.Query2, sql, False); m:= myData.Query2.RecordCount; sql:= 'SELECT * FROM tbrko_ware WHERE ware = '
+ #39 +
myData.Query1.Fields[0].AsString + #39 +';'; Query(myData.Query2, sql, False); n:= myData.Query2.RecordCount;
end; procedure TMyData.Query1CalcFields(DataSet: TDataSet); var m, n: Word;
begin a(m, n); Query1COUNT.Value:= (m — n);
end; procedure TMyData.Query1FilterRecord(DataSet: TDataSet; var Accept: Boolean); var m, n: Word; begin
t: TStrings; a(m, n);
begin if (m — n) > 0 then Accept:= True else Accept:= False; t:= TStringList.Create; end; t.Append(sql); //==Кол-во записей в таблице=== try function count(name: TMySQLQuery; table: String) :
case Ex ofWord; False: var begin sql: String;
name.Active:= False; begin name.SQL := t; sql:= 'SELECT * FROM ' + table + ';'; name.Active:= True; Query(name, sql, False);
end; //ShowMessage(table + ' ' + True: IntToStr(name.RecordCount)); begin if name.RecordCount 0 then
name.Active:= False; begin name.SQL := t; name.Last; name.ExecSQL; count:= StrToInt(name.Fields[0].AsString);
end; name.First; end; end Query:= True; else count:= 0;
except end; Query:= False;
end; end. end; procedure a(var m, n: Word); Листинг 3 Unit3.pas var
sql: String; unit Unit3; begin
interface ShowMessage('Товар успешно удален!!!'); end; uses Windows, Messages, SysUtils, Variants, Classes, procedure TForm3.BitBtn2Click(Sender: TObject); Graphics, Controls, Forms,begin Dialogs, StdCtrls, Buttons, Grids, DBGrids; MyData.Query1.Refresh; Close; type end;
TForm3 = class(TForm) DBGrid1: TDBGrid; end. BitBtn1: TBitBtn; BitBtn2: TBitBtn; Листинг 4 Unit4.pas procedure FormActivate(Sender: TObject);unit Unit4; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject);interface
private { Private declarations } uses public Windows, Messages, SysUtils, Variants, Classes, { Public declarations } Graphics, Controls, Forms, end; Dialogs, StdCtrls, ExtCtrls, DBCtrls;
var Form3: TForm3; sql: String;
implementation uses Unit2; {$R *.dfm}
procedure TForm3.FormActivate(Sender: TObject); begin sql:= 'SELECT art, name, price, country, garant FROM tbware, tbmanufacturer WHERE ' +
'tbware.man = tbmanufacturer.code;'; Query(MyData.Query2, sql, False); DBGrid1.DataSource:= MyData.DataSource2;
end;
procedure TForm3.BitBtn1Click(Sender: TObject); var
type
TForm4 = class(TForm) Panel1: TPanel; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button2: TButton; Button3: TButton; Label6: TLabel; Edit6: TEdit; ComboBox1: TComboBox; procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject);
k: String;
begin k:= MyData.Query2.Fields[0].AsString; sql:= 'DELETE FROM tbpko_ware WHERE ware = ' +
#39 + k + #39 + ';'; Query(MyData.Query3, sql, True); sql:= 'DELETE FROM tbrko_ware WHERE ware = ' +
#39 + k + #39 + ';'; Query(MyData.Query3, sql, True); sql:= 'DELETE FROM tbware WHERE art = ' + #39 + k
procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations }
+ #39 + ';'; end; Query(MyData.Query3, sql, True);type MyData.Query2.Refresh; s = set of Char;
var if (MyData.Query3.RecordCount > 0) and Form4: TForm4; (MyData.Query2.RecordCount = 0) then art, nm, man ,price, n, g, sql: String;c:= MyData.Query3.Fields[0].AsString;k: Boolean; if (MyData.Query2.RecordCount = 0) then w: s; procedure Clear; implementation uses Unit2, Other, Unit1; {$R *.dfm} procedure Clear; begin
with Form4 do
begin Edit1.Clear; Edit2.Clear; //Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit6.Clear;
end; end;
procedure TForm4.Button2Click(Sender: TObject); begin Close; end;
procedure TForm4.Button3Click(Sender: TObject); var
begin sql:= 'INSERT INTO tbware VALUES (' + #39 + art + #39 + ',' + #39 + nm + #39 + ',' + c + ',' + price + ',' + g + ');';
Query(MyData.Query3, sql, True); end; if k then begin
k := False; sql:= 'INSERT INTO tbpko(date) VALUES (' + #39 +
DBDate + #39 + ');'; Query(MyData.Query3, sql, True); m:= count(MyData.Query3, 'tbpko');
end; for i:= 1 to StrToInt(n) do begin
sql:= 'INSERT INTO tbpko_ware(ware, pko) VALUES ('+ #39 + art + #39 + ',' + IntToStr(m) + ');';
Query(MyData.Query3, sql, True); end; ShowMessage('Товар успешно добавлен!!!'); Clear; MyData.Query1.Refresh;
end; procedure TForm4.Button1Click(Sender: TObject);
c: String; i, l, m: Word;
begin art := Edit1.Text; nm := Edit2.Text; man := ComboBox1.Text; price := Edit4.Text; n := Edit5.Text; g := Edit6.Text; ShowMessage(man); if (art = '') or (nm = '') or (man = '') or (price = '') or (n =
'') or (g = '') then begin MessageBox(0, 'Заполнены не все поля!!!', 'АХТУНГ!!!', MB_OK);
exit; end; sql:= 'SELECT * FROM tbware WHERE
art='+#39+art+#39+';'; Query(MyData.Query2, sql, False); sql:= 'SELECT code FROM tbmanufacturer WHERE
country = ' + #39 + man + #39 + ';'; Query(MyData.Query3, sql, False);
begin Button3Click(Sender); Clear; Close;
end;
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
begin w:= ['0'..'9', #8]; if not (key in w) then key:= #0;
end;
procedure TForm4.Edit3KeyPress(Sender: TObject; var Key: Char);
begin w:= ['А'..'Я', 'а'..'я', #8]; if not (key in w) then key:= #0;
end;
procedure TForm4.FormActivate(Sender: TObject); var
i: Word; begin
k:= True; sql:= 'SELECT * FROM tbmanufacturer;'; Query(MyData.Query2, sql, False); while not MyData.Query2.Eof do begin
ComboBox1.Items.Append(MyData.Query2.Fields[1].AsString); MyData.Query2.Next; end; end;
end.
Листинг 5 Unit5.pas
unit Unit5;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids;
type
TForm5 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; DBGrid1: TDBGrid; procedure DBGrid1DblClick(Sender: TObject); procedure Edit2KeyPress(Sender: TObject; var Key:
Char); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form5: TForm5; sql: String;
implementation uses Unit2; {$R *.dfm}
procedure TForm5.DBGrid1DblClick(Sender: TObject); begin
Button1.Enabled:= True;
Label1.Caption:= MyData.Query2.Fields[0].AsString;
Edit1.Text:= MyData.Query2.Fields[1].AsString;
Edit2.Text:= MyData.Query2.Fields[2].AsString;
Edit3.Text:= MyData.Query2.Fields[3].AsString;
Edit1.Enabled:= True;
Edit2.Enabled:= True;
Edit3.Enabled:= True;
end;
procedure TForm5.Edit2KeyPress(Sender: TObject; var Key: Char); type a = set of Char; var
f: a;
begin
f:= ['0'..'9', #8];
if not (key in f) then key:= #0;
end;
procedure TForm5.Button1Click(Sender: TObject); var sql: String; begin if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then begin ShowMessage('Одно или несколько полей не содержат значении!!!');
exit;
end;
sql:= 'UPDATE tbware SET name = ' + #39 + Edit1.Text + #39 +
', price = ' + Edit2.Text + ', garant = ' + Edit3.Text + ' WHERE art = ' + #39
+ Label1.Caption + #39 + ';'; Query(MyData.Query3, sql, True); MyData.Query2.Refresh; //MyData.Query1.Refresh; Button1.Enabled:= False; Label1.Caption:= ''; Edit1.Text:= ''; Edit2.Text:= ''; Edit3.Text:= ''; Edit1.Enabled:= False; Edit2.Enabled:= False; Edit3.Enabled:= False;
end;
procedure TForm5.Button2Click(Sender: TObject); begin
MyData.Query1.Refresh; interface Close; end; uses
Windows, Messages, SysUtils, Variants, Classes, procedure TForm5.FormActivate(Sender: TObject); Graphics, Controls, Forms,begin Dialogs, StdCtrls, Buttons;
Button1.Enabled:= False; Edit1.Enabled:= False; type Edit2.Enabled:= False; TForm7 = class(TForm) Edit3.Enabled:= False; Edit1: TEdit; sql:= 'SELECT art, name, price, garant FROM tbware'; BitBtn1: TBitBtn; Query(MyData.Query2, sql, False); procedure Edit1KeyPress(Sender: TObject; var Key: DBGrid1.DataSource:= MyData.DataSource2; Char);
end; procedure BitBtn1Click(Sender: TObject); procedure FormActivate(Sender: TObject);end. private { Private declarations } public
{ Public declarations } Листинг 6 Unit6.pas end; unit Unit6;
var interface Form7: TForm7;
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, jpeg;
type
TAboutBox = class(TForm) Panel1: TPanel; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; OKButton: TButton;
private { Private declarations } public { Public declarations } end;
var
AboutBox: TAboutBox; implementation {$R *.dfm} end.
Листинг 7 Unit7.pas
implementation uses Unit1; {$R *.dfm}
procedure TForm7.Edit1KeyPress(Sender: TObject; var Key: Char); type d = set of Char; var c: d;
begin c:= ['0'..'9', #8]; if not(key in c) then key:= #0;
end;
procedure TForm7.BitBtn1Click(Sender: TObject);
begin if Edit1.Text = '' then begin
ShowMessage('═└─╬ ┬┬┼╤╥╚ ╟═└╫┼═╚┼!!!');
exit; end; Unit1.r:= StrToInt(Edit1.Text); Close;
end;
unit Unit7; procedure TForm7.FormActivate(Sender: TObject); begin typeEdit1.Clear;procedure TForm8.BitBtn1Click(Sender: TObject);End;beginend.if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '')unit Unit8;or (Edit4.Text = '') or (Edit5.Text = '') then
begininterfaceShowMessage('Одно из полей не заполнено!!!');
exit;usesend;Windows, Messages, SysUtils, Variants, Classes,Form8.DragCursor:= crHourGlass;Graphics, Controls, Forms,MyData.Connection1.Connected := False;Dialogs, StdCtrls, Buttons, ExtCtrls;MyData.Connection1.UserName := Edit1.Text;
MyData.Connection1.UserPassword:= Edit2.Text;typeMyData.Connection1.Host := Edit3.Text;TForm8