Пункт меню «Завершение работы»




ЗНАЕТЕ ЛИ ВЫ?

Пункт меню «Завершение работы»



При выборе этого пункта завершается работа с приложением.

 

При работе с пунктами «Приход товара», «Отпуск товара» и «Исследования» корректируется информация в базе данных. Если защита включена, то для работы с этими пунктами сначала отображается окно ввода пароля (Рис. 16). При неверном вводе пароля действия с информацией таблиц базы данных недоступны. Эта защита введена от несанкционированных действий случайных клиентов.

Оценка результатов решения задачи

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

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

В ходе выполнения работы по данной теме были освоены основные приемы работы с базами данных в среде программирования C++ Builder, изучена современнейшая технология ADO, работающая с базами данных. Применен сервер автоматизации для создания отчетов в формате Excel таблиц.

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

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

ЗАКЛЮЧЕНИЕ

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

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

Программа снабжена простым и интуитивным интерфейсом, но, тем не менее, в ней реализованы все необходимые операции с таблицами баз данных. Каждое действия сопровождается проверкой вводимой информации. Информация при желании защищается паролем.

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

Общая часть пояснительной записки к дипломной работе содержит цели разработки программы, проанализированы средства программирования. Дается краткая информация о среде программирования C++ Builder, с помощью которой создавался программный продукт.

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

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

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Семакин И.Г., Шестаков А.П. Основы программирования. - М.: ACADEMA 2007. 432 с.

2. Культин Н.Б. C++ Builder в задачах и примерах. - БХВ–Петербург, 2007.

3. Герберт Шилдт С++ Базовый курс. - Вильямс, 2008.

4. Дейтел Х.М., Дейтел П.Дж. Как программировать на С++. - М.: Бином-Пресс, 2010.

5. Культин Н.Б. С/С++ в задачах и примерах. - СПб: BHV-СПб, 2005.

6. Архангельский А.Я., Тагин М.А. Программирование в C++ Builder 6 и 2006. – М. ООО «Бином-Пресс», 2007 – 1184с. С ил.

7. С. Бобровский Самоучитель программирования на языке C++ в системе Borland C++Builder 5.0. - «ДЕСС КОМ», 2001.

8. Архангельский А.Я., Тагин М.А., Программирование в С++ Builder 6 и 2006. – М.: ООО «Бином-Пресс», 2002.

9. Тимошок Т.В. «Microsoft Access 2003. Самоучитель». – М.: «Диалектика», 2004.

 

ПРИЛОЖЕНИЕ 1

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

Модуль Project1.cpp

//---Главный модуль проекта-------------------------------------------

#include <vcl.h>

#pragma hdrstop

//---------------------------------------------------------------------------

USEFORM("Unit1.cpp", Form1); //Список модулей проекта

USEFORM("Unit2.cpp", Form2);

USEFORM("PostUnit.cpp", Form3);

USEFORM("GlUnit.cpp", Form4);

USEFORM("UnitTabl.cpp", FormTabl);

USEFORM("UnitOtp.cpp", FormOtp);

USEFORM("UnitInfo.cpp", FormInfo);

USEFORM("UnitIssledovanie.cpp", FormIs);

USEFORM("UnitMap.cpp", FormMap);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm4), &Form4);

Application->CreateForm(__classid(TForm1), &Form1);

Application->CreateForm(__classid(TForm2), &Form2);

Application->CreateForm(__classid(TForm3), &Form3);

Application->CreateForm(__classid(TFormTabl), &FormTabl);

Application->CreateForm(__classid(TFormOtp), &FormOtp);

Application->CreateForm(__classid(TFormInfo), &FormInfo);

Application->CreateForm(__classid(TFormIs), &FormIs);

Application->CreateForm(__classid(TFormMap), &FormMap);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

//---------------------------------------------------------------------------

Модуль GlUnit.cpp

//----Модуль главного меню проекта-----------------------------

#include <vcl.h>

#pragma hdrstop

#include "GlUnit.h"

#include "Unit1.h"

#include "PostUnit.h"

#include "UnitOtp.h"

#include "UnitTabl.h"

#include "UnitInfo.h"

#include <inifiles.hpp>

#include "UnitIssledovanie.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm4 *Form4;

//---------------------------------------------------------------------------

__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}

//---Выбор пункта «Состояние склада»----------------------------------

void __fastcall TForm4::Panel2Click(TObject *Sender)

{

Form1->Show();

}

//---------------------------------------------------------------------------

//--Выбор пункта «Поступление товара» с паролем----------

void __fastcall TForm4::Panel3Click(TObject *Sender)

{

String password;

if (Form4->Key==1) //Есть защита с паролем

do

{

if (InputQuery("Ввод пароля", "Введите пароль",password))

if (password!=Form4->Pas)

ShowMessage("Пароль не верный. Введите еще раз");

}while (password!=Form4->Pas);

Form3->Show();

}

//---Выбор пункта меню «Просмотр таблиц»-------------------

void __fastcall TForm4::Panel6Click(TObject *Sender)

{

FormTabl->Show();

}

