Python程序设计实例 | 学生管理数据库系统的开发

news2024/11/23 2:10:54

本文将通过一个学生管理数据库系统的开发过程来展示如何系统地基于Python实现SQLite数据库编程。以下首先提出数据库系统的基本结构,以及如何通过SQLite逐步达到这些要求并进行常规操作。

01、数据表结构

该学生管理数据库系统包括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-8
import 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_name
t struct = cur.fetchall()
for item in t_struct:
for x in item:
x = str(x)
print(x,sep= '\t',end = '')
print()
#构建数据表内容查询函数
def table quer(cur,tab_name,col_names ='*',num_line = None):
cur.execute('select %s from %s%(col——names,tab_name))
Li = cur.fetchall()
for line in Li[:num_line]
for item in line:
print(item,sep='\'t,end = '')
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 =专业表.txt'
create_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 UPDATE
CASCADE ON DELETE CASCADE',
奖学金 numeric NULL'
党员 tinvint NULL
照片 blob NULL'
备注 text NULL'
txt_path_2=学生表.txt
create_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 = '课程表.txt'
create_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 = '成绩表.txt'
create_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(x,sep= '\t',end = '')
print()
9706006 朱睿立 国际贸易法 90
9706012何英 国际贸易法 91
9706019 李辛怡 国际贸易法 93
9706025卜应龙 国际贸易法 94
9706026 龚晨晓 国际贸易法 93 
9706028 王洁 国际贸易法  90
>>>

 执行完数据库的相关操作后,通过以下代码关闭链接:

>>>conn.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)

第361题 如图所示是一台路由器的BGP输出信息。那么以下关于这段信息的描述,错误的是哪一项? <Huawei>display bgp error Error Type: Peer Error Peer Address:10.1.1.2 VRFName:Public Error Info: Router-ID conflictA、该路由器邻居地址是10.1.1.2 B、Error Type显…

SWC 流程

一个arxml 存储SWC &#xff08;可以存多个&#xff0c;也可以一个arxml存一个SWC&#xff09;一个arxml 存储 composition &#xff08;只能存一个&#xff09;一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…

Python基础指令(上)

Python基础指令上 常量和表达式变量和类型1. 什么是变量2. 变量的语法2.1 定义变量2.2 使用变量 3. 变量的类型4. 为什么要有这么多类型5. 动态类型特性 注释输入输出1. 程序与用户的交互2. 通过控制台输出3. 通过控制台输入 运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. …

科学家首次为地球“全面体检”;国产光刻机或系误传;推特或将按月收费丨RTE开发者日报 Vol.52

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

nginx(CVE-2022-41741和41742) 漏洞修复

一、漏洞描述 近期Nginx安全发布几个中高危漏洞&#xff1a;CVE-2022-41741 (Memory Corruption) – CVSS score 7.1 (High)、CVE-2022-41742 (Memory Disclosure) – CVSS score 7.0 (High)&#xff0c;上述是&#xff1a;MP4 流媒体模块&#xff08;ngx_http_mp4_module&…

固定资产管理系统有哪些基本功能

固定资产管理系统是一种用于管理和跟踪企业固定资产的软件。它能够帮助企业实现固定资产的全生命周期管理&#xff0c;包括资产采购、仓储、申请、维护、损坏等环节。以下是固定资产管理系统的一些基本功能&#xff1a;资产信息管理&#xff1a;系统可记录公司固定资产信息&…

「聊设计模式」之桥接模式(Bridge)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 设计模式是程序员不可或缺的一部分。它们提供了一种通用的…

华为数通方向HCIP-DataCom H12-831题库(单选题:61-80)

第61题 R3与R4的IS-IS Leve1-1邻居没有建立,根据本图的信息可能的原因是? A、R3与R4的互连接口circuit-type不四配 B、R3与R4的区域号不同 C、R3与R4的IS-Leve1不匹配 D、R3与R1的IIH认证失败 答案:B 解析: 直接看图中的非0数字就能得出答案。 Display isis error 是查看…

如何开心的在iOS上玩NDS游戏

如何开心的在iOS上玩NDS游戏 先说结论&#xff0c;有原生方案和web方案2种。 Web 方案 其实现在的 webassembly 技术已经非常成熟了&#xff0c;我们可以通过编译 C 语言的模拟器代码&#xff0c;然后在浏览器上运行。 这样就可以实现一个在线的模拟器了&#xff0c;而且不…

内网穿透的应用-Cloudreve搭建云盘系统,并实现随时访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

mysql表的导出和导入

表的导出 mysql 默认对导出的目录有权限限制&#xff0c;也就是说使用命令进行导出的时候&#xff0c;需要指定目录进行操作 show global variables like ‘%secure%’; secure_file_priv 值情况分析&#xff1a; 如果设置为empty&#xff0c;表示不限制文件生成的位置&#x…

MySQL:获取Auto_increment失败问题记录

项目场景&#xff1a; 人员权限设置&#xff0c;定义了一张存储自增id的表sys_id_sequence&#xff08;A表&#xff09; /*A表定义*/ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for sys_id_sequence -- -----------…

PyTorch深度学习实战(16)——面部关键点检测

PyTorch深度学习实战&#xff08;16&#xff09;——面部关键点检测 0. 前言1. 关键点检测1.1 关键点检测模型分析1.2 数据集分析 2. 面部关键点检测3. 2D 和 3D 面部关键点检测小结系列链接 0. 前言 我们已经学习了如何解决二分类(猫狗分类)和多分类( fashionMNIST )问题。本…

Python(八十七)函数的定义与调用

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

ffmpeg抠图

1.不用png&#xff0c;用AVFrame 2.合流 3.图片抠图透明 (1.)mp4扣yuv图&#xff0c;(2)用1. (3)用抠图算法函数对yuv进行处理 ffmpeg -y -i TJTV.png -vf colorkey0x0000FF:0.5:0.0 -c:v png t.png0x0000FF&#xff1a;六位每两位分别表示红绿蓝&#xff0c;因此它是对…

如何提高技术领导力?与你分享 5 个心得

技术领导力于很多人而言都是谜一般的存在。有观点认为&#xff0c;实战经验丰富的资深开发最终只有成为技术管理者才能继续成长。从某些方面来看&#xff0c;这可能是对的&#xff0c;但考虑到公司结构和规章制度等&#xff0c;想要完成从「个人贡献者」到「技术管理者」的跨越…

mysql自动删除过期的binlog

一、binlog_expire_logs_seconds 配置项 mysql 8.0使用配置项 binlog_expire_logs_seconds 设置binlog过期时间&#xff0c;单位为秒。 mysql旧版本使用配置项 expire_logs_days 设置binlog过期时间&#xff0c;单位为天&#xff0c;不方便测试。 在 8.0 使用 expire_logs_d…

CH2--x86系统架构概览

2.1 OVERVIEW OF THE SYSTEM-LEVEL ARCHITECTURE IA-32 与 IA32-e 模式 图中的实线箭头表示线性地址&#xff0c;虚线表示段选择器&#xff0c;虚线箭头表示物理地址 2.1.1 Global and Local Descriptor Tables 全局描述符表 (GDT) GDT是一个全局的段描述符表&#xff0c;它存储…

「聊设计模式」之适配器模式(Adapter)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 在软件开发中&#xff0c;经常会涉及到现有系统的改造和升…

微信小程序云开发手搓微标提示,逻辑思路记录及代码实现

目录 写前小叙 功能需求背景 首页js的逻辑思路第一部分 发布公告js逻辑 首页js显示“新”公告思路实现 首页js关闭“新”公告思路实现 管理员“已阅读”js逻辑 首页js显示“新”邮件思路实现 首页js关闭“新”邮件思路实现 写前小叙 今儿凌晨&#xff0c;我又是一个人…