본문으로 바로가기

(Python)성적관리 프로그램

category Python/Python 연습 2020. 10. 14. 18:30
import pickle

while True:
    chk = int(input('1.추가 2.검색 3.삭제 4.수정 5.출력 : '))
    
    # 추가 
    if chk == 1:

        table = dict()
        try:
            with open('table.p', 'rb') as file:
                table = pickle.load(file)
            print('파일 불러오기 성공')
        except FileNotFoundError as e:
            print('파일이 없습니다.')

        name = input('학생이름 : ')
        
        data = {a:b for a, b in table.items() if a==name}
        
        if data == {}:
            score = dict(zip(['국어', '영어', '수학', '과학'], list(map(int, input('점수 : ').split()))))

            table.setdefault(name, score)

            with open('table.p', 'wb') as file:
                pickle.dump(table, file)
        else:
            print('해당 학생이 존재합니다.')

    # 검색
    elif chk == 2:
        name = input('이름을 입력하세요 : ')
        try:
            with open('table.p', 'rb') as file:
                table = pickle.load(file)

            hasName = {key:value for key, value in table.items() if key==name}
            
            if hasName != {}:
                for k,v in hasName.items():
                    print('이름 : ',k)
                    print('국어 : ', v.get('국어'))
                    print('영어 : ', v.get('영어'))
                    print('수학 : ', v.get('수학'))
                    print('과학 : ', v.get('과학'))
                    print('총점 : ', sum(v.values()))
                    print('평균 : ', sum(v.values())/len(v))
            else:
                print('해당 학생이 존재하지 않습니다.')
        except FileNotFoundError as e:
            print('학생 정보가 없습니다.')
        
    # 삭제
    elif chk == 3:
        name = input('이름 : ')
        try:
            with open('table.p', 'rb') as file:
                table = pickle.load(file)

            table = {key:value for key, value in table.items() if key != name}

            with open('table.p', 'wb') as file:
                pickle.dump(table, file)

        except FileNotFoundError as e:
            print('학생 정보가 없습니다.')
            
    # 수정
    elif chk == 4:
        name = input('이름 : ')
        try:
            with open('table.p', 'rb') as file:
                table = pickle.load(file)

            if {key:value for key, value in table.items() if key == name} != {}:
                score = dict(zip(['국어', '영어', '수학', '과학'], list(map(int, input('점수 : ').split()))))
                table.update({name : score})

                with open('table.p', 'wb') as file:
                    pickle.dump(table, file)

            else:
                print('해당 학생이 없습니다.')

        except FileNotFoundError as e:
            print('학생 정보가 없습니다.')
            
    # 출력
    elif chk == 5:
        try:
            with open('table.p', 'rb') as file:
                table = pickle.load(file)
                
            for name, score in table.items():
                print('이름 :',name, '국어 :', score.get('국어'), '영어 :', score.get('영어'),
                      '수학 :', score.get('수학'), '과학 :', score.get('과학'), '총점 : ', sum(score.values()),'평균 : ', sum(score.values())/len(score), sep=' ')

        except FileNotFoundError as e:
            print('학생 정보가 없습니다.')
            
    else:
        print('프로그램을 종료합니다.')
        break
반응형