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

📄 pro_fun.prg

📁 酒店IC卡 餐饮娱乐管理系统源代码使用说明
💻 PRG
📖 第 1 页 / 共 5 页
字号:
 XM = BINDEC(SUBSTR(KMB,6,3))
 XL = BINDEC(SUBSTR(KLB,6,3))
 IF XH <> 0
    NHBR = SUBSTR(NHB,1,8 - XH)
    NHBL = SUBSTR(NHB,9 - XH)
    NHB = NHBL + NHBR
 ENDIF 
 IF XM <> 0
    NMBR = SUBSTR(NMB,1,8 - XM)
    NMBL = SUBSTR(NMB,9 - XM)
    NMB = NMBL + NMBR
 ENDIF 
 IF XL <> 0
    NLBR = SUBSTR(NLB,1,8 - XL)
    NLBL = SUBSTR(NLB,9 - XL)
    NLB = NLBL + NLBR
 ENDIF 
 MHB = XOR(NHB,KHB)
 MMB = XOR(NMB,KMB)
 MLB = XOR(NLB,KLB)
 MB = MHB + MMB + MLB
 MH = BINHEX(MB)
 MH = SWAP(MH)
 RETURN MH
ENDPROC
*------
PROCEDURE lockkey
 PRIVATE KEYFH , KEYFM , KEYFL , KEYH , KEYM , KEYL , KEY , ERR
 KEYF = REPLICATE('F',54)
 ERR = RD_ASC(0,5,27,@KEYF)
 IF ERR <> 0
    RETURN ERR
 ENDIF 
 KEYFH =  ;
      SUBSTR(KEYF,11,2) + SUBSTR(KEYF,17,2) + SUBSTR(KEYF,47,2) + SUBSTR(KEYF,53,2)
 KEYFM =  ;
      SUBSTR(KEYF,9,2) + SUBSTR(KEYF,15,2) + SUBSTR(KEYF,45,2) + SUBSTR(KEYF,51,2)
 KEYFL =  ;
      SUBSTR(KEYF,1,2) + SUBSTR(KEYF,7,2) + SUBSTR(KEYF,13,2) + SUBSTR(KEYF,49,2)
 KEYH = CHECK(KEYFH)
 KEYM = CHECK(KEYFM)
 KEYL = CHECK(KEYFL)
 KEY = KEYH + KEYM + KEYL
 RETURN KEY
ENDPROC
*------
PROCEDURE fchk_sc
 PARAMETER KEY
 PRIVATE A , KEY , TIMES , I , M.ZHZI , KFLH , A , MSC
 KEY = ALLTRIM(KEY)
 TIMES = REPLICATE('F',8)
 ERR = RD_SM(@TIMES)
 IF ERR <> 0
    RETURN ERR
 ENDIF 
 TIMES = SUBSTR(TIMES,1,2)
 DO CASE 
 CASE TIMES == '00'
    ERR = 14
    YESNO = ALERT(ERR)
    IF YESNO = 2
       = POWER_OFF()
       = CLOSE_COM()
       RETURN 9999
    ENDIF 
 CASE TIMES == '04'
    ERR = 99
    YESNO = ALERT(ERR)
    IF YESNO = 2
       = POWER_OFF()
       = CLOSE_COM()
       RETURN 9999
    ENDIF 
 CASE TIMES == '06'
    ERR = 98
    YESNO = ALERT(ERR)
    IF YESNO = 2
       = POWER_OFF()
       = CLOSE_COM()
       RETURN 9999
    ENDIF 
 ENDCASE 
 R_DATA = REPLICATE('f',64)
 RE_ERR = RD_ASC(0,0,32,@R_DATA)
 IF RE_ERR <> 0
    YESNO = ALERT(RE_ERR)
    IF YESNO = 2
       = POWER_OFF()
       = CLOSE_COM()
       RETURN RE_ERR
    ENDIF 
    LOOP 
 ENDIF 
 SELECT MSC
 NEWF = SUBSTR(R_DATA,17,26) + SUBSTR(R_DATA,55,10)
 IF NEWF = REPLICATE('F',36)
    LOCATE FOR ALLTRIM(CONT) == 'skmm'
    MSC = ALLTRIM(DATA)
 ELSE 
    KFLH = REPLICATE('F',8)
    ERR = RD_ASC(0,28,4,@KFLH)
    IF ERR <> 0
       RETURN ERR
    ENDIF 
    IF KFLH == REPLICATE('0',8)
       M.ZHZI = 'FFFFFF'
    ELSE 
       LOCATE FOR CONT = 'zhzi'
       M.ZHZI = ALLTRIM(DATA)
    ENDIF 
    MSC = LOCKDA(M.ZHZI,KEY)
 ENDIF 
 ERR = CHK_SC(0,3,@MSC)
 IF ERR = 11 .OR. ERR = 14
    DO CASE 
    CASE TIMES == '00'
       ERR = 14
    CASE TIMES == '04'
       ERR = 99
    CASE TIMES == '06'
       ERR = 98
    CASE TIMES == '07' AND ERR = 11
       ERR = 98
    ENDCASE 
 ENDIF 
 RETURN ERR