//---------------------------------------------------------------------------

//----Форма с отпуском товара с паролем

void __fastcall TForm4::Panel4Click(TObject *Sender)

{

String password;

if (Form4->Key==1) //Есть защита с паролем

do

{

if (InputQuery("Ввод пароля", "Введите пароль",password))

if (password!=Form4->Pas)

ShowMessage("Пароль не верный. Введите еще раз");

}while (password!=Form4->Pas);

FormOtp->Show();

}

//---------------------------------------------------------------------------

//--------Смена цвета всех панелей при наведении на них мышью

void __fastcall TForm4::Panel1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

((TPanel *)Sender)->Color=clRed; //Доступ в разделяемом событии

}

//---------------------------------------------------------------------------

//--------Панели окрасить в один цвет

void __fastcall TForm4::Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

Form4->Panel8->Color=clLime;

Form4->Panel2->Color=clLime;

Form4->Panel3->Color=clLime;

Form4->Panel4->Color=clLime;

Form4->Panel5->Color=clLime;

Form4->Panel6->Color=clLime;

Form4->Panel7->Color=clLime;

}

//---------------------------------------------------------------------------

//---------Завершение работы приложения

void __fastcall TForm4::Panel7Click(TObject *Sender)

{

Form4->Close();

}

//----Открыть форму с исследованием

void __fastcall TForm4::Panel5Click(TObject *Sender)

{

FormIs->Show();

}

//---------------------------------------------------------------------------

//Открыть форму с исследованием товара склада

void __fastcall TForm4::Panel8Click(TObject *Sender)

{

FormInfo->Show();

}

//---------------------------------------------------------------------------

//---Загрузка программы-чтение настроек из Ini-файла

void __fastcall TForm4::FormShow(TObject *Sender)

{

Form4->ini=new TIniFile (ExtractFilePath (Application->ExeName)+"Key.ini");

Form4->Pas=Form4->ini->ReadString ("PassWord", "Pas", "" );

Form4->Key=Form4->ini->ReadInteger ("PassWord", "Key", 0 );

}

//---------------------------------------------------------------------------

//----При завершении программы - сохранение параметров настройки

void __fastcall TForm4::FormClose(TObject *Sender, TCloseAction &Action)

{

ini->WriteString ("PassWord", "Pas",Form4->Pas); //Новый пароль

ini->WriteInteger ("PassWord", "Key",Form4->Key); //Разрешение пароля

delete ini;

}

//---------------------------------------------------------------------------

 

Модуль PostUnit

//--------Форма поступления товара

#include <vcl.h>

#pragma hdrstop

#include "PostUnit.h"

#include "Unit1.h"

#include "GlUnit.h"

#include "UnitTabl.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

int kol_post;

int p=-1,sum_sdelki,max_nomer;

Variant ExAp=0; //Сервер автоматизации Excel

Variant Book; //Рабочая книга Excel

Variant Sheet; //Рабочий лист книги

Variant Range; //Ячейки листа

//---------------------------------------------------------------------------

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//----------------Функция перевода числовой денежной суммы в строку

String _fastcall TForm3::convert(int rub)

{

const String Name1[]={ "один","два","три","четыре","пять","шесть","семь",

"восемь","девять","десять","одиннадцать","двенадцать","Тринадцать",

"четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать",

"девятнадцать" };

const String Name2[]={"двадцать","тридцать","сорок","пятьдесят","шестьдесят",

"семьдесят","восемьдесят","девяносто"};

const String Name3[]={"сто","двести","триста","четыреста","пятьсот","шестьсот",

"семьсот","восемьсот","девятьсот"};

const String Name4[]={"одна тысяча ","две тысячи ","три тысячи ",

"четыре тысячи "};

String Rub="рублей";

int N;

String S=""; //Результирующая строка

N=rub/1000; //Выделение целых тысяч

if (N>0) //Есть тысячи

{

if (N>99) //Сотни тысяч

{

S+=Name3[N/100-1]+" ";

N=N-(N/100)*100; //Выделение десятков и единиц тысяч

}

if (N>0)

{

if (N<=19)

if (N<=4) S+=Name4[N-1];

else S+=Name1[N-1]+" тысяч ";

else

{

S+=Name2[N/10-2]+" ";

N=N-(N/10)*10;

if (N==0) S+=" тысяч ";

else

if (N<=4) S+=Name4[N-1];

else S+=Name1[N-1]+" тысяч ";

}

}

else //N=0

S+=" тысяч ";

} //if (N>0)

//выделение разрядов до тысячи

N=rub-rub/1000*1000;

if (N>0)

{

if (N>99) S+=Name3[N/100-1]+" "; //Обработка сотен

//Выделение десятков и единиц

N=N-(N/100)*100;

}

if (N>0)

{

if (N<=19) S+=Name1[N-1]+" ";

else

{

S+=Name2[N/10-2]+" ";

//Выделение единиц

N=N-(N/10)*10;

if (N>0) S+=Name1[N-1]+" ";

}

if (N==1) Rub="рубль";

else

if ((N<5)&&(N>0)) Rub="рубля";

}

if (S=="") S="нуль ";

S+=Rub+" ";

//Первая буква в верхний регистр

S=AnsiUpperCase(S.SubString(1,1))+S.SubString(2,1000);

return S;

}

 

