基于python和MySQL数据库开发应用程序:学生信息成绩管理系统1.0版本
目录:
- 前言
- 一,需求分析
- 二,前期准备
- 三,编写代码
- 1.app.py
- 2.__init__.py
- 3.models.py
- 四,功能描述
- 1.界面展示
- 2.系统流程图介绍
- 3.功能介绍
- 系统优缺点
- 五,问题及学习汇总
- 六,项目文件
前言
python是一门解释性和面向对象的编程语言,可应用于许多生活和工作场景,满足人们不同的需要。MySQL是一个开源免费的关系型数据库,深受用户和企业信赖。但是建立数据库(或表)和使用操作数据库有点繁杂,我们是否可以都在脚本编写中实现这些操作,并且很方便应用于我们的程序功能和代码中,答案是可以的!
接下来,我们将利用python和它的一个具有ORM(对象关系映射)的库来建立数据库表模型和在脚本简便地操纵数据库,并开发一个很实在的应用!
但是由于这个是初始版本(第一个版本),所以功能实现和结构上不追求尽善尽美,但是也是对于初学者来说或初始版本来说还是不错的,另外,希望读者继续关注笔者,已更新和呈现更好地功能完善的版本给受众!
一,需求分析
对于许多初学者或大学专业学习一门基础的编程语言时都会要求编写一个学生成绩(或信息)管理系统,另外,无论是为了作业还是兴趣,编写一个实际的应用都会极大地增加你的编程能力和成就感,所以这个博文即可以当做你的(python语言)作业参考或开发这样一个应用的指导!
二,前期准备
知识要求或配置储备 | 备注 |
---|---|
python基础语法 | 由于是初始版本,所以只利用简单明了的python语法来编写,保证通俗易懂,这也可以验证自己的学习成果 |
SQLAlchemy库 | 这个是python的一个库,能够满足构建面向对象的python和关系型数据库的桥梁,从而实现简洁的操作数据库中的数据,另外,我们还可以利用对应的SQL操作语句来操作数据,所以原生语言和本地SQLAlchemy方言(自己的函数和方法)两者兼用,要学习下基本的使用方法 |
pymysql库 | 由于SQLAlchemy是默认使用 SQLite 数据库,而我们使用的是MySQL,所以要下载这个库,最好掌握一些使用方法 |
mysql基本使用 | 虽然可以很方便地建立数据表和使用简洁的SQLAlchemy函数方法操作数据库数据(代替了繁杂原生的数据库操作),但是在一些功能实现上还是用原生语言操作数据库会很方便,因为SQLAlchemy实现某些功能时所用的函数和方法会很繁杂,所以还是要掌握基本的MySQL操作语句 |
mysql数据库 | 安装好数据库,并且设置好登录密码和账户名,并在MySQL中新建一个数据库(database),名称可自定义 |
GITHub | 最好能够访问和使用GIThub,因为我会把这个系统的文件上传的GitHub,以便大家学习,但是也会在CSDN上传项目的压缩包 |
关于学习和开发中的疑难和解决方法会放在该博文的问题和学习汇总模块,如果需要文章后面学习!
库包文件支持(本次开始时采用的是虚拟环境,读者可自由选择)
三,编写代码
1.app.py
from models import STU#引入STU类,便于使用事物session操作
from __init__ import session,engine#__init__为同目录下的数据库配置和连接模块def stu_information(): # 输入和保存学生相关信息的函数,此为该系统的重要数据部分name = input("请输入该学生的姓名:")number = input("请输入该学生的学号:")math = input("请输入该学生的数学成绩:")chinese = input("请输入该学生的语文成绩:")english = input("请输入该学生的英语成绩:")user = STU(name=name, number=number, math=math, chinese=chinese, english=english)#左边的name是数据库(模型类)对应的列名name,右边name是我们input收集的变量session.add(user)session.commit()print('>>添加成功!\n')def stu_change(): # 修改单个学生信息功能的函数numbers = input("请输入该学生的学号:")users = session.query(STU).filter_by(number=numbers).first()#先查找出对应学号的对象,在重新添加信息覆盖之前的信息,达到修改的目的users.name = input("请输入该学生的姓名:")users.math = input("请输入该学生的数学成绩:")users.chinese = input("请输入该学生的语文成绩:")users.english = input("请输入该学生的英语成绩:")session.add(users)session.commit()returndef stu_delete(): # 删除相关信息功能的函数numbers = eval(input("请输入要删除学生信息的序号:"))result=session.query(STU).filter_by(number=numbers).first()if result != None:#若返回对象不为为空,继续删除操作session.delete(result)session.commit()print('>>删除成功')else:print('>>查无此人或你的输入有误!')def stu_check(): # 查找相关信息的函数numbers = input("请输入要查询学生信息的序号:")result=session.query(STU).filter_by(number=numbers).first()if result != None:print('-' * 56)print('|{0:^22}|{1:^6}|{2:^6}|{3:^5}|{4:^5}|'.format('姓名', '学号', '数学', '语文', '英语'))print('-' * 56)print('|{0:^20}\t|{1:^6}\t|{2:^6}\t|{3:^6}\t|{4:^6}|'.format(result.name, result.number, result.math,result.chinese, result.english))print('-' * 56)else:print('>>查无此人或你的输入有误!')def stu_all(*b): # 显示该系统中的所有学生信息数据all_result=session.query(STU).all()print('<全部学生成绩表>' .center(52,'—'))print('|{0:^22}|{1:^6}|{2:^6}|{3:^5}|{4:^5}|'.format('姓名','学号','数学','语文','英语'))#为了输出效果上构成一个表,输出格式进行了对应的调整print('-' * 56)#该表的横线分隔部分是由‘-’构成,如果想用其他符号也可(+=)for i in all_result:print('|{0:^20}\t|{1:^6}\t|{2:^6}\t|{3:^6}\t|{4:^6}|'.format(i.name, i.number, i.math, i.chinese,i.english))print('-' * 56)print(">>已显示系统内所有人的信息!\n")def stu_rank(): # 排序不同类型成绩的函数lists=[]#用于存储转换后的单个信息列表的列表rank_count=0#用于排名表遍历输出次序设定的初始值rank_result=engine.execute('select *,(math+chinese+english) 总成绩 from stu order by 总成绩 desc')#返回多个元组构成的结果,包含各个信息和总分for i in rank_result:p=list(i)#将单个元组转换成列表(数组),便于后面索引得到想要的数据lists.append(p)print('<总分排名表>'.center(70,'='))#该表的横线分隔部分是由‘=’构成,如果想用其他符号也可(+-),不过实验过对于这个表这种效果比较好print('|{0:^22}|{1:^6}|{2:^6}|{3:^5}|{4:^5}|{5:^8}|{6:^5}|'.format('姓名','学号','数学','语文','英语','总分','排名'))print('=' * 73)for k in lists:rank_count+=1#每次遍历按总分降序出来的列表,遍历时记录操作,赋予对应的排名值print('|{0:^20}\t|{1:^6}\t|{2:^6}\t|{3:^6}\t|{4:^6}|{5:^9}|{6:^6}|'.format(k[1],k[2],k[3],k[4],k[5],k[6],rank_count))print('=' * 73)print(">>已显示系统内所有人的总分排名信息!\n")while True: # while循环使功能主界面能一直供用户使用,直到用户不需要为止print('学生成绩管理系统,请选择系统功能'.center(71,'-'))#功能选项也是在一个方框内print('{0:<3}{1:<72}\t{2:>}'.format('|','1.输入学生信息;','|'))print('{0:<3}{1:<69}\t{2:>}'.format('|','2.修改学生的相关信息;','|'))print('{0:<3}{1:<69}\t{2:>}'.format('|','3.删除学生的相关信息;','|'))print('{0:<3}{1:<69}\t{2:>}'.format('|','4.查询学生信息;','|'))print('{0:<3}{1:<69}\t{2:>}'.format('|','5.显示所有学生的信息;','|'))print('{0:<3}{1:<72}\t{2:>}'.format('|','6.学生成绩排序;','|'))print('{0:<3}{1:<72}\t{2:>}'.format('|','0.退出程序;','|'))print('-'*80,'\n')select = input("请输入你的功能选择>>")if select == '1':stu_information() # 函数调用或传参使用elif select == '2':stu_change() #同上elif select == '3':stu_delete()elif select == '4':stu_check()elif select == '5':stu_all()elif select == '6':stu_rank()elif select == '0':print('\n','本系统版本:version1.0'.center(65,'-'))print("感谢你的使用!!!祝你考试旗开得胜!!!")print("开发者:SteveDraw,么么哒^_^")print('-'*70)breakelse:print(">>你的输入错误!请按照提示重新输入!\n") # 错误输入格式提醒continue
2.init.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import db#models为同目录下的数据库模型模块文件
engine=create_engine('mysql+pymysql://root:<你的mysql登录密码>@localhost/sqltest')#数据库连接引擎,根据自己所选的数据库配置即可
DbSession = sessionmaker(bind=engine)
session = DbSession()#session用于创建程序和数据库之间的会话,所有对象的载入和保存都需要通过session对象
db.metadata.create_all(engine)#创建数据表,原本存在即忽略
3.models.py
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_basedb=declarative_base()#这个是sqlalchemy内部封装的一个方法,通过其构造一个基类,这个基类和它的子类,可以将Python类和数据库表关联映射起来class STU(db):#在所选定的数据库,利用这个类模型建立数据表,并定义其中的类属性对应表中的字段属性__tablename__='stu'#将该表命名为stuid=Column(Integer,primary_key=True)#数据表的内置的序号,按输入顺序排的,作为关系表的主键name=Column(String(64))#number=Column(Integer,unique=True)#由于学号是唯一的,并且我们以学号作为搜索的参考,所以用unique设为True,不能重复该值math=Column(Integer)chinese=Column(Integer)english=Column(Integer)
以上三个文件都是同目录下的文件,注意下位置关系!
运行流程:
0.建立好mysql数据库(即对应使用的数据库)
1.先建立编写好的models.py;
2.再运行编写好的配置初始文件__init__.py文件;
3.再运行主程序app.py文件
四,功能描述
1.界面展示
2.系统流程图介绍
3.功能介绍
功能模块 | 描述 |
---|---|
主界面 | 输入提示对应的数字,即可实现对应的功能 |
输入学生信息 | 选择该功能后,依次根据输入提示,输入相关信息,即可完成操作 |
修改学生的相关信息 | 以学号为查询的条件,修改除学号的其他信息 |
删除学生的相关信息 | 以学号为查询的条件,删除该学号的对应的同学的所有信息(包括该学号) |
查询学生信息 | 以学号为查询的条件,即可返回对应同学的信息 |
显示所有学生的信息 | 选择该功能后,即可出现所有学生的成绩汇总,表格样式做了调整,使其和正常的表格样式一样,提高可阅读性 |
学生成绩排序 | 选择该功能后,即可出现根据总分排名的全部学生的排名表 |
退出程序 | 选择该功能后,结束系统的运行,并且出现相应的界面内容 |
系统优缺点
系统优点 | 系统缺点 |
---|---|
1.能比较地方便利用数据库模型建立数据表; | 1.由于是初始版本,并且在运行窗口下交互,所以,一些运行错误检查还不完善; |
2.利用python语言及SQLAlchemy库能较好地操作数据库数据和数据库交互; | 2.如果主程序函数运行太久,可能由于电脑原因,再次操作会没反应,不过问题不大; |
3.最基本的学生信息管理系统功能都实现了,另外,代码结构及调用也比较简单; | 3.数据信息还比较简陋,分析功能还略差,以后更新版本来拓展的; |
4.输出界面时模仿表格样式和结构,可读性大大增强 | 4.无数据库迁移拓展,以后的版本会拓展的; |
五,问题及学习汇总
SQLAlchemy使用文档
Python SQLAlchemy入门教程
Python操作MySql——使用SQLAlchemy ORM操作数据库
Python操作MySQL之SQLAlchemy
Windows平台下MySQL的安装和基本命令行使用
基于python语言的成绩管理系统(无数据库版本)
六,项目文件
文件压缩包下载
GitHub项目地址
--------------------------------------------------最后,文中如有不足,敬请批评指正!------------------------------------------------------------
基于python和MySQL数据库开发应用程序:学生信息成绩管理系统1.0版本相关推荐
- java mysql教程基于_基于JAVA和MYSQL数据库实现的学生信息管理系统
1 项目介绍 学生成绩管理系统是广泛使用的一种信息管理系统,在学生成绩管理系统中,需要能处理各班信息.各班下属学生的个人信息及每个学生学习成绩信息.班级信息包括班级编号.班级名称,学生信息包括学号.姓 ...
- php学生注册管理系统源码,基于ThinkPHP框架开发的响应式学生信息后台管理系统PHP源码...
基于 ThinkPHP 框架开发的响应式学生信息后台管理系统 PHP 源码 此款源码用来学习练手还是可以的,需要的沃友们下载看看吧. 注:图片来自资源邦 基于 ThinkPHP 框架开发的响应式学生信 ...
- mysql数据库teach中有学生信息表_mysql综合性练习
题目描述 设定有一个数据库,里面有4张表: 学生表(student) 课程表(course) 成绩表(score) 教师信息表(teacher) 表结构如下: 表一_学生表(student) 属性名数 ...
- 用MySQL表示学号_java习题:在MySQL数据库建立一个学生信息表(学号,姓名,班级,成绩),编程完成如下操作...
满意答案 myfriend张 2014.04.26 采纳率:56% 等级:11 已帮助:5344人 use 库名 go -----打开库 create table 学生信息 (学号 int no ...
- Mysql写学生信息成绩管理系统(C语言)
前言 重点参考前辈们写的优秀文章,这里只做一些的补充 准备 1.MySQL安装 参考链接:https://www.cnblogs.com/xiaokang01/p/12092160.html 安装前注 ...
- IDEA兼容Eclipse编写的学生信息成绩管理系统
WEB版本的学生信息管理系统 1.1 课程设计目的与意义 通过项目驱动的学习和综合实训,熟练掌握运用Java语言进行桌面应用程序开发的基本知识和技能.熟练掌握Java的基本语法与JDBC数据库技术的应 ...
- 基于SSM+Bootstrap+MySQL的高校学生信息成绩管理系统
项目运行截图 用户添加 用户登录 登录首页 考试发布 考试信息 考试添加 成绩导入 成绩单 班级管理 班级管理 添加学生 添加用户 学生列表 考试发布 一.用户模块 提供管理员.教师两种角色的登录 提 ...
- 基于JAVA和MYSQL数据库实现的小型公司工资管理系统
第一章 需求分析 1.1 功能要求 1.1.1 功能概况 本次设计要求运用面向对象设计知识,利用 JAVA 语言设计实现一个"小型公司工资管理系统". 1.1.2 存储功能 能够存 ...
- 【记录贴】数据库课程设计——学生信息管理系统
前言 记录下学习的点点滴滴,留下属于我的足迹. 以此篇记录我的第一次课程设计. 课设实现 一.课程设计题目 题目一 学生信息管理系统 二.总体设计 原理及工具 JAVA的前端搭建:JAVA GUI M ...
最新文章
- linux网站权限怎么设置好,linux网站权限设置方法,网站安全配置,linux网站权限...
- 那些你所不知道的AI视频资源
- 《Programming WPF》翻译 第9章 6.我们进行到哪里了?
- SpringBoot @Cacheable缓存入门程序
- STM32的ADC精度提高方法
- com.microsoft.sqlserver.jdbc.SQLServerException: Socket closed 或者 该连接已关闭
- windows下odbc数据源配置
- python库下载地址
- 又是DDoS,你玩的游戏被黑客攻击停服了吗?
- 用华为模拟器ENSP构造校园网(第三天)配置总网络拓扑DHCP中继和实现路由通信
- Jupyter Notebook 更改默认浏览器
- Cannot start container web: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 32797
- 测试开发工作者日记:2020.67-6.9
- 灰度发布、蓝绿部署、金丝雀都是啥?
- 推荐一个MD学习交流微信公众号
- ubuntu/linux下打包压缩war、解压war包和jar命令
- 抖音60秒视频权限开通方法
- Base64加密与解密
- 百度地图整合离线和使用
- 织梦程序搬家后提示没有此用户名
热门文章
- maven 更改版本号
- The project cannot be built until its prerequisite xxxxxx is built.
- php fwrite 错误信息,fwrite错误
- matlab三角衍射,MATLAB模拟衍射利用基尔霍夫衍射公式
- NiuTrans 统计机器翻译开源系统
- 【Python】Linux环境下安装python(公网)
- ANSYS安装新版本后无法设置为旧版本文件的默认打开方式
- 7-25 滴滴滴,干净又卫生 (20 分)
- 针对WPA3认证的802.11协议分析
- 自恢复保险丝规格书参数详解,你不知道的全在这里