' BASIC PROGRAMMING                                     INSTRUCTOR: MR. JONES
' CIS 111 SEC 002                                       DUE DATE:07-13-98
'
' HSU, YEE                                              SSN: ???-??-????
' LAB ASSIGNMENT - 4, 6.14
'---------------------------------------------------------------------------
CLS
GOSUB InitializeVariables
GOSUB PrintHeadings
GOSUB ProcessDetail
GOSUB Printtotals
END

'************************ Initialize Variables **************************
InitializeVariables:
        H1$ = "         CITY COLLEGE OF SAN FRANCISCO   PAGE NO. ###    "
        H2$ = "\        \       GOOD HEALTH GYM                         "
        C1$ = "MEMBER NAME      GENDER  AGE     WEIGHT  PHONE NO.       "
        C2$ = "===========      ======  ===     ======  =========       "
        D1$ = "\                \  \ \   ##        ###  \       \       "
        T1$ = "         FEMALE MEMBERS UNDER 25         ###             "
        T2$ = "         FEMALE MEMBERS 25 AND OVER      ###             "
        T3$ = "         MALE MEMBERS UNDER 25           ###             "
        T4$ = "         MALE MEMBERS 25 AND OVER        ###             "
        T5$ = "         TOTAL FEMALE MEMBERS            ###             "
        T6$ = "         TOTAL MALE MEMBERS              ###             "
        T7$ = "         TOTAL MEMBERS OF \      \ GYM   ####            "
        T8$ = "         TOTAL MEMBERS                   ####            "

        LET AGE.TOT = 0
        LET GENDER.TOT = 0
        LET GYM.TOT = 0
        LET RRT.TOT = 0
        LET PAGE.NO = 0
        LET LINE.COUNT = 0
        LET MAX.LINES = 45

        GOSUB ReadData
RETURN

'*********************** print Headings *********************************
PrintHeadings:
        LET PAGE.NO = PAGE.NO + 1
        LPRINT CHR$(12);
        LPRINT USING H1$; PAGE.NO

        IF GYM$ <> "EOF" THEN
                LPRINT USING H2$; GYM$
                LPRINT
                LPRINT C1$
                LPRINT C2$
                LPRINT
                LET LINE.COUNT = 0
        END IF
RETURN

'************************ Process Detail ********************************
ProcessDetail:
        DO UNTIL GYM$ = "EOF"
                LET GYM.SAVE$ = GYM$
                LET AGE.SAVE$ = AGE.GROUP$
                LET GENDER.SAVE$ = GENDER$
                GOSUB MemberTotal
                GOSUB PrintDetail
                GOSUB ReadData
               
                IF GYM.SAVE$ <> GYM$ THEN
                        GOSUB GYMBRK
                ELSE
                        IF GENDER.SAVE$ <> GENDER$ THEN
                                GOSUB GENDERBRK
                        ELSE
                                IF AGE.SAVE$ <> AGE.GROUP$ THEN
                                        GOSUB AGEBRK
                                END IF
                        END IF
                END IF
        LOOP
RETURN

