# 1.입력 (누를때마다 한명씩 입력)
# 2.출력 1.전체출력 2.반출력 (성적순)
# 3.검색 1.이름검색 2.성적검색 (성적이 90점 이상인사람하면 모두출력)
# # 4.삭제
# 5.수정
# 6.종료 System.exit
from cgitb import text
import os
import pickle
db={}
_text ='score.txt'
#파일 불러오기
with open(_text,'rb') as file:
try:
db = pickle.load(file)
except:
db={}
#새로운 학생 입력
def student():
try:
stuNum = int(input('학번:'))
name = input('이름:')
kor=int(input('국어:'))
eng=int(input('영어: '))
mat=int(input('수학: '))
except:
print('잘못입력하였습니다.')
total = kor+eng+mat
avg=total/3
db.setdefault(student,{'이름':name,'국어':kor,'영어':eng,'수학':mat,'총점':total,'평균':round(avg,2)})
#학번을 입려받아 그 학번 데이터를 삭제
def delete(stuNum):
if a in db:
db.pop(a)
with open(_text,'wb') as file:
pickle.dump(db,file)
else:
print('없는 사람입니다.')
#점수 검색
def subSearch(subject):
a = int(input('1.이상 2.이하'))
flag = int(input('기준 점수:'))
print('학번','이름','국어','영어','수학','총점','평균',sep='\t')
for i in db.keys():
if(a ==1 and db[i][subject] >= flag ):
print(i,db[i]['이름'],db[i]['국어'],db[i]['영어'],db[i]['수학'],db[i]['총점'],db[i]['평균'],sep='\t')
elif (a == 2 and db[i][subject] <= flag):
print(i,db[i]['이름'],db[i]['국어'],db[i]['영어'],db[i]['수학'],db[i]['총점'],db[i]['평균'],sep='\t')
#이름 검색
def nameSearch(name):
for i in db.keys():
if db[i]['이름'] == name:
print('학번','이름','국어','영어','수학','총점','평균',sep='\t')
print(i,db[i]['이름'],db[i]['국어'],db[i]['영어'],db[i]['수학'],db[i]['총점'],db[i]['평균'],sep='\t')
#정렬된 데이터를 리턴
def isort(subject):
return dict(sorted(db.items(),key = lambda score:score[1][subject]))
def printData(datas):
korlist = sorted([db[i]['국어'] for i in db])
englist = sorted([db[i]['영어'] for i in db])
matlist = sorted([db[i]['수학'] for i in db])
print('학번','이름','국어\t','영어\t','수학\t','총점','평균',sep='\t')
for i in datas:
korgrade = setGrade(korlist.index(datas[i]['국어']),len(korlist))
enggrade = setGrade(englist.index(datas[i]['영어']),len(englist))
matgrade = setGrade(matlist.index(datas[i]['수학']),len(matlist))
print(i,datas[i]['이름'],str(datas[i]['국어'])+'('+str(korgrade)+'등급)',str(datas[i]['영어'])+'('+str(enggrade)+'등급)',str(datas[i]['수학'])+'('+str(matgrade)+'등급)',datas[i]['총점'],datas[i]['평균'], sep='\t')
# 학생수 및 등수를 입력받아 등급을 리턴
def setGrade(rank,n):
per = (rank+1)/n
if per <= 0.04:
return 9
elif per <= 0.11:
return 8
elif per <= 0.23:
return 7
elif per <= 0.4:
return 6
elif per <= 0.6:
return 5
elif per <= 0.77:
return 4
elif per <= 0.89:
return 3
elif per <= 0.96:
return 2
else:
return 1
#수정
# def stuupdate(stuNum):
# for i in db.keys():
# if db[i]['학번'] == stuNum:
# db[i][]
while True:
print('성적관리프로그램')
print('1.입력 2.출력 3.검색 4.삭제 5.수정 6.종료')
a = int(input())
if a == 1:
student()
with open(_text,'wb') as file:
pickle.dump(db,file)
elif a == 2:#출력
print('1.전체출력 2.국어성적순 3.영어성적순 4.수학성적순 5.평균순 : ')
q = int(input())
if q==1:
#1 전체출력
print(db)
elif a == 2:
printData(isort('국어'))
elif a == 3:
printData(isort('영어'))
elif a == 4:
printData(isort('수학'))
elif a == 5:
printData(isort('평균'))
else:
print('잘못된 입력입니다')
elif a == 3:#검색-정렬
a= int(input('무엇으로 검색하겠습니까 \n 1.학번 2.이름 3.성적 :'))
if a==1:#학번
a = input('학번 : ')
stuInfo = db[a]
print('학번','이름','국어','영어','수학','총점','평균',sep='\t')
print(a,stuInfo['이름'],stuInfo['국어'],stuInfo['영어'],stuInfo['수학'],stuInfo['총점'],stuInfo['평균'],sep='\t')
elif 2:
a= input('이름: ')
nameSearch(a)
elif a==3:#성적
subject = input('과목 : ')
subSearch(subject)
else:
print('잘못입력하였습니다')
elif a == 4:#삭제-delete
a = int(input('삭제할 학번:'))
delete(a)
elif a == 5:#수정-update
stuNum=input('수정할 학번 입력:')
elif a == 6:
print('프로그램 종료')
break
else:print('잘못된 입력입니다')