파일처리도 추가한 성적처리
- 보완할 부분 : 학생이라는 클래스를 따로 생성해서 해보기
import pickle #파일처리를 위한 모듈 임포트
# 학생관리 클래스 생성
class Score_management:
def __init__(self):
self.studentlist = [] # 학생정보들을 담을 리스트 초기화
def menu(self):
# 메뉴선택에 따라 맞는 함수들 호출
while 1:
num = int(input('1. 성적입력 2. 검색 3. 삭제 4. 파일저장 5. 수정 6. 파일불러오기 7. 종료 : '))
print('*' * 40)
if num == 1:
print('--학생 정보 입력')
self.insert()
elif num == 2:
print('--학생 검색')
self.search(int(input('1. 전체 2. 개인 : ')))
elif num == 3:
print('--삭제')
self.delete()
elif num == 4:
print('--파일저장')
self.studentsave()
elif num == 5:
print('--수정')
self.modify()
elif num == 6:
print('파일불러오기')
self.studentload()
elif num == 7:
break
else:
print('다시 입력')
# 학생 수, 개인 정보 입력
def insert(self):
for i in range(int(input('학생 수 입력 : '))):
student = input('이름 , 과목별 점수 입력 : ').split() # student[0] = 이름, student [ 1~] 입력된 점수
total = sum(list(map(int, student[1:]))) # 점수부분부터 자르기 위한 코드 총점을 구하기 위함
avg = total // len(student[1:])
student.extend([total, avg]) # 총점과 평균을 구한뒤 student객체 안에 리스트를 extend 해줌. (리스트가 벗겨지고 요소들만 들어감)
self.studentlist.append(student) # 입력완료된 객체를 리스트에 추가
print('-' * 40)
print('*' * 40)
# 학생 조회 (전체, 개인)
def search(self, num):
# 전체 조회
if num == 1:
for i in self.studentlist:
print(i, sep='\n')
# 개인 조회
elif num == 2:
name = input('조회할 이름 입력 : ')
for i in range(len(self.studentlist)):
if self.studentlist[i][0] == name:
print(self.studentlist[i])
# 학생 삭제
def delete(self):
while 1:
print('{:-^35}'.format('학생 목록'))
for i in range(len(self.studentlist)):
print('{} {}'.format(i, self.studentlist[i]), sep='\n')
print('-' * 40)
# 이름으로 삭제
# name = input('삭제할 학생이름 입력 : ')
# for i in self.studentlist:
# if name in i[0]:
# self.studentlist.remove(i)
# 번호로 삭제 (인덱스 번호)
num = input('삭제할 학생 번호 입력 [b : 뒤로가기] : ')
if num == 'b':
return -1
num = int(num)
try:
if self.studentlist[num] in self.studentlist:
self.studentlist.remove(self.studentlist[num])
except:
print('없는 번호입니다.')
return
# 학생 수정
def modify(self):
print('{:-^35}'.format('학생 목록'))
for i in range(len(self.studentlist)):
print('{} {}'.format(i, self.studentlist[i]), sep='\n')
print('-' * 40)
while 1:
num = input('수정할 학생 번호입력 [b : 뒤로가기] : ')
if num == 'b':
return -1
num = int(num)
try:
if self.studentlist[num] in self.studentlist:
print('{}'.format(self.studentlist[num]))
ch = self.studentlist[num].index(input('수정 값 선택 (배열 마지막 요소 두개는 수정 불가) : '))
self.studentlist[num][ch] = input('수정할 내용 입력 : ')
total = sum(list(map(int, self.studentlist[num][1:-2])))
avg = total // len(self.studentlist[num][1:-2])
self.studentlist[num][-2] = total
self.studentlist[num][-1] = avg
print('수정완료')
except:
print('없는 번호입니다.')
return
# 파일 저장
def studentsave(self):
print('저장할 파일 이름 입력.')
with open(input() + '.p', 'wb') as file:
pickle.dump(self.studentlist, file) # 리스트에 저장된 객체를 바이너리 파일로 저장
# 파일 불러오기
def studentload(self):
print('디렉토리에 저장된 파일 이름 입력')
try:
with open(input() + '.p', 'rb') as file:
self.studentlist = pickle.load(file) # 바이너리 파일을 다시 학생리스트에 초기화
except:
print('없는 파일입니다.')
a = Score_management()
a.menu()
반응형
'자바과정 > 파이썬' 카테고리의 다른 글
파이썬 정수 1000000까지 2진수, 10진수가 같은 회문의 정수 구하기 (0) | 2021.10.07 |
---|---|
파이썬 입력받은 문자열을 각 집합으로 추출하기 (0) | 2021.10.07 |
파이썬 성적처리 기초 (0) | 2021.04.25 |
파이썬 숫자야구게임 (0) | 2021.04.25 |
파이썬 구구단 (0) | 2021.04.25 |
댓글