home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / euphor10.zip / DATABASE.BAS < prev    next >
BASIC Source File  |  1993-05-07  |  3KB  |  146 lines

  1. DECLARE SUB purge ()
  2. '$DYNAMIC
  3. DEFINT A-Z
  4. TYPE rd
  5.   pname AS STRING * 20
  6.   amount AS DOUBLE
  7.   code AS INTEGER
  8. END TYPE
  9.  
  10. TYPE dbrec
  11.   pname AS STRING * 20
  12.   amount AS DOUBLE
  13. END TYPE
  14.  
  15. DECLARE SUB dump ()
  16. DECLARE SUB xupdate (datastream() AS rd)
  17.  
  18. DIM SHARED database(0) as dbrec
  19. 'backup array needed because REDIM wipes out your data
  20. DIM SHARED database2(0) as dbrec
  21.  
  22. CONST ITERATIONS = 5000
  23. CONST INPUTSIZE = 30
  24.  
  25. REM update commands
  26. CONST NEW = 1      ' add a new account
  27. CONST UPDATE = 2   ' add/substract from their account
  28. CONST DELETE = 3   ' delete someone's account
  29.  
  30. DIM SHARED rawdata(INPUTSIZE) AS rd
  31. DATA "George Bush", 1000, 1
  32. DATA "Bill Clinton", 2000, 1
  33. DATA "Brian Mulroney", 500, 1
  34. DATA "Ross Perot", 10000, 1
  35. DATA "Ross Perot", 0, 3
  36. DATA "George Bush", -30.55, 2
  37. DATA "Madonna", 2500, 1
  38. DATA "Boris Yeltsin", 100, 1
  39. DATA "Michael Jackson", 50, 1
  40. DATA "Peter Mansbridge", 1200, 1
  41. DATA "Bill Clinton", +500, 2
  42. DATA "Rod Stewart", 3000, 1
  43. DATA "Boris Yeltsin", 0, 3
  44. DATA "Sharon Stone", 1500, 1
  45. DATA "Clint Eastwood", 1900, 1
  46. DATA "Madonna", 0, 3
  47. DATA "Sally Jessy Raphael", 750, 1
  48. DATA "Brian Mulroney", -400, 3
  49. DATA "Richard Gere", 299, 1
  50. DATA "Rod Stewart", 0, 3
  51. DATA "Demi Moore", 350, 1
  52. DATA "Bruce Willis", 480, 1
  53. DATA "Sharon Stone", +900.50, 2
  54. DATA "Arsenio Hall", 300, 1
  55. DATA "David Letterman", 450, 1
  56. DATA "Whoopi Goldberg", 1050, 1
  57. DATA "Clint Eastwood", +2500, 2
  58. DATA "Michael Jackson", -50, 2
  59. DATA "Clint Eastwood", 0, 3
  60. DATA "Jack Nicholson", 3000, 1
  61.  
  62. DIM SHARED size
  63. size = 0  'current database size
  64.  
  65. FOR i = 0 TO INPUTSIZE - 1
  66.     READ rawdata(i).pname
  67.     READ rawdata(i).amount
  68.     READ rawdata(i).code
  69. NEXT i
  70.  
  71. t! = TIMER
  72. FOR i = 1 TO ITERATIONS
  73.     purge
  74.     CALL xupdate(rawdata())
  75. NEXT i
  76.  
  77. PRINT ITERATIONS;" ITERATIONS IN ";TIMER - t!; " SECONDS"
  78. dump
  79.  
  80.  
  81. SUB dump
  82. REM used to verify that program works correctly
  83. REM not part of timing loop
  84.     FOR i = 0 TO size - 1
  85.     PRINT i, database(i).pname, database(i).amount
  86.     NEXT i
  87. END SUB
  88.  
  89. SUB purge
  90. REM empty the database - free all storage
  91.     size = 0
  92.     REDIM database(0)
  93.     REDIM database2(0)
  94. END SUB
  95.  
  96. SUB xupdate (datastream() AS rd)
  97.     FOR i = 0 TO INPUTSIZE - 1
  98.     transactioncode = datastream(i).code
  99.     
  100.     IF transactioncode = NEW THEN
  101.         FOR j = 0 TO size - 1 
  102.             database2(j) = database(j)
  103.         NEXT j
  104.         size = size + 1
  105.         REDIM database(size)
  106.         FOR j = 0 TO size - 2
  107.         database(j) = database2(j)
  108.         NEXT j
  109.         database(size - 1).pname = datastream(i).pname
  110.         database(size - 1).amount = datastream(i).amount
  111.         REDIM database2(size)
  112.  
  113.     ELSE
  114.         REM look up name
  115.         pname$ = datastream(i).pname
  116.         FOR accountno = 0 TO size - 1
  117.         IF pname$ = database(accountno).pname THEN
  118.             EXIT FOR
  119.         END IF
  120.         NEXT accountno
  121.  
  122.         IF transactioncode = UPDATE THEN
  123.             database(accountno).amount = database(accountno).amount + datastream(i).amount
  124.  
  125.         ELSE  'DELETE
  126.             FOR j = 0 TO size - 1 
  127.                 database2(j) = database(j)
  128.             NEXT j
  129.             size = size - 1
  130.             REDIM database(size)
  131.             j = 0
  132.             FOR k = 0 TO accountno - 1
  133.             database(j) = database2(k)
  134.             j = j + 1
  135.             NEXT k
  136.             FOR k = accountno + 1 TO size
  137.             database(j) = database2(k)
  138.             j = j + 1
  139.             NEXT k
  140.             REDIM database2(size)
  141.         END IF
  142.     END IF
  143.     NEXT i
  144. END SUB
  145.  
  146.