ENDPROC
*------
PROCEDURE r_card32
 PARAMETER COM , ADDRESS , UNLOCK
 PRIVATE ADDRESS , RE_ERR , COM , LOOPBZ , YESNO , R_DATA , KEYF , I , DATAM , DA , R_NEW ,  ;
      K_NEW , NEW , NEWB , UNLOCK , DATAF , INDATA , IN_DATA , W_DATA ,  ;
      WDATA
 DO SURE32WC
 RE_ERR = INIT_COM(COM)
 IF RE_ERR <> 0
    YESNO = ALERT(RE_ERR)
    IF YESNO = 2
       RETURN RE_ERR
    ENDIF 
 ENDIF 
 LOOPBZ = .T.
 DO WHILE LOOPBZ = .T.
    RE_ERR = POWER_ON()
    IF RE_ERR <> 0
       YESNO = ALERT(RE_ERR)
       IF YESNO = 2
          = CLOSE_COM()
          RETURN RE_ERR
       ENDIF 
       LOOP 
    ENDIF 
    = SELE_CARD(42)
    R_DATA = REPLICATE('F',64)
    RE_ERR = RD_ASC(0,32 * ADDRESS,32,@R_DATA)
    IF RE_ERR <> 0
       YESNO = ALERT(RE_ERR)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN RE_ERR
       ENDIF 
       LOOP 
    ENDIF 
    IF UNLOCK = 1
       KEYF = LOCKKEY()
       IF  .NOT. (TYPE('keyf') == 'C')
          YESNO = ALERT(KEYF)
          IF YESNO = 2
             = POWER_OFF()
             = CLOSE_COM()
             RETURN KEYF
          ENDIF 
          LOOP 
       ENDIF 
       DATAM = ''
       DATAF = SUBSTR(R_DATA,3,60)
       FOR I = 1 TO 56 STEP 6
          DA = SUBSTR(DATAF,I,6)
          DA = UNLOCKDA(DA,KEYF)
          DATAM = ALLTRIM(DATAM + DA)
       ENDFOR 
       R_DATA = STUFF(R_DATA,3,60,DATAM)
    ENDIF 
    LOOPBZ = .F.
 ENDDO 
 = POWER_OFF()
 = CLOSE_COM()
 RETURN R_DATA
ENDPROC
*------
PROCEDURE r_card192
 PARAMETER COM , UNLOCK
 PRIVATE RE_ERR , COM , LOOPBZ , YESNO , R_DATA , KEYF , I , DATAM , DA , R_NEW , K_NEW ,  ;
      NEW , NEWB , UNLOCK , DATAF
 DO SURE32WC
 RE_ERR = INIT_COM(COM)
 IF RE_ERR <> 0
    YESNO = ALERT(RE_ERR)
    IF YESNO = 2
       RETURN RE_ERR
    ENDIF 
 ENDIF 
 LOOPBZ = .T.
 DO WHILE LOOPBZ = .T.
    RE_ERR = POWER_ON()
    IF RE_ERR <> 0
       YESNO = ALERT(RE_ERR)
       IF YESNO = 2
          = CLOSE_COM()
          RETURN RE_ERR
       ENDIF 
       LOOP 
    ENDIF 
    = SELE_CARD(42)
    R_DATA = REPLICATE('F',384)
    RE_ERR = RD_ASC(0,64,192,@R_DATA)
    IF RE_ERR <> 0
       YESNO = ALERT(RE_ERR)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN RE_ERR
       ENDIF 
       LOOP 
    ENDIF 
    IF UNLOCK = 1
       KEYF = LOCKKEY()
       IF  .NOT. (TYPE('keyf') == 'C')
          YESNO = ALERT(KEYF)
          IF YESNO = 2
             = POWER_OFF()
             = CLOSE_COM()
             RETURN KEYF
          ENDIF 
          LOOP 
       ENDIF 
       DATAM = ''
       FOR I = 1 TO 383 STEP 6
          DA = SUBSTR(R_DATA,I,6)
          DA = UNLOCKDA(DA,KEYF)
          DATAM = ALLTRIM(DATAM + DA)
       ENDFOR 
       R_DATA = DATAM
    ENDIF 
    LOOPBZ = .F.
 ENDDO 
 = POWER_OFF()
 = CLOSE_COM()
 RETURN R_DATA
