justlikecode

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

总结

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

分类:

技术点:

相关文章:

  • 2021-09-30
  • 2021-11-03
  • 2021-12-03
  • 2021-11-29
  • 2021-12-19
  • 2021-12-19
  • 2021-11-12
猜你喜欢
  • 2021-04-24
  • 2021-11-13
  • 2021-12-29
  • 2021-11-11
  • 2021-12-19
  • 2021-11-09
  • 2022-01-01
相关资源
相似解决方案