Python
[Python] 파이썬 성적관리 프로그램(파일 사용)
다콩잉
2022. 9. 12. 22:08
파일을 이용한 성적관리 프로그램을 파이썬으로 구현해보았다.
DB2.txt
0.00MB
파일을 읽어오는 클래스
class Read:
def readFile(self):
st = []
with open('DB2.txt', 'r') as f:
line = f.readlines()
for li in line:
st.append(li.split())
return st
결과를 출력해주는 클래스
from read import *
class Disp:
def __init__(self):
self.read = Read()
def disp2(self, st, j):
print("학과: ", st[j][0], "\t", end='')
print("학번: ", st[j][1], "\t", end='')
print("이름: ", st[j][2], "\t", end='')
print("국어점수: ", st[j][3], "\t", end='')
print("영어점수: ", st[j][4], "\t", end='')
print("수학점수: ", st[j][5], "\t", end='')
print("총점: ", st[j][6], "\t", end='')
print("평균: ", st[j][7])
print()
def disp(self):
##########출력##########
st = self.read.readFile()
dic = {}
for i in range(len(st)):
dic[st[i][1]] = float(st[i][-1])
sorted_dict = sorted(dic.items(), key = lambda item: item[1], reverse = True)
for k,v in sorted_dict:
k = int(k)
j = 0
for j in range(len(sorted_dict)):
if k == int(st[j][1]):
self.disp2(st, j)
검색 클래스(이름, 학과, 과목별 점수)
from disp import *
class Search:
def __init__(self):
self.read = Read()
self.disp = Disp()
def searchName(self):
st = self.read.readFile()
searchName = input('검색하실 이름을 입력해주세요. ')
for i in range(len(st)):
if st[i][2] == searchName:
self.disp.disp2(st, i)
def searchDe(self):
st = self.read.readFile()
dep = input('검색하실 학과를 입력해주세요. ')
for i in range(len(st)):
if st[i][0] == dep:
self.disp.disp2(st, i)
def searchScore(self):
st = self.read.readFile()
sub = int(input('1.국어, 2.영어, 3.수학 '))
score = int(input('검색하실 점수를 입력해주세요. '))
for i in range(len(st)):
if int(st[i][sub+2]) >= score:
self.disp.disp2(st, i)
입력 및 수정, 삭제 클래스
from search import *
class Grade:
def __init__(self):
self.read = Read()
self.disp = Disp()
self.search = Search()
def input(self):
#########입력############
student = []
student.append((input('학과를 입력해주세요 ')+" "))
student.append((input('학번을 입력해주세요 ')+" "))
student.append((input('이름을 입력해주세요 ')+" "))
student.append((input('국어점수를 입력해주세요 ')+" "))
student.append((input('영어점수를 입력해주세요 ')+" "))
student.append((input('수학점수를 입력해주세요 ')+" "))
total = int(student[3])+int(student[4])+int(student[5])
student.append((str(total)+" "))
student.append((str(round((total/3), 2))+"\n"))
with open('DB2.txt', 'a+') as f:
f.writelines(student)
with open('DB2.txt', 'r') as f:
line = f.readlines()
for li in line:
print(li, end = '')
def repeat(self, student, line):
for i in range(0, 6): student.append(line[i] + " ")
total = int(line[3])+int(line[4])+int(line[5])
student.append((str(total)+" "))
student.append((str(round((total/3), 2))+"\n"))
return student
def update(self):
st = self.read.readFile()
id = int(input('수정하실 학생의 학번을 입력해주세요. '))
with open('DB2.txt', 'w') as f:
for line in st:
student = []
if int(line[1]) == id:
sub = int(input('수정하실 과목의 번호를 입력해주세요. 1.국어, 2.영어, 3.수학 '))
score = int(input('수정 점수를 입력해주세요. '))
line[sub+2] = str(score)
f.writelines(self.repeat(student, line))
def delete(self):
st = self.read.readFile()
id = int(input('삭제하실 학생의 학번을 입력해주세요. '))
with open('DB2.txt', 'w') as f:
for line in st:
student = []
if int(line[1]) != id:
f.writelines(self.repeat(student, line))
def main(self):
while 1:
x = int(input('1.입력, 2.출력, 3.검색, 4.수정, 5.삭제, 6.종료 '))
if x == 1:
self.input()
elif x == 2:
self.disp.disp()
elif x == 3:
y = int(input('1.학과 검색, 2.이름 검색, 3.성적 검색 '))
if y == 1: self.search.searchDe()
elif y == 2: self.search.searchName()
elif y == 3: self.search.searchScore()
elif x == 4: self.update()
elif x == 5: self.delete()
elif x == 6: break
grade = Grade()
grade.main()





728x90