//Отобразить шапку таблицы и текущую дату при отображении формы-

void __fastcall TForm3::FormShow(TObject *Sender)

{

int z;

kol_post=0;

sum_sdelki=0;

//Настройка таблицы

Form3->StringGrid1->Cells[0][0]="Артикул";

Form3->StringGrid1->Cells[1][0]="Название товара";

Form3->StringGrid1->Cells[2][0]="Кол-во";

Form3->StringGrid1->Cells[3][0]="Закупочная";

Form3->StringGrid1->Cells[4][0]="Оптовая";

Form3->StringGrid1->Cells[5][0]="Розничная";

Form3->StringGrid1->Cells[6][0]="Сумма";

Form3->StringGrid1->RowCount=2;

Form3->StringGrid1->Rows[1]->Clear();

Form3->DateTimePicker1->Date=Date(); //Текущая дата

//Получение номера следующей накладной

FormTabl->ADOTablePrix->Sort="nomer ASC"; //Сортировка по возрастанию

z=FormTabl->ADOTablePrix->RecordCount;

FormTabl->ADOTablePrix->MoveBy(z); //Переместить к последней записи

max_nomer=FormTabl->ADOTablePrixnomer->Value;

max_nomer++;

Form3->Edit8->Text=IntToStr(max_nomer);

Form3->Edit1->SetFocus();

Form3->Edit7->Text=IntToStr(sum_sdelki);

ExAp=Variant::CreateObject ("Excel.Application"); //Создать сервер автоматизации

}

//-----------------------------------------------------------------------------------------

//------Кнопка "Принять товар"-----------------------------------------------

void __fastcall TForm3::Button2Click(TObject *Sender)

{

int x, y, kol_tov;

if(Form3->Edit1->Text=="")

{

MessageDlg("Вы не ввели артикул",mtError, TMsgDlgButtons() << mbOK, 0);

Form3->Edit1->SetFocus();

return;

}

if(Form3->Edit2->Text=="")

{

MessageDlg("Вы не ввели название",mtError, TMsgDlgButtons() << mbOK, 0);

Form3->Edit2->SetFocus();

return;

}

if (Form3->Edit3->Text=="")

{

MessageDlg("Вы не ввели кол-во",mtError, TMsgDlgButtons() << mbOK, 0);

Form3->Edit3->SetFocus();

return;

}

 

kol_tov=StrToInt (Form3->Edit3->Text);

if (p==1) //Такой товар уже есть на складе

{

Form1->ADOTable1->Edit(); //Перевести БД в режим редактирования

if (kol_tov!=0) //Пришел товар

{

//изменить количество поступившего товара

Form1->ADOTable1post->Value=Form1->ADOTable1post->Value+kol_tov;

//Изменить поле количества товара на складе

Form1->ADOTable1kol->Value=

Form1->ADOTable1post->Value-Form1->ADOTable1otp->Value;

kol_post++; //Увеличить кол-во поступившего товара

//Запись в таблицу StringGrid

Form3->StringGrid1->RowCount=kol_post+1;

Form3->StringGrid1->Cells[0][kol_post]=Form3->Edit1->Text;

Form3->StringGrid1->Cells[1][kol_post]=Form3->Edit2->Text;

Form3->StringGrid1->Cells[2][kol_post]=Form3->Edit3->Text;

Form3->StringGrid1->Cells[3][kol_post]=Form3->Edit4->Text;

Form3->StringGrid1->Cells[4][kol_post]=Form3->Edit5->Text;

Form3->StringGrid1->Cells[5][kol_post]=Form3->Edit6->Text;

Form3->StringGrid1->Cells[6][kol_post]=

IntToStr(kol_tov*(StrToInt(Form3->Edit4->Text)));

sum_sdelki+=StrToInt( Form3->StringGrid1->Cells[6][kol_post]);

}

}

else //Такого товара на складе нет - новая запись в таблице

{

Form1->ADOTable1->Append(); //Дополнить таблицу

Form1->ADOTable1art->Value=Form3->Edit1->Text;

Form1->ADOTable1name->Value=Form3->Edit2->Text;

Form1->ADOTable1post->Value=kol_tov;

Form1->ADOTable1otp->Value=0;

Form1->ADOTable1kol->Value=kol_tov;

kol_post++; //Увеличить кол-во поступившего товара

//Запись в таблицу StringGrid

Form3->StringGrid1->RowCount=kol_post+1;

Form3->StringGrid1->Cells[0][kol_post]=Form3->Edit1->Text;

Form3->StringGrid1->Cells[1][kol_post]=Form3->Edit2->Text;

Form3->StringGrid1->Cells[2][kol_post]=Form3->Edit3->Text;

Form3->StringGrid1->Cells[3][kol_post]=Form3->Edit4->Text;

Form3->StringGrid1->Cells[4][kol_post]=Form3->Edit5->Text;

Form3->StringGrid1->Cells[5][kol_post]=Form3->Edit6->Text;

Form3->StringGrid1->Cells[6][kol_post]=

IntToStr(kol_tov*(StrToInt(Form3->Edit4->Text)));

sum_sdelki+=StrToInt( Form3->StringGrid1->Cells[6][kol_post]);

}

//Корректировка цен на имеющийся товар

Form1->ADOTable1zak->Value=StrToInt(Form3->Edit4->Text);

Form1->ADOTable1opt->Value=StrToInt(Form3->Edit5->Text);

Form1->ADOTable1roz->Value=StrToInt(Form3->Edit6->Text);

Form1->ADOTable1->Post(); //Сохранение новых поступлений

//Пересчет общего количества товара на складе

Form1->Edit1->Text=IntToStr(StrToInt(Form1->Edit1->Text)+kol_tov);

Form3->Edit1->Clear(); Form3->Edit2->Clear(); Form3->Edit3->Clear();

Form3->Edit4->Clear(); Form3->Edit5->Clear(); Form3->Edit6->Clear();

Form3->Edit7->Text=IntToStr(sum_sdelki);

p=-1; //Сброс результатов предыдущего поиска

Form3->Edit1->SetFocus();

}

