재우니의 블로그

파이썬 - 학생 성적 처리프로그램(Sqlite3 적용)

 

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()

 

 

참고사이트

 

 

https://www.sqlite.org/datatype3.html

 

Datatypes In SQLite Version 3

INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.

www.sqlite.org

https://www.tutorialsteacher.com/python/database-crud-operation-in-python

 

Database CRUD Operation in Python

Database CRUD Operations in Python In this tutorial we shall learn how to interface the Python program with an SQLite database. Python has built-in support for SQLite in the form of the sqlite3 module. This module contains functions for performing persiste

www.tutorialsteacher.com

https://m.blog.naver.com/zzang9ha/221599615848

 

[Python] 성적 처리 프로그램

Python - 학생 성적 처리프로그램기능 ● 성적 입력 ● 성적 출력 ● 학생 성적 검색 ● 학생 성적 수정 ...

blog.naver.com