-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstudents.py
More file actions
199 lines (152 loc) · 4.85 KB
/
students.py
File metadata and controls
199 lines (152 loc) · 4.85 KB
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# -*- coding: utf-8 -*-
import datetime
class Students:
""" Manage the student's credits
The "GradeManagement" class manage student's credits.
This class have functions add, delete, find, modify, print
, read, sort, quit, write files.
"""
def __init__(self, *args):
"""Creates a "Students"
Students class have properties which are index, id, name .. etc.
The average(mid, final term) and grade are automatically calculated.
Args:
*args: list, students information from datafile.
"""
if len(args) != 0:
data = args[0]
self._index = int(data[0])
self._id = data[1]
self._name = data[2]
self._birthday = data[3]
self._midterm = int(data[4])
self._finalterm = int(data[5])
self._mean = (self._midterm + self._finalterm)/2
# Calculate grade automately
self._grade = 'F' if self._mean <= 60 \
else 'S' if (95 <= self._mean) \
else 'A' if (90 <= self._mean) \
else 'B' if (80 <= self._mean) \
else 'C' if (70 <= self._mean) \
else 'D'
else:
self._index = 0
self._id = '0'
self._name = ''
self._birthday = ''
self._midterm = 0
self._finalterm = 0
self._mean = 0
self._grade = 'F'
def __str__(self):
"""String representation of an students class
return:
String, split char '\t'
"""
return u"{0} {1} {2}\t{3} {4} {5} {6} {7}".format(
str(self._index).ljust(8, " "), str(self._id).ljust(8, " "),
str(self._name).ljust(10, " "), str(self._birthday).ljust(12, " "),
str(self._midterm).ljust(8, " "), str(self._finalterm).ljust(8, " "),
str(self._mean).ljust(8, " "), str(self._grade).ljust(8, " "))
def __repr__(self):
"""String representation of an students class for save
return:
String, split char '\t'
"""
return u"{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}".format(
str(self._index), str(self._id),
str(self._name), str(self._birthday),
str(self._midterm), str(self._finalterm),
str(''), str(''))
def cal_mean_grade(self):
"""Calculate grade
"""
self._mean = (self._midterm + self._finalterm) / 2
self._grade = 'F' if self._mean <= 60 \
else 'S' if (95 <= self._mean) \
else 'A' if (90 <= self._mean) \
else 'B' if (80 <= self._mean) \
else 'C' if (70 <= self._mean) \
else 'D'
@property
def index(self):
""" Student index
return:
Ingeger
"""
return self._index
@index.setter
def index(self, value):
self._index = value
@property
def id(self):
""" Student id
return:
String
"""
return self._id
@property
def name(self):
""" Student name
return:
String
"""
return self._name
@property
def birthday(self):
""" Student birthday
return:
String, format YYYY-MM-DD
"""
return self._birthday
@property
def midterm(self):
""" Student midterm
return:
Ingeger
"""
return self._midterm
@midterm.setter
def midterm(self, value):
try:
self._midterm = int(value)
self.cal_mean_grade()
except ValueError as e:
raise ValueError(str(e)+" for {0} column ".format('midterm'))
@property
def finalterm(self):
""" Student final term
return:
Ingeger
"""
return self._finalterm
@finalterm.setter
def finalterm(self, value):
try:
self._finalterm = int(value)
self.cal_mean_grade()
except ValueError as e:
raise ValueError(str(e)+" for {0} column ".format('finalterm'))
@property
def mean(self):
""" Student average midterm and final term
return:
float
"""
return self._mean
@property
def grade(self):
""" Student grade base on average
return:
String
"""
return self._grade
@classmethod
def columns(cls):
"""Show columns infomation
return:
Dictionary, {column name : display flag, ...}
"""
# 입력 받아야 할 컬럼과 보여주는 컬럼을 설정함
return {"일련번호": False, "학생 id": True, "이름": True, "생년월일": True,
"중간고사": True, "기말고사": True, "평균": False, "Grade": False}