home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG028.ARK / DBENTRY.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  5KB  |  148 lines

  1.     PRINT "DATA ENTRY PROGRAM OF 3-22-78"
  2.     FIELDS = 20
  3.     ZERO = 0: ONE = 1: TWO = 2
  4.     SEQUENTIAL = ZERO
  5.     RANDOM = 1
  6.     INDEXED = 3
  7.     LINKED = 7
  8.     ALPHA = ONE: NUMERIC = ZERO
  9.     DIM FIELD$(FIELDS),TYPE(FIELDS),WIDE(FIELDS),DATA$(FIELDS)
  10.     DIM FEED(FIELDS),MIN(FIELDS),MAX(FIELDS)
  11.     INPUT "DO YOU WANT INSTRUCTIONS";ANS$
  12.     IF ANS$="NO" THEN 2100
  13.     PRINT "THE PURPOSE OF THIS PROGRAM IS TO ALLOW THE OPERATOR"
  14.     PRINT "TO MAKE ENTRIES INTO A FILE PREVIOUSLY SET UP BY THE"
  15.     PRINT "SET-UP PROGRAM.  EXAMPLES OF SUCH FILES WOULD BE"
  16.     PRINT "A LIST OF ALL THE INTEGRATED CIRCUITS ON HAND, OR"
  17.     PRINT "A LIST OF ALL THE SALES MADE ON A PARTICULAR DATE, OR"
  18.     PRINT "A LIST OF ALL THE ITEMS SHIPPED IN ONE WEEK."
  19.     PRINT "THE FILE IS MADE UP OF RECORDS, AND EACH RECORD"
  20.     PRINT "IS MADE UP OF FIELDS.  THE RECORD MIGHT BE ONE"
  21.     PRINT "INVENTORY ITEM, OR ONE TRANSACTION.  THE FIELD "
  22.     PRINT "MIGHT BE A QUANTITY, A PRICE, OR A PART NUMBER."
  23.     PRINT "THERE ARE PRESENTLY THREE TYPES OF FILES ALLOWED:"
  24.     PRINT "  TYPE 0        SEQUENTIAL"
  25.     PRINT "  TYPE 1        RANDOM"
  26.     PRINT "  TYPE 3        INDEXED-RANDOM"
  27.     PRINT "  TYPE 7        LINKED-INDEXED-RANDOM"
  28.     PRINT "A SEQUENTIAL FILE IS NORMALLY USED FOR ITEMS THAT"
  29.     PRINT "NEED NO CHANGES, SUCH AS A RECEIVING OR SHIPPING LOG."
  30.     PRINT "A RANDOM FILE IS NOT AS COMPACT AS A SEQUENTIAL FILE,"
  31.     PRINT "BUT IT HAS THE ADVANTAGE OF BEING EASY TO MAKE CHANGES."
  32.     PRINT "AN INDEXED FILE ALLOWS QUICK ACCESS TO ANY ENTRY BY"
  33.     PRINT "SPECIFYING A KEY FIELD, SUCH AS A PART NUMBER IN"
  34.     PRINT "AN INVENTORY OR A COMPANY NAME IN AN ORDER FILE."
  35.     PRINT "A LINKED FILE MAKES IT POSSIBLE TO DELETE AND INSERT"
  36.     PRINT "RECORDS, WITHOUT REWRITING THE WHOLE FILE."
  37.     PRINT
  38.     PRINT "AFTER EACH ENTRY:"
  39.     PRINT "ENTER AN AMPERSANS (&) FOR ANOTHER ENTRY."
  40.     PRINT "ENTER A NUMBER SIGN (#) TO CANCEL LAST ENTRY."
  41.     PRINT "ENTER A PERIOD (.) AFTER THE LAST ITEM."
  42.     PRINT
  43.     PRINT "ENTER AN EQUAL SIGN (=) INSTEAD OF A"
  44.     PRINT "DATA ENTRY IF YOU WANT THE SAME DATA"
  45.     PRINT "AS IN THE LAST RECORD."
  46.     PRINT
  47. 2100    REM  FILE SELECTION
  48.     INPUT "WHAT IS THE NAME OF THE FILE";FILENAME$
  49. 2900    REM  READ A PREVIOUSLY STORED FILE TO THE END.
  50.     FILE FILENAME$
  51.     RECNO = ONE        REM  INIT. RECORD NUMBER.
  52.     REM  READ HEADER (FIRST) RECORD.
  53.     READ #ONE;RECLEN,NO.OF.FIELDS,NHEAD,NIND,FILETYPE,CODE,SPARE
  54.     REM  RECLEN IS RECORD LENGTH.
  55.     REM  NHEAD IS NUMBER OF HEADERS.
  56.     REM  NIND IS NUMBER OF INDEXES.
  57.     REM  FILETYPE IS EXPLAINED ABOVE.
  58.     RECNO = RECNO + ONE        REM  BUMP RECORD NUMBER.
  59.     IF FILETYPE <> SEQUENTIAL THEN \
  60.         CLOSE ONE :\        REM  THEN CLOSE IT,
  61.         FILE FILENAME$(RECLEN)    REM  AND REOPEN CORRECTLY.
  62.     N = NO.OF.FIELDS
  63.     IF NHEAD = ZERO THEN 2910    REM  NO HEADINGS?
  64.     REM  READ HEADINGS.
  65.     FOR I = ONE TO NHEAD
  66.         IF FILETYPE = SEQUENTIAL THEN \
  67.         READ #ONE;HEADINGS$ \    REM  READ THIS WAY.
  68.         ELSE \            REM  OTHERWISE,
  69.         READ #ONE,RECNO;HEADINGS$
  70.     RECNO = RECNO + ONE
  71.     NEXT I
  72. 2910    FOR I = ONE TO NO.OF.FIELDS    REM  READ FIELDS INTO AN ARRAY.
  73.       IF FILETYPE = SEQUENTIAL THEN \
  74.         READ #ONE;FIELD$(I),TYPE(I),WIDE(I),FEED(I),MIN(I),MAX(I),SPARE \
  75.       ELSE \
  76.         READ #ONE,RECNO;FIELD$(I),TYPE(I),WIDE(I),FEED(I),MIN(I),MAX(I), \
  77.                 SPARE
  78.     RECNO = RECNO + ONE
  79.     NEXT I
  80. 2920    IF END #ONE THEN 2600        REM  READ REST OF FILE.
  81.     IF FILETYPE = SEQUENTIAL THEN \
  82.         READ #ONE;DUMMY$ \
  83.     ELSE \
  84.         READ #ONE,RECNO;DUMMY$
  85.     RECNO = RECNO + ONE
  86.     GOTO 2920
  87. 2600    REM  IF THERE'S AN INDEX, READ IT TO THE END.
  88.     IF NIND = 0 THEN 2200        REM  IF NO INDEXES, SKIP IT.
  89.         INDEX.FILE$ = FILENAME$ + ".IND"
  90.         FILE INDEX.FILE$        REM  OPEN SEQUENTIAL INDEX FILE.
  91.         READ #TWO;INDEX.FIELD$    REM  READ INDEX FILE HEADER.
  92. 2650        IF END #TWO THEN 2200    REM  READ REST TILL END.
  93.         READ #TWO;DUMMY$
  94.         GOTO 2650
  95. 2200    REM  DATA ENTRY
  96.     PRINT
  97.     PRINT "START ENTERING DATA NOW."
  98.     PRINT
  99. 2210    PRINT    REM  PUT A LINE BETWEEN EACH RECORD ENTRY.
  100.     RECORD$ = ""
  101.     FOR I = ONE TO N
  102.         PRINT FIELD$(I);
  103. 2215        INPUT ANS$
  104.         IF ANS$ = "=" THEN ANS$ = DATA$(I)
  105.         DATA$(I) = ANS$
  106.         IF WIDE(I) = ZERO THEN 2217    REM  FREE FIELD?
  107.         X = LEN(ANS$) - WIDE(I)
  108.         IF X > ZERO THEN \
  109.             PRINT "ENTRY ";X;" CHARACTERS TOO WIDE." :\
  110.             GOTO 2215
  111. 2217        IF TYPE(I) = ALPHA THEN 2217.5
  112.             DIF = MIN(I) - VAL(ANS$)
  113.             IF DIF > ZERO THEN \
  114.             PRINT "ENTRY IS ";DIF;" TOO SMALL." :\
  115.             GOTO 2215
  116.             DIF = VAL(ANS$) - MAX(I)
  117.             IF DIF > ZERO THEN \
  118.             PRINT "ENTRY IS ";DIF;" TOO LARGE." :\
  119.             GOTO 2215
  120. 2217.5        RECORD$ = RECORD$ + ANS$ + "!"
  121.         IF NIND<>0 AND INDEX.FIELD$=FIELD$(I) THEN \
  122.             INDEX.ENTRY$ = ANS$
  123.     NEXT I
  124. 2218    INPUT "& OR # OR .";ANS$
  125.     IF ANS$ = "#" THEN 2210
  126.     IF ANS$ = "&" THEN 2219
  127.     IF ANS$ <> "." THEN 2218
  128. 2219    IF NIND<>0 THEN \        REM  IF THERE'S AN INDEX,
  129.         PRINT #TWO;INDEX.ENTRY$,RECNO    REM  WRITE OUT TO IT.
  130.     IF FILETYPE = SEQUENTIAL THEN \
  131.         PRINT #ONE;RECORD$
  132.     IF FILETYPE = INDEXED THEN \
  133.         PRINT #ONE,RECNO;RECORD$
  134.     IF FILETYPE = LINKED THEN \
  135.         PRINT #ONE,RECNO;RECORD$,RECNO+1
  136.     IF ANS$ = "." THEN 2220        REM  CHECK FOR LAST ENTRY.
  137.     RECNO = RECNO + ONE        REM  INCREMENT RECORD NUMBER.
  138.     GOTO 2210
  139. 2220    PRINT
  140.     RECNO = RECNO - NO.OF.FIELDS - NHEAD - ONE
  141.     PRINT "THERE ARE NOW ";RECNO;"RECORDS IN ";FILENAME$;"."
  142.     CLOSE ONE
  143.     IF NIND <> 0 THEN CLOSE TWO    REM  CLOSE INDEX FILE.
  144.     INPUT "DO YOU WANT TO ENTER DATA INTO ANOTHER FILE NOW";ANS$
  145.     IF ANS$ = "YES" THEN 2100
  146.     STOP
  147.     END
  148.