使用 python 與 sqlite3 實現簡易的學生信息管理系統


使用 python 與 sqlite3 實現簡易的學生信息管理系統

需求分析

一個簡單的學生信息管理系統,應該包括如下功能

  1. 可以對學生信息進行增刪改查
    • 添加學生信息(增)
    • 刪除學生信息(刪)
    • 修改學生信息(改)
    • 查詢學生信息(查)
  2. 退出管理系統,要保存數據,方便下次登錄時,仍然能查看之前添加或修改的數據

設計思路

先設計一個數據表,以方便存儲數據。我們簡單設計一個數據表如下

Id Class Student_name Birthday
20180103 18計科1班 小秦 1999-06-01
20190405 19軟工2班 小路 2000-07-04
20200611 20管理3班 小明 2001-12-11

對應的創建數據表的 SQL 語句如下

CREATE TABLE IF NOT EXISTS students (
	(Id INT(12) PRIMARY KEY NOT NULL,
     Class VARCHAR(25) NOT NULL,
     Student_name VARCHAR(10) NOT NULL,
     Birthday DATE NOT NULL)

根據之前的需求分析,我們不妨使用面向對象編程,目前我們可以大概寫一下代碼的結構——

class StudentManageSystem(object):
	
    def __init__(self):
	pass
		
    def read_all_student(self):
	'''查看全部學生信息'''
	pass
		
    def read_student(self):
	'''查看指定學生信息'''
	pass

    def add_student(self):
        '''添加學生信息'''
        pass
		
    def update_student(self):
	'''更新學生信息'''
	pass
	
    def delete_student(self):
	'''刪除學生信息'''
	pass

具體代碼實現

管理系統的初始化設置

初始化內容應該包含——

  • 對數據庫 sqlite3 的連接
  • 可以直接操作數據庫的變量(在 sqlite3 中,直接操作數據的是 cursor())
  • 判斷數據表是否存在,如果沒有就需要創建數據表
class StudentManagerSystem(object):

    def __init__(self):
    	# 連接數據庫 student_info.db, 如果不存在就創建
        self.conn = sqlite3.connect('student_info.db')
        # 定義操作數據庫的 cursor()
        self.cursor = self.conn.cursor()
        # 判斷數據表是否存在,如果不存在就創建
        self.cursor.execute('''CREATE TABLE IF NOT EXISTS students
                (Id INT(12) PRIMARY KEY NOT NULL,
                Class VARCHAR(25) NOT NULL,
                Student_name VARCHAR(10) NOT NULL,
                Birthday DATE NOT NULL)''')

查看全部學生信息

def read_all_student(self) -> List[tuple]:
    self.cursor.execute('SELECT * FROM students')
    student_list = self.cursor.fetchall()
    if not student_list:
        print('目前系統中沒有存有任何信息!')
        print('\n')
        return student_list

    print('學號\t\t姓名\t\t年齡\t\t住址')
    for student in student_list:
        print(student)
    print('\n')

    return student_list

查看指定學生的信息

def read_student(self) -> None:
    number = input('請輸入要查詢學生的學號: ')

    self.cursor.execute(
        'SELECT * FROM students where id=?', (number,))
    result = self.cursor.fetchall()
    if not result:
        print('所查詢學號不存在!')
        print('\n')
        return
    print('查詢結果如下:')
    print(result)
    print('\n')

添加學生信息

def add_student(self) -> None:
    number = input('請輸入學生的學號: ')

    while True:
        if self._is_in_database(number):
            print('該學號已存在!')
            number = input('請重新輸入學號: ')
        else:
            break

    _class = input('請輸入班級: ')
    name = input('請輸入學生的姓名: ')
    birthday = input('請輸入學生的生日(格式 yy-mm-dd): ')

    self.cursor.execute(
        'INSERT INTO students VALUES (?, ?, ?, ?)',
        (number, _class, name, birthday))
    # 添加學生信息, 要進行數據提交, 這樣數據才會保存
    self.conn.commit()
    print('信息添加成功!')
    print('\n')

更新學生的信息

def update_student(self) -> None:
    number = input('請輸入要修改信息的學生學號: ')

    if not self._is_in_database(number):
        print('要修改信息的學號不存在!')
        print('\n')
        return

    _class = input('請輸入新的班級: ')
    name = input('請輸入新的姓名: ')
    birthday = input('請輸入新的生日(格式 yy-mm-dd): ')
    self.cursor.execute(
        '''UPDATE students SET Class=?, 
        Student_name=?, 
        Birthday=? WHERE id=?''',
        (_class, name, birthday, number))
    # 對數據進行修改, 要提交事務, 這樣修改才會保存
    self.conn.commit()
    print('信息修改成功!')
    print('\n')

刪除學生的信息

def delete_student(self) -> None:
    number = input('請輸入要刪除信息的學生學號: ')

    if not self._is_in_database(number):
        print('要刪除的學號不存在!')
        print('\n')
        return

    self.cursor.execute(
        'DELETE FROM students WHERE id=?', (number,))
    # 刪除信息, 要進行事物提交, 這樣更改才會保存
    self.conn.commit()
    print('信息刪除成功!')
    print('\n')

判斷學生信息是否在數據庫中

def _is_in_database(self, number: str) -> bool:
    self.cursor.execute(
        'SELECT * FROM students WHERE id=?', (number,))
    result = self.cursor.fetchall()

    return True if result else False

關閉數據庫連接

def close_connection_database(self) -> None:
    self.conn.close()

最終的實現

import sqlite3
from typing import List

if __name__ == '__main__':
    studentManagerSystem = StudentManagerSystem()

    while True:
        print("======歡迎來到學生管理系統======")
        print('1.查看所有學生信息')
        print('2.添加學生信息')
        print('3.修改學生信息')
        print('4.刪除學生信息')
        print('5.查詢某個學生信息')
        print('6.退出系統')
        choiceNumber = input('請輸入你的選擇: ')

        if choiceNumber == '1':
            studentManagerSystem.read_all_student()
        elif choiceNumber == '2':
            studentManagerSystem.add_student()
        elif choiceNumber == '3':
            studentManagerSystem.update_student()
        elif choiceNumber == '4':
            studentManagerSystem.delete_student()
        elif choiceNumber == '5':
            studentManagerSystem.read_student()
        elif choiceNumber == '6':
            studentManagerSystem.close_connection_database()
            break

總結

這個小項目基本實現了最基本的學生管理系統,順便實踐了一下數據庫的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM