2016-12-25 2 views
1

J'ai essayé de faire un programme de connexion simple en utilisant qbasic. J'ai utilisé 3 sous modules et 1 module principal. Voici le code:qbasic-Quel est le problème avec mon code? Je ne reçois pas ce que je veux

DECLARE SUB login() 
DECLARE SUB menu() 
DECLARE SUB REGISTER() 
CLS 
CALL menu 
END 

SUB login 
OPEN "USERPASS.TXT" FOR INPUT AS #2 
CLS 
97 
LOCATE 2, 30: PRINT "LOGIN" 
LOCATE 4, 10: INPUT "PLEASE ENTER CORRECT USERNAME OR PRESS B IF YOU WANT TO GO BACK"; USER$ 
IF UCASE$(USER$) = "B" THEN 
    CLOSE #2 
    CALL menu 
ELSE 
    DO WHILE NOT EOF(2) 
     INPUT #2, U$, p$ 
     IF U$ = USER$ THEN 
      TEMPUSER$ = U$ 
      PASSWORDS$ = p$ 
      EXIT DO 
     END IF 
    LOOP 
END IF 
IF USER$ = TEMPUSER$ THEN 
98 
    PRINT PASSWORDS$ 
    LOCATE 5, 30: INPUT "ENTER PASSWORD OR PRESS B if you want to go back"; password$ 
    IF UCASE$(password$) = "B" THEN 
     GOTO 97 
    ELSE 
     IF password$ = PASSWORDS$ THEN 
      PRINT "HURRAY YOU LOGGED IN"   
     ELSE 
      GOTO 98 
     END IF 
    END IF 
ELSE 
    GOTO 97 
END IF 
CLOSE #2 
END SUB 

SUB menu 
CLS 
23 
LOCATE 2, 30: PRINT "MAIN MENU" 
LOCATE 4, 30: PRINT "1.LOGIN" 
LOCATE 5, 30: PRINT "2.REGISTER" 
LOCATE 6, 30: INPUT "PLEASE! Enter 1 or 2"; a 
IF a = 1 THEN 
    CALL login 
ELSE 
    IF a = 2 THEN 
     CALL REGISTER 
    ELSE 
     CLS 
     GOTO 23 
    END IF 
END IF 
END SUB 

SUB REGISTER 
CLS 
OPEN "userpass.txt" FOR APPEND AS #1 
LOCATE 2, 30: PRINT "REGISTER MENU" 
LOCATE 4, 30: INPUT "ENTER NEW USERNAME"; NEWU$ 
CLS 
LOCATE 4, 30: INPUT "ENTER NEW PASSWORD"; PASSU$ 
WRITE #1, NEWU$, PASSU$ 
END SUB 

Tout est comme mon désir mais dans le sous-module de connexion quelque chose ne va pas je suppose. Le massage de connexion ne vient pas même si j'entre le mot de passe et le nom d'utilisateur corrects. Mais si je saisis un nom d'utilisateur qui n'existe pas, il affiche le message de connexion. S'il vous plaît aider. Merci d'avance.

Répondre

3

vous manque un END IF pour correspondre ELSEIF UCASE$(USER$) <> "B" THEN (par la façon suivante: si UCASE$(USER$) = "B" est faux, alors UCASE$(USER$) <> "B" est vrai, donc on peut dire simplement ELSE là-bas).

Vous pouvez essayer indenter un peu de manière plus conventionnelle:

  • tous les IF, ELSEIF, ELSE et END IF qui correspond est dans la même colonne, et
  • tout à l'intérieur de ces déclarations est mis en retrait quelques plus d'espaces.

Les mêmes règles d'indentation peuvent être appliquées à SELECT CASE, WHILE-WEND, DO-LOOP et FOR-NEXT.

Quoi qu'il en soit, vous pouvez voir le END IF manquant si vous avez fait:

SUB login 
    OPEN "USERPASS.TXT" FOR INPUT AS #2 
    CLS 
    97 
    LOCATE 2, 30: PRINT "LOGIN" 
    LOCATE 4, 10: INPUT "PLEASE ENTER CORRECT USERNAME OR PRESS B IF YOU WANT TO GO BACK"; USER$ 
    IF UCASE$(USER$) = "B" THEN 
     CLOSE #2 
     CALL menu 
    ELSEIF UCASE$(USER$) <> "B" THEN 
     WHILE NOT EOF(2) 
      INPUT #2, U$, p$ 
      IF U$ = USER$ THEN 
       TEMPUSER$ = U$ 
       PASSWORDS$ = p$ 
      END IF 
     WEND 
     IF USER$ = TEMPUSER$ THEN 
      98 
      PRINT PASSWORDS$ 
      LOCATE 5, 30: INPUT "ENTER PASSWORD OR PRESS B if you want to go back"; password$ 
      IF UCASE$(password$) = "B" THEN GOTO 97 
      ELSEIF UCASE$(password$) <> "B" THEN 
       IF password$ = PASSWORDS$ THEN 
        PRINT "HURRAY YOU LOGGED IN" 
       ELSE 
        GOTO 98 
       END IF 
      END IF 
     ELSE 
      GOTO 97 
     END IF 

     CLOSE #2 
END SUB 
+0

si petite erreur et j'étais frustré. Merci pour l'aide! – uvrichest