音乐考级系统python+mysql

目录

废话不多说下面看严谨版不带web界面的:

总结:


写这个博客呢主要是因为之前学校有个简单的课设要做,想着白嫖一个交差的,但是找了一圈没找到合适的能拿来用的,我就下班用了两晚手搓了一个代码。

具体的建表语句我当时也没记录了,给大家把表结构粘出来可以照猫画虎去弄,就行。

整体就是python+mysql,不过我对里面一些逻辑还是做了很多限制和判断的。

然后有需要gui或者web界面的,可以自己搞一搞,gui我这里没有。不过web的我之前有简单套用flask模板做了一个很简单的,但是实现逻辑没有什么初版严谨性,如果需要web版的我已经上传到资源了,可以在资源自取,粘两张web版的界面。

废话不多说下面看严谨版不带web界面的:

用户模式

学生登录:账号,密码

注册:账号,密码,姓名

音乐类型:名称,id编号

每个音乐,2-10级

学生选择音乐报名

查询考级成功失败

进来-》0 用户 1-》管理员

学生用户表:usr

insert into usr(name,account,password)
values("张三",110102,"zs1234");
​
insert into usr(name,account,password)
values("李四",111001,"ls6666");

 管理员 admin

insert into admin(account,password)
values(553322,"000111")

usr只能 查询信息,报名

admin增添,,增加音乐类型,判定考试成功失败,增添具体音乐等级

musics存所有音乐大类,多少个人报名了

music_usr 查人和具体报名的音乐信息,以及通过考试没

pass通过,fail失败, not started 没有开始

 levels 音乐等级和每个报名的人数

我能找到的当初手搓时候简单记得笔记就这些了

下面放源码:

不带界面的我是做了很多menu并且把登录分成了普通用户和管理员,不同的模式登录进去的menu也不一样,操作权限也不同