ENDPROC
*------
PROCEDURE w_card32
 PARAMETER COM , DATAF , KFLH , ADDRESS , LOCK , CHANGESC
 PRIVATE ADDRESS , DATAF , RE_ERR , COM , KFLH , LOOPBZ , CHKSC , YESNO , WDATA , RDATA ,  ;
      KEYF , DATAM , DA , CHK , CHKF , DATA1 , DATA2 , LOCK
 DATAF = ALLTRIM(DATAF)
 KFLH = ALLTRIM(KFLH)
 DO SURE32WC
 RE_ERR = INIT_COM(COM)
 IF RE_ERR <> 0
    YESNO = ALERT(RE_ERR)
    IF YESNO = 2
       RETURN RE_ERR
    ENDIF 
 ENDIF 
 LOOPBZ = .T.
 DO WHILE LOOPBZ = .T.
    RE_ERR = POWER_ON()
    IF RE_ERR <> 0
       YESNO = ALERT(RE_ERR)
       IF YESNO = 2
          = CLOSE_COM()
          RETURN RE_ERR
       ENDIF 
       LOOP 
    ENDIF 
    = SELE_CARD(42)
    KEYF = LOCKKEY()
    IF  .NOT. (TYPE('keyf') == 'C')
       YESNO = ALERT(KEYF)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN KEYF
       ENDIF 
       LOOP 
    ENDIF 
    CHKF = FCHK_SC(KEYF)
    IF CHKF <> 0
       IF CHKF = 9999
          RETURN CHKF
       ENDIF 
       YESNO = ALERT(CHKF)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN CHKF
       ENDIF 
       IF  .NOT. CHKF = 98 AND  .NOT. CHKF = 99
          LOOP 
       ENDIF 
    ENDIF 
    CHK = CHECK(KFLH + DATAF)
    IF LOCK = 1
       DATAM = ''
       FOR I = 1 TO 58 STEP 6
          DA = SUBSTR(DATAF,I,6)
          DA = LOCKDA(DA,KEYF)
          DATAM = ALLTRIM(DATAM + DA)
       ENDFOR 
       DATAF = DATAM
    ENDIF 
    IF ADDRESS = 0
       WDATA = DATAF
       DATA1 = SUBSTR(DATAF,1,30)
       DATA2 = SUBSTR(DATAF,43,22)
    ELSE 
       WDATA = ALLTRIM(KFLH + DATAF + CHK)
    ENDIF 
    RDATA = WR_ASC(0,32 * ADDRESS,32,@WDATA)
    IF RDATA <> 0
       YESNO = ALERT(RDATA)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN RDATA
       ENDIF 
       LOOP 
    ENDIF 
    IF CHANGESC = 1
       KEYF = LOCKKEY()
       IF  .NOT. (TYPE('keyf') == 'C')
          YESNO = ALERT(KEYF)
          IF YESNO = 2
             = POWER_OFF()
             = CLOSE_COM()
             RETURN KEYF
          ENDIF 
          LOOP 
       ENDIF 
       KFLH = REPLICATE('F',8)
       ERR = RD_ASC(0,28,4,@KFLH)
       IF ERR <> 0
          YESNO = ALERT(ERR)
          IF YESNO = 2
             = POWER_OFF()
             = CLOSE_COM()
             RETURN ERR
          ENDIF 
          LOOP 
       ENDIF 
       IF KFLH == REPLICATE('0',8)
          M.ZHZI = 'FFFFFF'
       ELSE 
          SELECT MSC
          LOCATE FOR CONT = 'zhzi'
          M.ZHZI = ALLTRIM(DATA)
       ENDIF 
       MSC = LOCKDA(M.ZHZI,KEYF)
       ERR = WR_SC(@MSC)
       IF ERR <> 0
          YESNO = ALERT(ERR)
          IF YESNO = 2
             = POWER_OFF()
             = CLOSE_COM()
             RETURN ERR
          ENDIF 
          LOOP 
       ENDIF 
    ENDIF 
    LOOPBZ = .F.
 ENDDO 
 = POWER_OFF()
 = CLOSE_COM()
 RETURN 0
