ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 파이썬 성적관리 프로그램(파일 사용)
    Python 2022. 9. 12. 22:08

    파일을 이용한 성적관리 프로그램을 파이썬으로 구현해보았다.

     

    DB2.txt
    0.00MB

     

    파일을 읽어오는 클래스

    class Read:
        def readFile(self):
            st = []
            with open('DB2.txt', 'r') as f:
                line = f.readlines()
                for li in line:
                    st.append(li.split())
            return st

     

    결과를 출력해주는 클래스

    from read import *
    class Disp:
        def __init__(self):
            self.read = Read()
    
        def disp2(self, st, j):
            print("학과: ", st[j][0], "\t", end='')
            print("학번: ", st[j][1], "\t", end='')
            print("이름: ", st[j][2], "\t", end='')
            print("국어점수: ", st[j][3], "\t", end='')
            print("영어점수: ", st[j][4], "\t", end='')
            print("수학점수: ", st[j][5], "\t", end='')
            print("총점: ", st[j][6], "\t", end='')
            print("평균: ", st[j][7])
            print()
    
        def disp(self):
            ##########출력##########
            st = self.read.readFile()
            dic = {}
            for i in range(len(st)):
                dic[st[i][1]] = float(st[i][-1])
            sorted_dict = sorted(dic.items(), key = lambda item: item[1], reverse = True)
            for k,v in sorted_dict:
                k = int(k)
                j = 0
                for j in range(len(sorted_dict)):
                    if k == int(st[j][1]):
                        self.disp2(st, j)

     

    검색 클래스(이름, 학과, 과목별 점수)

    from disp import *
    class Search:
        def __init__(self):
            self.read = Read()
            self.disp = Disp()
    
        def searchName(self):
            st = self.read.readFile()
            searchName = input('검색하실 이름을 입력해주세요.       ')
            for i in range(len(st)):
                if st[i][2] == searchName:
                    self.disp.disp2(st, i)
    
        def searchDe(self):
            st = self.read.readFile()
            dep = input('검색하실 학과를 입력해주세요.      ')
            for i in range(len(st)):
                if st[i][0] == dep:
                    self.disp.disp2(st, i)
    
        def searchScore(self):
            st = self.read.readFile()
            sub = int(input('1.국어,  2.영어,  3.수학       '))
            score = int(input('검색하실 점수를 입력해주세요.        '))
            for i in range(len(st)):
                if int(st[i][sub+2]) >= score:
                    self.disp.disp2(st, i)

     

    입력 및 수정, 삭제 클래스

    from search import *
    
    class Grade:
        def __init__(self):
            self.read = Read()
            self.disp = Disp()
            self.search = Search()
    
        def input(self):
            #########입력############
            student = []
            student.append((input('학과를 입력해주세요    ')+" "))
            student.append((input('학번을 입력해주세요    ')+" "))
            student.append((input('이름을 입력해주세요  ')+" "))
            student.append((input('국어점수를 입력해주세요    ')+" "))
            student.append((input('영어점수를 입력해주세요   ')+" "))
            student.append((input('수학점수를 입력해주세요   ')+" "))
            total = int(student[3])+int(student[4])+int(student[5])
            student.append((str(total)+" "))
            student.append((str(round((total/3), 2))+"\n"))
            with open('DB2.txt', 'a+') as f:
                f.writelines(student)
                with open('DB2.txt', 'r') as f:
                    line = f.readlines()
                    for li in line:
                        print(li, end = '')
        
        def repeat(self, student, line):
            for i in range(0, 6): student.append(line[i] + " ")
            total = int(line[3])+int(line[4])+int(line[5])
            student.append((str(total)+" "))
            student.append((str(round((total/3), 2))+"\n"))
            return student
            
        def update(self):
            st = self.read.readFile()
            id = int(input('수정하실 학생의 학번을 입력해주세요.        '))
            with open('DB2.txt', 'w') as f:
                for line in st:
                    student = []
                    if int(line[1]) == id:
                        sub = int(input('수정하실 과목의 번호를 입력해주세요. 1.국어,  2.영어,  3.수학       '))
                        score = int(input('수정 점수를 입력해주세요.        '))
                        line[sub+2] = str(score)
                    f.writelines(self.repeat(student, line))
        
        def delete(self):
            st = self.read.readFile()
            id = int(input('삭제하실 학생의 학번을 입력해주세요.        '))
            with open('DB2.txt', 'w') as f:
                for line in st:
                    student = []
                    if int(line[1]) != id:
                        f.writelines(self.repeat(student, line))
    
        def main(self):
            while 1:
                x = int(input('1.입력,  2.출력,  3.검색,  4.수정,  5.삭제,  6.종료      '))
                if x == 1: 
                    self.input()
                elif x == 2: 
                    self.disp.disp()
                elif x == 3:
                    y = int(input('1.학과 검색,  2.이름 검색,  3.성적 검색      '))
                    if y == 1: self.search.searchDe()
                    elif y == 2: self.search.searchName()
                    elif y == 3: self.search.searchScore()
                elif x == 4: self.update()
                elif x == 5: self.delete()
                elif x == 6: break
    
    grade = Grade()
    grade.main()

     

     

    입력
    출력
    검색
    수정
    삭제

    728x90

    'Python' 카테고리의 다른 글

    [Python] Selenium 크롤링  (0) 2023.06.28
    [Python] 파이썬으로 로또 프로그램 만들기  (0) 2022.09.12
Designed by Tistory.