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

📄 mnform.pas

📁 一款专业的电话交换机计费管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit MnForm;

interface


uses
  // Delphi units
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ComCtrls, ExtCtrls, StdCtrls, ToolWin, ImgList, ClipBrd,
  // ComDrv32 units
  CPDrv, datamd, constb, Grids, Buttons;
  // TTY units
const
  telecount = 9;
  teleconst: array[0..telecount - 1] of pchar = ('日期', '被叫号码', '分机号', '密码', '起始时间', '地区名',
    '时长', '单价', '话费');
type
  TMainForm = class(TForm)
    cpDrv: TCommPortDriver;
    RXPanel: TPanel;
    Panel2: TPanel;
    ToolBar1: TToolBar;
    ConnectToolButton: TToolButton;
    DisconnectToolButton: TToolButton;
    E_ImageList: TImageList;
    QuitTTYToolButton: TToolButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    StringGrid1: TStringGrid;
    ToolButton1: TToolButton;
    Edit1: TEdit;
    ToolButton2: TToolButton;
    BitBtn2: TBitBtn;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    ListBox1: TListBox;
    Button1: TButton;
    procedure ConnectToolButtonClick(Sender: TObject);
    procedure DisconnectToolButtonClick(Sender: TObject);

    procedure cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
      DataSize: Cardinal);
    procedure QuitTTYToolButtonClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
      procedure Label2DblClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);


  private
    // Startup about-box (splash screen)
    telstr: string;
    tellen: integer;

  public
  end;

var
  MainForm: TMainForm;

implementation

uses dept;

{$R *.DFM}


// Connect

procedure TMainForm.ConnectToolButtonClick(Sender: TObject);
begin
  telstr := '';
  listbox1.Items.Clear;
  // Do nothing if already connected
  if cpDrv.Connected then
    exit;
  if cpDrv.Connect then
  begin
    label3.Font.Color := clgreen;
    label3.Caption := '通讯口连接正常';
  end
  else
  begin
    label3.Font.Color := clred;
    label3.Caption := '通讯口连接不正常,请重试!';
  end;
end;

// Disconnect

procedure TMainForm.DisconnectToolButtonClick(Sender: TObject);
begin
  // Do nothing if not connected
  if not cpDrv.Connected then
    exit;
  // Disconnect
  cpDrv.Disconnect;
  label3.Font.Color := clred;
  label3.Caption := '通讯口已断开!';
end;

procedure TMainForm.cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
  DataSize: Cardinal);
var i: integer;
  s, ss,dd_s,mm_s,yy_s,tt_s,
  telchar,tele_dt,
    ext_num, dial_num, pas, stch: string;
  st_hh, st_mm, st_ss, ed_hh, ed_mm, ed_ss, dts_mm, dts_dd, dte_dd: word;
  yy, mm, dd: word;
  subs:integer ;
  total: double;
  nowdate : tdatetime;
begin
  // Convert incoming data into a string

  s := StringOfChar(' ', DataSize);
  move(DataPtr^, pchar(s)^, DataSize);
  // Exit if s is empty. This usually occurs when one or more NULL characters
  // (chr(0)) are received.

