使用 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('
')
return student_list
print('学号 姓名 年龄 住址')
for student in student_list:
print(student)
print('
')
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('
')
return
print('查询结果如下:')
print(result)
print('
')
添加学生信息
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('
')
更新学生的信息
def update_student(self) -> None:
number = input('请输入要修改信息的学生学号: ')
if not self._is_in_database(number):
print('要修改信息的学号不存在!')
print('
')
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('
')
删除学生的信息
def delete_student(self) -> None:
number = input('请输入要删除信息的学生学号: ')
if not self._is_in_database(number):
print('要删除的学号不存在!')
print('
')
return
self.cursor.execute(
'DELETE FROM students WHERE id=?', (number,))
# 删除信息, 要进行事物提交, 这样更改才会保存
self.conn.commit()
print('信息删除成功!')
print('
')
判断学生信息是否在数据库中
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
总结
这个小项目基本实现了最基本的学生管理系统,顺便实践了一下数据库的使用。