使用 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

总结

这个小项目基本实现了最基本的学生管理系统,顺便实践了一下数据库的使用。

posted @ 2020-10-13 09:53  康诚嘉士  阅读(2696)  评论(0编辑  收藏  举报