使用 python 與 sqlite3 實現簡易的學生信息管理系統
需求分析
一個簡單的學生信息管理系統,應該包括如下功能
- 可以對學生信息進行增刪改查
- 添加學生信息(增)
- 刪除學生信息(刪)
- 修改學生信息(改)
- 查詢學生信息(查)
- 退出管理系統,要保存數據,方便下次登錄時,仍然能查看之前添加或修改的數據
設計思路
先設計一個數據表,以方便存儲數據。我們簡單設計一個數據表如下
| 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
總結
這個小項目基本實現了最基本的學生管理系統,順便實踐了一下數據庫的使用。
