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

2022. 7. 28. 20:20·Python

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. 종료 ( 파일에 저장 )

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

 

 


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

 

'Python' 카테고리의 다른 글

[Python] VSCode에서 주피터노트북 실행하기 (가상환경, conda커널 설정 방법)  (0) 2023.04.24
[Python] 파이썬 기후 데이터 시각화하기 (Indian Summers, plt, 선 차트, 막대 차트, 파이 차트)  (4) 2023.04.17
[Python] 파이썬 지뢰찾기 구현 (2차원 리스트)  (3) 2022.07.27
[Python] 로또 당첨번호 (별찍기 예제)  (0) 2022.07.26
[Python] 파이썬 별찍기 for, while문  (0) 2022.07.26
'Python' 카테고리의 다른 글
  • [Python] VSCode에서 주피터노트북 실행하기 (가상환경, conda커널 설정 방법)
  • [Python] 파이썬 기후 데이터 시각화하기 (Indian Summers, plt, 선 차트, 막대 차트, 파이 차트)
  • [Python] 파이썬 지뢰찾기 구현 (2차원 리스트)
  • [Python] 로또 당첨번호 (별찍기 예제)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    서블릿
    DI
    오블완
    react-native-chart-kit
    파이썬
    next-intl
    오라클
    REST API
    React Native
    그리디
    Express
    자바
    리액트 네이티브
    Java
    스택
    JSP
    자바스크립트
    자바 스프링
    티스토리챌린지
    쓰레드
    상속
    IS-A
    Spring
    Python
    JDBC
    react
    React Native Chart
    포스트맨
    큐
    node.js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Python] 학생 성적관리 프로그램 (파일 사용)
상단으로

티스토리툴바