windows 에 sqlite3 를 설치해서 이를 dictionary 에 담아 성적을 관리하는 시스템입니다.
주현님의 블로그(아래 링크있음) 의 "Python - 학생 성적 처리프로그램" 에서 sqlite3 를 적용시킨 것 말곤 수정한 내용은 없습니다. sqlite 를 적용한 이유는 종료하게 되면 저장했던 내용들이 없어져서 이를 보관하는 방법 중 txt 파일 또는 db 인데, 무료인 sqlite 경량 database 를 적용해 봤습니다.
import sqlite3
db=sqlite3.connect('students.db')
#sqlite3 students.db
#create table student(name text, korean int, english int, math int, score int, avg real);
# ----- 성적 입력 -----
def Insert(student):
name = input('이름 입력 : ')
#이름이 딕셔너리 내에 없을경우,
if (name not in student) == True:
#성적 입력
kor = int(input('국어 성적을 입력하세요 : '))
eng = int(input('영어 성적을 입력하세요 : '))
math = int(input('수학 성적을 입력하세요 : '))
print('성적이 입력되었습니다.')
score = kor+eng+math
avg = round(score/3, 3)
qry="insert into student (name, korean, english, math, score, avg) values(?,?,?,?,?,?);"
try:
cur=db.cursor()
cur.execute(qry, (name, kor, eng, math, score, avg))
db.commit()
print ("one record added successfully")
except:
print("error in operation")
db.rollback()
db.close()
#이름이 중복일 경우
else:
print('학생이 존재합니다.')
return Insert(student)
#딕셔너리 Key = Value
student[name] = [kor, eng, math, score, avg]
person = student[name]
return student
# ----- 성적 출력 -----
def View(student):
print("=======================================================")
print('점수 : [국, 영, 수, 총점, 평균]')
# 딕셔너리 key, value 출력하기(item)
for key, value in student.items():
print(key,':', value)
print("=======================================================")
return student
# ----- 학생 검색 -----
def Search(student):
search_name = input('검색할 학생의 이름을 입력해주세요 : ')
# 검색한 이름이 딕셔너리내의 Key값과 일치하는 경우
if(search_name in student) == True:
print("=======================================================")
print('점수 : [국, 영, 수, 총점, 평균]')
print(search_name,':' , student.get(search_name),' ') # 딕셔너리에서 키의 값을 가져옴 => dic.get(key)
print("=======================================================")
else:
print('해당 이름이 없습니다.')
print('다시 검색하시려면 1번, 메인 화면으로 돌아가시려면 2번을 눌러주세요.')
num = int(input('번호 입력 : '))
if num ==1:
Search(student)
else:
main()
return student
# ----- 성적 수정 -----
def Update(student):
update_name = input('수정할 학생의 이름을 입력해주세요 : ')
# 검색한 이름이 딕셔너리내의 Key값과 일치하는 경우
if(update_name in student) == True:
print('국어 영어 수학 성적 입력 :')
#국, 영, 수 성적 입력(덮어씀)
kor, eng, math = map(int, input().split())
score = kor+eng+math
avg = round(score/3, 3)
#딕셔너리내의 Key = Value
student[update_name] = [kor, eng, math, score, avg]
person = student[update_name]
#name, korean, english, math, score, avg
qry="update student set korean=?,english=?,math=?,score=?,avg=? where name=?;"
try:
cur=db.cursor()
cur.execute(qry, (kor, eng, math, score, avg, update_name))
db.commit()
print("record updated successfully")
except:
print("error in operation")
db.rollback()
db.close()
else:
print('해당 이름이 없습니다.')
print('수정할 학생의 이름을 다시 입력하시려면 1번, 메인 화면으로 돌아가시려면 2번을 눌러주세요.')
num = int(input('번호 입력 : '))
if num ==1:
Update(student)
else:
main()
return student
# ----- 학생 삭제 -----
def Delete(student):
delete_name = input('삭제할 학생의 이름을 입력해주세요 : ')
# pop(키) - 특정 키-값 쌍을 삭제
if(delete_name in student) == True:
student.pop(delete_name)
qry="DELETE from student where name=?;"
try:
cur=db.cursor()
cur.execute(qry, (delete_name,))
db.commit()
print("record deleted successfully")
except:
print("error in operation")
db.rollback()
db.close()
return student
def main():
#student 딕셔너리 생성
student = dict()
sql="SELECT * from student;"
cur=db.cursor()
cur.execute(sql)
students=cur.fetchall()
for rec in students:
student[rec[0]] = [rec[1], rec[2], rec[3], rec[4], rec[5]]
person = student[rec[0]]
print()
print("┌--------------------------------------------------------------------------------┐");
print("│ │");
print("│ 성적 관리 프로그램 │");
print("│ Created By Lee Ju-Hyun on 2019.07.30 │");
print("└--------------------------------------------------------------------------------┘\n");
print()
while True:
select = int(input("1.입력 2.출력 3.검색 4.수정 5.삭제 6.종료 \n"))
# ----- 성적 입력 -----
if select == 1:
student = Insert(student)
# ----- 성적 출력 -----
elif select ==2:
student = View(student)
# ----- 학생 검색 -----
elif select == 3:
student = Search(student)
# ----- 학생 수정 -----
elif select == 4:
student = Update(student)
# ----- 학생 삭제 -----
elif select == 5:
student = Delete(student)
else:
print("종료되었습니다.")
db.close()
break
main()