{ while pos('^', s) > 0 do
    delete(s, pos(#05, s), 1);
  if s = '' then
    exit;

  i := pos('$ *L*NQU', s);
  while i <> 0 do
  begin
    delete(s, i, 8);
    i := pos(#10, s);
  end;

 i := pos(#13, s);
  while i <> 0 do
  begin
    delete(s, 1, i);
    i := pos(#13, s);
  end;   }

      edit1.text:=edit1.Text+s;
      telstr :=edit1.text;
   //   memo1.text:=memo1.text+s;
        i:= pos('U',s);
        i:= pos('^',s);
   if  length(edit1.text)=82 then
   begin
    if stringgrid1.rowcount > 30 then
    begin
      stringgrid1.rowcount := 2;
      stringgrid1.Rows[1].Clear;
    end;
        button1.Click;
        edit1.Text:='';
        telchar:='';
        telstr := ''; 
  end;


end;




procedure TMainForm.QuitTTYToolButtonClick(Sender: TObject);
begin

  close;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if application.MessageBox('退出此系统电话将不能计费!', '警告信息',
    MB_OKCANCEL + MB_DEFBUTTON2) = IDOK then
  begin
    if not cpDrv.Connected then
      exit;
  // Disconnect
    cpDrv.Disconnect;

  end
  else
    abort;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var i: integer;
begin
  stringgrid1.ColCount := telecount;
  stringgrid1.RowCount := 2;
  for i := 0 to telecount - 1 do
    stringgrid1.Cells[i, 0] := teleconst[i];

end;

procedure TMainForm.ToolButton1Click(Sender: TObject);
var total: integer;
begin
  with dddata do
  begin
    qy2.sql.Clear;
    qy2.sql.Add('select * from teletmp where dial_num like ''0%''');
    qy2.open;
    qy2.first;
    while not qy2.eof do
    begin
      qy3.SQl.Clear;
      qy3.SQL.add('select * from telert ');
      qy3.sql.add(' where :dial_num like dial_cd+''%'' order by dial_cd desc ');
      qy3.ParamByName('dial_num').asstring := qy2.fieldbyname('dial_num').asstring;
      qy3.open;
      if qy3.RecordCount > 0 then
      begin
        total := round(qy3.fieldbyname('dial_rt').asCurrency
          * trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60) + 0.49);
        qy4.sql.clear;
        qy4.SQL.Add('insert into teletrn(tele_dt,tele_flg,cntry_nm,st_tm,ed_tm,du_tm');
        qy4.SQL.Add(',tele_rt,tele_amt,dial_num,ext_num)');
        qy4.SQL.Add(' values(:tele_dt,:tele_flg,:cntry_nm,:st_tm,:ed_tm,:du_tm');
        qy4.SQL.Add(',:tele_rt,:tele_amt,:dial_num,:ext_num)');
        qy4.ParamByName('tele_dt').asdatetime := qy2.fieldbyname('tele_dt').asdatetime;
        qy4.ParamByName('tele_flg').asstring := inttostr(qy3.fieldbyname('type_cd').asinteger);
        qy4.ParamByName('cntry_nm').asstring := qy3.fieldbyname('cntry_nm').asstring;
        qy4.ParamByName('st_tm').asstring :=
          formatdatetime('hh:mm:ss', qy2.fieldbyname('st_tm').asdatetime);
        qy4.ParamByName('ed_tm').asstring :=
          formatdatetime('hh:mm:ss', qy2.fieldbyname('ed_tm').asdatetime);
        qy4.ParamByName('du_tm').asinteger := trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60);
        qy4.ParamByName('tele_rt').asCurrency := qy3.fieldbyname('dial_rt').asCurrency;
        qy4.ParamByName('tele_amt').asCurrency := total;
        qy4.ParamByName('dial_num').asstring := qy2.fieldbyname('dial_num').asstring;
        qy4.ParamByName('ext_num').asstring := qy2.fieldbyname('ext_num').asstring;
        qy4.ExecSQL;
        stringgrid1.RowCount := stringgrid1.RowCount + 1;
        stringgrid1.Cells[0, stringgrid1.RowCount - 2] :=
          formatdatetime('yyyy-mm-dd', qy2.fieldbyname('tele_dt').asdatetime);
        stringgrid1.Cells[1, stringgrid1.RowCount - 2] := qy2.fieldbyname('dial_num').asstring;
        stringgrid1.Cells[2, stringgrid1.RowCount - 2] := qy2.fieldbyname('ext_num').asstring;
        stringgrid1.Cells[4, stringgrid1.RowCount - 2] := qy2.fieldbyname('st_tm').asstring;
        stringgrid1.Cells[5, stringgrid1.RowCount - 2] := qy3.fieldbyname('cntry_nm').asstring;
        stringgrid1.Cells[6, stringgrid1.RowCount - 2] :=
          inttostr(trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60));
        stringgrid1.Cells[7, stringgrid1.RowCount - 2] := qy3.fieldbyname('dial_rt').asstring;
        stringgrid1.Cells[8, stringgrid1.RowCount - 2] := inttostr(total);
      end;
      qy2.Next;
    end;
    qy2.sql.Clear;
    qy2.sql.Add('select * from teletmp where dial_num  not like ''0%''');
    qy2.open;
    qy2.first;
    while not qy2.eof do
    begin
      qy3.SQl.Clear;
      qy3.SQL.add('select a.loc_head,a.discrpt,a.loc_rt  from telecnfg a   ');
      qy3.sql.add(' where :dial_num  like rtrim(ltrim(loc_head))+''%''');
      qy3.sql.add('order by loc_head desc ');
      qy3.ParamByName('dial_num').asstring := qy2.fieldbyname('dial_num').asstring;
      qy3.open;
      if qy3.RecordCount > 0 then
      begin
        total := round(qy3.fieldbyname('loc_rt').asCurrency
          * trunc((qy2.fieldbyname('du_tm').asinteger + 59) / 60) + 0.49);
        qy4.sql.clear;
        qy4.SQL.Add('insert into teletrn(tele_dt,tele_flg,cntry_nm,st_tm,ed_tm,du_tm');
        qy4.SQL.Add(',tele_rt,tele_amt,dial_num,ext_num)');
        qy4.SQL.Add(' values(:tele_dt,:tele_flg,:cntry_nm,:st_tm,:ed_tm,:du_tm');
        qy4.SQL.Add(',:tele_rt,:tele_amt,:dial_num,:ext_num)');
        qy4.ParamByName('tele_dt').asdatetime := qy2.fieldbyname('tele_dt').asdatetime;
        qy4.ParamByName('tele_flg').asstring := '4';
        qy4.ParamByName('cntry_nm').asstring := qy3.fieldbyname('discrpt').asstring;
        qy4.ParamByName('st_tm').asstring :=

⌨️ 快捷键说明

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