'=========================================================================== ' Subject: DATABASE PROGRAM Date: 05-17-96 (17:01) ' Author: Tate P. Sonnier Code: QB, QBasic, PDS ' Origin: tate_sonnier@juno.com Packet: MISC.ABC '=========================================================================== '--------------------------------DATABASE.BAS---------------------------------- 'This is a simple little database that can be used and configured to store 'as many as 40 fields per database and an unlimited amount of databases. 'There are still a few bugs that need to be worked out. Feel free to use, fix, modify, 'or copy partions of this program for your own use. Send an questions, comments, 'suggestions, or changes you make to TATE_SONNIER@JUNO.COM COMMON SHARED DB$ DECLARE SUB VIEWALL () DECLARE SUB PRINTALL () DECLARE SUB PRINTA () DECLARE SUB RECORDSORT () DECLARE SUB VIEWRECORD (T!, DB$) DECLARE SUB RECORDSORTP () DECLARE SUB PRINTRECORD (T!, DB$) DECLARE SUB DELETERECORD () DECLARE SUB SORTDELETE (T!, DB$) DECLARE SUB EDITRECORD () DECLARE SUB SORTEDIT (T!, DB$) DECLARE SUB DELETEFIELD () DECLARE SUB EDITFIELD () DECLARE SUB NEWFIELD () DECLARE SUB ADDRECORD () DECLARE SUB NEW () DECLARE SUB EDIT () DECLARE SUB DELETE () ON ERROR GOTO HANDLE CLS L = 1 DO TOP: COLOR 15, 0: LOCATE 1, 1: PRINT "Selected Database": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ": LOCATE 3, 1: PRINT UCASE$(DB$) IF L < 1 OR L > 6 THEN L = 1 COLOR 15, 0 IF L = 1 THEN LOCATE 23, 1: PRINT "CREATES NEW DATABASE ": COLOR 15, 4 LOCATE 1, 35 PRINT "New Database" COLOR 15, 0 IF L = 2 THEN LOCATE 23, 1: PRINT "SELECTS DATABASE TO BE WORKED WITH ": COLOR 15, 4 LOCATE 2, 35 PRINT "Select Database" COLOR 15, 0 IF L = 3 THEN LOCATE 23, 1: PRINT "THE EDITING MENU (EDIT/CHANGE FIELDS OR RECORD) ": COLOR 15, 4 LOCATE 3, 35 PRINT "Edit Database" COLOR 15, 0 IF L = 4 THEN LOCATE 23, 1: PRINT "PRINTS/VIEWS THE RECORDS OF A DATABASE ": COLOR 15, 4 LOCATE 4, 35 PRINT "Print/View Database" COLOR 15, 0 IF L = 5 THEN LOCATE 23, 1: PRINT "DELETES A DATABASE AND ALL RECORDS IN IT ": COLOR 15, 4 LOCATE 5, 35 PRINT "Delete Database" COLOR 15, 0 IF L = 6 THEN LOCATE 23, 1: PRINT "EXITS THE PROGRAM ": COLOR 15, 4 LOCATE 6, 35 PRINT "Quit" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF L = 7 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF L = 0 THEN L = 6 CASE IS = CHR$(13) IF L = 1 THEN CALL NEW IF L = 2 THEN E: LOCATE 3, 1: COLOR 15, 0 INPUT "-", DB$ IF LEN(DB$) < 1 THEN GOTO E CLS END IF IF L = 3 AND LEN(DB$) > 0 THEN CALL EDIT ELSEIF L = 3 AND LEN(DB$) = 0 THEN LOCATE 23, 1: COLOR 20: PRINT "A DATABASE MUST BE SELECTED FIRST ": BEEP: SLEEP 5 END IF IF L = 4 AND LEN(DB$) > 0 THEN CALL PRINTA ELSEIF L = 4 AND LEN(DB$) = 0 THEN LOCATE 23, 1: COLOR 20: PRINT "A DATABASE MUST BE SELECTED FIRST ": BEEP: SLEEP 5 END IF IF L = 5 THEN CALL DELETE IF L = 6 THEN COLOR 0, 0: CLS : STOP END SELECT LOOP HANDLE: CLS GOTO TOP SUB ADDRECORD L = 1 V: CLS L = 1 CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT AD = 0 FOR X = 1 TO COUNT AD = AD + LNE(X) NEXT CLOSE #1 FF = 1 CLOSE #2 OPEN DB$ + ".DBD" FOR APPEND AS #2 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 1 PRINT NM$(X + LJ); TAB(31); ":": LOCATE X, 33: COLOR 15, 0: PRINT FI$(X +LJ) NEXT COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = COUNT + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) PO = 0 FOR R = 1 TO COUNT DO UNTIL LEN(FI$(R)) = LNE(R) FI$(R) = FI$(R) + " " PO = PO + 1 LOOP ANS$ = ANS$ + FI$(R) NEXT IF PO <> AD THEN WRITE #2, ANS$ CLOSE #2 CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) LOCATE L, 1 COLOR 15, 0 PRINT NM$(L + LJ); TAB(31); ":"; COLOR 1, 9 FOR T = 1 TO LNE(L + LJ) PRINT " "; NEXT Z$ = "" INP$ = "" DO UNTIL Z$ = CHR$(13) H: Z$ = INKEY$ IF Z$ = "" THEN GOTO H IF Z$ = CHR$(8) AND LEN(INP$) >= 1 THEN INP$ = LEFT$(INP$, (LEN(INP$) -1)): LOCATE L, 33: COLOR 15, 9: FOR T = 1 TO LNE(L): PRINT " "; : NEXT T: COLOR 15, 9: LOCATE L, 33: PRINT INP$: GOTO H IF LEN(INP$) < LNE(L + LJ) AND Z$ <> CHR$(13) THEN INP$ = INP$ + Z$ LOCATE L, 33: COLOR 15, 9: PRINT INP$ LOOP FI$(L) = INP$ LOCATE L, 1 COLOR 15, 4 PRINT NM$(L + LJ); TAB(31); ":"; IF L < 20 THEN L = L + 1 IF L = COUNT - 20 + 1 AND LJ = 20 THEN L = 1 END SELECT LOOP END SUB SUB DELETE L = 1 CLS I: INPUT "NAME OF DATABASE TO DELETE "; DB$ IF LEN(DB$) < 1 THEN GOTO I CLS PRINT "CONFIRM DELETE OF "; DB$; " (Y/N)" T: H$ = INPUT$(1) IF UCASE$(H$) <> "Y" AND UCASE$(H$) <> "N" THEN GOTO T IF UCASE$(H$) = "Y" THEN KILL DB$ + ".DBD": KILL DB$ + ".DBI" CLS DB$ = "" END SUB SUB DELETEFIELD VVV: CLS CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT CLOSE #1 FF = 1 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 1 PRINT NM$(X + LJ); TAB(45); "LENGTH :"; LNE(X + LJ) NEXT COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = C + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLOSE #1 CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) LOCATE L, 1 COLOR 15, 0 PRINT "CONFIRM DELETE (Y/N)" 28 : ANS$ = INPUT$(1) IF UCASE$(ANS$) <> "Y" AND UCASE$(ANS$) <> "N" THEN GOTO 28 IF UCASE$(ANS$) = "Y" THEN CLOSE #1 OPEN DB$ + ".DBI" FOR OUTPUT AS #1 WRITE #1, C$ FOR R = 1 TO COUNT IF R <> L THEN WRITE #1, NM$(R), LNE(R), GO(R) NEXT CLS COLOR 15, 0 EXIT SUB END IF END SELECT LOOP END SUB SUB DELETERECORD L = 1 VAA: CLS CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT CLOSE #1 FF = 1 CLOSE #2 OPEN DB$ + ".DBD" FOR APPEND AS #2 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT NM$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "Delete Record": LOCATE 2, 1: PRINT "-------------" COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT - 20): CLS IF L = COUNT + 2 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLS CLOSE #1 COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) T = L + LJ CALL SORTDELETE(T, DB$) END SELECT LOOP END SUB SUB EDIT CLS L = 1 DO COLOR 15, 0: LOCATE 1, 1: PRINT "Selected Database": LOCATE 2, 1: PRINT "-----------------": LOCATE 3, 1: PRINT UCASE$(DB$) COLOR 15, 0 IF L = 1 THEN LOCATE 23, 1: PRINT "CREATE NEW FIELD/QUESTION IN A DATABASE ": COLOR 15, 4 LOCATE 1, 38 PRINT "New Field" COLOR 15, 0 IF L = 2 THEN LOCATE 23, 1: PRINT "DELETE FIELD/QUESTION IN A DATABASE ": COLOR 15, 4 LOCATE 2, 38 PRINT "Delete Field" COLOR 15, 0 IF L = 3 THEN LOCATE 23, 1: PRINT "EDIT FIELD/QUESTION IN A DATABASE ": COLOR 15, 4 LOCATE 3, 38 PRINT "Edit Field" COLOR 15, 0 IF L = 4 THEN LOCATE 23, 1: PRINT "ADD NEW RECORD TO DATABASE ": COLOR 15, 4 LOCATE 4, 38 PRINT "Add Record" COLOR 15, 0 IF L = 5 THEN LOCATE 23, 1: PRINT "EDIT PREVIOUSLY ENTERED DATABASE ": COLOR 15, 4 LOCATE 5, 38 PRINT "Edit Record" COLOR 15, 0 IF L = 6 THEN LOCATE 23, 1: PRINT "DELETE PREVIOUSLY ENTERED DATABASE ": COLOR 15, 4 LOCATE 6, 38 PRINT "Delete Record" COLOR 15, 0 IF L = 7 THEN LOCATE 23, 1: PRINT "EXIT TO MAIN MENU ": COLOR 15, 4 LOCATE 7, 38 PRINT "Quit" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF L = 8 THEN L = 1 CASE IS = CHR$(27) CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(0) + "H" L = L - 1 IF L = 0 THEN L = 7 CASE IS = CHR$(13) IF L = 1 THEN L = 1: CALL NEWFIELD: CLS : L = 1 IF L = 2 THEN L = 1: CALL DELETEFIELD: CLS : L = 1 IF L = 3 THEN L = 1: CALL EDITFIELD: CLS : L = 1 IF L = 4 THEN L = 1: CALL ADDRECORD: CLS : L = 1 IF L = 5 THEN L = 1: CALL EDITRECORD: CLS : L = 1 IF L = 6 THEN L = 1: CALL DELETERECORD: CLS : L = 1 IF L = 7 THEN COLOR 0, 0: CLS : EXIT SUB END SELECT LOOP END SUB SUB EDITFIELD L = 1 VV: CLS CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT CLOSE #1 FF = 1 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 1 PRINT NM$(X + LJ); TAB(45); "LENGTH :"; LNE(X + LJ) NEXT COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = C + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLOSE #1 OPEN DB$ + ".DBI" FOR OUTPUT AS #1 WRITE #1, C$ FOR R = 1 TO COUNT WRITE #1, NM$(R), LNE(R), GO(R) NEXT CLOSE #1 CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) 29 : LOCATE L, 54 COLOR 15, 0 INPUT "", LNE(L + LJ) IF LEN(LNE(L + LJ)) = 0 THEN GOTO 29 30 : LOCATE L, 1 COLOR 15, 0 INPUT "", NM$(L + LJ) IF LEN(NM$(L + LJ)) < 1 THEN GOTO 30 LOCATE L, 1 COLOR 15, 4 PRINT NM$(L + LJ) END SELECT LOOP END SUB SUB EDITRECORD L = 1 VA: CLS CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT CLOSE #1 FF = 1 CLOSE #2 OPEN DB$ + ".DBD" FOR APPEND AS #2 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT NM$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "Edit Record": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄ" COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = COUNT + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLS CLOSE #1 COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) T = L + LJ CALL SORTEDIT(T, DB$) END SELECT LOOP END SUB SUB NEW CLS INPUT "Name of database "; DB$ CLS LOCATE 1, 1 B: LOCATE 1, 1 PRINT "If the database "; : COLOR 4: PRINT DB$; : COLOR 15: PRINT " has already been created all data in it will be lost" PRINT "CONTINUE(Y/N)" A$ = INPUT$(1) IF UCASE$(A$) <> "Y" AND UCASE$(A$) <> "N" THEN GOTO B IF UCASE$(A$) = "Y" THEN OPEN DB$ + ".DBI" FOR OUTPUT AS #1 WRITE #1, DB$ CLOSE #1 END IF CLS END SUB SUB NEWFIELD L = 1 CLS A: DO OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ B = 0 DO UNTIL EOF(1) B = B + 1 INPUT #1, NAME$, LE, BE LOOP CLOSE #1 OPEN DB$ + ".DBI" FOR APPEND AS #1 AA: IF B > 40 THEN BEEP: CLS : PRINT "No more than 41 fields allowed": SLEEP:EXIT SUB CLS LOCATE 1, 1 INPUT "Name of New Field (NO MORE THAN 30 CHARACTERS)"; NF$ IF LEN(NF$) < 1 OR LEN(NF$) > 30 THEN : BEEP: PRINT "Invalid Field":SLEEP: GOTO AA AAA: CLS LOCATE 1, 1 INPUT "LENGTH of New Field "; NFL IF LEN(NFL) < 1 THEN : BEEP: PRINT "Invalid Field LENGTH": SLEEP: GOTO AAA CLS PRINT "Is this OK (Y/N)" PRINT "The Field ("; NF$; ") with a LENGTH of "; NFL AAAA: J$ = INPUT$(1) IF UCASE$(J$) <> "Y" AND UCASE$(J$) <> "N" THEN GOTO AAAA f = BE + LE IF f = 0 THEN f = 1 IF UCASE$(J$) = "Y" THEN WRITE #1, NF$, NFL, f IF UCASE$(J$) = "N" THEN GOTO AA CLS PRINT "Add Another Field (Y/N)" AAAAA: J$ = INPUT$(1) IF UCASE$(J$) <> "Y" AND UCASE$(J$) <> "N" THEN B = B + 1: GOTO AAAAA IF UCASE$(J$) = "N" THEN CLOSE #1: CLS : EXIT SUB CLOSE #1 LOOP END SUB SUB PRINTA CLS L = 1 DO COLOR 15, 0: LOCATE 1, 1: PRINT "Selected Database": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ": LOCATE 3, 1: PRINT UCASE$(DB$) COLOR 15, 0 IF L = 1 THEN LOCATE 23, 1: PRINT "VIEW INDIVIDUAL RECORD ": COLOR 15, 4 LOCATE 1, 38 PRINT "View Record" COLOR 15, 0 IF L = 2 THEN LOCATE 23, 1: PRINT "PRINT INDIVIDUAL RECORD ": COLOR 15, 4 LOCATE 2, 38 PRINT "Print Record" COLOR 15, 0 IF L = 3 THEN LOCATE 23, 1: PRINT "VIEW ALL RECORDS ": COLOR 15, 4 LOCATE 3, 38 PRINT "View All Records" COLOR 15, 0 IF L = 4 THEN LOCATE 23, 1: PRINT "PRINT ALL RECORDS ": COLOR 15, 4 LOCATE 4, 38 PRINT "Print All Record" COLOR 15, 0 IF L = 5 THEN LOCATE 23, 1: PRINT "RETURNS TO MAIN MENU ": COLOR 15, 4 LOCATE 5, 38 PRINT "Quit" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF L = 6 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF L = 0 THEN L = 5 CASE IS = CHR$(27) CLS EXIT SUB CASE IS = CHR$(13) IF L = 1 THEN L = 1: CALL RECORDSORT: CLS : L = 1 IF L = 2 THEN L = 1: CALL RECORDSORTP: CLS : L = 1 IF L = 3 THEN CALL VIEWALL: CLS IF L = 4 THEN CALL PRINTALL: CLS IF L = 5 THEN COLOR 0, 0: CLS : EXIT SUB END SELECT LOOP END SUB SUB PRINTALL CLOSE #1 L = 1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 CLOSE #2 OPEN DB$ + ".DBI" FOR INPUT AS #1 OPEN DB$ + ".DBD" FOR INPUT AS #2 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT H = 0 DO UNTIL EOF(2) INPUT #2, ANS$ H = H + 1 LOOP DIM FI1$(1 TO H) DIM AS$(1 TO H) CLOSE #2 OPEN DB$ + ".DBD" FOR INPUT AS #2 FOR Y = 1 TO H FOR X = 1 TO H IF FI1$(Y) < FI1$(X) THEN SWAP FI1$(Y), FI1$(X): SWAP AS$(X), AS$(Y) NEXT NEXT FOR X = 1 TO H INPUT #2, ANS$ AS$(X) = ANS$ NEXT FF = 1 K = 1 LJ = 0 FOR PP = 1 TO H FOR X = 1 TO COUNT FI$(X) = MID$(AS$(PP), GO(X), LNE(X)) NEXT FOR X = 1 TO COUNT COLOR 15 LPRINT NM$(X + LJ); TAB(31); ": "; FI$(X + LJ) NEXT FOR X = 1 TO 2 LPRINT NEXT LPRINT "------------------------------------------------------------------------------" FOR X = 1 TO 2 LPRINT NEXT NEXT LPRINT CHR$(10) END SUB SUB PRINTRECORD (T, DB$) CLOSE #1 L = 1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 CLOSE #2 OPEN DB$ + ".DBI" FOR INPUT AS #1 OPEN DB$ + ".DBD" FOR INPUT AS #2 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT H = 0 DO UNTIL EOF(2) INPUT #2, ANS$ H = H + 1 LOOP DIM FI1$(1 TO H) DIM AS$(1 TO H) CLOSE #2 OPEN DB$ + ".DBD" FOR INPUT AS #2 FOR X = 1 TO H INPUT #2, ANS$ AS$(X) = ANS$ FI1$(X) = MID$(ANS$, GO(T), LNE(T)) NEXT FOR Y = 1 TO H FOR X = 1 TO H IF FI1$(Y) < FI1$(X) THEN SWAP FI1$(Y), FI1$(X): SWAP AS$(X), AS$(Y) NEXT NEXT CLOSE #1 FF = 1 K = 1 IF H > 20 THEN C = 20: ELSE C = H DO FOR X = 1 TO H COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT FI1$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "Print Record By": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ": PRINT NM$(T) COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF H > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (H - 20):CLS IF L = H + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF H > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = H CASE IS = CHR$(27) CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) PP = LJ + L FOR X = 1 TO COUNT FI$(X) = MID$(AS$(PP), GO(X), LNE(X)) NEXT FOR X = 1 TO COUNT COLOR 15 LPRINT NM$(X + LJ); TAB(31); ": "; FI$(X + LJ) NEXT END SELECT LOOP END SUB SUB RECORDSORT L = 1 CLS CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT CLOSE #1 FF = 1 CLOSE #2 OPEN DB$ + ".DBD" FOR APPEND AS #2 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT NM$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "View Record": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄ" COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = COUNT + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLS CLOSE #1 COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) T = L + LJ CALL VIEWRECORD(T, DB$) END SELECT LOOP END SUB SUB RECORDSORTP CLS L = 1 CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT CLOSE #1 FF = 1 CLOSE #2 OPEN DB$ + ".DBD" FOR APPEND AS #2 K = 1 IF COUNT > 20 THEN C = 20: ELSE C = COUNT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT NM$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "Print Record": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄ" COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = COUNT + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLS CLOSE #1 COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) T = L + LJ CALL PRINTRECORD(T, DB$) END SELECT LOOP END SUB SUB SORTDELETE (T, DB$) CLOSE #1 L = 1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 CLOSE #2 OPEN DB$ + ".DBI" FOR INPUT AS #1 OPEN DB$ + ".DBD" FOR INPUT AS #2 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT H = 0 DO UNTIL EOF(2) INPUT #2, ANS$ H = H + 1 LOOP DIM FI1$(1 TO H) DIM AS$(1 TO H) CLOSE #2 OPEN DB$ + ".DBD" FOR INPUT AS #2 FOR X = 1 TO H INPUT #2, ANS$ AS$(X) = ANS$ FI1$(X) = MID$(ANS$, GO(T), LNE(T)) NEXT FOR Y = 1 TO H FOR X = 1 TO H IF FI1$(Y) < FI1$(X) THEN SWAP FI1$(Y), FI1$(X): SWAP AS$(X), AS$(Y) NEXT NEXT CLOSE #1 FF = 1 K = 1 IF H > 20 THEN C = 20: ELSE C = H DO FOR X = 1 TO H COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT FI1$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "Delete Record By": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ": LOCATE 3, 1: PRINT NM$(T) COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF H > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (H - 20):CLS IF L = H + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF H > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) PP = L LOCATE 4, 1: COLOR 15: PRINT "CONFERM DELETE (Y/N)" FG: ADF$ = INPUT$(1) IF UCASE$(ADF$) <> "Y" AND UCASE$(ADF$) <> "N" THEN GOTO FG: IF UCASE$(ADF$) = "N" THEN CLS : EXIT SUB CLOSE #1 CLOSE #2 OPEN DB$ + ".DBD" FOR OUTPUT AS #1 FOR X = 1 TO H IF X <> PP THEN WRITE #1, AS$(X) NEXT CLOSE #1 CLS COLOR 15, 0 EXIT SUB END SELECT LOOP END SUB SUB SORTEDIT (T, DB$) CLOSE #1 L = 1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 CLOSE #2 OPEN DB$ + ".DBI" FOR INPUT AS #1 OPEN DB$ + ".DBD" FOR INPUT AS #2 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT H = 0 DO UNTIL EOF(2) INPUT #2, ANS$ H = H + 1 LOOP DIM FI1$(1 TO H) DIM AS$(1 TO H) CLOSE #2 OPEN DB$ + ".DBD" FOR INPUT AS #2 FOR X = 1 TO H INPUT #2, ANS$ AS$(X) = ANS$ FI1$(X) = MID$(ANS$, GO(T), LNE(T)) NEXT FOR Y = 1 TO H FOR X = 1 TO H IF FI1$(Y) < FI1$(X) THEN SWAP FI1$(Y), FI1$(X): SWAP AS$(X), AS$(Y) NEXT NEXT CLOSE #1 FF = 1 K = 1 IF H > 20 THEN C = 20: ELSE C = H DO FOR X = 1 TO H COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT FI1$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "Edit Record By": LOCATE 2, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ": LOCATE 3, 1: PRINT NM$(T) COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF H > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (H - 20):CLS IF L = H + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF H > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = H CASE IS = CHR$(27) CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) CLS PP = L IF COUNT > 20 THEN C = 20: ELSE C = COUNT FOR X = 1 TO COUNT FI$(X) = MID$(AS$(PP), GO(X), LNE(X)) NEXT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 1 PRINT NM$(X + LJ); TAB(31); ": "; FI$(X + LJ) NEXT COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = COUNT + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) ANS$ = "" FOR R = 1 TO COUNT DO UNTIL LEN(FI$(R)) = LNE(R) FI$(R) = FI$(R) + " " LOOP ANS$ = ANS$ + FI$(R) NEXT AS$(PP) = ANS$ CLOSE #1 CLOSE #2 OPEN DB$ + ".DBD" FOR OUTPUT AS #1 FOR X = 1 TO H WRITE #1, AS$(X) NEXT CLOSE #1 CLS COLOR 15, 0 EXIT DO CASE IS = CHR$(13) LOCATE L, 1 COLOR 15, 0 PRINT NM$(L + LJ); TAB(31); ": "; COLOR 1, 9 FOR T = 1 TO LNE(L + LJ) PRINT " "; NEXT Z$ = "" INP$ = "" DO UNTIL Z$ = CHR$(13) HH: Z$ = INKEY$ IF Z$ = "" THEN GOTO HH IF Z$ = CHR$(8) AND LEN(INP$) >= 1 THEN INP$ = LEFT$(INP$, (LEN(INP$) -1)): LOCATE L, 33: COLOR 15, 9: FOR T = 1 TO LNE(L): PRINT " "; : NEXT T: COLOR 15, 9: LOCATE L, 33: PRINT INP$: GOTO HH IF LEN(INP$) < LNE(L + LJ) AND Z$ <> CHR$(13) THEN INP$ = INP$ + Z$ LOCATE L, 33: COLOR 15, 9: PRINT INP$ LOOP FI$(L + LJ) = INP$ LOCATE L, 1 COLOR 15, 4 PRINT NM$(L + LJ); TAB(31); ":"; L = L + 1 IF L = COUNT + 1 THEN L = 1 END SELECT LOOP END SELECT LOOP END SUB SUB VIEWALL CLOSE #1 L = 1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 CLOSE #2 OPEN DB$ + ".DBI" FOR INPUT AS #1 OPEN DB$ + ".DBD" FOR INPUT AS #2 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT H = 0 DO UNTIL EOF(2) INPUT #2, ANS$ H = H + 1 LOOP DIM FI1$(1 TO H) DIM AS$(1 TO H) CLOSE #2 OPEN DB$ + ".DBD" FOR INPUT AS #2 FOR X = 1 TO H INPUT #2, ANS$ AS$(X) = ANS$ NEXT FOR Y = 1 TO H FOR X = 1 TO H IF FI1$(Y) < FI1$(X) THEN SWAP FI1$(Y), FI1$(X): SWAP AS$(X), AS$(Y) NEXT NEXT FF = 1 K = 1 PP = 1 IF H > 20 THEN C = 20: ELSE C = H LJ = 0 I = 0 DO UNTIL I = H FOR X = 1 TO COUNT FI$(X) = MID$(AS$(PP), GO(X), LNE(X)) NEXT FOR X = 1 TO COUNT COLOR 15 LOCATE X, 1 PRINT NM$(X + LJ); TAB(31); ": "; FI$(X + LJ) NEXT COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" COLOR 15, 0: LOCATE 22, 1: PRINT "PRESS ENTER FOR NEXT PAGE" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(27) CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) I = I + 1 IF H > 20 THEN LJ = 20: C = H - 20: ELSE PP = PP + 1 END SELECT LOOP END SUB SUB VIEWRECORD (T, DB$) CLS CLOSE #1 L = 1 OPEN DB$ + ".DBI" FOR INPUT AS #1 INPUT #1, C$ COUNT = 0 CLS DO UNTIL EOF(1) INPUT #1, NAME$, LE, BE COUNT = COUNT + 1 LOOP DIM NM$(1 TO COUNT) DIM LNE(1 TO COUNT) DIM GO(1 TO COUNT) DIM FI$(1 TO COUNT) CLOSE #1 CLOSE #2 OPEN DB$ + ".DBI" FOR INPUT AS #1 OPEN DB$ + ".DBD" FOR INPUT AS #2 INPUT #1, C$ FOR X = 1 TO COUNT INPUT #1, NAME$, LE, BE NM$(X) = NAME$ LNE(X) = LE GO(X) = BE NEXT H = 0 DO UNTIL EOF(2) INPUT #2, ANS$ H = H + 1 LOOP DIM FI1$(1 TO H) DIM AS$(1 TO H) CLOSE #2 OPEN DB$ + ".DBD" FOR INPUT AS #2 FOR X = 1 TO H INPUT #2, ANS$ AS$(X) = ANS$ FI1$(X) = MID$(ANS$, GO(T), LNE(T)) NEXT FOR Y = 1 TO H FOR X = 1 TO H IF FI1$(Y) < FI1$(X) THEN SWAP FI1$(Y), FI1$(X): SWAP AS$(X), AS$(Y) NEXT NEXT CLOSE #1 FF = 1 K = 1 IF H > 20 THEN C = 20: ELSE C = H DO FOR X = 1 TO H COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 38 PRINT FI1$(X + LJ) NEXT COLOR 15, 0: LOCATE 1, 1: PRINT "View Record By": LOCATE 2, 1: PRINT "---------------": PRINT NM$(T) COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF H > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (H - 20):CLS IF L = H + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF H > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = H CASE IS = CHR$(27) CLS COLOR 15, 0 EXIT SUB CASE IS = CHR$(13) CLS PP = L IF COUNT > 20 THEN C = 20: ELSE C = COUNT FOR X = 1 TO COUNT FI$(X) = MID$(AS$(PP), GO(X), LNE(X)) NEXT DO FOR X = 1 TO C COLOR 15, 0 IF L = X THEN COLOR 15, 4 LOCATE X, 1 PRINT NM$(X + LJ); TAB(31); ": "; FI$(X + LJ) NEXT COLOR 15, 0: LOCATE 23, 1: PRINT "PRESS ESCAPE TO QUIT" A$ = INKEY$ SELECT CASE A$ CASE IS = CHR$(0) + "P" L = L + 1 IF COUNT > 20 AND L = C + 1 THEN CLS : LJ = 20: L = 1: K = 21: C = (COUNT- 20): CLS IF L = COUNT + 1 THEN L = 1 CASE IS = CHR$(0) + "H" L = L - 1 IF COUNT > 20 AND L = 0 AND K = 21 THEN CLS : L = 20: LJ = 0: C = 20: CLS IF L = 0 THEN L = C CASE IS = CHR$(27) L = 1 CLS COLOR 15, 0 EXIT DO END SELECT LOOP END SELECT LOOP END SUB