//---------------------------------------------------------------------------

//-----Реакция на клавишу Enter при вводе артикля товара

void __fastcall TForm3::Edit1KeyPress(TObject *Sender, char &Key)

{ int i;

int kol_zap;

String ar;

if (Key==13) //Клавиша Enter

{

ar=Form3->Edit1->Text; //Получить артикль введенного товара

kol_zap=Form1->ADOTable1->RecordCount; //Количество записей

Form1->ADOTable1->First(); //Перемещение к первой записи БД

for (i=0; i<kol_zap;i++) //Перебор всех записей

{

if (ar==Form1->ADOTable1art->Value) //Имеется товар с таким артиклем

{

Form3->Edit2->Text=Form1->ADOTable1name->Value; //название товара

Form3->Edit2->ReadOnly=true;

Form3->Edit4->Text=IntToStr (Form1->ADOTable1zak->Value);

Form3->Edit5->Text=IntToStr (Form1->ADOTable1opt->Value);

Form3->Edit6->Text=IntToStr (Form1->ADOTable1roz->Value);

Form3->Edit3->SetFocus(); //Переход фокуса на ввод количества

p=1; //Нашли

break; //Поиск прекратить

}

Form1->ADOTable1->Next(); //Искать дальше

Form3->Edit2->SetFocus();

Form3->Edit2->ReadOnly=false;

}

}

}

//--------------------------------------------------------------------------------------

//-----При закрытии формы сохранить приход товара в таблице БД-------------

void __fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)

{

int i;

for (i=1; i<=kol_post; i++) //По всем записям в StringGrid

{

FormTabl->ADOTablePrix->Append();

FormTabl->ADOTablePrixdata_pr->Value=

DateToStr (Form3->DateTimePicker1->Date);

FormTabl->ADOTablePrixart->Value=Form3->StringGrid1->Cells[0][i];

FormTabl->ADOTablePrixnaz->Value=Form3->StringGrid1->Cells[1][i];

FormTabl->ADOTablePrixkol->Value=StrToInt(Form3->StringGrid1->Cells[2][i]);

FormTabl->ADOTablePrixzak->Value=StrToInt(Form3->StringGrid1->Cells[3][i]);

FormTabl->ADOTablePrixopt->Value=StrToInt(Form3->StringGrid1->Cells[4][i]);

FormTabl->ADOTablePrixroz->Value=StrToInt(Form3->StringGrid1->Cells[5][i]);

FormTabl->ADOTablePrixsum->Value=StrToInt(Form3->StringGrid1->Cells[6][i]);

FormTabl->ADOTablePrixnomer->Value=StrToInt(Form3->Edit8->Text);

FormTabl->ADOTablePrix->Post();

}

ExAp.OleProcedure("Quit"); //Закрытие сервера

ExAp.Clear();

}

//---------------------------------------------------------------------------

//-----------------Переход в главное меню

void __fastcall TForm3::BitBtn1Click(TObject *Sender)

{

Form3->Close();

Form4->Show();

}

//---------------------------------------------------------------------------

//----Создать отчет по текущей поставки в Excel

void __fastcall TForm3::SpeedButton1Click(TObject *Sender)

