본문 바로가기
파이썬

[파이썬]클래스 성적관리 프로그램

by jackypark 2022. 7. 29.

 

import pickle as p

class Student:
    
    def __init__(self,name,department,stuNum,kor,eng,math):
        self.__name=name
        self.__department=department
        self.__stuNum=stuNum
        self.__kor=kor
        self.__eng=eng
        self.__math=math
    
    def getName(self):
        return self.__name
    
    def getDepart(self):
        return self.__name
    
    def getStuNum(self):
        return self.__stuNum
    
    def getTotal(self):
        return self.__kor+self.__eng+self.__math
    
    def getAvg(self):
        return self.getTotal()/3
    
    def setKor(self,score):
        self.__kor=score
        
    def setEng(self,score):
        self.__eng=score
        
    def setMath(self,score):
        self.__math=score
    
    def __str__(self):
        return self.__name +"\t"+self.__department+"\t"+str(self.__stuNum)+"\t"+str(self.__kor)+"\t"+str(self.__eng)+"\t"+str(self.__math)+"\t"+str(self.getTotal())+"\t"+str(self.getAvg())
def ScoreStudent(): ## 학생정보를 성적순으로 정렬시켜서 출력시킬 함수
    rr=[]
    print('성적순 출력')
    e=readStudent()
    rr=sorted(e,key=lambda x:x.getTotal(),reverse=True)
    print("이름 \t 학과\t 학번 \t 국어\t 영어\t수학\t 총점\t평균\t")
    for i in range(len(rr)):            
            print(rr[i])
        
def searchInfo(): ## 학생 정보 검색 할 함수
    c=int(input("1. 이름검색 2. 학과검색 3. 성적검색"))
    e=readStudent()
    if c==1:
        name=input('검색하실 이름을 입력하시오..')
        for i in range(len(e)):
                if e[i].getName() == name:
                    print(e[i])
    elif c==2:
        depart=input('검색하실 학과을 입력하시오..')
        for i in range(len(e)):
                if e[i].getDepart() == depart:
                    print(e[i])
    elif c==3:
        c2=int(input('1.국어성적 2.영어성적 3.수학성적.'))
        if c2==1:
            score=int(input('국어성적 몇점이상 출력?'))
            rr=sorted(e,key=lambda x:x.getKor(),reverse=True)  
            for i in range(len(rr)):
                if rr[i].getKor() >= score:
                    print(rr[i])
        elif c2==2:
            score=int(input('영어성적 몇점이상 출력?'))
            rr=sorted(e,key=lambda x:x.getEng(),reverse=True)  
            for i in range(len(rr)):
                if rr[i].getEng() >= score:
                    print(rr[i])
        elif c2==3:
            score=int(input('수학성적 몇점이상 출력?'))
            rr=sorted(e,key=lambda x:x.getMath(),reverse=True)  
            for i in range(len(rr)):
                if rr[i].getMath() >= score:
                    print(rr[i])
def inputStudent():
    e=readStudent()
    
    
    print("추가할 학생정보 입력:")
    name=input('이름입력: ')
    department=input('학과 입력: ')
    
    while True:
        fflag=0
        
        studentNum=input('학번 입력: ')
        
        if e==None:
            break
        for i in range(len(e)):            
            if e[i].getStuNum()==studentNum:
                print('존재하는 학번입니다 다시 입력 바람')
                fflag=1
        if fflag==1:
            continue
        else:
            break    
    kor=int(input('국어 성적입력: '))
    eng=int(input('영어 성적입력: '))
    math=int(input('수학 성적입력: '))
    
    x=Student(name,department,studentNum,kor,eng,math)
    if e==None:
        with open('db1.txt','wb')as file:
            p.dump(x,file)
    else:
        with open('db1.txt','ab')as file:
            p.dump(x,file)
            
import os
def readStudent(): ## 학생정보를 읽어올 함수
    file_path="c:\\Users\\Jacky Park Jong Hyun\\pie3\\db1.txt"
    if(os.path.isfile(file_path)):
        with open('db1.txt','rb')as file:
            x=[]
            while True:
                try:  
                    data = p.load(file)
                except EOFError:
                    break
                x.append(data)
        return x
def modifyInfo():
    stuNum=input('수정할 학번을 입력하세요')
    e=readStudent()
    flag=0
    for i in range(len(e)):
        if e[i].getStuNum()==stuNum:
            print(e[i])
            flag=1
    if flag==0:
        return print('학번 존재하지않음')
    elif flag==1:
        num=int(input('1.국어성적변경 2. 영어성적변경 3. 수학 성적변경'))
        if num==1:
            score=int(input('국어 몇점으로 변경?'))
            e[i].setKor(score)
            changer(e)

        elif num==2:
            score=int(input('영어 몇점으로 변경?'))
            e[i].setEng(score)
            changer(e)

        elif num==3:
            score=int(input('수학 몇점으로 변경?'))
            e[i].setMath(score)
            changer(e)
            
    else:
        return print('잘못 입력')
def changer(ee):
    with open('db1.txt','wb')as file:
        for i in range(len(ee)):
            p.dump(ee[i],file)

def deleteInfo(): ## 학생 정보 삭제 할 함수
    stuNum=input('수정할 학번을 입력하세요')
    c=0
    e=readStudent()
    for i in range(len(e)):
        if e[i].getStuNum()==stuNum:
            print(e[i])
            c=int(input('정말로 이정보를 삭제 하시겠습니까? 1. 예 2.아니오'))
            del e[i]
            break
        
    
    if c==1:
        with open('db1.txt','wb')as file:
            for i in range(len(e)):
                p.dump(e[i],file)
    elif c==0:
        print('해당학번이 존재하지 않습니다')
    elif c==2:
        print('삭제를 취소하셧습니다')
while True: ## 메인으로 돌아갈 부분
    num=int(input("1. 입력 2. 출력 3. 검색 4. 수정 5. 삭제 0. 종료"))
    if num==1:
        inputStudent()
    elif num==2:
        ScoreStudent()
    elif num==3:
        searchInfo()
    elif num==4:
        modifyInfo()
    elif num==5:
        deleteInfo()
    elif num==0:
        break
    else:
        print('잘못입력하셧습니다')

댓글