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

📄 main.pas

📁 电话成绩查询系统是通过电话公布成绩的自动服务系统.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit main;

interface

uses
  WinTypes,
  WinProcs,
  Messages,
  SysUtils,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  ExtCtrls,
  Menus,
  AdTapi,
  AdPort, OoMisc, ComCtrls, DB, DBTables, DBCtrls, Grids, DBGrids, Mask,
  Buttons,variants,tapi;

const
  State_Idle             = 0; //空闲
  state_s_greet          = 1; //播放问候语的状态
  State_s_Input            = 2; //
  state_s_inputwrong       = 3; //
  state_s_bye              = 4; //
  state_s_reply1           = 5; //
  state_s_reply2           = 6; //
  state_s_mark             = 7;
  state_s_over             = 8;
type
  TfrmMain = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    CallerID: TEdit;
    CallerIDName: TEdit;
    TAPIButton: TButton;
    AnswerButton: TButton;
    CancelCall: TButton;
    CallsListBox: TListBox;
    Monitor: TCheckBox;
    GroupBox1: TGroupBox;
    lbStatus: TLabel;
    ApdComPort1: TApdComPort;
    ApdTapiDevice1: TApdTapiDevice;
    Label6: TLabel;
    AnswerOnRingEdit: TEdit;
    DataSource1: TDataSource;
    Table1: TTable;
    SaveLogButton: TButton;
    ClearLogButton: TButton;
    Query1: TQuery;
    GroupBox2: TGroupBox;
    DBNavigator1: TDBNavigator;
    DBGrid1: TDBGrid;
    GroupBox3: TGroupBox;
    Label3: TLabel;
    Label9: TLabel;
    edtSearch: TEdit;
    btnSearch: TButton;
    btnMasterLogin: TButton;
    Label8: TLabel;
    btnMasterSearch: TButton;
    Shape1: TShape;
    Database1: TDatabase;
    DataSource2: TDataSource;
    DBEdit1: TDBEdit;
    rdgrpSearch: TRadioGroup;
    edtIDSearch: TEdit;
    edtedtNameSearch: TEdit;
    Query2: TQuery;
    Timer1: TTimer;
    Label11: TLabel;
    edtWaitTime: TEdit;
    Timer2: TTimer;
    Database2: TDatabase;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure TAPIButtonClick(Sender: TObject);
    procedure AnswerButtonClick(Sender: TObject);
    procedure CancelCallClick(Sender: TObject);
    procedure ApdTapiDevice1TapiConnect(Sender: TObject);
    procedure ApdTapiDevice1TapiWaveNotify(CP: TObject; Msg: TWaveMessage);
    procedure ApdTapiDevice1TapiCallerID(CP: TObject; ID, IDName: String);
    procedure MaxLengthEditExit(Sender: TObject);
    procedure Delete1Click(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
    procedure MonitorClick(Sender: TObject);
    procedure ApdTapiDevice1TapiDTMF(CP: TObject; Digit: Char;
      ErrorCode: Integer);
    procedure AnswerOnRingEditExit(Sender: TObject);
    procedure btnMasterLoginClick(Sender: TObject);
    procedure Table1BeforeOpen(DataSet: TDataSet);
    procedure btnMasterSearchClick(Sender: TObject);
    procedure btnSearchClick(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure edtSearchExit(Sender: TObject);
    procedure edtWaitTimeEnter(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Table1AfterClose(DataSet: TDataSet);
    procedure Table1AfterOpen(DataSet: TDataSet);
    procedure ClearLogButtonClick(Sender: TObject);
    procedure SaveLogButtonClick(Sender: TObject);
  private
    { Private declarations }
    WaveFileDir : String;     //
    CallCount   : Integer;    //应答的电话数目
    CurrentState : Integer;   //当前的状态
    MasterLogin:Boolean;
    arID: array[1..6] of  Integer;
    IDCount:Integer;
    IDCountAll:Integer;
    arSCore:array[1..2] of Integer;
    SCCount:Integer;
    AnswerTime:Integer;
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.DFM}

// 初始化
procedure TfrmMain.FormCreate(Sender: TObject);
var
  tmpStr:String;
begin
  tmpStr:='请确定已经开启数据库interbase'+chr(13)+chr(10);
  tmpStr:=tmpStr+'并打开了数据库文件SCOREDATA.GDB'+chr(13)+chr(10);
  tmpStr:=tmpStr+'使用可查询用户users,密码111'+chr(13)+chr(10);
  tmpStr:=tmpStr+'修改成绩需要使用管理用户SYSDBA,密码masterkey';
  showmessage(tmpStr);
  
  MasterLogin:=False;
  WaveFileDir := ExtractFilePath(ParamStr(0));
  CallCount   := 0;
  CurrentState:=State_Idle;
  ApdTapiDevice1.MonitorRecording := Monitor.Checked;
  TAPIButtonClick(Sender);
  AnswerButtonClick(Sender);
end;

//选择Modem,需在自动应答前设置
procedure TfrmMain.TAPIButtonClick(Sender: TObject);
begin
  //使用语音功能的Modem,且能够检测DTMF键
  ApdTapiDevice1.SelectDevice;
  ApdTapiDevice1.EnableVoice := True;
end;

//自动响应,需要设置好Modem
procedure TfrmMain.AnswerButtonClick(Sender: TObject);
begin
  if ApdTapiDevice1.EnableVoice then
  begin
    ApdTapiDevice1.AutoAnswer;
    shape1.Brush.Color:=clGreen;
    lbStatus.Caption :='等待来电';
  end
  else
    MessageDlg('所选的设备不支持声卡扩声', mtInformation, [mbOk], 0);
end;

//清空当前的来电显示
procedure TfrmMain.CancelCallClick(Sender: TObject);
begin
  ApdTapiDevice1.CancelCall;
  shape1.Brush.Color:=clWhite;
  lbStatus.Caption :='取消了自动应答';
  CallerId.Text := '';
  CallerIdName.Text := '';
end;

//连接成功事件的处理
procedure TfrmMain.ApdTapiDevice1TapiConnect(Sender: TObject);
var
  FileName : String;
  S        : String;
  Size     : TSize;
  Temp     : array[0..255] of Char;
begin
  inc(CallCount);
  S := Format('%d. From: %s (%s) at %s', [CallCount,
  CallerIdName.Text, CallerId.Text, DateTimeToStr(Now)]);
  CallsListBox.Items.AddObject(S, TObject(CallCount));
  //自动扩展日志列表
  GetTextExtentPoint(
             CallsListBox.Handle, StrPCopy(Temp, S), Length(S), Size);
  if (Size.cx > CallsListBox.Width) then
     PostMessage(CallsListBox.Handle,
                 LB_SETHORIZONTALEXTENT, Size.cx, 0);
  lbStatus.Caption :='正在应答';
  ApdTapiDevice1.UseSoundCard := False;
  shape1.Brush.Color:=clOlive;
  ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\greet.wav');
  CurrentState := state_s_greet;
  IDCount:=0;
end;

//在播放和录制改变wave文件状态时的事件
procedure TfrmMain.ApdTapiDevice1TapiWaveNotify(CP: TObject;
  Msg: TWaveMessage);
begin
  case Msg of
    waPlayClose :
      case CurrentState of
        state_s_greet:
          begin
            CurrentState := state_s_input;
            IDCount:=0;
            Timer1.Enabled :=True;
            AnswerTime:=0;
            ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\input.wav');
            Exit;
          end;
        state_s_inputwrong :
          begin
            inc(AnswerTime);
            if AnswerTime>3 then
            begin
              currentstate:=state_s_bye;
              Timer1.Enabled :=False;
              ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\bye.wav');
              Exit;
            end
            else
            begin  
              CurrentState :=state_s_input;
              IDCount:=0;
              Timer1.Enabled:=True;
              ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\reinput.wav');
              Exit;
            end
          end;
        state_s_reply1 :
          begin
            if IDCount>=IDCountAll then
              begin
                CurrentState := state_s_reply2;
                ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\reply2.wav');
                Exit;
              end
            else
              begin
                inc(IDCount);
                ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\'+IntToStr(arID[IDCount])+'.wav');
                Exit;
              end;
          end;
        state_s_reply2 :
          begin
            case SCCount of
            0://十位数
              begin
                inc(SCCount);
                ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\'+IntToStr(arScore[1])+'.wav');
                Exit;
              end;
            1://"十"
              begin
                inc(SCCount);
                ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\10.wav');
                Exit;
              end;
            2://个位数
              begin
                inc(SCCount);
                ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\'+IntToStr(arScore[2])+'.wav');
                Exit;
              end;
            3://"分"
              begin
              CurrentState := state_s_mark;
              //
              ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\mark.wav');
              Exit;
              end;
          end;
        end;
        state_s_mark :

⌨️ 快捷键说明

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