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

📄 unit1.cpp

📁 学校和学生家长用短信及时沟通学生在校情况或及时把有关通知、重要信息发布给学生家长。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

void __fastcall TForm1::mEdSmDelClick(TObject *Sender)
{
   int i,rr;

   rr=sgEdSmTxt->Row;
   for(i=rr;i<RowCount+1;i++)
      sgEdSmTxt->Cells[1][i]=sgEdSmTxt->Cells[1][i+1];
   sgEdSmTxt->Cells[1][RowCount]="";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::sbConnectOffClick(TObject *Sender)
{
   sbSendSms->Enabled=false;
   sbConnectOn->Enabled=true;
   sbConnectOff->Enabled=false;
   StatusBar1->SimpleText="电脑与手机连接断开!";
   Comm1->PortOpen=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::sbSendSmsClick(TObject *Sender)
{
   FILE *fp;
   int i,p,n,SendTm;
   String ss,tt,sName,pName;
   char MpCode[20],SmTxt[256],RecTxt[1024];
   String CurDate,CurTime,fn;

   CurDate=DateToStr(Date());
   fn=CurDir+"\\"+CurDate+".sms";
   fp=fopen(fn.c_str(),"a");
   //
   n=lsRecv->Count;
   if(n==0){
      ShowMessage("没有收放手机号码,不知道发给谁?");
      return;
   }
   SendTm=0;
   for(i=0;i<n;i++){
      ss=lsRecv->Items->Strings[i];
      p=ss.Pos("+");
      sName=ss.SubString(1,p-1);
      ss.Delete(1,p);
      p=ss.Pos("+");
      pName=ss.SubString(1,p-1);
      ss.Delete(1,p);
      p=ss.Length();
      if(p<11){
         ShowMessage("手机号码不对,请核对号码!");
         return;
      }
      strcpy(MpCode,ss.c_str());
      ss=sName+"家长:"+mmSmsTxt->Text;
      p=1;
      while(p){
         p=ss.Pos("");
      }
      if(ss==""){
         ShowMessage("没有短信内容,不知道发什么?");
         return;
      }
      else
         strcpy(SmTxt,ss.c_str());
      StatusBar1->SimpleText="正在给"+sName+"同学的家长"+pName+"发短信...";
      if(!SendSms(SmTxt,MpCode)){
         ShowMessage("发送给"+sName+"同学的家长"+pName+"的发短信错误!");
      }
      else{
         StatusBar1->SimpleText="发送给"+sName+"同学的家长"+pName+"的发短信成功!";
         CurTime=TimeToStr(Time());
         tt=CurTime+"发送给"+sName+"同学的家长"+pName+"的短信内容:"+ss+"\n";
         strcpy(RecTxt,tt.c_str());
         fprintf(fp,"%s",RecTxt);
         SendTm++;
      }
   }
   StatusBar1->SimpleText="短信发送结束!";
   ShowMessage("短信发送结束,共发"+IntToStr(SendTm)+"条短信。");
   fclose(fp);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::sgMpBookDblClick(TObject *Sender)
{
   int rr;

   rr=sgMpBook->Row;
   lsRecv->Items->Add(sgMpBook->Cells[1][rr]+"+"+sgMpBook->Cells[2][rr]+"+"+sgMpBook->Cells[3][rr]);
   if(lsRecv->Count<10)
      Label4->Caption ="接收短信人数为0"+IntToStr(lsRecv->Count)+"位";
   else
      Label4->Caption ="接收短信人数为"+IntToStr(lsRecv->Count)+"位";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::mEditClick(TObject *Sender)
{
   int rr,cc;

   rr=sgMpBook->Row;
   cc=sgMpBook->Col;
   if(cc==1){
      sgMpBook->Cells[1][rr]=InputBox("输入姓名:   ","输入姓名:    ",sgMpBook->Cells[1][rr]);
   }
   if(cc==2){
      sgMpBook->Cells[2][rr]=InputBox("输入手机号码:   ","输入手机号码:    ",sgMpBook->Cells[2][rr]);
   }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::cbClassNameChange(TObject *Sender)
{
   int i,j,CurName;

   CurName=cbClassName->ItemIndex;
   for(i=0;i<RowCount;i++)
      for(j=0;j<3;j++)
         sgMpBook->Cells[j+1][i+1]=NameCode[CurName][i][j];
}
//---------------------------------------------------------------------------

void __fastcall TForm1::lsRecvDblClick(TObject *Sender)
{
   int rr;

   rr=lsRecv->ItemIndex;
   lsRecv->Items->Delete(rr);
   if(lsRecv->Count<10)
      Label4->Caption ="接收短信人数为0"+IntToStr(lsRecv->Count)+"位";
   else
      Label4->Caption ="接收短信人数为"+IntToStr(lsRecv->Count)+"位";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::mCLearClick(TObject *Sender)
{
   lsRecv->Items->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::cbSmsTxtChange(TObject *Sender)
{
   mmSmsTxt->Lines->Clear();
   mmSmsTxt->Lines->Add(cbSmsTxt->Text);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SendByte(Byte dt)
{
   DynamicArray<byte> ByteSend;
   ByteSend.Length=1;
   ByteSend[0]=dt;
   Comm1->OutputByte(ByteSend);
   ByteSend.Length=0;
}
//---------------------------------------------------------------------------

bool __fastcall TForm1::SendSms(char  *SmsTxt,char *SendCode)
{
   String SMSC,Phon,SMS;
   String DR,FO,mf,LS,mva,tep;
   WideString ws;
   int i,l,p,lnth;
   char str[400];
   String AtCmgs,At="AT+CMGS=";
   DynamicArray<byte> ByteSend;

   //if(chkRept->Checked)
      //DR="31"; //提交报告
   //else
      DR="11"; //不提交报告

   if(cbLang->Text=="英文")
      mf="00";
   else if(cbLang->Text=="中文")
      mf="08";
   else if(cbLang->Text=="Flash")
      mf="18";
   SMSC=edSmsc->Text;  //短信中心号码
   if(SMSC.SubString(1,1)=="+")//去掉加号
      SMSC.Delete(1,1);
   //收放电话号码
   Phon=SendCode;
   //短信内容
   SMS=SmsTxt;
   //短信中心号码转换
   SMSC="91"+RevNum(SMSC); //国际码
   lnth=SMSC.Length()/2;   //中心号码长度
   SMSC=IntToHex(lnth,2)+SMSC;
    //收放号码转换
   lnth=Phon.Length(); //发送到电话号码长度
   if(lnth<12)
      FO="81";
   else if(lnth<14)
      FO="91";
   else if(lnth>13)
      FO="A1";
   Phon=IntToHex(lnth,2)+FO+RevNum(Phon);
   //过滤\r\n
   l=1;
   while(l){
      l=SMS.Pos("\r\n");
      if(l>0)
         SMS.Delete(l,2);
   }
   //短信编码
   if(mf=="00"){
      lnth=SMS.Length(); //英文短信长度
      LS=IntToHex(lnth,2);
      SMS=Encode(SMS);       //英文编码
   }
   else if(mf=="08"){
      ws=WideString(SMS);//中文短信长度*2
      lnth=ws.Length(); 
      LS=IntToHex(lnth*2,2);
      SMS=AnsiToUnicode(SMS);//中文信息编码
   }
   else if(mf=="18"){
      ws=WideString(SMS);//Flash SMS短信长度+1
      lnth=ws.Length()+1;
      LS=IntToHex(lnth*2,2);
      SMS="0001"+AnsiToUnicode(SMS);//Flash SMS前+"0001"
   }
   mva=cbMval->Text.SubString(1,2);//短信息有效期
   tep=DR+"00"+Phon+"00"+mf+mva+LS+SMS; //合成为信息流
   lnth=tep.Length()/2;
   msg=SMSC+tep;
   //
   AtCmgs=At+IntToStr(lnth)+"\r";     //请求发送:AT+CMGS
   strcpy(str,AtCmgs.c_str());
   l=strlen(str);
   ByteSend.Length=l;
   for(i=0;i<l;i++)
      ByteSend[i]=str[i];
   Comm1->OutputByte(ByteSend);
   Sleep(100);
   
   while((p=SmsRcv.Pos(">"))==0){       //等待发送数据提示">"
      Application->ProcessMessages();
   }
   SmsRcv="";
   strcpy(str,msg.c_str());//发送消息
   l=strlen(str);
   str[l]=26;//数据结尾标志
   str[l+1]='\r';
   ByteSend.Length=l+2;
   for(i=0;i<l+2;i++)
      ByteSend[i]=str[i];
   Comm1->OutputByte(ByteSend);
   Sleep(1000);
   while((p=SmsRcv.Pos("\r\nOK\r\n"))==0&&SmsRcv.Pos("\r\nERROR\r\n")==0){ // 等待回应正确与否?
      Application->ProcessMessages();
   }
   ByteSend.Length=0;
   if(p!=0)
      return true; //成功
   return false;
}
//---------------------------------------------------------------------------

String __fastcall TForm1::Encode(String sAnsi)//英文编码
{
   int i,j,len;
   Byte cur1,cur2,cur;
   String Result,t;

   Result="";
   len=sAnsi.Length();
   i=1;j=0;
   while(i<=len){
      if(i<len){
         cur1=Byte(sAnsi.SubString(i+1,1).c_str());
         cur1<<=(7-j);
         cur2=Byte(sAnsi.SubString(i,1).c_str());
         cur2>>=j;
         cur=cur1|cur2;
      }
      else{
         cur2=Byte(sAnsi.SubString(i,1).c_str());
         cur=cur2>>j;
      }
      FmtStr(t,"%2.2X",ARRAYOFCONST((cur)));
      Result=Result+t;
      i++;
      j=(j+1)%7;
      if(j==0)
         i++;
   }
   return Result;
}
//---------------------------------------------------------------------------

String __fastcall TForm1::AnsiToUnicode(String sAnsi)//中文编码
{
   int cur,l;
   String tempstr="",returnstr="";
   WideString ws;
   wchar_t mid[2];
   
   ws=WideString(sAnsi);
   l=ws.Length();
   for(int i=1;i<=l;i++){
      wcscpy(mid,ws.SubString(i,1).c_bstr());
      cur=mid[0];
      FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));
      returnstr=returnstr+tempstr;
   }
   return returnstr;
}
//---------------------------------------------------------------------------

String __fastcall TForm1::RevNum(String numb)//电话号码,短信中心编码
{
   char cc,txt[20];
   String tt;
   int i,l;

   l=numb.Length();
   if(l%2!=0)
      numb=numb+"F";
   strcpy(txt,numb.c_str());
   l=strlen(txt);
   for(i=0;i<l/2;i++){
      cc=txt[i*2];
      txt[i*2]=txt[i*2+1];
      txt[i*2+1]=cc;
   }
   tt=txt;
   return tt;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Comm1ReceiveData(TObject *Sender)
{
   SmsRcv=SmsRcv+Comm1->Input;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AddCombo()
{
   int h,Hrs,Min,days,weeks;
   String sp;

   Hrs=0;
   Min=5;
   for(h=0;h<=143;h++){
      sp=IntToHex(h,2);
      cbMval->Items->Add(sp+" "+IntToStr(Hrs)+"小时 "+IntToStr(Min)+"分");
      Min+=5;
      if(Min==60){
         Min=0;
         Hrs++;
      }
   }
   Hrs=12;
   Min=30;
   for(h=144;h<=167;h++){
      sp=IntToHex(h,2);
      cbMval->Items->Add(sp+" "+IntToStr(Hrs)+"小时 "+IntToStr(Min)+"分");
      if(Min==30){
         Min=0;
         Hrs++;
      }
      else{
         Min=30;
      }
   }
   days=2;
   for(h=168;h<=196;h++){
      sp=IntToHex(h,2);
      cbMval->Items->Add(sp+" "+IntToStr(days)+"天");
      days++;
   }
   weeks=5;
   for(h=197;h<=255;h++){
      sp=IntToHex(h,2);
      cbMval->Items->Add(sp+" "+IntToStr(weeks)+"星期");
      weeks++;
   }
   cbMval->ItemIndex=167;
}
//---------------------------------------------------------------------------

bool __fastcall TForm1::GetCgsn()
{
   int i,j,p,counter;
   char AtCgsn[]="AT+CGSN\r",rCode[20];
   Byte bb;
   String ss,ass;
   DynamicArray<byte> ByteSend;
   TRegistry *rg;

   SmsRcv="";
   ByteSend.Length=8;
   for(i=0;i<8;i++)
      ByteSend[i]=AtCgsn[i];
   Comm1->OutputByte(ByteSend);
   Sleep(200);
   counter=0;
   while((p=SmsRcv.Pos("\r\n"))==0&&counter<100){
      Application->ProcessMessages();
      counter++;
   }
   if(counter>=100){
      return false;
   }
   SmsRcv.Delete(1,p+1);
   ss=SmsRcv.SubString(1,15);
   //
   strcpy(rCode,ss.c_str());
   for(i=0;i<31;i++){
      bb=(rCode[0]+rCode[5]+rCode[7]+rCode[13])&0xff;
      while(bb>=0x1a)
         bb-=0x1a;
      bb+=0x41;
      for(j=0;j<14;j++){
         rCode[j]=rCode[j+1];
      }
      rCode[14]=bb;
   }
   ss=rCode;
   //
   rg=new TRegistry();
   rg->RootKey=HKEY_LOCAL_MACHINE;
   rg->OpenKey("\\Software\\SchoolSms",True);
   ass=rg->ReadString("Serial");
   rg->CloseKey();
   rg->Free();
   //
   if(ss!=ass){
      return false;
   }
   return true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::sbRegistClick(TObject *Sender)
{
   Form2->Show();   
}
//---------------------------------------------------------------------------

void __fastcall TForm1::sbOpenClick(TObject *Sender)
{
   FILE *fp;
   String fn,ss;
   char RecTxt[1024];

   OpenDialog->Title="查看发送短信发送纪录";
   OpenDialog->DefaultExt="*.sms|*.sms";
   OpenDialog->Filter="*.sms|*.sms|*.sms|*.sms";
   if(OpenDialog->Execute()){
      fn=OpenDialog->FileName;
      edSmsRec->Text=fn;
      fp=fopen(fn.c_str(),"r");
      mmSmsRec->Clear();
      do{
         fscanf(fp,"%s",RecTxt);
         ss=RecTxt;
         if(!feof(fp))
            mmSmsRec->Lines->Add(ss);
      }while(!feof(fp));
      fclose(fp);
   }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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