Python

[Python] 학생 성적관리 프로그램 (파일 사용)

현기 2022. 7. 28. 20:20

1. 프로그램 실행 시 파일의 내용을 all_std 리스트에 불러온다.

 

2. (1. 입력 2.출력 3.검색 4.수정 5.삭제 6.종료) 를 진행한다. 

 

3. 프로그램 종료 시 all_std의 내용을 파일에 저장한다. (덮어쓰기)

 

import pickle
import sys

all_std = []

#파일 전체 내용 로드 함수
def pickleLoadAll():
    with open('DB.p', 'rb') as file:
        while True:
            try:  
                data = pickle.load(file)
            except EOFError:
                break
            all_std.append(data)
        
#실행시 파일 내용 불러옴
pickleLoadAll()
print("DB :",all_std)

#메인
while(True):
    print('-'*42)
    print('1.입력 2.출력 3.검색 4.수정 5.삭제 6.종료 :')
    print('-'*42)
    menu = int(input())
    
    if(menu not in [1,2,3,4,5,6]):
        print("잘못 입력하셨습니다.")
        continue
    
    # 1. 입력
    if menu == 1:
        std = []
        print("------학생 등록------")
        stdNum = input("학번 입력:")
        
        #중복된 학번 확인
        flag = True
        for i in all_std:
            if i[0] == stdNum:
                flag = False
        if flag:
            std.append(stdNum)
        else:
            print("중복된 학번입니다. 다시 입력해주세요.")
            continue
        
        std.append(input("학과 입력:"))
        std.append(input("이름 입력:"))
        std.append(int(input("국어점수 입력:")))
        std.append(int(input("수학점수 입력:")))
        std.append(int(input("영어점수 입력:")))
        std.append(sum(std[3:6]))#총점
        std.append(round(std[6]/3,2))#평균
        all_std.append(std)
        
    # 2. 출력
    if menu == 2:
        user_input = int(input("1. 전체출력 2. 학과출력 :"))
        #전체출력
        if user_input == 1:
            for i in all_std:
                print(i)
        #학과출력
        elif user_input == 2:
            user_input = input("학과입력 :")
            for i in all_std:
                if(i[1] == user_input):
                    print(i)
                
        else:
            print("잘못된 입력입니다.")
            
    # 3. 검색
    if menu == 3:
        user_input = int(input("1. 이름검색 2. 학과검색 3. 성적검색 :"))
        # 1.이름검색
        if user_input == 1:
            searchName = input("검색할 이름 입력 : ")
            for i in all_std:
                if i[2] == searchName:
                    print(i)
                    
        # 2.학과검색
        if user_input == 2:
            searchDept = input("검색할 학과 입력 : ")
            for i in all_std:
                if i[1] == searchDept:
                    print(i)
        
        # 3.성적검색
        if user_input == 3:
            searchScore = int(input("1.국어 2.영어 3.수학"))
            scoreCut = int(input("몇 점 이상? : "))
            if searchScore == 1:
                #정렬 lambda
                print("--------국어점수",scoreCut,"점 이상---------")
                for i in sorted(all_std, key = lambda x: -x[3]):
                    if i[3]>=scoreCut:
                        print(i)
                        
            elif searchScore == 2:
                print("--------영어점수",scoreCut,"점 이상---------")
                for i in sorted(all_std, key = lambda x: -x[4]):
                    if i[4]>=scoreCut:
                        print(i)
                        
            elif searchScore == 3:
                print("--------수학점수",scoreCut,"점 이상---------")
                for i in sorted(all_std, key = lambda x: -x[5]):
                    if i[5]>=scoreCut:
                        print(i)
            else:
                print("잘못된 입력입니다.")
                
    # 4. 수정
    if menu == 4:
        stdNum = input("수정할 학번 입력 : ")
        for i in all_std:
            if i[0] == stdNum:
                a,b,c = map(int,input("수정할 국어, 영어, 수학 점수 입력(공백구분) : ").split())
                i[3] = a
                i[4] = b
                i[5] = c
                i[6] = a+b+c
                i[7] = round((a+b+c)/3,2)
                print("수정을 완료했습니다.")
            
    # 5. 삭제
    if menu == 5:
        delStdNum = input("삭제할 학번 입력 : ")
        for i in all_std:
            if i[0] == delStdNum:
                print(i[2],"학생을 삭제합니다.")
                all_std.remove(i)
        
    # 6. 종료
    if menu == 6:
        #종료시 파일 저장(덮어쓰기)
        with open('DB.p','wb') as file:
            for i in all_std:
                pickle.dump(i, file)
        print("저장완료")
        print("프로그램을 종료합니다.")
        sys.exit()

⦁ 실행 시 파일안에 있는 학생 출력

1. 학생등록 : all_std 배열에  append

 

*학번 중복시 continue

2. 출력

 

 

 

3. 검색

-이름검색

 

-학과검색

 

-성적검색 ( 일정 점수 이상 내림차순 정렬 )

4. 수정

5. 삭제

6. 종료 ( 파일에 저장 )

다시 실행 시 파일을 불러온다.

 

 


참고 문헌 : 파이썬 코딩도장