⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 material.~cpp

📁 一个不错的销售系统
💻 ~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 + -