import pymysqlclass User(object):# 初始化连接数据库def __init__(self, target_db, username, password):self.connect = pymysql.Connect(host='localhost',port=3306,database=target_db,user=username,passwd=password,charset='utf8')self.id=None# 对象销毁时执行关闭数据库def __del__(self):self.connect.close()#登录界面def ui1(self):table=None    if isinstance(self,User):table='usr'else:table='admin'num=1while True:ns=0if num==1:num+=1 print("*********************************")print("**   请输入账号和密码以进入系统   **")print("*********************************")user = int(input("请输入账号:"))password = input("请输入密码:")# 获取游标对象cursor = self.connect.cursor()sql=f"select account,password,id from {table};"ps = cursor.execute(sql)if ps == 0:print("表为空")cursor.close()return# 获取结果集result = cursor.fetchall()for ls in result:if ls[0]==user and ls[1]==password:ns=1self.id=ls[2]print("-.-成功!")breakelse:continueif ns==1:cursor.close()  # 关闭游标breakprint("账号或密码错误/不存在,请重新输入")cursor.close()  # 关闭游标# 打印目录def menu2(self):print('============音乐考级信息系统=====================')print('============功能菜单=====================')print('\t1.查询个人用户信息')print('\t2.查询音乐考级信息(可选)')print('\t3.报名参加音乐考级')print('\t4.查询个人考级信息')print('\t5.查询具体音乐等级(默认按id升序)')print('\t0.退出')print('==============================================')# 查看个人用户信息def __print_usr(self):# 获取游标对象cursor = self.connect.cursor()ids=int(self.id)count = cursor.execute("select * from usr where id=%d;"%(ids))if count == 0:print("表为空")cursor.close()return# 获取结果集result = cursor.fetchall()# 输出结果print("id---name--account--password")print(result)# 关闭游标cursor.close()# 查看音乐考级种类信息def __print_music(self):# 获取游标对象cursor = self.connect.cursor()asc_or_desc = input('请选择(0.升序   1.降序):')sor = ""if asc_or_desc == '0':sor = "asc"elif asc_or_desc == '1':sor = "desc"else:print('您的输入有误,请重新输入')cursor.close()returnmode = input('请选择排序方式(1.按音乐id排序   2.按报考人数排序):')if mode == '1':sql = f"select * from musics order by msid " + sor+";"count=cursor.execute(sql)if count == 0:print("表为空")cursor.close()return# 获取结果集while True:result = cursor.fetchone()   if not result:breakelse:print(f"msname={result[0]}--msid={result[1]}--ursnumber={result[2]}")elif mode=='2':sql = f"select * from musics order by ursnumber " + sor+";"count=cursor.execute(sql)if count == 0:print("表为空")cursor.close()return# 获取结果集while True:result = cursor.fetchone()   if not result:breakelse:print(f"msname={result[0]}--msid={result[1]}--ursnumber={result[2]}")         else:print("选择错误,请重新选择!")cursor.close()return# 关闭游标cursor.close()#报名参加音乐考级def __application_music(self):# 获取游标对象cursor = self.connect.cursor()name = input("要报名的用户姓名:")mstype = input("要参加的考试类型名称:")msid = input("要参加的考试类型id:")id = input("要报名的用户id:")mslevel=input("音乐类型的等级:")mspass="not started"exts=Falsesql="select msname,msid from  musics;" cursor.execute(sql) while True:result = cursor.fetchone() #看音乐类型名称和id是否存在if not result:breakif result[0]==mstype and result[1]==int(msid):print("当前音乐存在")exts=Falsesql1="select msid,level from  levels " #等级存在不cursor.execute(sql1) while True:result1 = cursor.fetchone()if not result1:break if result1[0]==int(msid) and result1[1]==mslevel:exts=Falseprint("当前音乐等级存在")sql5="select name,id from usr"cursor.execute(sql5)while True:result2 = cursor.fetchone()if not result2:break if result2[0]==name and result2[1]==int(msid):exts=Falseprint("当前用户存在")        sql2="insert into music_usr (msid,msname,name,id,pass,level) values(%d,'%s','%s',%d,'%s','%s');"%(int(msid),mstype,name,int(id),mspass,mslevel)#values=(int(msid),mstype,name,int(id),mspass)cursor.execute(sql2)self.connect.commit()#更新等级表sql3="update levels  set number=number+1 where msid =%d and level='%s';" %(int(msid),mslevel)cursor.execute(sql3)self.connect.commit()#更新musics表人数sql4="update musics  set ursnumber=ursnumber+1 where msid =%d;" %(int(msid))cursor.execute(sql4)self.connect.commit()    print("报名成功!")breakelse:exts=Truecontinueelse:exts=Truecontinue         else:exts=Truecontinue# 关闭游标if exts:print("报名失败,请检查输入项!")cursor.close()#查询个人考级报名信息def __print_ownmusic(self):cursor = self.connect.cursor()mid=int(input("请输入个人报考id:"))if mid!=self.id:print("id号码错误")else:  sql=f"SELECT msname,name,pass as '通过否',level from music_usr WHERE id={mid}"count=cursor.execute(sql)if count == 0:print("表为空")cursor.close()returnwhile True:result = cursor.fetchone()if not result:breakprint(f"报考类型:[{result[0]}]---姓名:[{result[1]}]---是否通过:[{result[2]}]---报考等级:[{result[3]}]")cursor.close()# 查询具体音乐等级def __print_musiclist(self):# 获取游标对象cursor = self.connect.cursor()count=cursor.execute("select * from levels order by msid ;")if count == 0:print("表为空")cursor.close()return# 获取结果集result = cursor.fetchall()# 输出结果 print("msid--level--number")for x in result:print(x)# 关闭游标cursor.close()#退出函数def exitsp(self):print("成功退出子界面!")# 运行主函数def run(self):self.ui1() #进入登录页面while True:        self.menu2()      index = input("请输入要执行的操作:")if index == '1':self.__print_usr()elif index == '2':self.__print_music()elif index == '3':self.__application_music()elif index == '4':self.__print_ownmusic()elif index == '5':self.__print_musiclist()elif index == '0':self.exitsp()return class Manager(object):def __init__(self, target_db, username, password):self.connect = pymysql.Connect(host='localhost',port=3306,database=target_db,user=username,passwd=password,charset='utf8')self.id=None# 对象销毁时执行关闭数据库def __del__(self):self.connect.close()#退出函数def exitsp(self):print("成功退出子界面!")def ui1(self):table=None    if isinstance(self,User):table='usr'else:table='admin'num=1while True:ns=0if num==1:num+=1 print("*********************************")print("**   请输入账号和密码以进入系统   **")print("*********************************")user = int(input("请输入账号:"))password = input("请输入密码:")# 获取游标对象cursor = self.connect.cursor()sql=f"select account,password,id from {table};"ps = cursor.execute(sql)if ps == 0:print("表为空")return# 获取结果集result = cursor.fetchall()for ls in result:if ls[0]==user and ls[1]==password:ns=1self.id=ls[2]print("-.-成功!")breakelse:continueif ns==1:cursor.close()  # 关闭游标breakprint("账号或密码错误/不存在,请重新输入")cursor.close()  # 关闭游标   def menu3(self):print('============音乐考级信息系统=====================')print('============功能菜单=====================')print('\t1.添加音乐类别')print('\t2.删除音乐类别')print('\t3.添加音乐级别')print('\t4.删除音乐级别')print('\t5.更新学员考级成绩')print('\t6.添加新用户')print('\t0.退出')print('==============================================')#添加音乐类别 def add_musics(self):cursor = self.connect.cursor()name=input("请输入要添加的音乐类别:")number='0'count=cursor.execute("select msname from musics where msname='%s';"%(name))if count :print("该类型已存在")else: sql="insert into musics (msname,ursnumber) values('%s',%d);"%(name,int(number))cursor.execute(sql)self.connect.commit()print("添加成功!")cursor.close()#删除音乐类别    def del_musics(self):cursor = self.connect.cursor()name=input("请输入要删除的音乐类别:")count=cursor.execute("select msname from musics where msname='%s';"%(name))if not count :print("该类型不存在")else: sql="delete from musics where msname='%s';"%(name)cursor.execute(sql)self.connect.commit()print("删除成功!")cursor.close()#添加音乐级别def add_levels(self):cursor = self.connect.cursor()level=input("请输入要添加的音乐级别:")number=0id=input("请输入要添加的音乐id:")count=cursor.execute("select msid from musics where msid=%d;"%(int(id)))if not count :print("该音乐不存在")else:counts=cursor.execute("select * from levels  where level='%s' and msid=%d;"%(level,int(id)))if not counts:print("存在该类型音乐,且无此等级,可添加!")sql="insert into levels (msid,level,number) values(%d,'%s',%d);"%(int(id),level,number)cursor.execute(sql)self.connect.commit()print("添加成功!")else :print("当前音乐和当前等级已存在!")returncursor.close()#删除音乐级别def del_levels(self):cursor = self.connect.cursor()level=input("请输入要删除的音乐级别:")id=input("请输入要删除的音乐id:")count=cursor.execute("select msid from musics where msid=%d;"%(int(id)))if not count :print("该音乐不存在")else:counts=cursor.execute("select * from levels  where level='%s' and msid=%d;"%(level,int(id)))if not counts:                print("当前音乐和当前等级不存在!")returnelse :print("存在该类型音乐,且有此等级,可删除!")sql="delete from levels where msid=%d and level='%s';"%(int(id),level)cursor.execute(sql)self.connect.commit()print("删除成功!")cursor.close()#更新考级成绩def update_exam(self):P="pass"F="fail"id=input("请输入考生id:")msid=input("请输入报考音乐id:")level=input("请输入报考等级:")cursor = self.connect.cursor()sql="select * from music_usr where id=%d and msid=%d and level='%s';"%(int(id),int(msid),level)count=cursor.execute(sql)if not count:print("不存在当前考生报名信息,请检查输入内容是否正确-.-")else:ps=input("成功查询该考生信息,请输入(P/F)是否通过:")if ps=="P":sql="update music_usr  set pass='%s' where id=%d and msid=%d and level='%s';"%(P,int(id),int(msid),level)cursor.execute(sql)self.connect.commit()print("修改成功!")elif ps=="F":sql="update music_usr  set pass='%s' where id=%d and msid=%d and level='%s';"%(F,int(id),int(msid),level)cursor.execute(sql)self.connect.commit()print("修改成功!")cursor.close()#添加普通用户def registered(self):name=input("请输入新用户姓名:")account=input("请输入新用户账号:")passwd=input("请输入新用户密码:")cursor = self.connect.cursor()sql="select * from usr where password='%s' and name='%s' and account=%d;"%(passwd,name,int(account))counts=cursor.execute(sql)if not counts:print("该用户不存在!可添加!")sql="insert into usr (name,account,password) values('%s',%d,'%s');"%(name,int(account),passwd)cursor.execute(sql)self.connect.commit()print("添加成功!")else:print("该用户已存在!")cursor.close()def run(self):self.ui1() #进入登录页面while True:        self.menu3()      index = input("请输入要执行的操作:")if index == '1':self.add_musics()elif index == '2':self.del_musics()elif index=='3':self.add_levels()elif index=='4':self.del_levels()elif index=='5':self.update_exam()elif index=='6':self.registered()    elif index == '0':self.exitsp()return def menu1():print('============音乐考级信息系统=====================')print('============login=====================')print('\t0.普通用户登录')print('\t1.管理员登录')print('\t2.退出')print('==============================================')def main():#counter=1while True:#if counter==1:#   counter+=1   #只做一次一次菜单打印,模拟一下do whilemenu1()  # 一级菜单  index=input("请输入要执行的编号:")if index=='0':   #进到user登录     handle_usr = User("music","oorik","033018")handle_usr.run()elif index=='1':  #进到admin登录handle_manger=Manager("music","oorik","033018")handle_manger.run()elif index=='2':print("退出成功")exit()else:print("您输入的编号不正确,请重新输入")if __name__=="__main__":main()

