📄 product.~cpp
字号:
//---------------------------------------------------------------------------
// Name: Product.cpp
// Author: Jrays
// Date: 1999.8.7
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Product.h"
#include "Data.h"
#include "main.h"
#include "About.h"
#include "QrMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmProduct *frmProduct;
//---------------------------------------------------------------------------
__fastcall TfrmProduct::TfrmProduct(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmProduct::FormCreate(TObject *Sender)
{
Caption = Application->Title + " 产品管理模块";
edtDecideCapability->Text = "";
edtDecidePrice->Text = "";
edtDecideSold->Text = "";
FillDecideIdentity();
int max;
int min;
if(GetMaxMinQuarterInProductTable(&max, &min))
{
cbxDecideIdentity->Text = IntToStr(max);
SetDecideName();
}
AttachToDatabase();
int maxQuarter = -1;
while( !qryDecide->Eof )
{
int curQuarter = qryDecide->FieldByName( "Quarter" )->AsInteger;
maxQuarter = maxQuarter>=curQuarter?maxQuarter:curQuarter;
qryDecide->Next();
}
int curQuarter = qryDecide->FieldByName( "Quarter" )->AsInteger;
maxQuarter = maxQuarter>=curQuarter?maxQuarter:curQuarter;
sttDecideQuarter->Caption = IntToStr( maxQuarter+1 );
Table1->Active = true;
SetQueryName();
}
//---------------------------------------------------------------------------
void __fastcall TfrmProduct::bbnGoClick(TObject *Sender)
{
try
{
if( !Panel1->Enabled )
{
if( Application->MessageBox( "一旦永久提交决策,再也无法修改!\n您要永久提交决策吗?",
Application->Title.c_str(), MB_YESNO + MB_ICONQUESTION ) == IDNO )
{
tblCapability->Active = true;
tblCapability->Last();
tblCapability->Delete();
tblCapability->Active = false;
}
else
{
Table1->Active = true;
Table1->Append();
Table1->FieldByName( "Identity" )->AsString = cbxDecideIdentity->Text;
Table1->FieldByName( "Quarter" )->AsString = sttDecideQuarter->Caption;
Table1->FieldByName( "Price" )->AsString = edtDecidePrice->Text;
long output = CalculateOutput();
long sold = CalculateSold( output, StrToFloat(edtDecidePrice->Text) );
Table1->FieldByName( "Output" )->AsInteger = output;
Table1->FieldByName( "Sold" )->AsInteger = sold;
Table1->Post();
if( sold<=0 || output<=0 )
// 要保证即使部分信息还没有得到,但有用的信息必须写入数据库,否则会丢失。
throw "当前产品的销售量和产量未知!\n数据库中的产量和销售量是没有意义的,在原料决策部分请再次追加。";
}
}
Release();
}
catch( char* s)
{
AnsiString prompt( s );
ShowMessageDlg( "产生错误:" + prompt );
Table1->FieldByName( "Output" )->AsInteger = -1;
Table1->FieldByName( "Sold" )->AsInteger = -1;
Table1->Post();
Release();
}
catch( EDatabaseError &err )
{
ShowMessageDlg( "产生数据库错误:" + err.Message + "\n没有操作将被完成.");
Table1->FieldByName( "Output" )->AsInteger = -1;
Table1->FieldByName( "Sold" )->AsInteger = -1;
Table1->Post();
Release();
}
}
//---------------------------------------------------------------------------
bool __fastcall TfrmProduct::SetDecideName( void )
{
qryDecide->Active = false;
qryDecide->SQL->Clear();
qryDecide->SQL->Add( "SELECT Name FROM 产品信息表" );
qryDecide->SQL->Add( "WHERE Identity = :identity" );
qryDecide->ParamByName( "identity" )->AsInteger = StrToInt(cbxDecideIdentity->Text);
qryDecide->Prepare();
qryDecide->Open();
edtDecideName->ReadOnly = false;
edtDecideName->Text = qryDecide->FieldByName( "Name" )->AsString;
edtDecideName->ReadOnly = true;
qryDecide->Active = false;
qryDecide->UnPrepare();
return true;
}
//---------------------------------------------------------------------------
bool __fastcall TfrmProduct::SetQueryName( void )
{
Query1->Active = false;
Query1->SQL->Clear();
Query1->SQL->Add( "SELECT Name FROM 产品信息表" );
Query1->SQL->Add( "WHERE Identity = :identity" );
Query1->ParamByName( "identity" )->AsInteger =
Table1->FieldByName( "Identity" )->AsInteger;
Query1->Prepare();
Query1->Open();
edtName->ReadOnly = false;
edtName->Text = Query1->FieldByName( "Name" )->AsString;
edtName->ReadOnly = true;
Query1->Active = false;
Query1->UnPrepare();
return true;
}
//---------------------------------------------------------------------------
bool __fastcall TfrmProduct::FillDecideIdentity( void )
{
qryDecide->Active = false;
qryDecide->DatabaseName = Database;
qryDecide->SQL->Clear();
qryDecide->SQL->Add( "SELECT * FROM 产品信息表" );
qryDecide->Prepare();
qryDecide->Open();
for( int i=0 ; i<qryDecide->RecordCount ; i++ )
{
cbxDecideIdentity->Items->Add(qryDecide->FieldByName( "Identity" )->AsString);
qryDecide->Next();
}
qryDecide->Active = false;
qryDecide->UnPrepare();
return true;
}
//---------------------------------------------------------------------------
bool __fastcall TfrmProduct::AttachToDatabase( void )
{
qryDecide->Active = false;
qryDecide->SQL->Clear();
qryDecide->SQL->Add( "SELECT 工厂生产能力表.Quarter, 工厂生产能力表.Capability" );
qryDecide->SQL->Add( "FROM 工厂生产能力表" );
qryDecide->Prepare();
qryDecide->Open();
qryDecide->Active = true;
return true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmProduct::bbnSelectClick(TObject *Sender)
{
ShowMessageDlg( "当鼠标在右边选中记录时该功能会自动完成!\n不妨试一试!" );
}
//---------------------------------------------------------------------------
int __fastcall TfrmProduct::GuessSold( int Capability, float Price )
{
return Capability + (CommonPrice-Price)*10000;
}
//---------------------------------------------------------------------------
int __fastcall TfrmProduct::CalculateSold( int output, float Price )
// In this function a possible calculation is submitted
// Other method is OK.
{
if( output<0 ) return -1;
long temp = output+(CommonPrice-Price)*1000;
long numProduct = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -