一、前言
目的:设计一个学生信息管理系统,可对学生进行添加、删除、修改、查找和报表输出等功能,学生属性有:学号、姓名、性别、所属班级、相片、出生日期和备注等属性。
本文是已经在终端装好数据库,利用Navicat方便查看数据库,因为题目要求里有图片属性,在终端不能查看图片的jpg格式,只能看到二进制文字。另外我建了两个python文件 一个是连接数据库且创建表(先运行) 另一个是系统功能设计(后运行)。
如果不想用navicat,也可以用终端,不过首先要在终端创建要用的数据库。然后在利用文中第六章,创建一个表。然后运行第七章的代码,那么再查看表结构和数据的时候就要在终端运行。相关代码如下:
CREATE DATABASE 数据库;
USE 数据库;
DESC 表;
SELECT *FROM 表;
这个学生管理系统做的很简陋,欢迎大家继续改进。
终端启动方式:
二、系统流程图
三、数据库设计图
概念设计:
E-R图
逻辑结构设计
学生信息(学号#,姓名,性别,所属班级,出生日期,备注,图片)
物理结构设计
所属班级,出生日期,备注,图片一开始可以为空,也就是不用输入值
字段名
类型
长度
不是空值
键
学号
int
TRUE
主键
姓名
varchar
50
TRUE
性别
varchar
50
TRUE
所属班级
varchar
50
FALSE
出生日期
date
FALSE
备注
varchar
255
FALSE
图片
mediumblob
FALSE
四、Nacicat下载与数据库创建
- 我们先在官网下载Nacicat,https://www.navicat.com.cn
- 下载除了安装C盘位置自己选择,其余均下一步即可。安装打开后直接点击试用
新建MySQL连接
输入连接信息。随意输入连接名,我这里输入的是“studyPython”,主机为“localhost”,用户名为“root”,端口不用管,输入密码为在终端下载的mysql设置的密码。如图所示。
- 点击测试连接按钮,创建完成,然后进行如下操作,创建数据库中的字符集和排序规则不用管。我这里的数据库命名为f_text。
- 双击我们的数据库,然后我们运行第六章连接数据库的代码,创建一个名叫学生信息的表,然后可以看到上头有打开表和设计表,设计表就是看到表的物理结构,打开表就是查询更新我们的数据,这里需要用到第七章的代码。
五、Pymysql下载
在python终端运行下头命令
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
六、连接数据库(代码)
host和user 不用管,在四章已设置,password是我终端数据库的密码,database是我第四章创建的f_text数据库,此外这里我创建了一个名叫学生信息的表
import pymysql
db = pymysql.connect(host='127.0.0.1', user='root', password='713151', database='f_text')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS 学生信息")
sql = """CREATE TABLE 学生信息(
学号 int(8) NOT NULL AUTO_INCREMENT,
姓名 varchar(50) NOT NULL,
性别 varchar(50) NOT NULL,
所属班级 varchar(50) DEFAULT NULL,
出生日期 date DEFAULT NULL,
备注 varchar(255) DEFAULT NULL,
图片 mediumblob DEFAULT NULL,
PRIMARY KEY (学号)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
"""
cursor.execute(sql)
db.close()
七、系统功能实现(代码)
host和user 不用管,在四章已设置,password是我终端数据库的密码,database是我第四章创建的f_text数据库
# coding:utf-8
# 导入pymysql模块
import pymysql
import pandas as pd
# 连接数据库
try:
conn = pymysql.connect(host="localhost",
user="root",
password="713151",
database="f_text")
print("数据库连接成功!")
except pymysql.Error as e:
print("数据库连接失败",e)
cur = conn.cursor()
# 产生菜单栏
while True:
num = int(input("请选择你需要操作的数据库:1.查询;2.插入;3.修改;4.删除;5.输出报表;6.退出;\n"))
# 查询
if num == 1:
sql = "SELECT * FROM 学生信息"
try:
with conn.cursor() as cur:
cur.execute(sql)
result = cur.fetchall()
for row in result:
sid, sname, ssex, sclass, sbirthday, scomment, image_data = row
print(
f"学号: {sid}, 姓名: {sname}, 性别: {ssex}, 所属班级: {sclass}, 出生日期: {sbirthday}, 备注: {scomment}")
if image_data:
print(f"图片数据长度: {len(image_data)} bytes")
else:
print("没有图片数据")
except Exception as err:
print("SQL查询语句执行错误:", err)
#添加
elif num == 2:
sid = input("请输入学号:")
sname = input("请输入姓名:")
ssex = input("请输入性别:")
sclass = input("请输入班级:")
sbirthday = input("请输入出生日期:")
scomment = input("请输入备注:")
image_path = input("请输入图片路径 :")
image_data = None
if image_path:
with open(image_path, 'rb') as file:
image_data = file.read()
data = (sid, sname, ssex, sclass, sbirthday, scomment, image_data)
sql = "INSERT INTO 学生信息 (学号, 姓名, 性别, 所属班级, 出生日期, 备注, 图片) VALUES (%s, %s, %s, %s, %s, %s, %s)"
try:
with conn.cursor() as cur:
cur.execute(sql, data)
conn.commit()
print("插入成功")
except Exception as err:
print("SQL语句执行错误:", err)
conn.rollback()
#修改
elif num == 3:
sid = input("请输入学号:")
sname = input("更改的姓名为:")
sgender = input("更改的性别为:")
sclass = input("更改的班级为:")
sbirthdate = input("更改的出生日期为:")
sremark = input("更改的备注为:")
choice = input("是否要更改图片内容?(是/否): ").lower()
if choice == "是":
# 获取图片文件路径
image_path = input("请输入图片文件路径:")
with open(image_path, 'rb') as image_file:
image_content = image_file.read()
sql = "UPDATE 学生信息 SET 姓名=%s, 性别=%s, 所属班级=%s, 出生日期=%s, 备注=%s, 图片=%s WHERE 学号=%s"
try:
with conn.cursor() as cur:
cur.execute(sql, (sname, sgender, sclass, sbirthdate, sremark, image_content, sid))
conn.commit()
print("更新成功")
except Exception as err:
print("SQL语句执行错误", err)
conn.rollback()
else:
sql = "UPDATE 学生信息 SET 姓名=%s, 性别=%s, 所属班级=%s, 出生日期=%s, 备注=%s WHERE 学号=%s"
try:
with conn.cursor() as cur:
cur.execute(sql, (sname, sgender, sclass, sbirthdate, sremark, sid))
conn.commit()
print("更新成功")
except Exception as err:
print("SQL语句执行错误", err)
conn.rollback()
#删除
elif num == 4:
sid = input("请输入需要删除的学号:")
sql = "DELETE FROM 学生信息 WHERE 学号=%s"
try:
with conn.cursor() as cur:
cur.execute(sql, (sid,))
conn.commit()
print("删除成功")
except Exception as err:
print("SQL语句执行错误", err)
conn.rollback()
#报表输出 Excle文件
elif num == 5:
cursor = conn.cursor()
sql = "SELECT * FROM 学生信息"
cursor.execute(sql)
result = cursor.fetchall()
if not result:
print("没有数据")
else:
columns = [i[0] for i in cursor.description]
df = pd.DataFrame(result, columns=columns)
df.to_excel('E:/onedrive/桌面/学生信息管理系统/学生信息.xlsx')
print('完成输出')
elif num == 6:
break
#关闭
cur.close()
conn.close()
八、系统功能实现(部分运行结果)
- 运行第七章代码,在添加数据时,如果没有图片,可以不用输图片路径,直接回车,注意表结构每个属性是否能为空
- 输入图片路径,也就是下载的图片存放位置
- 我的报表为excel文件 但是图片里头存的还是二进制形式,欢迎大家来帮它改成图片内容嵌入到单元格里的。另外上一章代码中
df.to_excel('E:/onedrive/桌面/学生信息管理系统/学生信息.xlsx')
是将名为学生信息的报表输出到了我在桌面建的一个学生信息管理系统文件夹,这里存放地址大家可以更改。
九、参考网址
Python中使用MySQL_mysql python-CSDN博客
python与mysql连接创建学生成绩管理系统_基于python+mysql管理系统-CSDN博客
python+mysql的学生管理系统_python+mysql学生信息管理系统-CSDN博客
Python+MySQL实现学生管理系统_用python+mysql编写学生教务管理系统-CSDN博客
2023 最新版navicat 下载与安装 步骤及演示 (图示版)_navicat下载-CSDN博客
希望能对你有所帮助
版权归原作者 Garnet crow763 所有, 如有侵权,请联系我们删除。