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

📄 userinfo.cpp

📁 一个移动通信用SMPP协议写的.非常经典!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UserInfo.h"
#include "main.h"
#include "f_ceshi.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
__fastcall TUserInfo::TUserInfo()
{
     ADOConnection1=NULL;
     ADOQuery1=NULL;
     ADOQuery2=NULL;
     ADOQuery3=NULL;
     ADOQuery4=NULL;
     ADOQuery5=NULL;
}
//获取数据库信息
bool TUserInfo::GetDatabaseInfo(AnsiString _DBIP,AnsiString _DBNAME,AnsiString _DBUSERNAME,AnsiString _DBUSERPWD)
{
     if(_DBNAME=="")
     {
        ShowMessage("找不到数据库,请检查数据库设置是否正确!");
        return false;
     }
     if(_DBUSERNAME=="")
     {
        ShowMessage("数据库用户名错误!");
        return false;
     }
     DBIP=_DBIP;
     DBUSERNAME=_DBUSERNAME;
     DBUSERPWD=_DBUSERPWD;
     DBNAME=_DBNAME;
     return true;
}
//打开数据库
bool TUserInfo::OpenDatabase()
{
    CreateDbContrl();
    ADOConnection1->LoginPrompt=false;
    ADOConnection1->KeepConnection=false;
    ADOConnection1->CommandTimeout=120;
    ADOConnection1->ConnectionTimeout=120;
    AnsiString LinkStr;
    LinkStr  = "Provider=SQLOLEDB.1;Persist Security Info=false;Packet Size=16384;User ID=";
    LinkStr += DBUSERNAME;   //数据库登录名
    LinkStr += ";password=";
    LinkStr += DBUSERPWD;    //数据库登录密码
    LinkStr += ";Initial Catalog=";
    LinkStr += DBNAME;       //数据库名称
    LinkStr += ";Data Source=";
    LinkStr += DBIP;     //数据库所在机器IP(名称)
    LinkStr += ";";
    ADOConnection1->ConnectionString=LinkStr;
    try
    {
        ADOConnection1->Connected=true;
    }catch(...)
    {
        return false;
    }
     ADOQuery1->Connection=ADOConnection1;
     ADOQuery2->Connection=ADOConnection1;
     ADOQuery3->Connection=ADOConnection1;
     ADOQuery4->Connection=ADOConnection1;
     ADOQuery5->Connection=ADOConnection1;
     return true;
}
//关闭数据库
void TUserInfo::CloseDB()
{
      ADOConnection1->Close();
      DelDbContrl();
}
//构造数据库控件
void TUserInfo::CreateDbContrl()
{
    DelDbContrl();
    ADOConnection1=new TADOConnection(NULL);
    ADOQuery1=new TADOQuery(NULL);
    ADOQuery2=new TADOQuery(NULL);
    ADOQuery3=new TADOQuery(NULL);
    ADOQuery4=new TADOQuery(NULL);
    ADOQuery5=new TADOQuery(NULL);
}
//析构数据库控件
void TUserInfo::DelDbContrl()
{
    if(ADOConnection1)
    {
        delete ADOConnection1;
        ADOConnection1=NULL;
    }
    if(ADOQuery1)
    {
        delete ADOQuery1;
        ADOQuery1=NULL;
    }
    if(ADOQuery2)
    {
        delete ADOQuery2;
        ADOQuery2=NULL;
    }
    if(ADOQuery3)
    {
        delete ADOQuery3;
        ADOQuery3=NULL;
    }
    if(ADOQuery4)
    {
        delete ADOQuery4;
        ADOQuery4=NULL;
    }
    if(ADOQuery5)
    {
        delete ADOQuery5;
        ADOQuery5=NULL;
    }
}
//执行SQL语句
void TUserInfo::RunSQL(TADOQuery *ADOQuery,AnsiString strSQL,bool HaveReturn)
{
    ADOQuery->Close();
    ADOQuery->SQL->Clear();
    ADOQuery->SQL->Add(strSQL);
    try
    {
        if(HaveReturn)
           ADOQuery->Open();
        else ADOQuery->ExecSQL();
    }
    catch(Exception &E)
    {
       if(E.Message=="") MessageBox(Application->Handle,
                                    "数据库操作失败![连接超时]或者[数据库结构错误]。","信息",
                                    MB_OK|MB_ICONWARNING);
       else MessageBox(Application->Handle,E.Message.c_str(),"信息",MB_OK|MB_ICONWARNING);
       Application->Terminate();
    }
    return;
}
bool TUserInfo::RunSQLNoOver(TADOQuery *ADOQuery,AnsiString strSQL,bool HaveReturn)
{
    ADOQuery->Close();
    ADOQuery->SQL->Clear();
    ADOQuery->SQL->Add(strSQL);
    try
    {
        if(HaveReturn)
           ADOQuery->Open();
        else ADOQuery->ExecSQL();
    }
    catch(Exception &E)
    {
       if(E.Message=="") MessageBox(Application->Handle,
                                    "数据库操作失败![连接超时]或者[数据库结构错误]。","信息",
                                    MB_OK|MB_ICONWARNING);
       else MessageBox(Application->Handle,E.Message.c_str(),"信息",MB_OK|MB_ICONWARNING);
       return false;
    }
    return true;
}
//获得特定手机号的下一条灯谜
AnsiString TUserInfo::GetDmBySim(AnsiString sim)
{
    //选出灯谜编号
    AnsiString strDmid;
    bool bNew=false;
    AnsiString strSQL="select dmid from table_log where handset='"+sim+"'";
    if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
    strDmid=ADOQuery3->FieldByName("dmid")->AsString;
    if(strDmid=="")
    {
        strSQL="select top 1 id from table_dm";
        if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
        strDmid=ADOQuery3->FieldByName("id")->AsString;
        bNew=true;
    }
    else
    {
        int iTmp=StrToInt(strDmid);
        
        iTmp++;
        strDmid=IntToStr(iTmp);
        strSQL="select top 1 id from table_dm where id="+strDmid;
        if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
        strDmid=ADOQuery3->FieldByName("id")->AsString;
        if(strDmid=="")
        {
            strSQL="update table_log set breal=1 where handset='"+sim+"'";
            if(!RunSQLNoOver(ADOQuery3,strSQL,false)) return "ERROR";
            return "您已经猜完了今天的灯谜,请明天再继续,谢谢:)";
        }
    }
    //处理
    if(bNew)
    {
        strSQL="insert into table_log(handset,sendtime,dmid,answercount,grade) values(   \
        '"+sim+"', \
        '"+DateToStr(Date())+" "+TimeToStr(Time())+"', \
        "+strDmid+", \
        0, \
        0)";
        iUserCountToday++;
    }
    else
    {
        strSQL="update table_log set dmid="+strDmid+",sendtime='"+DateToStr(Date())+" "+TimeToStr(Time())+"',answercount=0,breal=0 where handset='"+sim+"'";
    }
    if(!RunSQLNoOver(ADOQuery3,strSQL,false)) return "ERROR";
    strSQL="select question from table_dm where id="+strDmid;
    if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
    return ADOQuery3->FieldByName("question")->AsString;
}
//添加一条猜灯谜信息
void TUserInfo::AddOneDm(AnsiString sim)
{
    AnsiString strTmp=GetDmBySim(sim);
    if(strTmp=="ERROR") return;
    SendDate(sim,strTmp);
}
//获取所有答案
DynamicArray<AnsiString> TUserInfo::GetAllAnswer(AnsiString strAnswer)
{
    DynamicArray<AnsiString>dArrayAnser;
    AnsiString strTmp=strAnswer;
    bool bHavSymb;
    while(strTmp.Length()>0)
    {
        bHavSymb=false;
        for(int i=0;i<strTmp.Length();i++)
        {
            if(strTmp.SubString(i+1,1)=="+")
            {
                bHavSymb=true;
                dArrayAnser.Length++;
                dArrayAnser[dArrayAnser.Length-1]=strTmp.SubString(1,i);
                strTmp=strTmp.SubString(i+2,strTmp.Length()-(i+1));
                break;
            }
        }
        if((!bHavSymb)&&(strTmp.Trim()!=""))
        {
            dArrayAnser.Length++;
            dArrayAnser[dArrayAnser.Length-1]=strTmp;
            break;
        }
    }
    return dArrayAnser;
}
//处理一条灯谜信息
void TUserInfo::UserAnswer(AnsiString sim,AnsiString sDate)
{
    AnsiString strAnswer;
    AnsiString strSQL="select a.answer from table_dm a,table_log b where a.id=b.dmid and \
    b.handset='"+sim+"'";
    if(!RunSQLNoOver(ADOQuery1,strSQL,true)) return;
    if(ADOQuery1->RecordCount<1)
    {
        AnsiString strTmp=GetDmBySim(sim);
        if(strTmp=="ERROR") return;
        SendDate(sim,strTmp);
    }
    else
    {
        bool bReal=false;
        DynamicArray<AnsiString>dArrayAnser;
        dArrayAnser=GetAllAnswer(ADOQuery1->FieldByName("answer")->AsString);
        for(int i=0;i<dArrayAnser.Length;i++)
        {
            strAnswer = dArrayAnser[i];

⌨️ 快捷键说明

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