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

📄 mainform.~pas

📁 财务管理系统实例程序
💻 ~PAS
字号:
//---------------------------------------------------------
// 数据库开发经典实例解析  清华大学出版社

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, DB, ADODB, StdCtrls;
type
  Ttable=array[0..2] of string;
type
  Tmain = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N15: TMenuItem;
    StatusBar1: TStatusBar;
    ADOQuery3: TADOQuery;
    ADOCommand1: TADOCommand;
    ADOQuery1: TADOQuery;
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure N15Click(Sender: TObject);



  private
    { Private declarations }
  public
    { Public declarations }
    //para用于保存系统参数,FindForm用于寻找MDI子窗体,setpara用于更新para的值
    para:Ttable;
    function FindForm(caption:string):bool;
    procedure setpara();
  end;

var
  main: Tmain;
  para:Ttable;

implementation

{$R *.dfm}
uses SecSettingForm,AccountSettingForm,DocuInputForm,TotalAccountForm,DetailAccountForm,SumAccountForm,FinalReportForm;

//-------------------通过用户定义的函数,判断窗体是否已存在--------------------
function Tmain.FindForm(caption: string): bool;
var
i:integer;
begin
 for i:=0 to main.MDIChildCount do
  begin
   // 通过对窗体标题判断窗体是否存在
    if main.MDIChildren[i].Caption=caption then
     begin
      //如果窗体已存在,则恢复窗体,并返回true
      SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
      mdichildren[i].Enabled:=true;
      mdichildren[i].Show;
      mdichildren[i].SetFocus;
      result:=true;
      break;
     end
     else
     //如窗体不存在,则返回false,程序将创建窗体
      result:=false;
  end
end;

//----该函数的作用是保存系统参数表中的参数,并在调用前更新---
procedure Tmain.setpara;
var
 i:integer;
begin
  adoquery3.Active:=false;
  adoquery3.Active:=true;
  i:=0;
while not adoquery3.Eof do
 begin
  //保存系统参数
  para[i]:=adoquery3.FieldByName('取值').AsString;
  i:=i+1;
  adoquery3.Next;
 end;
end;


//----------------显示会计科目设置窗体-------------------
procedure Tmain.N2Click(Sender: TObject);
var
newform:TSecSetting;
begin
if findForm('会计科目设置')=false then
 begin
   //若窗体不存在,则创建窗体
   newform:=Tsecsetting.Create(application);
   newform.Caption:='会计科目设置';
  end;
end;
//----------------显示帐户设置窗体-------------------
procedure Tmain.N3Click(Sender: TObject);
var
newform:TaccountSetting;
begin
 if findForm('帐户设置(期初数据录入)')=false then
 begin
   //若窗体不存在,则创建窗体
   newform:=TaccountSetting.Create(application);
   newform.Caption:='帐户设置(期初数据录入)';
  end;
end;

//----------------显示凭证设置窗体-------------------
procedure Tmain.N5Click(Sender: TObject);
var
newform:TDocuInput;
begin
  if findForm('会计凭证输入')=false then
   begin
    //若窗体不存在,则创建窗体
    newform:=Tdocuinput.Create(application);
    newform.Caption:='会计凭证输入';
   end;
end;




//----------------显示总分类帐查询窗体-------------------
procedure Tmain.N8Click(Sender: TObject);
var
newform:Ttotalaccount;
begin
  if findForm('总分类帐查询')=false then
   begin
    //若窗体不存在,则创建窗体
    newform:=Ttotalaccount.Create(application);
    newform.Caption:='总分类帐查询';
   end;
end;
//----------------显示明细帐查询窗体-------------------
procedure Tmain.N9Click(Sender: TObject);

var
newform:Tdetailaccount;
begin
  if findForm('明细帐查询')=false then
   begin
    //若窗体不存在,则创建窗体
    newform:=Tdetailaccount.Create(application);
    newform.Caption:='明细帐查询';
   end;
end;


//----------------显示试算平衡表窗体-------------------
procedure Tmain.N11Click(Sender: TObject);
var
newform:Tsumaccount;
begin
  if findForm('试算平衡表(正式使用)')=false then
   begin
    //若窗体不存在,则创建窗体
    newform:=Tsumaccount.Create(application);
    newform.Caption:='试算平衡表(正式使用)';
    //在正式平衡表中使用
    newform.foruse;
   end;
end;

//----------------执行凭证过帐储存过程---------------------
procedure Tmain.N6Click(Sender: TObject);
var
pnum,inputsum,outputsum:string;
begin

if application.MessageBox('凭证过帐后即不可修改,是否确认过帐?','确认',MB_OKCANCEL)=IDOK then
begin
//获得分录表中的统计数据
adoquery1.Active:=false;
adoquery1.Active:=true;
pnum:=adoquery1.FieldByName('凭证数').AsString;
inputsum:=adoquery1.FieldByName('借方金额').AsString;
outputsum:=adoquery1.FieldByName('贷方金额').AsString;
//执行储存过程,实现凭证过帐
try
adocommand1.CommandText:='exec sf_凭证过帐';
adocommand1.Execute;
except
showmessage('过帐失败');
exit;
end;
//显示成功信息,并显示统计数据
showmessage('过帐成功'+#13+#13+'过帐凭证数目为:'+pnum+#13+'借方金额合计:'+inputsum+#13+'贷方金额合计'+outputsum);
//删除分录表和凭证表
adocommand1.CommandText:='delete from 分录表';
adocommand1.Execute;
adocommand1.CommandText:='delete from 凭证表';
adocommand1.Execute;
end;
end;


//-----执行期末结帐的储存过程--------
procedure Tmain.N12Click(Sender: TObject);
begin

 if application.MessageBox('结帐将进入下一个会计期间,是否结帐?','确认',MB_OKCANCEL)=IDOK then
 begin
  try
   adocommand1.CommandText:='exec sf_期末结帐';
   adocommand1.Execute;
  except
    showmessage('结帐失败');
    exit;
  end;
 showmessage('结帐成功');
 end;
end;

//--------资产负债报表的生成和打印----------
procedure Tmain.N13Click(Sender: TObject);
var
index:integer;
inputstring:string;
newform:TFinalReport;
begin
 //取得当前会计期间的值
 setpara();
 index:=strtoint(para[2]);
 //提示用户输入要显示的会计期间
 inputstring:= InputBox('请选择所要统计的会计期间', '会计期间', inttostr(index-1));
 index:=strtoint(inputstring);
 //计算资产负债表
 adocommand1.CommandText:='exec sf_计算资产负债表 '''+inputstring+'''';
 adocommand1.Execute;

 //显示报表窗体,这里不需要再查找是否已有报表窗体
 //因为每次调用的报表窗体都可能显示不同的会计期间
 newform:=TFinalReport.Create(application);
 newform.SetPeriod(index);
 newform.QuickRep1.Preview;
end;

//------关闭窗体--------------------
procedure Tmain.N15Click(Sender: TObject);
begin
close;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -