home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / papers / papers.bas < prev    next >
Encoding:
BASIC Source File  |  1992-03-01  |  11.5 KB  |  293 lines

  1. ' PAPERS.BAS
  2.  
  3. ' A simple dedicated database program which keeps track of
  4. ' newspaper and pamphlet distribution contracts.
  5.  
  6. ' This program is in the public domain.  The author accepts no
  7. ' liability for anything.
  8.  
  9. ' Written by Matt McLeod (mjmcleod@maria.wustl.edu, c9106225@wombat.newcastle.edu.au)
  10.  
  11.  
  12. DECLARE SUB PrintData ()
  13. DECLARE SUB DrawScreen ()
  14. DECLARE SUB DrawLine (row AS INTEGER)
  15. DECLARE SUB GetContract ()
  16. DECLARE SUB LoadData (filename AS STRING)
  17.  
  18. ' Constants for boolean stuff
  19.  
  20. CONST true = -1, false = 0
  21.  
  22. ' Datatype to hold date info
  23.  
  24. TYPE DateType
  25.         Day AS INTEGER
  26.         Month AS INTEGER
  27.         Year AS INTEGER
  28. END TYPE
  29.  
  30. ' Datatyoe to hold contract info
  31.  
  32. TYPE ContractRec
  33.         Number AS STRING * 6
  34.         DateReceived AS DateType
  35.         DatePayed AS DateType
  36.         Amount AS SINGLE
  37. END TYPE
  38.  
  39. ' the main storage of data
  40.  
  41. DIM SHARED Contract(1 TO 1000) AS ContractRec
  42.  
  43. ' a couple of miscellaneous variables
  44.  
  45. DIM SHARED TotalContracts AS INTEGER
  46. DIM SHARED TopOfScreen AS INTEGER
  47. DIM SHARED Current AS INTEGER
  48.  
  49. ' and now the program...
  50.  
  51. CLS
  52. INPUT "Filename: "; filename$
  53. IF filename$ <> "" THEN LoadData (filename$)
  54.  
  55. ' if no filename was entered, then no file is loaded.
  56. ' now a few initializations...
  57.  
  58. Done = false
  59. TopOfScreen = 1
  60. Current = 1
  61. Redraw = true
  62. DO
  63.         IF Redraw THEN DrawScreen
  64.         IF TotalContracts = 0 THEN
  65.                 GetContract
  66.                 DrawScreen
  67.         END IF
  68.         VIEW PRINT 5 TO 23
  69.         IF Redraw THEN
  70.                 PrintData
  71.         ELSE
  72.                
  73.                 ' This bit handles only drawing a single line of data
  74.               
  75.                 LOCATE Current - TopOfScreen + 5, 1
  76.                 COLOR 15
  77.                 PRINT Contract(Current).Number; TAB(20);
  78.                 PRINT USING "##/##/##"; Contract(Current).DateReceived.Day; Contract(Current).DateReceived.Month; Contract(Current).DateReceived.Year; TAB(32);
  79.                 IF Contract(Current).DatePayed.Day <> 0 THEN PRINT USING "##/##/##"; Contract(Current).DatePayed.Day; Contract(Current).DatePayed.Month; Contract(Current).DatePayed.Year;
  80.                 PRINT TAB(48);
  81.                 PRINT USING "$$,####.##"; Contract(Current).Amount
  82.                 COLOR 7
  83.         END IF
  84.         Redraw = true
  85.         GotIt = false
  86.         DO
  87.  
  88.         ' And now we do the big stuff...
  89.  
  90.                 keyin$ = INKEY$
  91.                 SELECT CASE keyin$
  92.                 CASE "x"  ' X for eXit
  93.                         GotIt = true
  94.                         Done = true
  95.                 CASE "a"  ' A for Add data
  96.                         GetContract
  97.                         GotIt = true
  98.                 CASE "e"  ' E for Edit data
  99.                         VIEW PRINT 25 TO 25
  100.                         INPUT "Number: "; in$
  101.                         IF in$ <> "" THEN Contract(Current).Number = in$
  102.                         INPUT "Date Received:  "; in$
  103.                         IF in$ <> "" THEN
  104.                                 Contract(Current).DateReceived.Year = VAL(RIGHT$(in$, 2))
  105.                                 Contract(Current).DateReceived.Month = VAL(MID$(in$, 4, 2))
  106.                                 Contract(Current).DateReceived.Day = VAL(LEFT$(in$, 2))
  107.                         END IF
  108.                         INPUT "Date Payed: "; in$
  109.                         IF in$ <> "" THEN
  110.                                 Contract(Current).DatePayed.Year = VAL(RIGHT$(in$, 2))
  111.                                 Contract(Current).DatePayed.Month = VAL(MID$(in$, 4, 2))
  112.                                 Contract(Current).DatePayed.Day = VAL(LEFT$(in$, 2))
  113.                         END IF
  114.                         INPUT "Amount: "; in$
  115.                         IF in$ <> "" THEN Contract(Current).Amount = VAL(in$)
  116.                         GotIt = true
  117.                 CASE "s"  ' S for Save data
  118.                         VIEW PRINT 25 TO 25
  119.                         INPUT "Filename: "; filename$
  120.                         OPEN filename$ FOR OUTPUT AS 1
  121.                         FOR x = 1 TO TotalContracts
  122.                                 WRITE #1, Contract(x).Number, Contract(x).DateReceived.Day, Contract(x).DateReceived.Month, Contract(x).DateReceived.Year
  123.                                 WRITE #1, Contract(x).DatePayed.Day, Contract(x).DatePayed.Month, Contract(x).DatePayed.Year
  124.                                 WRITE #1, Contract(x).Amount
  125.                         NEXT
  126.                         GotIt = true
  127.                 CASE "d"  ' D for Delete data
  128.                         VIEW PRINT 25 TO 25
  129.                         FOR n = Current TO TotalContracts
  130.                                 Contract(n - 1) = Contract(n)
  131.                         NEXT n
  132.                         TotalContracts = TotalContracts - 1
  133.                         GotIt = true
  134.                 CASE CHR$(0) + CHR$(81)  ' This one is Page Down
  135.                         TopOfScreen = TopOfScreen + 15
  136.                         IF TopOfScreen > TotalContracts THEN TopOfScreen = 1
  137.                         GotIt = true
  138.                 CASE CHR$(0) + CHR$(73)  ' and page Up!
  139.                         TopOfScreen = TopOfScreen - 15
  140.                         IF TopOfScreen < 1 THEN TopOfScreen = 1
  141.                         GotIt = true
  142.                 CASE CHR$(0) + CHR$(59) ' help bit
  143.                         VIEW PRINT
  144.                         CLS
  145.                         OPEN "papers.hlp" FOR INPUT AS 1
  146.                         DO UNTIL EOF(1)
  147.                                 LINE INPUT #1, a$
  148.                                 PRINT a$
  149.                         LOOP
  150.                         DO
  151.                         LOOP UNTIL INKEY$ = CHR$(13)
  152.                         CLOSE 1
  153.                         GotIt = true
  154.                 CASE CHR$(0) + CHR$(72)  ' Up
  155.                         LOCATE Current - TopOfScreen + 5, 1
  156.                         COLOR 7
  157.                         PRINT Contract(Current).Number; TAB(20);
  158.                         PRINT USING "##/##/##"; Contract(Current).DateReceived.Day; Contract(Current).DateReceived.Month; Contract(Current).DateReceived.Year; TAB(32);
  159.                         IF Contract(Current).DatePayed.Day <> 0 THEN PRINT USING "##/##/##"; Contract(Current).DatePayed.Day; Contract(Current).DatePayed.Month; Contract(Current).DatePayed.Year;
  160.                         PRINT TAB(48);
  161.                         PRINT USING "$$,####.##"; Contract(Current).Amount
  162.                         Current = Current - 1
  163.                         IF Current = 0 THEN Current = TotalContracts
  164.                         GotIt = true
  165.                         Redraw = false
  166.                 CASE CHR$(0) + CHR$(80)  ' Down
  167.                         LOCATE Current - TopOfScreen + 5, 1
  168.                         COLOR 7
  169.                         PRINT Contract(Current).Number; TAB(20);
  170.                         PRINT USING "##/##/##"; Contract(Current).DateReceived.Day; Contract(Current).DateReceived.Month; Contract(Current).DateReceived.Year; TAB(32);
  171.                         IF Contract(Current).DatePayed.Day <> 0 THEN PRINT USING "##/##/##"; Contract(Current).DatePayed.Day; Contract(Current).DatePayed.Month; Contract(Current).DatePayed.Year;
  172.                         PRINT TAB(48);
  173.                         PRINT USING "$$,####.##"; Contract(Current).Amount
  174.                         Current = Current + 1
  175.                         IF Current > TotalContracts THEN Current = 1
  176.                         GotIt = true
  177.                         Redraw = false
  178.                 END SELECT
  179.                 IF Current < TopOfScreen THEN
  180.                         TopOfScreen = Current - 15
  181.                         IF TopOfScreen < 1 THEN TopOfScreen = 1
  182.                         Redraw = true
  183.                 END IF
  184.                 IF Current > TopOfScreen + 17 THEN
  185.                         TopOfScreen = TopOfScreen + 15
  186.                         IF TopOfScreen > TotalContracts THEN TopOfScreen = TotalContracts
  187.                         Redraw = true
  188.                 END IF
  189.         LOOP UNTIL GotIt
  190.         VIEW PRINT
  191. LOOP UNTIL Done
  192. SYSTEM
  193.  
  194. SUB DrawLine (row AS INTEGER)
  195.  
  196. ' This sub draws a single line along the specified row
  197.  
  198.         LOCATE row, 1
  199.         FOR i = 1 TO 80
  200.                 PRINT CHR$(196);
  201.         NEXT
  202. END SUB
  203.  
  204. SUB DrawScreen
  205.  
  206. ' This sub draws the screen (not including the data) and also calculates
  207. ' a few things...
  208.  
  209.         VIEW PRINT
  210.         TotalEarnt = 0
  211.         TotalPayed = 0
  212.         IF TotalContracts <> 0 THEN
  213.                 FOR i = 1 TO TotalContracts
  214.                         TotalEarnt = TotalEarnt + Contract(i).Amount
  215.                         IF Contract(i).DatePayed.Day <> 0 THEN TotalPayed = TotalPayed + Contract(i).Amount
  216.                 NEXT
  217.         END IF
  218.         CLS
  219.         PRINT "Total Earnt:";
  220.         PRINT USING "$$,########.##"; TotalEarnt;
  221.         PRINT TAB(40); "Total Paid:";
  222.         PRINT USING "$$,########.##"; TotalPayed
  223.         DrawLine (2)
  224.         PRINT "Contract:"; TAB(20); "Date:"; TAB(32); "Payed:"; TAB(48); "Amount:"
  225.         DrawLine (4)
  226.         DrawLine (24)
  227. END SUB
  228.  
  229. SUB GetContract
  230.  
  231. ' This sub gets contract details from the user
  232.  
  233.         VIEW PRINT 25 TO 25
  234.         x = TotalContracts + 1
  235.         INPUT "Number: "; Contract(x).Number
  236.         INPUT "Date Received:  "; in$
  237.         Contract(x).DateReceived.Year = VAL(RIGHT$(in$, 2))
  238.         Contract(x).DateReceived.Month = VAL(MID$(in$, 4, 2))
  239.         Contract(x).DateReceived.Day = VAL(LEFT$(in$, 2))
  240.         INPUT "Date Payed: "; in$
  241.         Contract(x).DatePayed.Year = VAL(RIGHT$(in$, 2))
  242.         Contract(x).DatePayed.Month = VAL(MID$(in$, 4, 2))
  243.         Contract(x).DatePayed.Day = VAL(LEFT$(in$, 2))
  244.         INPUT "Amount: "; Contract(x).Amount
  245.         TotalContracts = x
  246. END SUB
  247.  
  248. SUB LoadData (filename AS STRING)
  249.  
  250. ' This sub loads a datafile.  If DIR is given as the filename,
  251. ' then the directory is displayed, and the filename reprompted for
  252.  
  253.         ready = false
  254.         IF filename$ = "dir" THEN
  255.                 FILES
  256.                 DO
  257.                         PRINT
  258.                         INPUT "Filename: "; filename$
  259.                         IF filename$ = "dir" THEN FILES ELSE ready = true
  260.                 LOOP UNTIL ready
  261.         END IF
  262.         OPEN filename$ FOR INPUT AS 1
  263.         x = 0
  264.         DO UNTIL EOF(1)
  265.                 x = x + 1
  266.                 INPUT #1, Contract(x).Number, Contract(x).DateReceived.Day, Contract(x).DateReceived.Month, Contract(x).DateReceived.Year
  267.                 INPUT #1, Contract(x).DatePayed.Day, Contract(x).DatePayed.Month, Contract(x).DatePayed.Year
  268.                 INPUT #1, Contract(x).Amount
  269.         LOOP
  270.         CLOSE 1
  271.         TotalContracts = x
  272. END SUB
  273.  
  274. SUB PrintData
  275.  
  276. ' This sub prints the data to the screen
  277.  
  278.         FOR i = TopOfScreen TO TopOfScreen + 17
  279.                 IF i > TotalContracts THEN
  280.                         PRINT
  281.                 ELSE
  282.                         IF i = Current THEN COLOR 15 ELSE COLOR 7
  283.                         PRINT Contract(i).Number; TAB(20);
  284.                         PRINT USING "##/##/##"; Contract(i).DateReceived.Day; Contract(i).DateReceived.Month; Contract(i).DateReceived.Year; TAB(32);
  285.                         IF Contract(i).DatePayed.Day <> 0 THEN PRINT USING "##/##/##"; Contract(i).DatePayed.Day; Contract(i).DatePayed.Month; Contract(i).DatePayed.Year;
  286.                         PRINT TAB(48);
  287.                         PRINT USING "$$,####.##"; Contract(i).Amount
  288.                         COLOR 7
  289.                 END IF
  290.         NEXT
  291. END SUB
  292.  
  293.