20  FILES FILEA,FILEB
30  REM SGFMS, HP 36832A, 6/74
40  DIM Z$[4],Y$[25]
60  REM FILEB IS USED TO STORE THE CRITERION STRINGS
80  REM FILE A IS USED FOR STORING STUDENT GRADES
100  LET F1=1
120  LET F2=2
140  DIM C$[20]
160  REM D$ IS A STUDENT NAME BUFFER, Y$ IS THE COURSE NAME
180  DIM D$[25],O$[65]
200  DIM K[3]
220  REM ARRAYS B, Q, AND P MUST BE IDENTICAL IN SIZE
240  REM TO THE ARRAYS B, Q, AND P IN THE MANAGEMENT SYSTEM PROGRAM
260  DIM P[10],Q[10]
280  DIM B[40],C[40]
290  DIM L[40],M[40],N[10],O[10]
300  REM THE VALUES OF B9, Q9, AND P9 MUST BE IDENTICAL TO THOSE
320  REM IN THE MANAGEMENT SYSTEM PROGRAM
340  REM   B9=NUMBER OF RX GRADES
360  REM  Q9=NUMBER OF QUIZ GRADES
380  REM  P9=NUMBER OF EXAM GRADES
400  LET B9=40
420  LET Q9=10
440  LET P9=10
460  GOSUB 2760
480  PRINT "STUDENT STATUS REPORT PROGRAM"
500  REM READ SYSTEM PARAMETERS
520  READ #F1,1;N4,L8,C9,Y$
540  PRINT "TYPE YOUR NUMBER";
560  INPUT S1
580  LET S1=S1+1
600  IF S1>1 AND S1 <= N4 THEN 660
620  PRINT "INVALID NUMBER"
640  GOTO 540
660  READ #F1,S1;D$,Z$
680  MAT  READ #F1;B,C,Q,P
700  PRINT "PASSWORD";
720  INPUT C$
740  IF C$=Z$ THEN 820
760  PRINT "INVALID PASSWORD    --   PROGRAM TERMINATED"
780  STOP 
800  REM PRINT STUDENT  NAME AND COURSE NAME
820  PRINT  USING 840;D$,Y$
840  IMAGE 25A,3X,25A
860  PRINT "SELECT PRINT:  RX, PE, TS, ALL OR STOP";
880  LET P1=Q1=R1=0
900  LET P6=0
920  INPUT C$
921  PRINT 
925  IF C$ <> "STOP" THEN 940
926  STOP 
940  IF C$ <> "RX" THEN 980
960  GOSUB 1160
980  IF C$ <> "PE" THEN 1020
1000  GOSUB 1740
1020  IF C$ <> "TS" THEN 1060
1040  GOSUB 1980
1060  IF C$ <> "ALL" THEN 860
1070  PRINT LIN(2)
1080  GOSUB 1160
1090  PRINT LIN(2)
1100  GOSUB 1740
1110  PRINT LIN(2)
1120  GOSUB 1980
1130  PRINT LIN(3)
1140  STOP 
1160  PRINT "PRINT CRITERIA";
1180  INPUT C$
1185  LET R1=0
1186  R2=T0=0
1200  IF C$ <> "YES" THEN 1380
1220  FOR I=1 TO B9
1225  IF B[I] >= 0 THEN 1270
1226  NEXT I
1240  PRINT "NO RX GRADES STORED"
1260  GOTO 1360
1270  I0=0
1280  FOR I1=1 TO B9
1300  IF B[I1]<0 THEN 1340
1305  I0=I0+1
1310  LET R1=R1+B[I1]
1320  GOSUB 2260
1340  NEXT I1
1345  R1=R1/I0
1346  PRINT "RX AVERAGE  --  ";R1
1360  RETURN 
1380  IF C$="NO" THEN 1400
1383  PRINT "ANSWER:  YES OR NO"
1386  GOTO 1160
1400  FOR I=1 TO B9
1402  IF B[I] >= 0 THEN 1460
1403  NEXT I
1420  PRINT "NO RX GRADES STORED"
1440  GOTO 1480
1460  GOSUB 1500
1480  RETURN 
1500  PRINT '10'10'10
1505  I=I0=0
1520  FOR S5=1 TO B9
1540  IF B[S5]<0 THEN 1620
1550  I0=I0+1
1560  LET R1=R1+B[S5]
1570  I=I+1
1572  IF I<5 THEN 1580
1574  I=1
1576  PRINT 
1580  PRINT  USING 1600;S5,B[S5]
1600  IMAGE #,"RX",2D," -- ",3D,3X
1620  NEXT S5
1630  PRINT 
1640  R1=R1/I0
1641  REM COMPUTE CLASS RX AVE
1642  FOR S1=2 TO N4
1643  GOSUB 2875
1644  FOR I=1 TO B9
1645  IF L[I]<0 THEN 1652
1646  T0=T0+1
1650  R2=R2+L[I]
1652  NEXT I
1653  NEXT S1
1655  R2=R2/T0
1658  PRINT 
1660  PRINT "RX AVERAGE  --  ";R1,TAB(25),"CLASS AVERAGE  --  ";R2
1680  PRINT '10
1700  RETURN 
1720  REM---------------------QUIZ GRADE PRINT
1740  IF Q[1] >= 0 THEN 1800
1760  PRINT "NO PRACTICAL EXAM GRADES STORED"
1780  GOTO 1950
1800  FOR I=1 TO Q9
1820  IF Q[I]<0 THEN 1900
1840  LET Q1=Q1+Q[I]
1860  PRINT  USING 2840;I,Q[I]
1880  NEXT I
1900  LET Q1=Q1/(I-1)
1901  Q2=T0=0
1902  FOR S1=2 TO N4
1903  GOSUB 2875
1904  FOR I=1 TO Q9
1905  IF N[I]<0 THEN 1909
1906  T0=T0+1
1907  Q2=Q2+N[I]
1908  NEXT I
1909  NEXT S1
1910  Q2=Q2/T0
1930  PRINT 
1940  PRINT "P. E. AVERAGE  --  ";Q1;"   CLASS AVERAGE  --  ";Q2
1950  RETURN 
1960  REM--------------------EXAM GRADE PRINT
1980  IF P[1] >= 0 THEN 2040
2000  PRINT "NO TEST GRADES STORED"
2020  GOTO 2160
2040  FOR I=1 TO P9
2060  IF P[I]<0 THEN 2140
2062  P7=0
2063  FOR S1=2 TO N4
2065  GOSUB 2875
2067  P7=P7+O[I]
2069  NEXT S1
2071  P7=P7/(N4-1)
2080  PRINT  USING 2860;I,P[I],P7
2100  LET P6=P6+P[I]
2120  NEXT I
2140  PRINT "TEST AVERAGE  --  ";P6/(I-1)
2160  RETURN 
2180  REM----------------------------------CRITERION NUMBER BREAKDOWN
2200  REM 
2220  REM THIS SECTION BREAKS THE CRITERION NUMBER INTO ITS COMPONENT PARTS
2240  REM
2260  IF C[I1]>99 THEN 2340
2280  LET K[1]=C[I1]
2300  LET I9=1
2320  GOTO 2540
2340  IF C[I1]>9999 THEN 2440
2360  LET K[2]=INT(C[I1]/100)
2380  LET K[1]=C[I1]-(K[2]*100)
2400  LET I9=2
2420  GOTO 2540
2440  LET K[3]=INT(C[I1]/10000)
2460  LET X1=INT(C[I1]-(K[3]*10000))
2480  LET K[2]=INT(X1/100)
2500  LET K[1]=X1-(K[2]*100)
2520  LET I9=3
2540  FOR J1=1 TO I9
2560  READ #F2,K[J1];O$
2580  IF J1>1 THEN 2660
2600  PRINT  USING 2620;I1,B[I1],K[J1],O$
2620  IMAGE "RX",2D,2X,3D,2X,2D,1X,50A
2640  GOTO 2700
2660  PRINT  USING 2680;K[J1],O$
2680  IMAGE 10X,3D,1X,50A
2700  NEXT J1
2720  RETURN 
2740  REM--------------------ARRAY CLEAR
2760  MAT B=ZER
2780  MAT C=ZER
2800  MAT P=ZER
2820  RETURN 
2840  IMAGE "PRACTICAL EXAM #",2D,"  --  ",3D
2860  IMAGE"TEST #",2D,"  --  ",3D.2D,"   CLASS AVE.  --  ",3D.2D
2869  REM---------------------------------DISC READ
2870  READ #F1,S1;D$,Z$
2871  MAT  READ #F1;B,C,Q,P
2874  RETURN 
2875  REM------------------DISC READ FOR AVE CALCULATION
2876  READ #F1,S1;D$,Z$
2877  MAT  READ #F1;L,M,N,O
2878  RETURN 
2880  END 