简单的menu展示: 

 普通用户:

 管理员用户:

总结:

不带界面这个,基本操作你想要的都有,并且里面也做了接口限制,算是比较基本完善的demo了。对于没有gui或者web界面要求的可以直接拿去当做大作业是没有一点问题的。

如果对你有用,点个赞赏!算是给我买瓶水hh(-----.-.------.-..--)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微服务】Nacos 注册中心的设计原理

文章目录 前言一、数据模型二、数据一致性三、负载均衡四、健康检查五、性能与容量六、易用性七、集群扩展性八、用户扩展性结尾 前言 服务发现是⼀个古老的话题,当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有⼀个独…

今日份分享:三个电脑mp3转换器推荐

有一个音乐爱好者叫小艾。她对音乐充满热爱,每天都会用耳机沉浸在动听的旋律中。然而,她最近遇到了一个问题:她手头有一些喜欢的音乐文件,但格式却是不支持她的音乐播放器。这让她感到非常困扰,因为她希望随时随地欣赏…

Qt Widget提升为QChartView绘制曲线

1、在工程文件"*.pro"中添加"charts"组件 在工程文件"*.pro"中添加"charts"组件,同时在工程文件添加qcustomplot类。 QT core gui printsupport charts下载qcustomplot类。 网址:https://www.qcustom…

