예제 #1
0
/// from:
/// http://www.ptgsystems.com/blognet/post/2010/03/12/determining-the-nth-occurence-of-a-day-of-the-week-in-any-given-month.aspx
DateTime TimeZone::CalculateTransitionDate(unsigned int uiYear, unsigned int uiIndex) const
{
   ATLASSERT(uiIndex == 0 || uiIndex == 1);

   const SYSTEMTIME& st = uiIndex == 0 ? m_tzi.DaylightDate : m_tzi.StandardDate;
   SYSTEMTIME stTemp = st;

   if (stTemp.wYear != 0 ||                           // one-time switch
       ((stTemp.wDay  < 1)  || (stTemp.wDay > 5)) ||  // invalid number of week
       stTemp.wDayOfWeek > 6)                         // invalid day of week
   {
      ATLASSERT(false);
      return DateTime(DateTime::invalid);
   }

   stTemp.wYear = static_cast<WORD>(uiYear); // set year

   stTemp.wDay = 1;
   FILETIME ft;
   SystemTimeToFileTime(&stTemp, &ft);
   FileTimeToSystemTime(&ft, &stTemp);

   int nDayOff;

   // determine offset to first target WeekDay
   nDayOff = (int)st.wDayOfWeek - (int)stTemp.wDayOfWeek;
   if (nDayOff < 0)
      nDayOff += 7;

   // offset to wDay occurence of WeekDay
   nDayOff += ((st.wDay-1) * 7);
   stTemp.wDay = static_cast<WORD>(nDayOff + 1);
   BOOL bValid = SystemTimeToFileTime(&stTemp, &ft);
   if (bValid)
   {
      SYSTEMTIME stFinal = {0};
      FileTimeToSystemTime(&ft, &stFinal);

      return SystemTimeToDateTime(stFinal);
   }
   else if (st.wDay == 5)    // Only allow backup of 1 week if wDay = 5 (last occurrence in month)
   {
      nDayOff -= 7;
      stTemp.wDay = static_cast<WORD>(nDayOff + 1);
      bValid = SystemTimeToFileTime(&stTemp, &ft);

      SYSTEMTIME stFinal = {0};
      FileTimeToSystemTime(&ft, &stFinal);

      if (bValid)
         return SystemTimeToDateTime(stFinal);
   }

   return DateTime(DateTime::invalid);
}
//===========================================================================
//FILETIME構造体をTTimeStampに変換して文字列として取得する
//===========================================================================
String __fastcall TAttacheCaseFileEncrypt::TimeStampToString(FILETIME ft)
{

SYSTEMTIME st;
TDateTime dt;
TTimeStamp ts;

//FileTime → SystemFileTime
FileTimeToSystemTime(&ft, &st);
//SystemTime → TDateTime
dt = SystemTimeToDateTime(st);
//TDateTime → TimeStamp
ts = DateTimeToTimeStamp(dt);

/*
//ファイル/ディレクトリの日時をなぜ
//わざわざサイズが大きいTTimeStampに変換して格納したのか?
//ごめんなさい、意味はありません(笑)。

struct TTimeStamp
{
	int Time;
	int Date;
};
*/

return(IntToStr(ts.Date)+"\t"+IntToStr(ts.Time));

}
예제 #3
0
TDateTime __fastcall TVersionInfo::GetFileDate(void) const
{
  FILETIME AFileTime;
  SYSTEMTIME ASystemTime;

  // The FILETIME structure is a 64-bit value representing the
  // number of 100-nanosecond intervals since January 1, 1601.
  //
  //   We need to convert this to a TDateTime double value:
  //
  // The integral part of a TDateTime value is the number of days
  // that have passed since 12/30/1899. The fractional part of a
  // TDateTime value is the time of day.

  AFileTime = GetRawFileDate();

  Win32Check( FileTimeToSystemTime(&AFileTime, &ASystemTime) );

  return SystemTimeToDateTime(ASystemTime);
}
예제 #4
0
파일: Log.cpp 프로젝트: nippur72/Chip64
//---------------------------------------------------------------------------
void __fastcall TFormLog::ButtonLogClick(TObject *Sender)
{
        if(EditQRZ->Text=="") return;

        int H;
        AnsiString LogName = ThePath + "\\stream.adi";

        if(FileExists(LogName))
        {
           H = FileOpen(LogName,fmOpenReadWrite);
           if(H<0)
           {
              Application->MessageBox("Cannot write to log","IZ8BLY PSK31 Lab",MB_OK | MB_ICONSTOP);
              return;
           }
           FileSeek(H,0,2);
        }
        else
        {
           H = FileCreate(LogName);
           if(H<0)
           {
              Application->MessageBox("Cannot write to log","IZ8BLY PSK31 Lab",MB_OK | MB_ICONSTOP);
              return;
           }
           FileWriteString(H,"Created by IZ8BLY PSK31 Lab\r\n<EOH>\r\n");
        }

        AnsiString Linea;

        TDateTime TD;
        if(UTCTimeLog)
        {
           SYSTEMTIME SystemTime;
           GetSystemTime(&SystemTime);
           TD = SystemTimeToDateTime(SystemTime);
        }
        else
        {
           TD = TDateTime().CurrentDateTime();
        }

        Linea = FormatAdif("CALL",EditQRZ->Text) +
                FormatAdif("NAME",EditName->Text)+
                FormatAdif("QTH",EditQTH->Text)+
                FormatAdif("RST_RCVD",EditRSTReceived->Text)+
                FormatAdif("RST_SENT",EditRSTSent->Text)+
                FormatAdif("FREQ",EditFrequency->Text)+
                FormatAdif("MODE","STREAM")+
                FormatAdif("QSO_DATE",TD.FormatString("yyyymmdd"))+
                FormatAdif("TIME_ON",TD.FormatString("hhmm"))+
                FormatAdif("COMMENT",EditComments->Text)+
                "<EOR>\r\n";

        FileWriteString(H,Linea);
        FileClose(H);

        char oldclip[2048];
        Clipboard()->GetTextBuf(oldclip,2048);

        Clipboard()->SetTextBuf(Linea.c_str());
        SendMessage(HWND_BROADCAST,IZ8BLY,0,0);
        Clipboard()->SetTextBuf(oldclip);

        ButtonLog->Enabled = false;
}
예제 #5
0
void __fastcall TWithDrawERRForm::cxButton2Click(TObject *Sender)
{
	WORD status;
	int tmpbalance;
	int tmpkh,tmpsycs;
	double tmpintye;
	double tmpye;
	unsigned char keymode,secnum,Delayms,mode;
	unsigned char key[6];
	unsigned char dwmm[6];
	unsigned char daytime[4];
	unsigned char kh[4];
	unsigned char balance[4];
	unsigned char cardtype[1];
	unsigned char czmm[3];
	unsigned char synum[3];

	mode = 0x02;
	Delayms = DelaySecond;
	keymode = CARDPasswordEdition;
	secnum = UsingSecNUM;

	key[0] = CARDPassword[0];
	key[1] = CARDPassword[1];
	key[2] = CARDPassword[2];
	key[3] = CARDPassword[3];
	key[4] = CARDPassword[4];
	key[5] = CARDPassword[5];

	if(LoadHModule)
	{
		if(readwatercardinfo)//readcardinfo)
		{
		//	status = readcardinfo(readcomno,keymode,secnum,key,kh,balance,
		//						dwmm,synum,daytime,cardtype,czmm,Delayms);

        	status = readwatercardinfo(readcomno,keymode,secnum,key,kh,balance,
            							dwmm,daytime,cardtype,Delayms);
			if(status > 99)
			{
				ShowMessage("通讯错误!");
			}
			else if (1 == status)
			{
				ShowMessage("请把卡片放好!");
			}
			else if (2 == status)
			{
				ShowMessage("卡号大于192000或等于0!");
			}
			else if (4 == status)
			{
				ShowMessage("卡片密码不对!");
			}
			else if (5 == status)
			{
				ShowMessage("读写卡不稳定!");
			}
			else if (6 == status)
			{
				ShowMessage("卡结构不对!");
			}
			else if (10 == status)
			{
				ShowMessage("卡结构不对!");
			}
			else if (0 != status)
			{
				ShowMessage("该卡未发行或已退卡!");
			}
			else
			{
				ADOReChargeQuery->Close();
				ADOReChargeQuery->SQL->Clear();
				ADOReChargeQuery->SQL->Add("select * from XTSET");
				String mmstr = "";

				unsigned char tmpchar;
				tmpchar = dwmm[0];
				tmpchar = tmpchar>>4;
				mmstr += (int)tmpchar;

				tmpchar = dwmm[0];
				tmpchar = tmpchar<<4;
				tmpchar = tmpchar>>4;
				mmstr += (int)tmpchar;

				tmpchar = dwmm[1];
				tmpchar = tmpchar>>4;
				mmstr += (int)tmpchar;

				tmpchar = dwmm[1];
				tmpchar = tmpchar<<4;
				tmpchar = tmpchar>>4;
				mmstr += (int)tmpchar;

				ADOReChargeQuery->Close();

				String tmpstr;
				tmpkh = (int)kh[1]*256*256+(int)kh[2]*256+(int)kh[3];
				tmpsycs = 0;//(int)synum[0]*256+(int)synum[1];
				tmpintye = (double)balance[1]*256*256+(double)balance[2]*256+(double)balance[3];
				tmpye = tmpintye/100;

				ADOReChargeQuery->Close();
				ADOReChargeQuery->SQL->Clear();
				tmpstr = "select * from KZT where kh=";
				tmpstr += tmpkh;
				ADOReChargeQuery->SQL->Add(tmpstr);
				ADOReChargeQuery->Open();
				if(!ADOReChargeQuery->IsEmpty())
				{
					if(0 != ADOReChargeQuery->FieldByName("GS")->AsInteger)
					{
						ShowMessage("此卡已挂失,请没收此卡!");
						ADOReChargeQuery->Close();
						return;
					}
				}
				else
				{
					ShowMessage("此卡不是本系统发出的卡!");
					ADOReChargeQuery->Close();
					return;
				}
				ADOReChargeQuery->Close();

				ADOReChargeQuery->SQL->Clear();
				tmpstr = "select * from CARD where kh=";
				tmpstr += tmpkh;
				ADOReChargeQuery->SQL->Add(tmpstr);
				ADOReChargeQuery->Open();
				if(!ADOReChargeQuery->IsEmpty())
				{
					ADOReChargeQuery->Close();
					beepofreaddll(readcomno, '10');
					int oldkh = StrToInt(cxTextEdit1->Text.Trim());
					if(oldkh == tmpkh)
					{
						cxTextEdit18->Text = tmpye;
						ADOReChargeQuery->SQL->Clear();
						String Chksqlstr = "select * from HJL where KH=";
						Chksqlstr += tmpkh;
						Chksqlstr += " order by OPTIME asc";
						ADOReChargeQuery->SQL->Add(Chksqlstr);
						ADOReChargeQuery->Open();
						if(ADOReChargeQuery->IsEmpty())
						{
							beepofreaddll(readcomno, '10');
							String ReChargeOutstr = "取款成功!卡余额为:";
							ReChargeOutstr += tmpye;
							ShowMessage(ReChargeOutstr);
							this->Close();
						}
						else
						{
							if(tmpye == ADOReChargeQuery->FieldByName("YE")->AsFloat)
							{
								beepofreaddll(readcomno, '10');
								String ReChargeOutstr = "取款成功!卡余额为:";
								ReChargeOutstr += tmpye;
								ShowMessage(ReChargeOutstr);
								ADOReChargeQuery->Close();
								this->Close();
							}
							else
							{
								//写充值金额
								if(!LaunchWaterNewCard)//LaunchNewCard)
								{
									ShowMessage("写卡函数加载失败");
									return;
								}

								tmpsycs = 0;//(int)synum[0]*256+(int)synum[1];
								tmpsycs++;
								unsigned char writesynum[2];
								writesynum[0] = (char)(tmpsycs/256);
								writesynum[1] = (char)(tmpsycs%256);
								unsigned char writebalance[4];
								ADOReChargeQuery->Last();
								int ReChargeMoney = ADOReChargeQuery->FieldByName("JE")->AsInteger;
								double writetmpbalance = ADOReChargeQuery->FieldByName("JE")->AsFloat;
								tmpye -= writetmpbalance;
								writetmpbalance *= 100;
								writebalance[0] = 0x00;
								writebalance[1] = (unsigned char)((int)writetmpbalance/65536);
								writetmpbalance = (int)writetmpbalance%65536;
								writebalance[2] = (unsigned char)((int)writetmpbalance/256);
								writetmpbalance = (int)writetmpbalance%256;
								writebalance[3] = (unsigned char)writetmpbalance;
								WORD WriteStatus;

								String DateofLaunchCard;
								SYSTEMTIME tmpsystime;
								GetLocalTime(&tmpsystime);
								DateofLaunchCard = DateTimeToStr(SystemTimeToDateTime(tmpsystime));

						  /*		WriteStatus = LaunchNewCard(readcomno,
															keymode,
															secnum,
															key,
															kh,
															writebalance,
															dwmm,
															writesynum,
															daytime,
															cardtype,
															czmm,
															mode,
															Delayms);
                                                            */
                          		WriteStatus = LaunchWaterNewCard(readcomno,
                                								 keymode,
                                                                 secnum,
                                                                 key,
                                                                 kh,
                                                                 writebalance,
                                                                 dwmm,
                                                                 daytime,
                                                                 cardtype,
                                                                 mode,
                                                                 Delayms);
								if(WriteStatus)
								{
									ShowMessage("修正失败,请重试!");
									ADOReChargeQuery->Close();
									return;
								}
								else
								{
									//取款入库、入狗开始
									ADOReChargeQuery->Close();
									ADOReChargeQuery->SQL->Clear();
									String sqlstr = "insert into MX values(:BH,:KH,:SF_YE,";
									sqlstr = sqlstr + ":SFJE,:SYCS,:SFRQ,:JYNO,";
									sqlstr = sqlstr + ":GZZID,:SFLX,:CZY,:SCRQ)";
									ADOReChargeQuery->SQL->Add(sqlstr);
									ADOReChargeQuery->Parameters->ParamByName("BH")->Value = cxTextEdit7->Text;
									ADOReChargeQuery->Parameters->ParamByName("KH")->Value = tmpkh;
									ADOReChargeQuery->Parameters->ParamByName("SF_YE")->Value = tmpye;
									ADOReChargeQuery->Parameters->ParamByName("SFJE")->Value = ReChargeMoney;
									ADOReChargeQuery->Parameters->ParamByName("SYCS")->Value = tmpsycs;
									ADOReChargeQuery->Parameters->ParamByName("SFRQ")->Value = DateofLaunchCard;
									ADOReChargeQuery->Parameters->ParamByName("JYNO")->Value = 1001;
									ADOReChargeQuery->Parameters->ParamByName("GZZID")->Value = 1;
									ADOReChargeQuery->Parameters->ParamByName("SFLX")->Value = "d";
									ADOReChargeQuery->Parameters->ParamByName("CZY")->Value = OperatorName;
									ADOReChargeQuery->Parameters->ParamByName("SCRQ")->Value = DateofLaunchCard;
									ADOReChargeQuery->ExecSQL();
									ADOReChargeQuery->Close();

									//插入CK表
									ADOReChargeQuery->SQL->Clear();
									sqlstr = "insert into CK values(:kh,:bh,:sf_ye,:sf_fl,:ckxj,";
									sqlstr += ":glf,:ckje,:lqbt,:xkje,:sycs,:sfrq,:jyno,:gzzid,:sflx,:CZY)";
									ADOReChargeQuery->SQL->Add(sqlstr);
									ADOReChargeQuery->Parameters->ParamByName("kh")->Value = tmpkh;
									ADOReChargeQuery->Parameters->ParamByName("bh")->Value = cxTextEdit7->Text;
									ADOReChargeQuery->Parameters->ParamByName("sf_ye")->Value = tmpye;
									ADOReChargeQuery->Parameters->ParamByName("sf_fl")->Value = 1;
									ADOReChargeQuery->Parameters->ParamByName("ckxj")->Value = ReChargeMoney;
									ADOReChargeQuery->Parameters->ParamByName("glf")->Value = 0;
									ADOReChargeQuery->Parameters->ParamByName("ckje")->Value = ReChargeMoney;
									ADOReChargeQuery->Parameters->ParamByName("lqbt")->Value = 0;
									ADOReChargeQuery->Parameters->ParamByName("xkje")->Value = ReChargeMoney;
									ADOReChargeQuery->Parameters->ParamByName("sycs")->Value = tmpsycs;
									ADOReChargeQuery->Parameters->ParamByName("sfrq")->Value = DateofLaunchCard;
									ADOReChargeQuery->Parameters->ParamByName("jyno")->Value = 1001;
									ADOReChargeQuery->Parameters->ParamByName("gzzid")->Value = 1;
									ADOReChargeQuery->Parameters->ParamByName("sflx")->Value = "d";
									ADOReChargeQuery->Parameters->ParamByName("CZY")->Value = OperatorName;
									ADOReChargeQuery->ExecSQL();
									ADOReChargeQuery->Close();

									//填写操作记录表
									sqlstr = "insert into OperationList values(:BH,:KH,:JE,:YE,:LX,:Operator,:DateTime)";
									ADOReChargeQuery->SQL->Clear();
									ADOReChargeQuery->SQL->Add(sqlstr);
									ADOReChargeQuery->Parameters->ParamByName("BH")->Value = cxTextEdit7->Text;
									ADOReChargeQuery->Parameters->ParamByName("KH")->Value = tmpkh;
									ADOReChargeQuery->Parameters->ParamByName("JE")->Value = ReChargeMoney;
									ADOReChargeQuery->Parameters->ParamByName("YE")->Value = tmpye;
									ADOReChargeQuery->Parameters->ParamByName("LX")->Value = "取款";
									ADOReChargeQuery->Parameters->ParamByName("Operator")->Value = OperatorName;
									ADOReChargeQuery->Parameters->ParamByName("DateTime")->Value = DateofLaunchCard;
									ADOReChargeQuery->ExecSQL();
									ADOReChargeQuery->Close();

									//更新CARD,CARD_F表

									sqlstr = "select * from CARD where BH='";
									sqlstr = sqlstr + cxTextEdit7->Text + "'";
									ADOReChargeQuery->SQL->Clear();
									ADOReChargeQuery->SQL->Add(sqlstr);
									ADOReChargeQuery->Open();
									if(!ADOReChargeQuery->IsEmpty())
									{
										ADOReChargeQuery->Edit();
										ADOReChargeQuery->FieldByName("SF_YE")->AsFloat = tmpye;
										ADOReChargeQuery->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard);
										ADOReChargeQuery->FieldByName("SYCS")->AsInteger = tmpsycs;
										ADOReChargeQuery->Post();
									}

									sqlstr = "select * from CARD_F where BH='";
									sqlstr = sqlstr + cxTextEdit7->Text + "'";
									ADOReChargeQuery->SQL->Clear();
									ADOReChargeQuery->SQL->Add(sqlstr);
									ADOReChargeQuery->Open();
									if(!ADOReChargeQuery->IsEmpty())
									{
										ADOReChargeQuery->Edit();
										ADOReChargeQuery->FieldByName("SF_YE")->AsFloat = tmpye;
										ADOReChargeQuery->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard);
										ADOReChargeQuery->FieldByName("SYCS")->AsInteger = tmpsycs;
										ADOReChargeQuery->Post();
									}

									ADOReChargeQuery->Close();

									//写加密狗充值总额
                                    if(DOGChk)
                                    {
                                        unsigned char tempbuf[8];
                                        SFK_ZE -= ReChargeMoney;
                                        UpZETable->FieldByName("SFKZE")->AsFloat -= ReChargeMoney;
                                        memcpy(tempbuf,&SFK_ZE,8);
                                        unsigned char hightempchar1;
                                        unsigned char lowtempchar1;
                                        for(int t = 0; t < 8; t++)
                                        {
                                            hightempchar1 = tempbuf[t]&0xf0;
                                            lowtempchar1 = tempbuf[t]&0x0f;

                                            hightempchar1 = hightempchar1>>4;
                                            hightempchar1 = hightempchar1&0x0f;

                                            lowtempchar1 = lowtempchar1<<4;
                                            lowtempchar1 = lowtempchar1&0xf0;

                                            tempbuf[t] = hightempchar1|lowtempchar1;
                                        }
                                        int dogoffset = 0x0034;
                                        int doglen = 8;
                                        RY3_Write(doghandle,dogoffset,tempbuf,doglen);
                                    }
									//写加密狗完毕
									//取款入库、入狗结束
									beepofreaddll(readcomno, '10');
									String ReChargeOutstr = "取款成功!卡余额为:";
								//	ReChargeOutstr += tmpye;
									ReChargeOutstr += tmpye;
									ShowMessage(ReChargeOutstr);
									ADOReChargeQuery->Last();
									ADOReChargeQuery->Delete();
									ADOReChargeQuery->Close();
									this->Close();
                                }
                            }
						}
					}
					else
					{
						beepofreaddll(readcomno, '10');
						ShowMessage("此卡不是充值出错的卡片,请更换!");
                    }

				//	ReadCardBTN->Enabled = false;
				}
				else
				{
예제 #6
0
void __fastcall TDealMistakeForm::cxButton3Click(TObject *Sender)
{
//修正金额
	if(cxTextEdit1->Text.IsEmpty())
	{
		ShowMessage("必须填写修正金额!");
		return;
	}

	double mistakemoney = 0;
	try
	{
		mistakemoney = StrToFloat(cxTextEdit1->Text);
	}
	catch(...)
	{
		ShowMessage("您输入的修正金额为非正常值,请重新输入!");
		cxTextEdit1->SelectAll();
		return;
	}

	if(0 == mistakemoney)
	{
		ShowMessage("修正金额为0,错误的输入!");
		return;
	}
	//修正金额写卡
	//修正行为入库CARD,CARD_F,MX,Operatorlist,"^"为充钱,"v"为扣钱。
	String Moutstr = "请您确认输入的修正金额为:¥";
	Moutstr += mistakemoney;
	if(mrOk != MessageBox(this->Handle, Moutstr.t_str(), "确认修正金额", MB_OKCANCEL))
		return;

	WORD status;
	WORD WriteStatus;
	int tmpbalance;
	int tmpkh,tmpsycs;
	double tmpintye;
	double tmpye;
	unsigned char keymode,secnum,Delayms,mode;
	unsigned char key[6];
	unsigned char dwmm[6];
	unsigned char daytime[4];
	unsigned char kh[4];
	unsigned char balance[4];
	unsigned char cardtype[1];
	unsigned char czmm[3];
	unsigned char synum[3];

	Delayms = DelaySecond;//0x00;
	keymode = CARDPasswordEdition;
	mode = 0x01;
	secnum = UsingSecNUM;

	key[0] = CARDPassword[0];
	key[1] = CARDPassword[1];
	key[2] = CARDPassword[2];
	key[3] = CARDPassword[3];
	key[4] = CARDPassword[4];
	key[5] = CARDPassword[5];

	if(LoadHModule)
	{
		if(readwatercardinfo)//readcardinfo)
		{
 //			ShowMessage("begin read card!");
		 //	status = readcardinfo(readcomno,keymode,secnum,key,kh,balance,
		 //						dwmm,synum,daytime,cardtype,czmm,Delayms);

         	status = readwatercardinfo(readcomno,keymode,secnum,key,kh,balance,
            							dwmm,daytime,cardtype,Delayms);
			if(status > 99)
			{
				ShowMessage("通讯错误!");
			}
			else if (1 == status)
			{
				ShowMessage("请把卡片放好!");
			}
			else if (2 == status)
			{
				ShowMessage("卡号大于192000或等于0!");
			}
			else if (4 == status)
			{
				ShowMessage("卡片密码不对!");
			}
			else if (5 == status)
			{
				ShowMessage("读写卡不稳定!");
			}
			else if (6 == status)
			{
				ShowMessage("卡结构不对!");
			}
			else if (10 == status)
			{
				ShowMessage("卡结构不对!");
			}
			else if (0 != status)
			{
				ShowMessage("该卡未发行或已退卡!");
			}
			else
			{
				tmpkh = (int)kh[1]*256*256+(int)kh[2]*256+(int)kh[3];

				if(querykh != tmpkh)
				{
					ShowMessage("该卡不是刚才查询的卡片,无法修正!");
					return;
                }

				tmpsycs = 0;//(int)synum[0]*256+(int)synum[1];
				tmpsycs++;
				unsigned char writesynum[2];
				writesynum[0] = (char)(tmpsycs/256);
				writesynum[1] = (char)(tmpsycs%256);

				tmpintye = (double)balance[1]*256*256+(double)balance[2]*256+(double)balance[3];
		  //		tmpye = tmpintye/100+ReChargeMoney;
				tmpye = tmpintye/100 + mistakemoney;

				unsigned char writebalance[4];
				double writetmpbalance = mistakemoney;
				writetmpbalance *= 100;
				writebalance[0] = 0x00;
				writebalance[1] = (unsigned char)((int)writetmpbalance/65536);
				writetmpbalance = (int)writetmpbalance%65536;
				writebalance[2] = (unsigned char)((int)writetmpbalance/256);
				writetmpbalance = (int)writetmpbalance%256;
				writebalance[3] = (unsigned char)writetmpbalance;

				if(LaunchWaterNewCard)//LaunchNewCard)
				{
					String DateofLaunchCard;
					SYSTEMTIME tmpsystime;
					GetLocalTime(&tmpsystime);
					DateofLaunchCard = DateTimeToStr(SystemTimeToDateTime(tmpsystime));

					ADOTable1->TableName = "HJL";
					ADOTable1->Active = true;
					if(mistakemoney>0)
						ADOTable1->InsertRecord(ARRAYOFCONST((bhstr,tmpkh,tmpye,mistakemoney,tmpsycs,"^",OperatorName,DateofLaunchCard)));
					else if(mistakemoney < 0)
						ADOTable1->InsertRecord(ARRAYOFCONST((bhstr,tmpkh,tmpye,mistakemoney,tmpsycs,"v",OperatorName,DateofLaunchCard)));
					/*
					String hjlsqlstr = "insert into HJL values(:BH,:KH,:YE,:JE,:SFLX,:CZY,:OPTIME)";
					HJLADOQ->Close();
					HJLADOQ->SQL->Clear();
					HJLADOQ->SQL->Add(hjlsqlstr);
					HJLADOQ->Parameters->ParamByName("BH")->Value = cxTextEdit7->Text;
					HJLADOQ->Parameters->ParamByName("KH")->Value = tmpkh;
					HJLADOQ->Parameters->ParamByName("YE")->Value = tmpye;
					HJLADOQ->Parameters->ParamByName("JE")->Value = ReChargeMoney;
					HJLADOQ->Parameters->ParamByName("SFLX")->Value = "a";
					HJLADOQ->Parameters->ParamByName("CZY")->Value = OperatorName;
					HJLADOQ->Parameters->ParamByName("OPTIME")->Value = DateofLaunchCard;
					HJLADOQ->ExecSQL();  */

					//插入MX表
					ADOQuery1->Close();
					ADOQuery1->SQL->Clear();
					String sqlstr = "insert into MX values(:BH,:KH,:SF_YE,";
					sqlstr = sqlstr + ":SFJE,:SYCS,:SFRQ,:JYNO,";
					sqlstr = sqlstr + ":GZZID,:SFLX,:CZY,:SCRQ)";
					ADOQuery1->SQL->Add(sqlstr);
					ADOQuery1->Parameters->ParamByName("BH")->Value = bhstr;
					ADOQuery1->Parameters->ParamByName("KH")->Value = tmpkh;
					ADOQuery1->Parameters->ParamByName("SF_YE")->Value = tmpye;
					ADOQuery1->Parameters->ParamByName("SFJE")->Value = mistakemoney;
					ADOQuery1->Parameters->ParamByName("SYCS")->Value = tmpsycs;
					ADOQuery1->Parameters->ParamByName("SFRQ")->Value = DateofLaunchCard;
					ADOQuery1->Parameters->ParamByName("JYNO")->Value = 1002;
					ADOQuery1->Parameters->ParamByName("GZZID")->Value = 1;
					if(mistakemoney>0)
						ADOQuery1->Parameters->ParamByName("SFLX")->Value = "^";
					else if(mistakemoney < 0)
						ADOQuery1->Parameters->ParamByName("SFLX")->Value = "v";
					ADOQuery1->Parameters->ParamByName("CZY")->Value = OperatorName;
					ADOQuery1->Parameters->ParamByName("SCRQ")->Value = DateofLaunchCard;
					ADOQuery1->ExecSQL();
					ADOQuery1->Close();

					//插入CK表
					ADOQuery1->SQL->Clear();
					sqlstr = "insert into CK values(:kh,:bh,:sf_ye,:sf_fl,:ckxj,";
					sqlstr += ":glf,:ckje,:lqbt,:xkje,:sycs,:sfrq,:jyno,:gzzid,:sflx,:CZY)";
					ADOQuery1->SQL->Add(sqlstr);
					ADOQuery1->Parameters->ParamByName("kh")->Value = tmpkh;
					ADOQuery1->Parameters->ParamByName("bh")->Value = bhstr;
					ADOQuery1->Parameters->ParamByName("sf_ye")->Value = tmpye;
					ADOQuery1->Parameters->ParamByName("sf_fl")->Value = 1;
					ADOQuery1->Parameters->ParamByName("ckxj")->Value = mistakemoney;
					ADOQuery1->Parameters->ParamByName("glf")->Value = 0;
					ADOQuery1->Parameters->ParamByName("ckje")->Value = mistakemoney;
					ADOQuery1->Parameters->ParamByName("lqbt")->Value = 0;
					ADOQuery1->Parameters->ParamByName("xkje")->Value = mistakemoney;
					ADOQuery1->Parameters->ParamByName("sycs")->Value = tmpsycs;
					ADOQuery1->Parameters->ParamByName("sfrq")->Value = DateofLaunchCard;
					ADOQuery1->Parameters->ParamByName("jyno")->Value = 1002;
					ADOQuery1->Parameters->ParamByName("gzzid")->Value = 1;
					if(mistakemoney>0)
						ADOQuery1->Parameters->ParamByName("SFLX")->Value = "^";
					else if(mistakemoney < 0)
						ADOQuery1->Parameters->ParamByName("SFLX")->Value = "v";
					ADOQuery1->Parameters->ParamByName("CZY")->Value = OperatorName;
					ADOQuery1->ExecSQL();
					ADOQuery1->Close();

					//填写操作记录表
					sqlstr = "insert into OperationList values(:BH,:KH,:JE,:YE,:LX,:Operator,:DateTime)";
					ADOQuery1->SQL->Clear();
					ADOQuery1->SQL->Add(sqlstr);
					ADOQuery1->Parameters->ParamByName("BH")->Value = bhstr;
					ADOQuery1->Parameters->ParamByName("KH")->Value = tmpkh;
					ADOQuery1->Parameters->ParamByName("JE")->Value = mistakemoney;
					ADOQuery1->Parameters->ParamByName("YE")->Value = tmpye;
					if(mistakemoney>0)
						ADOQuery1->Parameters->ParamByName("LX")->Value = "充值修正";
					else if(mistakemoney < 0)
						ADOQuery1->Parameters->ParamByName("LX")->Value = "减款修正";
					ADOQuery1->Parameters->ParamByName("Operator")->Value = OperatorName;
					ADOQuery1->Parameters->ParamByName("DateTime")->Value = DateofLaunchCard;
					ADOQuery1->ExecSQL();
					ADOQuery1->Close();

					//更新CARD,CARD_F表

					sqlstr = "select * from CARD where BH='";
					sqlstr = sqlstr + bhstr + "'";
					ADOQuery1->SQL->Clear();
					ADOQuery1->SQL->Add(sqlstr);
					ADOQuery1->ExecSQL();
					ADOQuery1->Active = true;
					ADOQuery1->Edit();
					ADOQuery1->FieldByName("SF_YE")->AsFloat = tmpye;
					ADOQuery1->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard);
					ADOQuery1->FieldByName("SYCS")->AsInteger = tmpsycs;
					ADOQuery1->Post();

					sqlstr = "select * from CARD_F where BH='";
					sqlstr = sqlstr + bhstr + "'";
					ADOQuery1->SQL->Clear();
					ADOQuery1->SQL->Add(sqlstr);
					ADOQuery1->ExecSQL();
					ADOQuery1->Active = true;
					ADOQuery1->Edit();
					ADOQuery1->FieldByName("SF_YE")->AsFloat = tmpye;
					ADOQuery1->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard);
					ADOQuery1->FieldByName("SYCS")->AsInteger = tmpsycs;
					ADOQuery1->Post();

					ADOQuery1->Close();

			   /*		WriteStatus = LaunchNewCard(readcomno,
												keymode,
												secnum,
												key,
												kh,
												writebalance,
												dwmm,
												writesynum,
												daytime,
												cardtype,
												czmm,
												mode,
												Delayms);     */

               		WriteStatus = LaunchWaterNewCard(readcomno,
                    								 keymode,
                                                     secnum,
                                                     key,
                                                     kh,
                                                     writebalance,
                                                     dwmm,
                                                     daytime,
                                                     cardtype,
                                                     mode,
                                                     Delayms);
					if(WriteStatus)
					{
						ShowMessage("写卡错误,充值失败,请修正!");
					//	ReChargeERRForm->ShowModal();
					}
					else
					{
						WORD chkstatus;
						WORD chkWriteStatus;
						int chktmpbalance;
						int chktmpkh,chktmpsycs;
						double chktmpintye;
						double chktmpye;
						unsigned char chkkeymode,chksecnum,chkDelayms,chkmode;
						unsigned char chkkey[6];
						unsigned char chkdwmm[6];
						unsigned char chkdaytime[4];
						unsigned char chkkh[4];
						unsigned char chkbalance[4];
						unsigned char chkcardtype[1];
						unsigned char chkczmm[3];
						unsigned char chksynum[3];

						chkDelayms = DelaySecond;//0x00;
						chkkeymode = CARDPasswordEdition;
						chkmode = 0x01;
						chksecnum = UsingSecNUM;

						chkkey[0] = CARDPassword[0];
						chkkey[1] = CARDPassword[1];
						chkkey[2] = CARDPassword[2];
						chkkey[3] = CARDPassword[3];
						chkkey[4] = CARDPassword[4];
						chkkey[5] = CARDPassword[5];

						chkstatus = readcardinfo(readcomno,chkkeymode,chksecnum,chkkey,chkkh,chkbalance,
								chkdwmm,chksynum,chkdaytime,chkcardtype,chkczmm,chkDelayms);
						if(chkstatus > 99)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (1 == chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (2 == chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (4 == chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (5 == chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (6 == chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (10 == chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else if (0 != chkstatus)
						{
							ShowMessage("充值操作有误,请修正!");
						//	ReChargeERRForm->ShowModal();
						}
						else
						{
							double chktmpintye = ((double)chkbalance[1]*256*256+(double)chkbalance[2]*256+(double)chkbalance[3])/100;
							if(tmpye == chktmpintye)
							{
								ADOTable1->Delete();
								CQKLogStream<<"CK,"<<tmpkh<<","<<mistakemoney<<","<<DateofLaunchCard.t_str()<<","<<OperatorName.t_str()<<endl;
								beepofreaddll(readcomno, '10');
								String ReChargeOutstr = "修正成功!卡余额为:";
								ReChargeOutstr += tmpye;
								ShowMessage(ReChargeOutstr);
							//	CZNoticForm->Panel1->Caption = ReChargeOutstr;
							//	CZNoticForm->ShowModal();
							//	ShowMessage(ReChargeOutstr);
							}
						}
					}
				}
				else
				{
					ShowMessage("写卡函数加载失败!");
				}
			}
		}
	}
}