python数据库实现学生管理系统,python函数编程实现学生管理系统
终极管理员 知识笔记 154阅读
该学生管理数据库系统包括4张表 专业表、学生表、课程表和成绩表用于实现对专业信息、学生信息、课程信息和成绩的综合管理。
1. 专业表专业表包括专业编号和专业名称两个列具体设置见表1。

■ 表1 专业表的结构
2. 学生表学生表包括学号、姓名、性别、生日、专业编号、奖学金、党员、照片和备注等列具体设置见表2。学生表中以专业编号作为外键指向专业表中的专业编号实施参照完整性。

■ 表2 学生表的结构
3. 课程表课程表包括课程号、课程名称、先修课程代码、学时和学分等列具体设置参见表3。
■ 表3 课程表的结构
4. 成绩表成绩表包含学号、课程号和成绩三列具体请参见表4。其中学号和课程号共同构成为主键。该表中的学号是外键指向学生表中的学号 课程号是外键指向课程表中的课程号实施参照完整性。
■ 表4 成绩表的结构
02、学生管理数据库系统的实现 1. 数据准备
为了规范数据输入分别用4个txt文档存储4张表原始数据。文档中的数据组织形式为 列1值,列2值,…。以专业表为例在对应的txt文档中数据组织形式如下
因此在构建好相应的数据表结构之后可方便地通过编写函数来统一地将txt文档中的数据导入对应数据表中。
2. 关键函数为了减少数据库系统构建过程中代码的重复应将可能重复执行的代码包装成函数。本系统开发中构建了以下函数。
(1) 数据表创建及数据导入函数 create_table()。
(2) 数据表结构查询函数 table_struct()。
(3) 数据表记录查询函数 table_quer()。
3. 数据库系统构建代码实现在给出源代码之前先简单介绍一下SQLite中的PRAGMA命令。PRAGMA是一个特殊的命令可以查询SQLite中的非表数据还可以修改SQLite中的参数设置。
下面给出学生管理数据库系统的实现代码。
#create stu db.py#coding utf-8import sqlite3#构建函数来实现数据表的创建及文本数据的导入def create table(tab name, col prop list,txt path, conn, cur):col name props ,.join(col prop list)cur.execute(CREATE TABLE IF NOT EXISTS %s(s)(tab name,col name props))f open(txt path,r)for x in f:x x.rstrip().split(,)a[%&s,%x[i] for iin range(len(x))]x ,.join(a);cur.execute(INSERT INTO %s values(%s)(tab name,x))f.close()print(%s创建成功% tab name)print(%s导人成功% txt path)conn.commit()#构建数据表结构查询函数def table struct(cur tab name):cur.execute(PRAGMA table_info(%s)% tab_namet struct cur.fetchall()for item in t_struct:for x in item:x str(x)print(xsep \t,end )print()#构建数据表内容查询函数def table quer(curtab_namecol_names *,num_line None):cur.execute(select %s from %s%(col——namestab_name))Li cur.fetchall()for line in Li[:num_line]for item in line:print(itemsep\tend )print()if_name__ _main_:conn sqlite3.connect(d:/test/Shift MIS.db)cur conn.cursor()cur.execute(PRAGMA foreign keys ON”)#(1)创建专业表tab name 1 专业表col_prop_list_1 [专业编号 varchar(7) primary key专业名称 varchar(7)]txt_path_1 专业表.txtcreate_table(tab_name_1,col prop list 1,txt_path_1,conn conn,cur cur)#(2)创建学生表tab_name_2 学生表col_prop_list_2[学号 varchar(7) primary key姓名 varchar(7)性别 tinyint生日 text NULL专业编号 varchar(7) REEERENCES 专业表(专业编号)ON UPDATECASCADE ON DELETE CASCADE,奖学金 numeric NULL党员 tinvint NULL照片 blob NULL备注 text NULLtxt_path_2学生表.txtcreate_table(tab_name_2, col_prop list_2, txt_path_2,conn conn,cur cur)#(3)创建课程表tab_name_3 课程表col prop_1ist_3 [课程号varchar(7)primarvkev课程名称 varchar(7) NULL先修课程代码 varchar(7) NULL学时 smallint学分 smallint]txt_path_3 课程表.txtcreate_table(tab_name_3, col_prop_list_3,txt_path_3,conn conn,cur cur)# (4)创建成绩表tab_name_4 成绩表col_prop_list_4 [学号 varchar(7)REFERENCES 学生表(学号)ON UPDATE CASCADE ON DELETE CASCADE,课程号 varchar(7)REFERENCES 课程表(课程号)ON UPDATE CASCADE ON DELETE CASCADE,成绩 smallint NULL,PRIMARY_KEY(学号课程号)]txt_path_4 成绩表.txtcreate_table(tab_name_4,col_prop_list_4,txt_path_4,conn conn,cur cur)# 关闭链接conn.close()
程序creat_stu_db.py的运行结果如下
同时在“d /test/”目录下生成数据库文件Shift_MIS.db。
4. 数据库操作对于一个已经存在的数据库需要先建立链接然后通过该链接对数据库进行查询、修改等操作。例如
由于后面需要用到create_stu_db.py文件中的相关函数所以需要先导入该模块中的对象。
查询数据库中所有的数据表
下面分别调用create_stu_db.py文件中定义的函数table_struct()和table_quer()查询各表的结构和表中的前10行记录。
1) 专业表查询
数据结构查询
前10行数据查询
2学生表查询
数据结构查询
前10行数据查询(包括学号、姓名、专业编号和奖学金)
3) 课程表查询
数据结构查询
前10行数据查询
4) 成绩表查询
数据结构查询
前10行数据查询
5) 综合查询
数据库创建成功之后用户可以根据自己的需求通过编写SQL语句进行相应的查询操作。例如以下查询语句的执行将返回“国际贸易法”课程成绩大于或等于90分的学生的学号、姓名、课程名称和成绩并按学号的升序排列。SQL语句如下
>>>cur.execute(SELECT 学生表.学号,学生表.姓名,课程表.课程名称,成绩表.成绩EROM 学生表 JOIN 成绩表 JOIN 课程表ON 学生表.学号成绩表.学号 AND 课程表.课程号 成绩表课程号WHERE 成绩表成绩> 90 and 课程表课程名称 ”国际贸易法ORDER BY 学生表.学号 ASC)>>> for line in cur.fetchall():for x in line:print(xsep \t,end )print()9706006 国际贸易法 909706012何英 国际贸易法 919706019 国际贸易法 939706025 国际贸易法 949706026 晓 国际贸易法 93 9706028 国际贸易法 90>>>
执行完数据库的相关操作后通过以下代码关闭链接
>>>conn.close()