目录:
前言一,需求分析二,前期准备三,编写代码1.app.py2.__init__.py3.models.py四,功能描述1.界面展示2.系统流程图介绍3.功能介绍系统优缺点五,问题及学习汇总六,项目文件前言
python是一门解释性和面向对象的编程语言,可应用于许多生活和工作场景,满足人们不同的需要。MySQL是一个开源免费的关系型数据库,深受用户和企业信赖。但是建立数据库(或表)和使用操作数据库有点繁杂,我们是否可以都在脚本编写中实现这些操作,并且很方便应用于我们的程序功能和代码中,答案是可以的!
接下来,我们将利用python和它的一个具有ORM(对象关系映射)的库来建立数据库表模型和在脚本简便地操纵数据库,并开发一个很实在的应用!
但是由于这个是初始版本(第一个版本),所以功能实现和结构上不追求尽善尽美,但是也是对于初学者来说或初始版本来说还是不错的,另外,希望读者继续关注笔者,已更新和呈现更好地功能完善的版本给受众!
一,需求分析
对于许多初学者或大学专业学习一门基础的编程语言时都会要求编写一个学生成绩(或信息)管理系统,另外,无论是为了作业还是兴趣,编写一个实际的应用都会极大地增加你的编程能力和成就感,所以这个博文即可以当做你的(python语言)作业参考或开发这样一个应用的指导!
二,前期准备
关于学习和开发中的疑难和解决方法会放在该博文的问题和学习汇总模块,如果需要文章后面学习!
库包文件支持(本次开始时采用的是虚拟环境,读者可自由选择)
三,编写代码
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)mit()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)mit()returndef stu_delete(): # 删除相关信息功能的函数numbers = eval(input("请输入要删除学生信息的序号:"))result=session.query(STU).filter_by(number=numbers).first()if result != None:#若返回对象不为为空,继续删除操作session.delete(result)mit()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_enginefrom sqlalchemy.orm import sessionmakerfrom 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,Stringfrom 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.功能介绍
系统优缺点
五,问题及学习汇总
SQLAlchemy使用文档
Python SQLAlchemy入门教程
Python操作MySql——使用SQLAlchemy ORM操作数据库
Python操作MySQL之SQLAlchemy
Windows平台下MySQL的安装和基本命令行使用
基于python语言的成绩管理系统(无数据库版本)
六,项目文件
文件压缩包下载
GitHub项目地址
--------------------------------------------------最后,文中如有不足,敬请批评指正!------------------------------------------------------------
如果觉得《基于python和MySQL数据库开发应用程序:学生信息成绩管理系统1.0版本》对你有帮助,请点赞、收藏,并留下你的观点哦!