'************************ Read Data *************************************
ReadData:
        READ GYM$, Member$, GENDER$, AGE, WEIGHT, PHONE$

        DATA "ERSATZ", "MEI YEE CHEUNG", "F", 19, 123, "123-4287"
        DATA "ERSATZ", "JENNY SCOTT", "F", 21, 105, "467-8221"
        DATA "ERSATZ", "ROSE JONES", "F", 23, 110, "867-4289"
        DATA "ERSATZ", "MOLLY MIST", "F", 18, 125, "966-4037"
        DATA "ERSATZ", "HOLLY HOWE", "F", 24, 130, "862-3090"
        DATA "ERSATZ", "LYNN LONG", "F", 25, 121, "334-0712"
        DATA "ERSATZ", "KIM SMITH", "F", 30, 150, "332-0021"
        DATA "ERSATZ", "DEBBIE DOE", "F", 50, 143, "167-0072"
        DATA "ERSATZ", "JOHN JONES", "M", 19, 175, "963-0421"
        DATA "ERSATZ", "SCOTT MILLER", "M", 21, 200, "331-0021"
        DATA "ERSATZ", "STEVEN BROWN", "M", 23, 150, "966-0404"
        DATA "ERSATZ", "LARRY SHOW", "M", 43, 189, "967-0000"
        DATA "ERSATZ", "JAMES RANDAL", "M", 67, 178, "339-0421"
        DATA "LICIT", "VIRA OSMOND", "F", 21, 110, "334-0202"
        DATA "LICIT", "SANDRA LONG", "F", 24, 130, "334-0212"
        DATA "LICIT", "GAYNEL SILLO", "F", 19, 110, "332-0264"
        DATA "LICIT", "JOELLE DERLAP", "F", 27, 100, "960-0215"
        DATA "LICIT", "JEANNIE JONES", "F", 30, 137, "960-1245"
        DATA "LICIT", "MIKE MOORE", "M", 23, 170, "962-0405"
        DATA "LICIT", "JERRY SANDOVAL", "M", 24, 189, "339-0211"
        DATA "LICIT", "TOM TONE", "M", 37, 175, "421-1234"
        DATA "LICIT", "TIM SHORT", "M", 40, 183, "330-1001"
        DATA "FETID", "CATHY NELSON", "F", 21, 105, "331-0219"
        DATA "FETID", "SONIA SONG", "F", 19, 142, "967-0121"
        DATA "FETID", "JACKIE SMITH", "F", 24, 189, "337-7123"
        DATA "FETID", "TRICIA SCUDDER", "F", 18, 120, "960-1234"
        DATA "FETID", "NORA NOMES", "F", 23, 163, "301-1243"
        DATA "FETID", "RANDY RICH", "M", 24, 152, "961-1111"
        DATA "FETID", "TONY HERNANDEZ", "M", 21, 110, "333-4444"
        DATA "FETID", "TOMMY FOSS", "M", 18, 125, "900-0000"
        DATA "FETID", "DOUG DONLEY", "M", 85, 129, "312-3456"
        DATA "EOF", "NULL", "NULL", 0, 0, "NULL"

        IF AGE < 25 THEN
                LET AGE.GROUP$ = "UNDER"
        ELSE
                LET AGE.GROUP$ = "OVER"
        END IF
RETURN

'*********************** Calculate SubTotal *****************************
MemberTotal:
        LET AGE.TOT = AGE.TOT + 1
RETURN

'********************* print Detail *************************************
PrintDetail:
        LPRINT USING D1$; Member$; GENDER$; AGE; WEIGHT; PHONE$
        LET LINE.COUNT = LINE.COUNT + 1

        IF LINE.COUNT >= MAX.LINES THEN
                GOSUB PrintHeadings
        END IF
RETURN

GYMBRK:
        GOSUB GENDERBRK
        LPRINT USING T7$; GYM.SAVE$; GYM.TOT

        LET RPT.TOT = RPT.TOT + GYM.TOT
        LET GYM.TOT = 0
        LET GYM.SAVE$ = GYM$

        GOSUB PrintHeadings
RETURN

GENDERBRK:
        GOSUB AGEBRK
        IF GENDER.SAVE$ = "F" THEN
                LPRINT USING T5$; GENDER.TOT
        ELSE
                LPRINT USING T6$; GENDER.TOT
        END IF
       
        LET GYM.TOT = GYM.TOT + GENDER.TOT
        LET GENDER.TOT = 0
        LET GENDER.SAVE$ = GENDER$
        LPRINT
RETURN

AGEBRK:
        LPRINT
        IF AGE.SAVE$ = "UNDER" THEN
                IF GENDER.SAVE$ = "F" THEN
                        LPRINT USING T1$; AGE.TOT
                ELSE
                        LPRINT USING T3$; AGE.TOT
                END IF
        ELSE
                IF GENDER.SAVE$ = "F" THEN
                        LPRINT USING T2$; AGE.TOT
                ELSE
                        LPRINT USING T4$; AGE.TOT
                END IF
        END IF
        LPRINT
        LET LINE.COUNT = LINE.COUNT + 2
       
        LET GENDER.TOT = GENDER.TOT + AGE.TOT
        LET AGE.TOT = 0
        LET AGE.SAVE$ = AGE.GROUP$
RETURN

'********************* print Totals *************************************
Printtotals:
        LPRINT "         GOOD HEALTH GYM MEMBER TOTAL                    "
        LPRINT
        LPRINT USING T8$; RPT.TOT
RETURN
'********************* End of Program ***********************************