数据库监控与调优【十九】—— SQL调优实战

SQL调优实战 SQL调优实战1-常规调优 项目建表语句 -- ---------------------------- -- Table structure for carousel -- ---------------------------- DROP TABLE IF EXISTS carousel; CREATE TABLE carousel (id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_09…

2023年上半年部分团队的总结

(目前还是草稿版本) 写作,慢思考: 软件团队每天有繁忙的工作,有很多待办事项,会议,口头交流,线上的 bug 要处理,报表要生成和解释… … 一个月过去了,正想总…

【YOLO】目标识别模型的导出和opencv部署

文章目录 0 前期教程1 什么是模型部署2 怎么部署 0 前期教程 【YOLO】朴实无华的yolov5环境配置 【YOLO】yolov5训练自己的数据集 1 什么是模型部署 前期教程当中,介绍了yolov5环境的搭建以及如何利用yolov5进行模型训练和测试,虽然能够实现图片或视频…

同一 tomcat 不同项目 session 共享实现

说明 这里仅讨论 同一个tomcat,部署了两个工程(两个war包)。不涉及不同tomcat,不涉及集群 背景 tomcat中的工程A包含用户登录、退出、权限控制等功能;工程B包含业务功能接口。工程A将用户登录信息加密响应给前端,前…

【树莓派】解密树莓派Python项目中神秘的导入错误

文章目录 问题导入python文件目录分析解决方案 问题导入 小编在使用树莓派编写python项目时出现了以下两种错误: ModuleNotFoundError : No module named Motor from ..hardware.motor import Motor portError: attempted relative import with no known parent p…

Python 进阶(三):Python使用ORM框架SQLAlchemy操作Oracle数据库

Python使用ORM框架SQLAlchemy操作Oracle数据库 前言1. 安装Oracle Instant Client2. 安装依赖库3. 导入模块并创建引擎4. 操作oracle数据库4.1 新增数据4.2 查询数据4.3 更新数据4.4 删除数据 前言 要详细连接Oracle数据库并使用SQLAlchemy进行操作,按照以下步骤进…

欧科云链在GEF论坛发起圆桌:监管科技与Web3合规发展图景与展望

6月15日,欧科云链在格林威治经济论坛发起了一场题为“监管科技与Web3合规发展图景与展望”的圆桌会议,此次会议由中国香港贸易发展局副执行董事PatrickLau博士主持。Stratford Finance首席执行官Angelina Kwan,BC科技集团有限公司董事会副主席…

【spring cloud学习】4、创建服务提供者

注册中心Eureka Server创建并启动之后,接下来介绍如何创建一个Provider并且注册到Eureka Server中,再提供一个REST接口给其他服务调用。 首先一个Provider至少需要两个组件包依赖:Spring Boot Web服务组件和Eureka Client组件。如下所示&…

功能测试的技术

目录 前言: 1) 基于最终用户/系统测试 2) 等价测试 3) 边界值测试 4) 基于决策的测试 5) 备用流量测试 6) 临时测试 前言: 功能测试是软件测试中最常见的一种测试类型,它旨在验证系统的功能是否符合设计要求和预期行为。在进行功能测…