ENDPROC
*------
PROCEDURE w_card192
 PARAMETER COM , DATAF
 PRIVATE DATAF , RE_ERR , COM , LOOPBZ , CHKSC , YESNO , RDATA , KEYF , DATAM , DA , CHK ,  ;
      CHKF , LOCK , CHANGESC
 DATAF = ALLTRIM(DATAF)
 DO SURE32WC
 RE_ERR = INIT_COM(COM)
 IF RE_ERR <> 0
    YESNO = ALERT(RE_ERR)
    IF YESNO = 2
       RETURN RE_ERR
    ENDIF 
 ENDIF 
 LOOPBZ = .T.
 DO WHILE LOOPBZ = .T.
    RE_ERR = POWER_ON()
    IF RE_ERR <> 0
       YESNO = ALERT(RE_ERR)
       IF YESNO = 2
          = CLOSE_COM()
          RETURN RE_ERR
       ENDIF 
       LOOP 
    ENDIF 
    = SELE_CARD(42)
    KEYF = LOCKKEY()
    IF  .NOT. (TYPE('keyf') == 'C')
       YESNO = ALERT(KEYF)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN KEYF
       ENDIF 
       LOOP 
    ENDIF 
    CHKF = FCHK_SC(KEYF)
    IF CHKF <> 0
       IF CHKF = 9999
          RETURN CHKF
       ENDIF 
       YESNO = ALERT(CHKF)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN CHKF
       ENDIF 
       IF  .NOT. CHKF = 98 AND  .NOT. CHKF = 99
          LOOP 
       ENDIF 
    ENDIF 
    DATAM = ''
    FOR I = 1 TO 383 STEP 6
       DA = SUBSTR(DATAF,I,6)
       DA = LOCKDA(DA,KEYF)
       DATAM = ALLTRIM(DATAM + DA)
    ENDFOR 
    RDATA = WR_ASC(0,64,192,@DATAM)
    IF RDATA <> 0
       YESNO = ALERT(RDATA)
       IF YESNO = 2
          = POWER_OFF()
          = CLOSE_COM()
          RETURN RDATA
       ENDIF 
       LOOP 
    ENDIF 
    LOOPBZ = .F.
 ENDDO 
 = POWER_OFF()
 = CLOSE_COM()
 RETURN 0
ENDPROC
*------
PROCEDURE wr_time
 PARAMETER COM_TIME
 PRIVATE FZF , XSF , RQF , YFF , NFF , TIMEF , K_WDATA1 , OUT_WDATA , COM_TIEM
 FZF = ALLTRIM(STR(MINUTE(DATETIME())))
 IF LEN(FZF) < 2
    FZF = '0' + FZF
 ENDIF 
 XSF = ALLTRIM(STR(HOUR(DATETIME())))
 IF LEN(XSF) < 2
    XSF = '0' + XSF
 ENDIF 
 RQF = ALLTRIM(STR(DAY(DATETIME())))
 IF LEN(RQF) < 2
    RQF = '0' + RQF
 ENDIF 
 YFF = ALLTRIM(STR(MONTH(DATETIME())))
 IF LEN(YFF) < 2
    YFF = '0' + YFF
 ENDIF 
 NFF = ALLTRIM(STR(YEAR(DATETIME())))
 NFF = RIGHT(NFF,2)
 TIMEF = FZF + XSF + RQF + YFF + NFF
 K_WDATA1 = R_CARD32(COM_TIME,1,1)
 IF  .NOT. (TYPE('k_wdata1') == 'C')
    RETURN K_WDATA1
 ENDIF 
 K_WDATA1 = SUBSTR(K_WDATA1,3,60)
 K_WDATA1 = STUFF(K_WDATA1,35,10,TIMEF)
 OUT_WDATA = W_CARD32(COM_TIME,K_WDATA1,'00',1,1,0)
 IF OUT_WDATA <> 0
    RETURN OUT_WDATA
 ELSE 
    RETURN 0
 ENDIF 
ENDPROC
*------
PROCEDURE key
 RETURN 
ENDPROC
*------

⌨️ 快捷键说明

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