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
댓글수0