{

int kol_str,i,row, col,sum;

bool zap;

String s, path;

path=ExtractFilePath (Application->ExeName); //Путь к exe-файлу

path=path+"Поставка товара.xls"; //Имя отчета

Book=ExAp.OlePropertyGet("Workbooks").OleFunction("Open", WideString (path));

Sheet=Book.OlePropertyGet ("ActiveSheet");

s=DateToStr (Form3->DateTimePicker1->Date); //Получить дату

Range=ExAp.OlePropertyGet ("Range",WideString("D1")); //Ячейка D1- дата

Range.OlePropertySet("Value",WideString(s));

Range=ExAp.OlePropertyGet("Range",WideString ("D7"));

Range.OlePropertySet("Value",WideString (Form3->Edit8->Text));

kol_str=kol_post;

//Перенос таблицы String Grid на форме в отчет Excel относительно ячейки A10

for (i=0; i<kol_str; i++) //Цикл по всем записям в StringGrid

{

ExAp.OlePropertyGet("Range",WideString ("A10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[0][i+1]));

ExAp.OlePropertyGet("Range",WideString ("B10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[1][i+1]));

ExAp.OlePropertyGet("Range",WideString ("C10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[2][i+1]));

ExAp.OlePropertyGet("Range",WideString ("D10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[3][i+1]));

ExAp.OlePropertyGet("Range",WideString ("E10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[4][i+1]));

ExAp.OlePropertyGet("Range",WideString ("F10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[5][i+1]));

ExAp.OlePropertyGet("Range",WideString ("G10"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",WideString(Form3->StringGrid1->Cells[6][i+1]));

} //Конец цикла for

 

//Заполнение итоговой строки

//На последнюю заполненную ячейку вниз от ячейки E10

Range=ExAp.OlePropertyGet("Range",WideString("E10"))

.OlePropertyGet("End",0xFFFFEFE7);

//Номер последней строки

if (kol_str<=1) row=10; //Одна строка в таблице

else row=Range.OlePropertyGet ("Row");

//Спуститься вниз на 2 ячейки и записать слово "Итого"

row+=2;

ExAp.OlePropertyGet("Range",WideString ("F"+IntToStr(row)))

.OlePropertySet("Value",WideString("Итого"));

ExAp.OlePropertyGet("Range",WideString ("G"+IntToStr(row)))

.OlePropertySet("Value",WideString (Form3->Edit7->Text));

 

//Вывод суммы прописью

sum=StrToInt(Form3->Edit7->Text);

row+=2;

Range=ExAp.OlePropertyGet("Range",WideString("A"+IntToStr(row)));

Range.OlePropertySet("Value",WideString (convert(sum)));

 

//Строки подписи в отчете

row+=2;

Range=ExAp.OlePropertyGet("Range",WideString("E"+IntToStr(row)));

Range.OlePropertySet("Value",WideString ("Товар поставил "));

Range=ExAp.OlePropertyGet("Range",WideString("G"+IntToStr(row)));

Range.OlePropertySet("Value",WideString ("__________"));

 

row++;

Range=ExAp.OlePropertyGet("Range",WideString("E"+IntToStr(row)));

Range.OlePropertySet("Value",WideString ("Товар принял "));

Range=ExAp.OlePropertyGet("Range",WideString("G"+IntToStr(row)));

Range.OlePropertySet("Value",WideString ("__________"));

 

ExAp.OlePropertySet ("Visible", true); //Отобразить заполненное окно Excel

}

//---------------------------------------------------------------------------

 

Модуль Unit1.cpp

//----Форма отображения и обработки информации склада-----

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "PostUnit.h"

#include "GlUnit.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

String poisk_art;

unsigned long kol_zap,nom;

unsigned long total_kol=0;

Variant ExAp=0; //Сервер автоматизации Excel

Variant Book; //Рабочая книга Excel

Variant Sheet; //Рабочий лист книги

Variant Range; //Ячейки листа

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//Обработка пункта меню "Сортировка по артиклю возрастание

void __fastcall TForm1::N5Click(TObject *Sender)

{

Form1->ADOTable1->Sort="art ASC";

}

//--------------------------------------------------------------

//Обработка пункта меню "Сортировка по артиклю убыванию

void __fastcall TForm1::N6Click(TObject *Sender)

{

Form1->ADOTable1->Sort="art DESC";

}

//----------------------------------------------------------------

//Обработка пункта меню "Сортировка имени по убыванию

void __fastcall TForm1::N15Click(TObject *Sender)

{

Form1->ADOTable1->Sort="name DESC";

}

//-------------------------------------------------------------

//Обработка пункта меню "Сортировка закупочной цены по возрастанию

void __fastcall TForm1::N8Click(TObject *Sender)

{

Form1->ADOTable1->Sort="zak ASC";

}

//Обработка пункта меню "Сортировка имени по возрастанию

void __fastcall TForm1::N7Click(TObject *Sender)

{

Form1->ADOTable1->Sort="name ASC";

}

//---------------------------------------------------------------------------

//Обработка пункта меню "Сортировка закупочной цены по убыванию

void __fastcall TForm1::N16Click(TObject *Sender)

{

Form1->ADOTable1->Sort="zak DESC";

}

//---------------------------------------------------------------------------

//Обработка пункта меню "Сортировка оптовой цены по возрастанию

void __fastcall TForm1::N12Click(TObject *Sender)

{

Form1->ADOTable1->Sort="opt ASC";

}

//---------------------------------------------------------------------------

//Обработка пункта меню "Сортировка оптовой цены по убыванию

void __fastcall TForm1::N17Click(TObject *Sender)

{

Form1->ADOTable1->Sort="opt DESC";

}

//---------------------------------------------------------------------------

//Обработка пункта меню "Сортировка розничной цены по возрастанию

void __fastcall TForm1::N13Click(TObject *Sender)

{

Form1->ADOTable1->Sort="roz ASC";

}

//---------------------------------------------------------------------------

//Обработка пункта меню "Сортировка розничной цены по убыванию

void __fastcall TForm1::N18Click(TObject *Sender)

{

Form1->ADOTable1->Sort="roz DESC";

}

//Обработка пункта меню "Сортировка количества по возрастанию

void __fastcall TForm1::N14Click(TObject *Sender)

{

Form1->ADOTable1->Sort="kol ASC";

}

//---------------------------------------------------------------------------

//Обработка пункта меню "Сортировка количества по убыванию

void __fastcall TForm1::N19Click(TObject *Sender)

{

Form1->ADOTable1->Sort="kol DESC";

}

//------------------------------------------------------------------------

//--------Поиск по артиклю---------------------------------------

void __fastcall TForm1::N21Click(TObject *Sender)

{ int i;

String soob;

poisk_art=InputBox("Для поиска по артиклю", "Введите артикль","");

Form1->ADOTable1->First(); //Перемещение к первой записи БД

nom=-1; //Пока не нашли

for (i=0; i<kol_zap; i++) //Перебор всех записей

{

if (poisk_art==Form1->ADOTable1art->Value)

{

soob="Товар с таким артиклем есть на складе.";

soob=soob+(char)10+(char)13; //Переход на новую строку

soob=soob+"Курсор укажет его позицию";

ShowMessage(soob);

nom=i;

break; //Поиск завершить

}

else Form1->ADOTable1->Next(); //Переместиться к следующей записи

}

if (i==kol_zap)

MessageDlg("Такого артикля нет",mtInformation, TMsgDlgButtons() << mbOK, 0);

else

{

Form1->ADOTable1->First();

Form1->ADOTable1->MoveBy (nom); //Переместить в ней указатель

}

}

//---------------------------------------------------------------------------

//----------Действия при открытии окна "Склад"

void __fastcall TForm1::FormShow(TObject *Sender)

{

int i;

//Создание экземпляра сервера и связь с ним

ExAp=Variant::CreateObject ("Excel.Application");

Form1->ADOTable1->Active=false;

Form1->ADOTable1->Active=true;

kol_zap=Form1->ADOTable1->RecordCount; //Получить количество записей в БД

Form1->Label1->Caption="Количество записей на складе = "+IntToStr(kol_zap);

Form1->ADOTable1->First(); //Перемещение к первой записи БД

Form1->ADOTable1->Edit(); //Редактировать таблицу

for (i=1; i<=kol_zap;i++) //Перебор всех записей

{

Form1->ADOTable1kol->Value=

Form1->ADOTable1post->Value-Form1->ADOTable1otp->Value;

total_kol=total_kol+Form1->ADOTable1kol->Value; //Накопление товаров

Form1->ADOTable1->Next();

Form1->ADOTable1->Edit();

}

Form1->ADOTable1->Post();

Form1->Edit1->Text=IntToStr (total_kol);

Form1->PanelDate->Caption=DateToStr(Date());

Form1->PanelTime->Caption=TimeToStr(Time());

Form1->Panel1->Caption="Режим просмотра и фильтрации таблицы";

Form1->Timer1->Enabled=true;

Form1->RadioGroup1->ItemIndex=0;

}

//---------------------------------------------------------------------------

 

//----------Пересчеты после сохранения внесения изменений

void __fastcall TForm1::ADOTable1AfterPost(TDataSet *DataSet)

{

kol_zap=Form1->ADOTable1->RecordCount;

Form1->Label1->Caption="Количество записей на складе = "+IntToStr(kol_zap);

}

//---------------------------------------------------------------------------

//---------Пересчеты после удаления записей из таблицы-----------

void __fastcall TForm1::ADOTable1BeforeDelete(TDataSet *DataSet)

{

kol_zap=Form1->ADOTable1->RecordCount;

Form1->Label1->Caption="Количество записей на складе = "+IntToStr(kol_zap);

}

//---------------------------------------------------------------------------

//----Меню поиск по названию - переход на форму для поиска

void __fastcall TForm1::N22Click(TObject *Sender)

{

Form2->Show();

}

//---------------------------------------------------------------------------

//-----------Действия при закрытии формы

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

total_kol=0; //Сбросить общее количество товаров

Form1->Timer1->Enabled=false;

ExAp.OleProcedure("Quit"); //Закрытие сервера

ExAp.Clear();

}

//---------------------------------------------------------------------------

//---------Слежение за текущим временем-----------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Form1->PanelTime->Caption=TimeToStr(Time());

}

//-------Проверка отображения записей в таблице--------------

void __fastcall TForm1::RadioGroup1Click(TObject *Sender)

{

switch (Form1->RadioGroup1->ItemIndex)

{

case 0: Form1->ADOTable1->Filter=""; break; //все записи

case 1: Form1->ADOTable1->Filter="kol<>0";break; //Товар в наличии

case 2: Form1->ADOTable1->Filter="kol=0";break; //Весь проданный

}

Form1->ADOTable1->Filtered=true; //Включить фильтрацию

}

//---------------------------------------------------------------------------

//-----------Пункт меню "Формирование отчета в Excel"----------

void __fastcall TForm1::Excel1Click(TObject *Sender)

{

int kol_str,i,row, col;

bool zap;

String s;

String path=ExtractFilePath (Application->ExeName);

path=path+"Общая по складу.xls";

Book=ExAp.OlePropertyGet("Workbooks").OleFunction("Open", WideString (path));

Sheet=Book.OlePropertyGet ("ActiveSheet");

s=DateToStr (Date()); //Получить дату и преобразовать ее в строку

Range=ExAp.OlePropertyGet("Range",WideString("D1"));

Range.OlePropertySet("Value",WideString(Form1->PanelDate->Caption));

kol_str=Form1->ADOTable1->RecordCount;

Form1->ADOTable1->First();

for (i=0; i<kol_str; i++)

{

ExAp.OlePropertyGet("Range",WideString ("A8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1art->Value);

ExAp.OlePropertyGet("Range",WideString ("B8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1name->Value);

ExAp.OlePropertyGet("Range",WideString ("C8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1zak->Value);

ExAp.OlePropertyGet("Range",WideString ("D8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1opt->Value);

ExAp.OlePropertyGet("Range",WideString ("E8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1roz->Value);

ExAp.OlePropertyGet("Range",WideString ("F8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1post->Value);

ExAp.OlePropertyGet("Range",WideString ("G8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1otp->Value);

ExAp.OlePropertyGet("Range",WideString ("H8"))

.OlePropertyGet("Offset",i,0)

.OlePropertySet("Value",Form1->ADOTable1kol->Value);

Form1->ADOTable1->Next();

} //Конец цикла for

//Заполнение итоговой строки

//Первая пустая ячейка вниз от ячейки E8

Range=ExAp.OlePropertyGet("Range",WideString("E8"))

.OlePropertyGet("End",0xFFFFEFE7);

//Номер последней строки

if (kol_str<=1) row=8; //В таблице одна запись

else row=Range.OlePropertyGet ("Row");

//Спуститься вниз на 2 ячейки и записать слово "Итого"

ExAp.OlePropertyGet("Range",WideString ("E"+IntToStr(row+2)))

.OlePropertySet("Value",WideString("Итого"));

//Всего поступило

Range=ExAp.OlePropertyGet("Range",WideString("F8"))

.OlePropertyGet("End",0xFFFFEFE7);

//Спуститься вниз на 2 ячейки и записать формулу суммы по столбцу

ExAp.OlePropertyGet("Range",WideString ("F"+IntToStr(row+2)))

.OlePropertySet("Value",WideString ("=Сумм(F8:F"+IntToStr(row)+")"));

//Всего отпущено

ExAp.OlePropertyGet("Range",WideString ("G"+IntToStr(row+2)))

.OlePropertySet("Value",WideString ("=Сумм(G8:G"+IntToStr(row)+")"));

//Всего товара на складе

ExAp.OlePropertyGet("Range",WideString ("H"+IntToStr(row+2)))

.OlePropertySet("Value",WideString ("=Сумм(H8:H"+IntToStr(row)+")"));

ExAp.OlePropertySet ("Visible", true); //Отобразить заполненное окно Excel

}

//---------------------------------------------------------------------------

//-----------Кнопка перехода в главное меню----------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Form1->Close();

Form4->Show();

}

//---------------------------------------------------------------------------

//--------Переход к первой записи БД--------------------

void __fastcall TForm1::BitBtnFirstClick(TObject *Sender)

{

Form1->ADOTable1->First();

}

//---------------------------------------------------------------------------

//-----Переход к предыдущей записи БД--------------------------

void __fastcall TForm1::BitBtnUpClick(TObject *Sender)

{

Form1->ADOTable1->Prior();

}

//---------------------------------------------------------------------------

//------Переход к следующей записи БД----------------------------

void __fastcall TForm1::BitBtnDownClick(TObject *Sender)

{

Form1->ADOTable1->Next();

}

//---------------------------------------------------------------------------

//-----Переход к последней записи БД--------------------------------

void __fastcall TForm1::BitBtnLastClick(TObject *Sender)

{

Form1->ADOTable1->Last();

}

//---------------------------------------------------------------------------

//------Проверить защиту Базы данных-------------------

void __fastcall TForm1::N24Click(TObject *Sender)

{

if (Form4->Key==1) ShowMessage("База данных уже защищена паролем");

else

{

Form4->Key=1;

ShowMessage("База данных теперь защищена паролем");

}

}

//---------------------------------------------------------------------------

//---Снятие защиты с базы данных-----------------------------

void __fastcall TForm1::N25Click(TObject *Sender)

{

String password;

if (Form4->Key==0)

ShowMessage("База данных уже без защиты. Советуем установить защиту");

else

{

do //Ввод правильного пароля для снятия защиты

{

if (InputQuery("Ввод пароля для снятия защиты", "Введите пароль",password))

if (password!=Form4->Pas)

ShowMessage("Пароль не верный. Защита не снята. Попробуйте еще раз");

}while (password!=Form4->Pas);

Form4->Key=0;

ShowMessage("Защита снята с базы данных");

}

}

//---Смена пароля с базы данных------------------

void __fastcall TForm1::N26Click(TObject *Sender)

{

String password;

do

{

if (InputQuery("Проверка разрешения смены пароля",

"Введите старый пароль", password))

if (password!=Form4->Pas)

ShowMessage("Пароль не верный.

Сменить пароль не разрешается. Попробуйте еще раз");

}while (password!=Form4->Pas);

Form4->Pas=InputBox("Ввод нового пароля на базу данных",

"Введите новый пароль","");

ShowMessage("Новый пароль зафиксирован");

}

//---------------------------------------------------------------------------

 

Модуль Unit2.cpp

//------Поиск товара по названию---------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

#include "GlUnit.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

String poisk_name;

int sum=0;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{ }

//-----Отображение формы для фильтрации по названию товара--------

void __fastcall TForm2::FormShow(TObject *Sender)

{

Form2->Edit1->Clear(); //Очистить строку поиска

Form2->Edit1->SetFocus(); //Курсор сразу на Edit

Form2->ADOTable1->Filtered=false;

Form2->Label2->Visible=false;

}

//----------Ввод очередного символа в названии товара-----

void __fastcall TForm2::Edit1Change(TObject *Sender)

{

if (Form2->Edit1->Text.IsEmpty() ) //Если Edit пустой

{

Form2->ADOTable1->Filtered=false;

Form2->Label2->Caption="Количество такого товара=0";

}

else

{

Form2->Label2->Visible=true;

Form2->ADOTable1->Filtered=false; //Отключить фильтр

sum=0;

Form2->ADOTable1->Filtered=true; //Включить фильтр

if (Form2->ADOTable1->IsEmpty()) //Если фильтр нечего не пропустил то

Form2->Label2->Caption="Количество такого товара=0";;

}

}

//---------Событие фильтрации----------------------------------------

void __fastcall TForm2::ADOTable1FilterRecord(TDataSet *DataSet,

bool &Accept)

{ String t,t1;

Accept=false; //Запрещение на пропуск в фильтр

t=Form2->ADOTable1name->Value; //Получение полей из базы (названия)

t=t.LowerCase(); //Преобразование полей из базы к нижнему регистру

t1=Form2->Edit1->Text; //Название искомого товара

t1=t1.LowerCase(); //Преобразование его в нижний регистр

if (t.Pos(t1)>0) //Поиск в базе (t) то, что ищем (t1), если 0 то не нашли

{

Accept=true; //Пропуск в фильтр-таблицу

sum=sum+Form2->ADOTable1kol->Value; //Количество такого товара

Form2->Label2->Caption="Количество такого товара="+IntToStr(sum);

}

}

//---------------------------------------------------------------------------

//-----------Закрытие данной формы и переход в окно «Склад»

void __fastcall TForm2::BitBtn1Click(TObject *Sender)

{

Form2->Close();

Form1->Show();

}

//---------------------------------------------------------------------------

 

Модуль UnitInfo.cpp

//-------Модуль с информацией о складе и владельце-------

#include <vcl.h>

#pragma hdrstop

#include "UnitInfo.h"

#include "GlUnit.h"

#include "UnitMap.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TFormInfo *FormInfo;

//---------------------------------------------------------------------------

__fastcall TFormInfo::TFormInfo(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TFormInfo::BitBtn1Click(TObject *Sender)

{

FormInfo->Close();

Form4->Show();

}

//---------------------------------------------------------------------------

//---------------Отобразить форму с картой------------------------

void __fastcall TFormInfo::Image2Click(TObject *Sender)

{

FormMap->Show();

}

//---------------------------------------------------------------------------

 

Модуль UnitIssledovanie.cpp

//------Окна с рейтингом и акцией товаров-----------------------------

#include <vcl.h>

#pragma hdrstop

#include "UnitIssledovanie.h"

#include "Unit1.h"

#include "GlUnit.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TFormIs *FormIs;

int kol_zap; //Количество записей в таблицы базы данных "Склад"

//---------------------------------------------------------------------------

__fastcall TFormIs::TFormIs(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

//----Выход в главное меню----------------------------------------

void __fastcall TFormIs::BitBtn1Click(TObject *Sender)

{

FormIs->Close();

Form4->Show();

}

//---------------------------------------------------------------------------

//---Пересчет в процентах рейтинга товара ---------------------

void __fastcall TFormIs::FormShow(TObject *Sender)

{

int i;

FormIs->ADOTable1->Active=false;

FormIs->ADOTable1->Active=true;

kol_zap=FormIs->ADOTable1->RecordCount; //Количество записей

FormIs->ADOTable1->First(); //Перемещение к первой записи БД





Последнее изменение этой страницы: 2016-04-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.239.236.140 (0.146 с.)