본문 바로가기
python

[python] 성적 처리하기2 - by class

by 바디스 2020. 7. 22.

성적처리프로그램 class로 만들기

 

성저처리1과 기능은 같다. 

class형태로 만들고 데이터를 pickle로 저장하고 불러온다.

 

기능

1 입력 : 이름 국어성적 영어성적 수학성적을 입력(총점과 평균은 계산해서 입력됨)

2 전체출력 : 모든 데이터 출력

3 이름 검색 : 이름을 입력해서 같은 이름인 사람의 점수 출력

4 평균 검색 : 점수를 입력해서 평균점수가 입력받은 점수보다 높은 사람 출력

5 수정 : 이름을 입력받으면 해당 이름과 같은 사람의 국어, 영어, 수학의 점수를 다시 입력받는다.

6 삭제 : 이름을 입력받아 같은 사람의 데이터를 삭제

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import pickle
 
class Student:
    def __init__(self,name,kor,eng,mat):
        self.name = name
        self.kor = kor
        self.eng = eng
        self.mat = mat
        self.total = kor+eng+mat
        self.avg = self.total/3
    def student_print(self):
        print(self.name,"\t",self.kor,"\t",self.eng,"\t",self.mat,"\t",self.total,"\t%.3f"%self.avg);
 
 
    def student_name(self):
        return self.name
    def student_avg(self):
        return self.avg
 
    def __lt__(self, other):
        return self.avg > other.avg
 
    def student_reply(self,kor,eng,mat):  
        self.kor = kor
        self.eng = eng
        self.mat = mat
        self.total = kor+eng+mat
        self.avg = self.total/3
 
 
class File_IO:
    def __init__(self,data):
        self.student_list = []
        self.data=data
 
    def file_read(self):
        try:
            with open(self.data,"rb"as file:
                while(True):
                    try:
                        self.student_list=pickle.load(file)
                    except EOFError:
                        break
        except FileNotFoundError:
            pass
    
    def file_write(self):
        with open(self.data,"wb"as file:
            pickle.dump(self.student_list,file)
 
 
class Function(File_IO):
    def input_info(self):
        name = input("이름:")
        korea = int(input("국어:"))
        english = int(input("영어:"))
        math = int(input("수학:"))
        tmp_student = Student(name,korea,english,math)
        
        super().file_read()
        self.student_list.append(tmp_student)
        super().file_write()
        
    def print_all(self):
        super().file_read()
        print("이름\t국어\t영어\t수학\t총점\t평균")
        for i in self.student_list:
            i.student_print()
            
    def search_name(self):
        name = input("이름:")
        super().file_read()
        print("이름\t국어\t영어\t수학\t총점\t평균")
        for i in self.student_list:
            if i.student_name() == name:
                i.student_print()
                
    def search_avg(self):
        avg = float(input("점수:"))
        super().file_read()
        print("이름\t국어\t영어\t수학\t총점\t평균")
        sorted_mylist = sorted(self.student_list)
        for i in sorted_mylist:
            if i.student_avg() >=avg:
                i.student_print()
 
    def insert(self):
        name = input("이름:")
        num=-1
        super().file_read()
        for i in range(len(self.student_list)):
            if self.student_list[i].student_name() == name:
                num = i
                break;
        if(num!=-1):
            korea = int(input("국어:"))
            english = int(input("영어:"))
            math = int(input("수학:"))
            self.student_list[i].student_reply(korea,english,math)
        super().file_write()
        
    def delete(self):
        name = input("이름:")
        num=-1
        super().file_read()
        for i in range(len(self.student_list)):
            if self.student_list[i].student_name() == name:
                num = i
                break;
        if(num!=-1):
            del self.student_list[i]
        super().file_write()
 
def main():
    score_list = Function("test.txt")
    while(True):
        num = int(input("기능선택(1.입력 2.전체출력 3.이름검색 4.평균검색 5.수정 6.삭제 (0.끝))"))
        if num==0:
            break
        elif num==1:
            score_list.input_info()
        elif num==2:
            score_list.print_all()
        elif num==3:
            score_list.search_name()
        elif num==4:
            score_list.search_avg()
        elif num==5:
            score_list.insert()
        elif num==6:
            score_list.delete()
 
 
main()
            
 
cs

 

댓글