zoukankan      html  css  js  c++  java
  • 使用 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('
    ')
            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
    
    

    总结

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

  • 相关阅读:
    MyBatisPlus-快速入门
    Spring Cloud Alibaba的使用
    SpringCloud-Bus组件的使用
    Python刷题:最长回文子串(字符串)
    Python刷题:求最大连续bit数(位运算)
    Python刷题:用二进制方式求集合S的所有子集(位运算)
    Python刷题:集合S(k)求|x-y|最小时的x和y(位运算)
    Python刷题:常用二进制操作(位运算)
    Stripe支付介绍在asp.net mvc中开发对接,图文加代码说明
    从今天起做个真正的程序员
  • 原文地址:https://www.cnblogs.com/justlikecode/p/13807043.html
Copyright © 2011-2022 走看看