import pickle
import os
import copy
dataList = None
dpSize = os.path.getsize('db.p')
if dpSize != 0:
with open('db.p', 'rb') as file:
dataList = pickle.load(file)
def insertinfo(): # 학생정보 입력 메서드
category = ['학과', '이름', '국어', '영어', '수학', '총점', '평균']
data = input('학번, 학과, 이름, 국어 점수, 영어 점수, 수학 점수를 입력하시오 : ').split()
std_id = data[0] # 학번
del data[0]
data.append(int(data[2]) + int(data[3]) + int(data[4]))
data.append(int(data[5]) // 3)
dataDict = dict(zip(category, data))
if std_id not in dataList:
dataList.setdefault(std_id, dataDict)
def dispALLInfo(): # 학생 전체 출력
for key, value in dataList.items():
print(key, end=' ===> ')
for key, value in value.items():
print(key, end=' = ')
print(value, end=' ')
print()
def dispInfo(std_id): # 학생 한명 출력
print(std_id, end=' ===> ')
for key, value in dataList.get(std_id).items():
print(key, end=' = ')
print(value, end=' ')
print()
def dispInfoTp(*temp): # sorted 반환값 전용 출력 함수
for i in temp:
x, y = i
dispInfo(x)
def deleteInfo(a): # 사번으로 삭제
del dataList[a]
print('삭제 후 결과\n')
dispALLInfo()
def dbDump(): # DB 저장
with open('db.p', 'wb') as file:
pickle.dump(dataList, file)
def searchInfo(): # 학생 검색
searchChoice = input('검색 유형을 선택하시오 => 1. 학번 2. 이름 3. 학과 : ')
if searchChoice == '1':
std_id = input('검색할 학생의 학번을 입력하시오 : ')
dispInfo(std_id)
elif searchChoice == '2':
std_name = input('검색할 학생의 이름을 입력하시오 : ')
for key, value in dataList.items():
if value.get('이름') == std_name:
dispInfo(key)
elif searchChoice == '3':
std_depart = input('검색할 학생의 학과를 입력하시오 : ')
for key, value in dataList.items():
if value.get('학과') == std_depart:
dispInfo(key)
def modifyInfo():
std_id = input('정보수정할 학생의 학번을 입력하시오 : ')
dispInfo(std_id)
ch, value = input('\n수정할 항목과 값을 입력하시오(총점, 평균 제외) : ').split()
dataList[std_id].update({ch: value})
if ch == '국어' or '수학' or '영어':
dataList[std_id].update(
총점=(int(dataList[std_id].get('국어')) + int(dataList[std_id].get('영어')) + int(dataList[std_id].get('수학'))))
dataList[std_id].update(평균=int(dataList[std_id].get('총점')) // 3)
while True:
print()
userChoic = input('1.입력 2.출력 3.검색 4.삭제 5.수정 6.종료 ==> ')
if userChoic == '1':
insertinfo()
elif userChoic == '2':
opt2 = input('1. 등록순 2. 총점순 3. 이름순 : ')
if opt2 == '1':
dispALLInfo()
elif opt2 == '2':
temp = copy.deepcopy(dataList)
temp = sorted(temp.items(), key=lambda x: x[1].get('총점'), reverse=True)
dispInfoTp(*temp)
elif opt2 == '3':
temp = copy.deepcopy(dataList)
temp = sorted(temp.items(), key=lambda x: x[1].get('이름'), reverse=False)
dispInfoTp(*temp)
elif userChoic == '3':
searchInfo()
elif userChoic == '4':
deleteInfo(input('삭제할 값을 입력하시오 ==> '))
elif userChoic == '5':
modifyInfo()
elif userChoic == '6':
dbDump()
exit()
else:
print('형식에 맞게 입력하세요')