📄 material.~cpp
字号:
//---------------------------------------------------------------------------
// Name: Material.cpp
// Author: Jrays
// Date: 1999.8.7
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Material.h"
#include "Data.h"
#include "About.h"
#include "main.h"
#include "QrMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMaterial *frmMaterial;
//---------------------------------------------------------------------------
__fastcall TfrmMaterial::TfrmMaterial(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnFirstClick(TObject *Sender)
{
tblBuyMaterial->First();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnPriorClick(TObject *Sender)
{
tblBuyMaterial->Prior();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnNextClick(TObject *Sender)
{
tblBuyMaterial->Next();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnLastClick(TObject *Sender)
{
tblBuyMaterial->Last();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::FormCreate(TObject *Sender)
{
int maxQuarter = 0;
int curQuarter;
tblUseMaterial->Active = true;
tblBuyMaterial->Active = true;
tblBuyMaterial->First();
/*
for( int i=0 ; i<tblBuyMaterial->RecordCount+1 ; i++ )
// Property RecordCount is always less than the true value
{
curQuarter = tblBuyMaterial->FieldByName( "Quarter" )->AsInteger;
maxQuarter= maxQuarter>=curQuarter ? maxQuarter : curQuarter ;
tblBuyMaterial->Next();
}
*/
while( !tblBuyMaterial->Eof )
{
curQuarter = tblBuyMaterial->FieldByName( "Quarter" )->AsInteger;
maxQuarter= maxQuarter>=curQuarter ? maxQuarter : curQuarter ;
tblBuyMaterial->Next();
}
curQuarter = tblBuyMaterial->FieldByName( "Quarter" )->AsInteger;
maxQuarter= maxQuarter>=curQuarter ? maxQuarter : curQuarter ;
tblBuyMaterial->First();
Caption = Application->Title + " 原料管理模块";
gbxDecide->Caption = gbxDecide->Caption + IntToStr( maxQuarter+1 );
CurQuarter = maxQuarter + 1;
edtDecideQuantity->Text = "";
edtDecidePrice->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::FormShow(TObject *Sender)
{
edtDecideQuantity->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnDecideClick(TObject *Sender)
{
if( Application->MessageBox( "数据一旦提交决策将不能修改,除非在退出该窗口前删除该记录!\n还要继续吗?",
Application->Title.c_str(), MB_YESNO + MB_ICONQUESTION ) == IDNO )
return;
int quantity;
float price;
try
{
quantity = StrToInt( edtDecideQuantity->Text );
price = StrToFloat( edtDecidePrice->Text );
if( quantity<0 || price<=0 || CurQuarter<=0 )
throw "产生未知的错误,要写入数据库中的数据为负数";
tblBuyMaterial->Append();
tblBuyMaterial->FieldByName( "Identity" )->AsInteger = MaterialID;
tblBuyMaterial->FieldByName( "Quarter" )->AsInteger = CurQuarter;
tblBuyMaterial->FieldByName( "Quantity" )->AsInteger = quantity;
tblBuyMaterial->FieldByName( "Price" )->AsFloat = price;
tblBuyMaterial->Post();
bbnDecide->Enabled = false;
edtDecideQuantity->Enabled = false;
edtDecidePrice->Enabled = false;
}
catch( char *s )
{
ShowMessageDlg( AnsiString("错误:") + s );
edtDecideQuantity->SelectAll();
edtDecideQuantity->SetFocus();
}
catch( EConvertError &err )
{
ShowMessageDlg( "产生错误:" + err.Message );
edtDecideQuantity->SelectAll();
edtDecideQuantity->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnGoClick(TObject *Sender)
{
if( edtDecideQuantity->Enabled )
{
Release();
return;
}
try
{
if(Application->MessageBox( "决策已经提交到数据库中,若退出该窗口将不能修改该决策!\n还要继续提交吗?",
Application->Title.c_str(), MB_YESNO + MB_ICONQUESTION ) == IDNO )
{
tblBuyMaterial->Last();
while( true )
{
if( tblBuyMaterial->FieldByName( "Quarter" )->AsInteger == CurQuarter )
break;
tblBuyMaterial->Prior();
}
if( tblBuyMaterial->Bof )
throw "未知的数据库错误";
tblBuyMaterial->Delete();
}
else
{
long output = CalculateOutput();
long sold = CalculateSold( output );
if( sold<=0 || output<=0 ) return;
tblUseMaterial->Active = true;
tblUseMaterial->Last();
while( !tblUseMaterial->Bof )
{
if( tblUseMaterial->FieldByName( "Quarter" )->AsInteger == CurQuarter )
break;
tblUseMaterial->Prior();
}
tblUseMaterial->Edit();
tblUseMaterial->FieldByName( "Quarter" )->AsInteger = CurQuarter;
tblUseMaterial->FieldByName( "Output" )->AsInteger = output;
tblUseMaterial->FieldByName( "Sold" )->AsInteger = sold;
tblUseMaterial->Post();
}
Release();
}
catch( EDatabaseError &err )
{
ShowMessageDlg( "产生数据库错误:" + err.Message + "\n\n没有操作将被完成" );
Release();
}
catch( char *s )
{
ShowMessageDlg( AnsiString("产生错误:") + s + "\n没有操作将被完成" );
Release();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnAboutClick(TObject *Sender)
{
(new TfrmAbout(this))->ShowModal();
}
//---------------------------------------------------------------------------
int __fastcall TfrmMaterial::CalculateOutput( void )
{
long numNewMaterial = StrToInt( edtDecideQuantity->Text );
long capability = 0;
query->Active = false;
query->SQL->Clear();
query->SQL->Add( "SELECT Capability FROM 工厂生产能力表" );
query->SQL->Add( "WHERE Quarter = :quarter" );
query->ParamByName( "quarter" )->AsInteger = CurQuarter;
query->Prepare();
query->Open();
if( query->RecordCount<= 0 )
// 用户还没有做出产品决策,系统模拟计算失败
throw "产品决策还没有做出,系统现在还不能计算出产量和销售量,\n\n建议:迅速做出产品决策,系统会再次完成此功能.";
capability = query->FieldByName( "Capability" )->AsFloat;
query->Active = false;
long numResidualMaterial = -1;
if( CurQuarter-1<=0 )
numResidualMaterial = 0;
// 假设:伯克公司在建立该公司前并没有原料库存
else
{
frmMain->tblAvailableMaterial->Active = true;
frmMain->tblAvailableMaterial->First();
while( !frmMain->tblAvailableMaterial->Eof )
{
if( frmMain->tblAvailableMaterial->FieldByName( "Quarter" )->AsInteger==CurQuarter-1 )
{
numResidualMaterial = frmMain->tblAvailableMaterial->FieldByName( "Available" )->AsInteger;
break;
}
frmMain->tblAvailableMaterial->Next();
}
if( frmMain->tblAvailableMaterial->FieldByName( "Quarter" )->AsInteger==CurQuarter-1 )
numResidualMaterial = frmMain->tblAvailableMaterial->FieldByName( "Available" )->AsInteger;
frmMain->tblAvailableMaterial->Active = false;
}
if( numResidualMaterial<0 )
throw "数据库中的数据同步性被破坏,系统无法正确运行。\n建议:系统维护员立即维护数据库中的数据。";
long numMaterial = numNewMaterial + numResidualMaterial;
return (capability>numMaterial?numMaterial:capability);
}
//---------------------------------------------------------------------------
int __fastcall TfrmMaterial::CalculateSold( int output )
// In this function a possible calculation is submitted
// Other method is OK.
{
if( output<0 )
throw "此时产品产量还不可知,产品的销售量无法模拟计算出!\n\n建议:进入产品管理模块,做出产品决策。";
float price = -1;
tblUseMaterial->Refresh();
// 从数据库中重新获得最新的数据
tblUseMaterial->Last();
while( !tblUseMaterial->Bof )
{
if( tblUseMaterial->FieldByName( "Quarter" )->AsInteger == CurQuarter )
{
price = tblUseMaterial->FieldByName( "Price" )->AsFloat;
break;
}
tblUseMaterial->Prior();
}
if( tblUseMaterial->FieldByName( "Quarter" )->AsInteger == CurQuarter )
price = tblUseMaterial->FieldByName( "Price" )->AsFloat;
if( price<0 )
throw "产品的价格决策还没有做出,产品的销售量无法模拟计算出!\n\n建议:进入产品管理模块,做出产品决策。";
long temp = output+(CommonPrice-price)*1000;
long numProduct = -1;
if( CurQuarter-1<=0 )
numProduct = 0;
else
{
frmMain->tblAvailableProduct->Active = true;
frmMain->tblAvailableProduct->First();
while( !frmMain->tblAvailableProduct->Eof )
{
if( frmMain->tblAvailableProduct->FieldByName( "Quarter" )->AsInteger==CurQuarter-1 )
{
numProduct = frmMain->tblAvailableProduct->FieldByName( "Available" )->AsInteger;
break;
}
frmMain->tblAvailableProduct->Next();
}
if( frmMain->tblAvailableProduct->FieldByName( "Quarter" )->AsInteger==CurQuarter-1 )
numProduct = frmMain->tblAvailableProduct->FieldByName( "Available" )->AsInteger;
frmMain->tblAvailableProduct->Active = false;
}
if( numProduct<0 )
throw "数据库中的数据出现要种错误(不一致性)。\n建议:立即退出程序,系统维护员立即开始维护数据库。";
return (temp<(output+numProduct)?temp:(output+numProduct));
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::bbnReportClick(TObject *Sender)
{
frmQrMain->Visible = true;
frmQrMain->rbnProductSold->Enabled = false;
frmQrMain->rbnProductSoldDecision->Enabled = false;
frmQrMain->rbnMaterialBuyUse->Enabled = true;
frmQrMain->rbnFinanceReport->Enabled = false;
frmQrMain->rbnLoanRestore->Enabled = false;
frmQrMain->rbnProductCapability->Enabled = false;
frmQrMain->rbnRestoreCost->Enabled = false;
frmQrMain->rbnMaterialBuy->Enabled = false;
frmQrMain->rbnLoanLoanRepay->Enabled = false;
frmQrMain->rbnLoanInterest->Enabled = false;
frmQrMain->rbnMaterialBuyUseClick( (TObject*)frmQrMain );
frmQrMain->rbnMaterialBuyUse->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::miReportReportClick(TObject *Sender)
{
bbnReportClick( Sender );
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::edtDecidePriceKeyPress(TObject *Sender,
char &Key)
{
if( Key == 0x0D )
// 用户按了回车键
bbnDecideClick( Sender );
}
//---------------------------------------------------------------------------
void __fastcall TfrmMaterial::FormActivate(TObject *Sender)
{
edtDecideQuantity->SelectAll();
edtDecideQuantity->SetFocus();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -