[GPA Check] 출력 기능 완성

Updated:

출력 기능 완성

[GPA Check] 입력 기능 완성 에 이어 출력기능도 완성했다.

그런데 평균평점을 구하는 식을 자세히 몰라서 일반적인 평균 구하는 방식으로 계산을 했다.

얼추 비슷한 것 같은데 학점이 4점 짜리인지 3점 짜리인지에 따라 비중이 달라지는 것 같다.

그러니 평균평점은 참고만 해야겠다 !


출력은 취득학점, 평균평점만 추가해주면 되어서 간단했다.

    def print_info(self, check):
        widget = QPlainTextEdit(self)
        widget.setReadOnly(True)
        query = 'SELECT * FROM ' + check
        my_cur.execute(query)
        my_result = my_cur.fetchall()
        widget.appendPlainText(check.replace('_', '-') + ' 성적 조회\n')
        widget.appendPlainText('교과목명\t\t\t\t\t이수구분\t\t\t\t학점\t\t등급')
        widget.appendPlainText('-------------------------------------------------------------------------------'
                               '----------------------------------------------------------------------------')
        application_credit = 0  # 신청학점
        acquisition_credit = 0  # 취득학점
        average_grade = self.cal_average_credit(my_result)

        for idx, cur in enumerate(my_result):
            class_name = str(cur[1])
            classification = str(cur[2])
            credit = str(cur[3])
            grade = str(cur[4])
            application_credit += int(credit)
            acquisition_credit += int(credit)
            if idx == 0:
                if len(class_name) <= 8:
                    output = class_name + '\t\t\t\t\t' + classification + '\t\t\t\t' + credit + '\t\t' + grade
                else:
                    output = class_name + '\t\t\t\t' + classification + '\t\t\t\t' + credit + '\t\t' + grade
            else:
                if len(class_name) <= 8:
                    output = '\n' + class_name + '\t\t\t\t\t' + classification + '\t\t\t\t' + credit + '\t\t' + grade
                else:
                    output = '\n' + class_name + '\t\t\t\t' + classification + '\t\t\t\t' + credit + '\t\t' + grade
            widget.appendPlainText(output)

        widget.appendPlainText('-------------------------------------------------------------------------------'
                               '----------------------------------------------------------------------------\n')
        widget.appendPlainText('신청학점 : ' + str(application_credit) + '\t\t\t\t\t취득학점 : ' + str(acquisition_credit) +
                               '\t\t\t\t\t평균평점 : ' + str(average_grade)[:4])
        widget.setGeometry(25, 40, 950, 435)
        widget.show()

[GPA Check] 출력 함수 수정 과 코드가 조금 달라졌다.

데이터가 얼마 안된다는 생각에 PK 를 교과목명으로 했다.

그런데 UPDATE 하는 과정에서 교과목명을 제대로 인식하지 못하는 경우가 있었다.

그래서 일반적인 PK 를 id 로 만들어 주었다.

그래서 15번째 줄 부터 시작하는 for 문에서 인덱스가 한 개씩 밀렸다 !

평균평점 계산

앞서 말했지만 정말 정말 참고용으로만 봐야한다.

학점 당 수치가 다르게 적용되는 것 같다.

3-1 학기 같은 경우 전부 3 학점이고 한 과목만 2 학점이다.

이때 일반적으로 평균을 구한 값인 4.33 과 학교 포털 사이트에서 보여지는 평점과 0.01 밖에 차이가 나지 않는다.

하지만 2-1학기나 4학점 전공필수가 있는 경우 꽤 오차범위가 크다 !

그러니 참고용..

    def cal_average_credit(self, my_result):
        sum = 0
        p_cnt = 0
        for cur in my_result:
            if cur[4] == 'A+':
                sum += 4.5
            elif cur[4] == 'A0':
                sum += 4.0
            elif cur[4] == 'B+':
                sum += 3.5
            elif cur[4] == 'B0':
                sum += 3.0
            elif cur[4] == 'C+':
                sum += 2.5
            elif cur[4] == 'C0':
                sum += 2.0
            elif cur[4] == 'D+':
                sum += 1.5
            elif cur[4] == 'D0':
                sum += 1.0
            elif cur[4] == 'P':
                p_cnt += 1

        return sum / (len(my_result) - p_cnt)

파이썬은 case 문이 없는게 조금 아쉬운 것 같다.

어쨌든 평균도 구한 뒤 출력을 하면 ?!

입, 출력 기능이 모두 완성되었다 !

이제 남은 부분은 비교과적인 부분인 세종사회봉사 이수여부 , 고전독서 인증여부, 토익 만 하면 된다 !


Categories:

Updated:

Leave a comment