This program is a menu-driven grade-averaging tool designed for classroom teachers, offering four subroutines that calculate student averages at different points in a six-week grading period. The four modes cover: third-week interim reports, six-week averages incorporating third-week data with individual major grades, six-week averages when major grades are already combined, and a quick final weighted average when all components are pre-calculated. The weighting formula used throughout is 40% daily average, 40% major grades, and 20% six-week test score, with the weights defined at lines 1119, 2130, 3130, and 4040 so teachers can adjust them. LPRINT statements throughout send formatted report output to a ZX printer, including student names and grade totals. The program uses POKE 23609,50 to set the keyboard repeat rate and SAVE “MENUGRADE” LINE 1 at line 9999 for auto-start on reload.
Program Structure
The program is organised as a top-level menu dispatcher with four self-contained processing blocks and one shared introductory subroutine:
| Lines | Purpose |
|---|---|
| 1–40 | Initialisation, intro splash, and menu input/dispatch |
| 1000–1190 | Mode 1: Third-week interim report |
| 2000–2190 | Mode 2: Six-week average, majors entered individually |
| 3000–3190 | Mode 3: Six-week average, majors pre-averaged |
| 4000–4060 | Mode 4: Final weighted average, all components pre-calculated |
| 9000–9010 | Introductory subroutine with instructions and key-wait |
| 9999 | SAVE with auto-start |
Dispatch is achieved at line 40 with GO TO C*1000, a compact computed-GOTO idiom that multiplies the menu choice (1–4) by 1000 to jump directly to the relevant block. This avoids a chain of IF statements.
Grading Model
All four modes ultimately apply the same weighted formula:
- 40% (
.4) daily grade average - 40% (
.4) major grade average (unit tests, projects) - 20% (
.2) six-week test
The author explicitly documents the lines (1119, 2130, 3130, 4040) where these weights can be changed, making the program intentionally customisable without understanding the full listing.
Notable Techniques
POKE 23609,50 at line 2 adjusts the keyboard debounce/repeat delay via the system variable REPDEL, slowing auto-repeat to reduce accidental double-entry during grade input — a sensible precaution for data-entry use.
LPRINT AT row,col is used to position output on the ZX printer, placing the student name at the left margin and the computed grade at a fixed column (20 or 27), producing aligned printed reports.
The introductory subroutine at line 9000 uses a PAUSE 0 / key-wait pattern at lines 9002 and 9005 to page through two screens of instructions before returning to the menu.
Mode 2 and Mode 3 both accept a “previous grade total” (PGT) and a count (PN) from the third-week report printout, accumulating them with the new week’s grades before averaging — a deliberate data-continuity bridge between grading periods.
Key BASIC Idioms
CLEARat the start of each mode block frees string/array memory and resets the stack, guarding against memory fragmentation across repeated runs.FLASH 1at line 23 highlights the “how to return to menu” instruction, andFLASH 0at line 40 cancels it before dispatch.PAPER 2/PAPER 7in the intro subroutine provides a brief colour highlight on the “you may change weighted averages” notice before resetting to white paper.SAVE "MENUGRADE" LINE 1at line 9999 saves the program with auto-start at line 1, so it runs immediately on load without requiringRUN.
Content
Source Code
1 REM all purpose MENU-DRIVEN grade averaging program: REM © by Joan Kealy, 1985; ALL RIGHTS RESERVED
2 POKE 23609,50: BORDER 5
5 PRINT "COMPREHENSIVE GRADE AVERAGING","WITH PRINTOUT FEATURES": BEEP .05,10: BEEP .05,20: BEEP .05,30: PAUSE 180
7 PRINT AT 10,8;"CAPS LOCK ON!": PAUSE 300: CLS
10 GO SUB 9000
20 PRINT AT 3,12;"MENU";AT 6,0;"1)3RD WEEK REPORT";AT 8,0;"2)6+3 WITH MAJOR GRADES TO BE AVERAGED BY COMPUTER";AT 11,0;"3)6+3 WHEN MAJORS ALREADY AVGD.";AT 13,0;"4)FINAL WEIGHTED AVERAGING WHEN ONLY REPORT CARD GRADE UNKNOWN."
22 PRINT AT 17,0;"ENTER NUMBER OF YOUR CHOICE."
23 FLASH 1: PRINT AT 19,0;"TO RETURN TO THIS MENU--TYPE STOP OR BREAK AT ANY PROMPT-----THEN GOTO 20"
30 INPUT C
35 IF C<1 OR C>4 THEN GO TO 20
40 FLASH 0: GO TO C*1000
1000 REM THIS PROGRAM PRINTS THE THIRD WEEK REPORT WITH STUDENT'S NAME AND THIRD WEEK AVERAGE IN WHITE BUT THE DAILY TOTAL, DIVIDED BY NUMBER OF GRADES, AND THE 'AS OF' DATE WILL APPEAR IN BLACK TO BE PICKED UP AT TIME OF 6 WK. AVERAGING--TIME SAVER DELUXE
1003 CLS : PRINT "THIS PROGRAM PRINTS THIRD WEEK AVERAGES BY STUDENT NAME. BREAK PROGRAM AND LIST 'THRU DATE' FOR DAILY TOTALS LINE 1180": PAUSE 480: CLS
1005 CLS : CLEAR
1012 DIM G(25,3): LET T=0
1014 INPUT "STUDENT'S NAME? ";N$
1018 PRINT N$
1020 INPUT "NUMBER OF DAILY GRADES?";N
1030 PRINT "TYPE A GRADE"
1035 FOR I=1 TO N
1040 INPUT G: PRINT G: LET T=T+G
1060 NEXT I
1070 LET A=T/N
1080 PRINT "THE DAILY AVERAGE IS ";A
1085 INPUT "HOW MANY MAJOR GRADES,IF ANY? ";Z
1088 IF Z=0 THEN GO TO 1110
1089 LET Q=0
1090 INPUT "COMPUTER WILL ADD FOR YOU IF YOU TYPE + ";Y
1093 LET Q=Q+Y
1095 LET MA=Q/Z
1100 PRINT "MAJOR AVERAGE IS ";MA: GO TO 1120
1110 PRINT "THIRD WEEK AVERAGE IS ";A: LET TWA=A: GO TO 1150
1119 REM SINCE NO 6 WKS TEST CANPOSSIBLY HAVE OCCURRED, THE DAILY AVERAGE AND MAJORS (IF ANY) HAVE EQUAL VALUE WHERE DAILIES WORTH 40% AND MAJORS WORTH 40%.
1120 LET TWA=(.5*A)+(.5*MA)
1130 PRINT "THIRD WEEK AVERAGE FOR ";N$;" IS ";TWA
1150 PRINT "SEND TO PRINTER? <Y> OR <N>?"
1160 INPUT R$
1170 IF R$="" THEN GO TO 170
1180 IF R$="Y" THEN LPRINT N$;AT 1,20;TWA: LPRINT AT 1,0;"DAILY TOTALS THRU ?/? ";T;"/ ";N: GO TO 1005
1190 IF R$="N" THEN GO TO 1005
2000 REM THIS PROGRAM INCORPORATES INFO FROM 3RD WEEK REPORT INTO AVERAGING FOR 6 WEEKS WITH REPORT CARD GENERATED BY ENTERING THE ADDITIONAL WEEKS OF DAILY GRADES, THE INDIVIDUAL MAJOR GRADES, AND THE SIX WEEK TEST GRADE WITH APPROPRIATE WEIGHTING FOR EACH.
2001 CLS : CLEAR
2002 LET T=0: DIM G(25,3)
2004 INPUT "STUDENT'S NAME? ";N$
2008 PRINT N$
2010 INPUT "NUMBER OF DAILY GRADES SINCE 3 WK REPORT?";N
2030 PRINT "TYPE A GRADE"
2035 FOR I=1 TO N
2040 INPUT G: PRINT G
2050 LET T=T+G
2060 NEXT I
2065 INPUT "PREVIOUS GRADE TOTAL FROM 3RD WEEK REPORT? ";PGT
2066 INPUT "NUMBER OF DAILY GRADES IN 3RD WKS' TOTAL? ";PN
2070 LET N=N+PN: LET T=T+PGT: LET A=T/N
2080 PRINT "THE DAILY AVERAGE IS ";A
2081 LET P=0
2085 FOR S=1 TO 3: INPUT "MAJOR GRADES?--THREE--ENTER AFTER EACH ";M
2090 LET P=P+M: NEXT S
2095 LET MA=P/3
2100 PRINT "MAJOR AVERAGE IS ";MA
2120 INPUT "SIX WEEKS TEST? ";SWT: PRINT SWT
2130 LET RCG=(.4*A)+(.4*MA)+(.2*SWT)
2140 PRINT "REPORT CARD GRADE FOR ";N$;" IS ";RCG
2150 PRINT "SEND TO PRINTER? <Y> OR <N>? "
2160 INPUT R$
2170 IF R$="" THEN GO TO 2170
2180 IF R$="Y" THEN LPRINT N$;AT 1,20;RCG
2185 IF R$="Y" THEN LPRINT AT 2,0;"TOTAL OF DAILY GRADES FOR 6 WKS. ";T;" DIVIDED BY ";N: GO TO 2001
2190 IF R$="N" THEN GO TO 2001
3000 REM THIS PROGRAM COMPUTES REPORT CARD GRADE WITH COMBINATION OF 3 WK. REPORT WITH REMAINING WEEKS' DAILIES WHEN THREE MAJORS HAVE ALREADY BEEN AVERAGED.
3001 CLS : CLEAR
3002 DIM G(25,3)
3003 LET T=0
3004 INPUT "STUDENT'S NAME? ";N$: PRINT N$
3010 INPUT "NUMBER OF DAILY GRADES SINCE 3 WK REPORT? ";N
3030 PRINT "TYPE A GRADE"
3035 FOR I=1 TO N
3040 INPUT G
3045 PRINT G
3050 LET T=T+G
3060 NEXT I
3065 INPUT "PREVIOUS GRADE TOTAL FROM 3RD WEEK REPORT? ";PGT
3066 INPUT "NUMBER OF DAILY GRADES IN 3RD WKS' TOTAL? ";PN
3067 LET N=N+PN: LET T=T+PGT: LET A=T/N
3080 PRINT "THE DAILY AVERAGE IS ";A
3081 LET P=0: FOR S=1 TO 3
3085 INPUT "AVERAGE OF MAJOR GRADES? ";MA
3100 PRINT "MAJOR AVERAGE IS ";MA
3110 INPUT "SIX WEEKS TEST? ";SWT: PRINT "6 WKS TEST ";SWT
3130 LET RCG=(.4*A)+(.4*MA)+(.2*SWT)
3140 PRINT "REPORT CARD GRADE FOR ";N$;" IS ";RCG
3150 PRINT "SEND TO PRINTER? <Y> OR <N>? "
3160 INPUT R$
3170 IF R$="" THEN GO TO 3170
3180 IF R$="Y" THEN LPRINT N$;AT 1,20;RCG
3185 IF R$="Y" THEN LPRINT AT 2,0;"TOTAL OF DAILY GRADES FOR 6 WKS. ";T;" DIVIDED BY ";N: GO TO 3001
3190 IF R$="N" THEN GO TO 3001
4000 REM THIS PROGRAM WILL PRINT OUT THE REPORT CARD GRADE AFTERSTUDENT'S NAME ONLY ---THE DAILY AVERAGE & MAJOR AVERAGE ARE PREVIOUSLY CALCULATED W/O COMPUTER BUT THE SIX WK. TEST + DA + MA WILL BE PROPERLY WEIGHTED SWIFTLY!
4002 CLS : CLEAR : LPRINT "________________________________"
4005 INPUT "STUDENT NAME?";N$: PRINT N$
4010 INPUT "MAJORS AVG.?";MA: PRINT MA
4020 INPUT "DAILY AVERAGE?";DA: PRINT DA
4030 INPUT "SIX WEEKS TEST?";SWT: PRINT SWT
4040 LET RCG=(.4*MA)+(.4*DA)+(.2*SWT): PRINT "REPORT CARD GRADE ";RCG
4050 LPRINT N$;AT 0,27;RCG
4060 GO TO 4002
9000 PRINT "THIS PROGRAM LETS YOU SELECT THE FOLLOWING SUBROUTINES:";AT 4,0;"* AVERAGES FOR THE 3 WEEK REPORT";AT 8,0;"* 6 WEEK AVERAGES, INCLU. THE 3 WEEK RESULTS, FOR REPORT CARD, WITH TW0 VARIATIONS";AT 14,0;"* FINAL WEIGHTED AVERAGING----- 40% DAILY AVG., 40% MAJOR AVG., AND 20% SIX WK TEST WHEN ALL 3 PREVIOUSLY CALCULATED."
9002 PRINT AT 20,0;"PRESS ANY KEY TO CONTINUE": PAUSE 0: CLS
9003 PAPER 2: PRINT AT 5,0;"YOU MAY CHANGE WEIGHTED AVERAGES"
9004 PAPER 7: PRINT AT 7,0;" OF 40% (.4) DAILY AVERAGES, 40% (.4) MAJOR GRADES LIKE UNIT TESTS OR PROJECTS,AND 20% (.2) FOR SIX WEEKS TESTS AT LINES 1119,2130,3130,AND 4040."
9005 PRINT AT 19,0;"PRESS ANY KEY TO CONTINUE": PAUSE 0
9007 CLS
9010 RETURN
9999 SAVE "MENUGRADE" LINE 1
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

