Примечание | от автора: Программа полностью разработана в Borland Delphi 7 Studio с использованием стороннего компонента TmySQLDataBase. от редактора: только текстовый файл |
Загрузить архив: | |
Файл: ref-24085.zip (370kb [zip], Скачиваний: 150) скачать |
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ»
ФАКУЛЬТЕТ ЭКОНОМИКИ И ИНФОРМАТИКИ
КАФЕДРА ИНФОРМАТИКИ
КУРСОВОЙ ПРОЕКТ
по дисциплине «Программирование» на тему: “Разработка автоматизированного рабочего места менеджера розничной торговли”
Выполнил: студент 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 Разработка решений по специальному математическому обеспечению ИС.
Схема 2. Общий алгоритм работы программы
2.3.2 Разработка алгоритма для решения отдельных функциональных задач.
– шаблонов.
2.3.3. Разработка решений по информационному обеспечению ИС
Принципы организации информационного обеспечения ИС
Основные принципы организации информационного обеспечения, необходимого для корректной работы программы “Розничная торговля ”:
• отделение данных от интерфейса пользователя;
2.3.4. Разработка решений по техническому обеспечению ИС. Минимальные требования к аппаратному обеспечению приложения “Розничная торговля ”
2.3.5. Разработка решений по программному обеспечению Структура программного обеспечения
Схема 3. Структура программного обеспечения
Краткая характеристика общего программного обеспечения Операционная система Приложение “Розничная торговля ” может функционировать в компьютерах с установленной ОС Window 2000 и новее, также для корректной работы приложения на машине должен быть установлен MS EXCEL XP.
ЗАКЛЮЧЕНИЕ
В ходе данной работы была разработана система «Розничная торголя», которая полностью выполняет необходимые функции. Система полностью разработана в среде программирования Delphi 7 Studio с использованием компонента TmySQLDataBase.
Система «Розничная торговля» является открытой и легко может быть дополнена произвольными функциями, реализующими дополнительные возможности, например:
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
http://www.mysql.ru/docs
11.Романов В.П., Емельянова Н.З., Партыка Т.Л. Проектирование экономических информационных систем: методология и современные технологии. Учебное пособие. – М.: Издательство «Экзамен», 2005.
12.Руссинович М., Соломон Д. Внутреннее устройство MS Windows: Windows 2003 Server, Windows XP, Windows 2000. Мастер-класс. / Пер. с англ. – 4-е издание – СПб.: Питер, 2005
13.Семенов М.И. Автоматизированные информационные технологии в экономике. – М.: Финансы и статистика, 2002.
14.Справочное руководство по MySQL http://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; | private | |
DBGrid1: TDBGrid; | { Private declarations } | |
BitBtn1: TBitBtn; | public | |
BitBtn2: TBitBtn; | { Public declarations } | |
StringGrid1: TStringGrid; | end; | |
Label1: TLabel; | ||
Label2: TLabel; | var | |
Label3: 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; | implementation | |
N3: TMenuItem; | uses | |
N4: TMenuItem; | Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8, | |
N5: TMenuItem; | Unit9, Other; | |
N6: TMenuItem; | {$R *.dfm} | |
N7: TMenuItem; | procedure Init; | |
N8: TMenuItem; | begin | |
N9: TMenuItem; | Form1.Label2.Caption:= '0'; | |
N11: TMenuItem; | Form1.BitBtn1.Enabled:= False; | |
N13: TMenuItem; | Form1.BitBtn2.Enabled:= False; | |
SpeedButton1: TSpeedButton; | with Form1.StringGrid1 do | |
ActionList1: TActionList; | begin | |
Panel2: 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; | begin | |
procedure FormCreate(Sender: TObject); | init; | |
procedure DBGrid1DblClick(Sender: TObject); | end; | |
procedure BitBtn2Click(Sender: TObject); | procedure TForm1.DBGrid1DblClick(Sender: TObject); | |
procedure BitBtn1Click(Sender: TObject); | var | |
procedure 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;
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 type
Edit1.Clear; | procedure TForm8.BitBtn1Click(Sender: TObject); |
End; | begin |
end. | if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') |
unit Unit8; | or (Edit4.Text = '') or (Edit5.Text = '') then |
begin | |
interface | ShowMessage('Одно из полей не заполнено!!!'); |
exit; | |
uses | end; |
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; | |
type | MyData.Connection1.Host := Edit3.Text; |
TForm8 = class(TForm) | MyData.Connection1.DatabaseName:= Edit4.Text; |
Panel1: TPanel; | MyData.Connection1.Port := StrToInt(Edit5.Text); |
Panel2: TPanel; | if not MyConnection then |
Edit1: TEdit; | begin |
Edit2: TEdit; | MessageBox(0, 'ИНВАЛИД КОННЕКШН!!!', |
Edit3: TEdit; | 'АХТУНГ', MB_OK); |
Edit4: TEdit; | exit; |
Edit5: TEdit; | end; |
BitBtn1: TBitBtn; | Form1.DBGrid1.Enabled:= True; |
BitBtn2: TBitBtn; | Form1.SpeedButton1.Enabled:= True; |
Label1: TLabel; | Form1.SpeedButton2.Enabled:= True; |
Label2: TLabel; | Form1.SpeedButton3.Enabled:= True; |
Label3: TLabel; | Form1.SpeedButton4.Enabled:= True; |
Label4: TLabel; | Form1.SpeedButton5.Enabled:= True; |
Label5: TLabel; | Form1.Edit1.Enabled:= True; |
procedure FormActivate(Sender: TObject); | Form1.MainMenu1.Items[0][1].Enabled:= True; |
procedure BitBtn1Click(Sender: TObject); | Form1.MainMenu1.Items[1][0].Enabled:= True; |
procedure BitBtn2Click(Sender: TObject); | Form1.MainMenu1.Items[1][1].Enabled:= True; |
private | Form1.MainMenu1.Items[1][2].Enabled:= True; |
{ Private declarations } | MyData.Query1.Active:= True; |
public | Form8.DragCursor:= crDefault; |
{ Public declarations } | Close; |
end; | end; |
var | procedure TForm8.BitBtn2Click(Sender: TObject); |
Form8: TForm8; | begin |
implementation | Close; |
uses | end; |
Unit2, Unit1; | |
{$R *.dfm} | end. |
Листинг 9 Unit9.pas | |
procedure TForm8.FormActivate(Sender: TObject); | unit Unit9; |
begin | |
Edit1.Text:= MyData.Connection1.UserName; | interface |
Edit2.Text:= MyData.Connection1.UserPassword; | |
Edit3.Text:= MyData.Connection1.Host; | uses |
Edit4.Text:= MyData.Connection1.DatabaseName; | Windows, Messages, SysUtils, Variants, Classes, |
Edit5.Text:= IntToStr(MyData.Connection1.Port); | Graphics, Controls, Forms, |
end; | Dialogs, OleCtnrs, ComObj, StdCtrls, Buttons, ExtCtrls; |
Листинг 8 Unit8.pas |
TForm9 = class(TForm) Panel1: TPanel; OleContainer1: TOleContainer; BitBtn1: TBitBtn; Panel2: TPanel; BitBtn2: TBitBtn; procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action:
TCloseAction); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject);
private { Private declarations } public { Public declarations } end; const xlCenter = -4108;
var Form9: TForm9; WB : Variant;
i : Word; implementation uses Unit1, Other; {$R *.dfm}
procedure TForm9.FormActivate(Sender: TObject);
begin // создаем OLE объект OleContainer1.CreateObject('Excel.Sheet', False); // присваиваем его псевдониму WB:= OleContainer1.OleObject; // Дизаин чека //=== начало === WB.Worksheets[1].Range['A1:D1'].MergeCells:= True; WB.Worksheets[1].Range['A1:A5'].Font.Bold:= True; WB.Worksheets[1].Cells[1, 1].Font.Size:= 14; WB.Worksheets[1].Cells[1, 1]:= 'ТОВАРНЫЙ ЧЕК №
' + IntToStr(Rec); WB.Worksheets[1].Range['A2:C2'].MergeCells:= True; WB.WorkSheets[1].Cells[2, 1].Font.Italic:= True; WB.WorkSheets[1].Cells[2, 1].Font.Size:= 8; WB.Worksheets[1].Cells[2, 1]:= DateToStr(Date) + ' ' +
TimeToStr(Time); WB.Worksheets[1].Range['A4:C4'].MergeCells:= True; WB.Worksheets[1].Cells[4, 1]:= 'Продавец: ООО "X"'; WB.Worksheets[1].Range['D4: I4'].MergeCells:= True; WB.Worksheets[1].Cells[4, 4].Font.Bold:= True; WB.Worksheets[1].Cells[4, 4].Font.Italic:= True; WB.Worksheets[1].Cells[4, 4].Font.Size:= 8; WB.Worksheets[1].Cells[4, 4]:= 'ИНН
AAXXXXXXXXXX Юр. адрес: XXXXXXXXXXXXXXX';
WB.Worksheets[1].Range['A5:C5'].MergeCells:=True; WB.Worksheets[1].Cells[5, 1]:= 'Покупатель: физ. лицо'; WB.Worksheets[1].Rows['6:6'].RowHeight:= 30;
WB.Worksheets[1].Range['A6:I6'].Interior.ColorIndex:= 15; WB.Worksheets[1].Range['A6:I6'].VerticalAlignment:= xlCenter; WB.Worksheets[1].Columns['F:F'].ColumnWidth:=
10.29; WB.Worksheets[1].Columns['G:G'].ColumnWidth:= 10; WB.Worksheets[1].Columns['H:H'].ColumnWidth:= 9; //Вывод из грида -начало for i:= 0 to Form1.StringGrid1.RowCount do begin
WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i
+ 6, 2],WB.Worksheets[1].Cells[i + 6, 5]].MergeCells:=True; WB.Worksheets[1].Cells[i + 6, 1]:= Form1.StringGrid1.Cells[0, i]; WB.Worksheets[1].Cells[i + 6, 2]:= Form1.StringGrid1.Cells[1, i]; WB.Worksheets[1].Cells[i + 6, 6]:= Form1.StringGrid1.Cells[2, i]; WB.Worksheets[1].Cells[i + 6, 7]:= Form1.StringGrid1.Cells[3, i]; WB.Worksheets[1].Cells[i + 6, 8]:=
Form1.StringGrid1.Cells[4, i]; end; //Вывод из грида -конец WB.Worksheets[1].Cells[i + 6, 7].Font.Bold:= True; WB.Worksheets[1].Cells[i + 6, 8].Font.Bold:= True; WB.Worksheets[1].Cells[i + 6, 7]:= 'Итого: '; WB.Worksheets[1].Cells[i + 6, 8]:=
Form1.Label2.Caption; WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i + 7, 1],WB.Worksheets[1].Cells[i + 7 , 8]].MergeCells:=True;
WB.Worksheets[1].Cells[i + 7, 1].Font.Bold:= True; WB.Worksheets[1].Cells[i + 7, 1].Font.Italic:= True; WB.Worksheets[1].Cells[i + 7, 1]:= 'Всего к оплате: ' +
SumNumToFull(StrToFloat(Form1.Label2.Caption)); WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i + 9, 1],WB.Worksheets[1].Cells[i + 9 , 5]].MergeCells:=True; WB.Worksheets[1].Cells[i + 9, 1]:= 'Отпустил:_______________________'; WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i + 10, 1],WB.Worksheets[1].Cells[i + 10, 5]].MergeCells:=True; WB.Worksheets[1].Cells[i + 10, 1]:= 'Получил:________________________'; //---Конец дизайна-------- end;
procedure TForm9.FormClose(Sender: TObject; var Action: TCloseAction);
begin | begin | |
WB.Application.Quit; | FindART:= i; | |
end; | exit; | |
end; | ||
procedure TForm9.BitBtn1Click(Sender: TObject); | end; | |
begin | FindART:= -1; | |
WB.ActiveSheet.PrintOut; | end; | |
WB.Application.Quit; | function SumNumToFull(Number:real):string; | |
Close; | var | |
end; | PartNum, TruncNum, NumTMP, D: integer; | |
NumStr : string; | ||
procedure TForm9.BitBtn2Click(Sender: TObject); | i, R : byte; | |
begin | Flag11 : boolean; | |
WB.Application.Quit; | begin | |
Close; | D:=1000000; | |
end; | R:=4; | |
end. | //выделяем рубли | |
TruncNum:=Trunc(Number); | ||
Листинг 11 Other.pas | if TruncNum<>0 then | |
repeat | ||
unit Other; | PartNum:=TruncNum div D; | |
Dec(R); | ||
interface | D:=D div 1000; | |
uses | until | |
SysUtils, Grids, Unit2; | PartNum<>0 | |
function DBDate : String; | else | |
function FindART(name : TStringGrid; k : String) : | R:=0; | |
Integer; | // перевод рублей | |
function SumNumToFull(Number:real):string; | for i:=R downto 1 do | |
begin | ||
Flag11:=False; | ||
implementation | // выделение цифры сотен | |
//Время в формате БД | NumTMP:=PartNum div 100; | |
function DBDate : String; | case NumTMP of | |
var | 1: NumStr:=NumStr+'сто '; | |
DelphiDate, SqlDate : String; | 2: NumStr:=NumStr+'двести '; | |
begin | 3: NumStr:=NumStr+'триста '; | |
DelphiDate:=DateToStr(Date()); | 4: NumStr:=NumStr+'четыреста '; | |
SqlDate:=Copy(DelphiDate,7,4)+' | 5: NumStr:=NumStr+'пятьсот '; | |
'+Copy(DelphiDate,4,2)+'-'+Copy(DelphiDate,1,2); | 6: NumStr:=NumStr+'шестьсот '; | |
DBDate:=SqlDate; | 7: NumStr:=NumStr+'семьсот '; | |
end; | 8: NumStr:=NumStr+'восемьсот '; | |
//===Поиск в гриде по коду товара==== | 9: NumStr:=NumStr+'девятьсот '; | |
function FindART(name : TStringGrid; k : String) : | end; | |
Integer; | // выделение цифры десятков | |
var | NumTMP:=(PartNum mod 100) div 10; | |
i : Word; | case NumTMP of | |
begin | 1: | |
begin | ||
//ShowMessage(IntToStr(Form1.StringGrid1.RowCount)); | NumTMP:=PartNum mod 100; | |
for i:= 1 to name.RowCount - 1 do | case NumTMP of | |
begin | 10: NumStr:=NumStr+'десять '; | |
if (name.Cells[0, i] = k) then | 11: NumStr:=NumStr+'одиннадцать '; |
12: NumStr:=NumStr+'двенадцать ';
13: NumStr:=NumStr+'тринадцать ';
14: NumStr:=NumStr+'четырнадцать ';
15: NumStr:=NumStr+'пятнадцать ';
16: NumStr:=NumStr+'шестнадцать ';
17: NumStr:=NumStr+'семнадцать ';
18: NumStr:=NumStr+'восемнадцать ';
19: NumStr:=NumStr+'девятнадцать '; end; case i of
3: NumStr:=NumStr+'миллионов ';
2: NumStr:=NumStr+'тысяч ';
1: NumStr:=NumStr+'рублей '; end; Flag11:=True;
end;
2: NumStr:=NumStr+'двадцать ';
3: NumStr:=NumStr+'тридцать ';
4: NumStr:=NumStr+'сорок ';
5: NumStr:=NumStr+'пятьдесят ';
6: NumStr:=NumStr+'шестьдесят ';
7: NumStr:=NumStr+'семьдесят ';
8: NumStr:=NumStr+'восемьдесят ';
9: NumStr:=NumStr+'девяносто '; end; // выделение цифры единиц NumTMP:=PartNum mod 10; if not Flag11 then begin
case NumTMP of
1: if i=2 then NumStr:=NumStr+'одна '
else NumStr:=NumStr+'один ';
2: if i=2 then NumStr:=NumStr+'две '
else NumStr:=NumStr+'два ';
3: NumStr:=NumStr+'три ';
4: NumStr:=NumStr+'четыре ';
5: NumStr:=NumStr+'пять ';
6: NumStr:=NumStr+'шесть ';
7: NumStr:=NumStr+'семь ';
8: NumStr:=NumStr+'восемь ';
9: NumStr:=NumStr+'девять '; end; case i of
3: case NumTMP of
1: NumStr:=NumStr+'миллион '; 2,3,4: NumStr:=NumStr+'миллиона ';
else NumStr:=NumStr+'миллионов '; end;
2: case NumTMP of
1 : NumStr:=NumStr+'тысяча '; 2,3,4: NumStr:=NumStr+'тысячи '; else
if PartNum<>0 then NumStr:=NumStr+'тысяч '; end;
1: case NumTMP of
1 : NumStr:=NumStr+'рубль '; 2,3,4: NumStr:=NumStr+'рубля '; else
NumStr:=NumStr+'рублей '; end;
end; end; if i>1 then begin
PartNum:=(TruncNum mod (D*1000)) div D; D:=D div 1000;
end; end; //перевод копеек PartNum:=Round(Frac(Number)*100); if PartNum=0 then begin
SumNumToFull:=NumStr+'00 копеек';
Exit; end; // выделение цифры десятков NumTMP:=PartNum div 10; if NumTMP=0 then
NumStr:=NumStr+'0'+IntToStr(PartNum)+' ' else
NumStr:=NumStr+IntToStr(PartNum)+' '; // выделение цифры единиц NumTMP:=PartNum mod 10; case NumTMP of
1: if PartNum<>11 then NumStr:=NumStr+'копейка' else NumStr:=NumStr+'копеек'; 2,3,4: if (PartNum<5) or (PartNum>14) then NumStr:=NumStr+'копейки' else
NumStr:=NumStr+'копеек'; else
NumStr:=NumStr+'копеек';
end;
SumNumToFull:=NumStr; end;
end.