音乐考级系统python+mysql

news2024/11/20 8:32:32

目录

废话不多说下面看严谨版不带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 pymysql


class 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=1
        while True:
            ns=0
            if 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=1
                    self.id=ls[2]
                    print("-.-成功!")
                    break
                else:
                    continue
            if ns==1:
                cursor.close()  # 关闭游标
                break
            print("账号或密码错误/不存在,请重新输入")
            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()
            return
        mode = 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:
                    break
                else:
                    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:
                    break
                else:
                    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=False
        
        sql="select msname,msid from  musics;" 
        cursor.execute(sql) 
        
        while True:
            result = cursor.fetchone() #看音乐类型名称和id是否存在
            if not result:
                break
            if result[0]==mstype and result[1]==int(msid):
                print("当前音乐存在")
                exts=False
                sql1="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=False
                        print("当前音乐等级存在")
                        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=False
                                print("当前用户存在")        
                                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("报名成功!")
                                break
                            else:
                                exts=True
                                continue
                    else:
                        exts=True
                        continue         
            else:
                exts=True
                continue
        # 关闭游标
        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()
                return
            
            while True:
                result = cursor.fetchone()
                if not result:
                    break
                print(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=1
        while True:
            ns=0
            if 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=1
                    self.id=ls[2]
                    print("-.-成功!")
                    break
                else:
                    continue
            if ns==1:
                cursor.close()  # 关闭游标
                break
            print("账号或密码错误/不存在,请重新输入")
            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=0
        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("存在该类型音乐,且无此等级,可添加!")
                sql="insert into levels (msid,level,number) values(%d,'%s',%d);"%(int(id),level,number)
                cursor.execute(sql)
                self.connect.commit()
                print("添加成功!")
            else :
                print("当前音乐和当前等级已存在!")
                return
        cursor.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("当前音乐和当前等级不存在!")
                return
            else :
                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=1
    while True:
        #if counter==1:
         #   counter+=1   #只做一次一次菜单打印,模拟一下do while
        menu1()  # 一级菜单  
            
        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.coloradmin.cn/o/669537.html

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

相关文章

PCB设计实验|第二周|谐波振荡电路实验|3月6日

目录 实验二 谐波振荡电路实验 一、实验原理 二、实验环境 三、实验结果及分析 四、实验总结 实验二 谐波振荡电路实验 一、实验原理 利用深度正反馈,通过阻容耦合使两个电子器件交替导通与截止,从而自激产生方波输出的振荡器,常用作…

ChatGPT在前,华为盘古Chat在后

国产盘古Chat对话方面堪比GPT-3.5 什么是ChatGPT?简单来说,就是一个能够和人类自然对话的人工智能系统。它可以理解你的语言,回答你的问题,甚至给你提供建议和服务。它不仅可以处理文字,还可以处理图片、视频、音频等…

基于Java学生信息管理系统-控制台版

基于Java学生信息管理系统-控制台版 一、系统介绍二、功能展示1.学生信息添加2.学生信息修改3.学生信息查询4.学生信息删除5.退出系统 三、代码展示四、其它1.其他系统实现2.获取源码 一、系统介绍 学生信息的添加、修改、删除、查询、退出系统 二、功能展示 1.学生信息添加…

【面试题01】抽象类、接口 的区别和使用场景

文章目录 一、抽象类和接口的区别1.1 定义方式不同1.2.成员方法不同1.3 实现方式不同1.4 构造方法不同1.5 访问修饰符不同1.6 关注点不同 二、抽象类和接口的使用场景2.1 抽象类的使用场景2.2 接口的使用场景 三、PHP代码演示总结 一、抽象类和接口的区别 抽象类和接口基本上是…

提升效率,使用ChatGPT的轻松撰写日报和周报

日报和周报是办公生活中不可或缺的部分,它们有助于记录工作进展、分享关键信息和与团队保持沟通。但是,有时写作这些报告可能会变得繁琐和耗时。在本文中,我们将介绍如何利用ChatGPT,一个强大的自然语言处理模型,提高写…

安卓开发级联显示菜单-省市区显示举例

安卓开发级联显示菜单-省市区显示举例 问题背景 安卓日常开发过程,经常会有需要级联显示的场景,比如省市区显示等,或者各种组织结构级联显示,本文将介绍安卓开发过程实现级联显示的一种方案。 实现效果如下: 问题分…

GaussDB整体性能慢分析

目录 问题描述问题现象告警业务影响原因分析分析步骤分析定位方法步骤一步骤二步骤三步骤四CPU满I/O满或者I/O异常内存满网络异常 步骤五并发问题数据库配置问题异常等待事件长时间性能下降短时性能抖动不优SQL 问题描述 整体性能慢。不满足客户作业对时延要求或者不满足客户预…

微信小程序 u-picker 三级联动 uView

微信小程序 u-picker 三级联动 uView 场景 移动端微信小程序框架 uView 中的 u-picker 实现三级联动 数据是一级一级加载的 [12,1201,120101] 多列联动 先了解属性参数 mode可以设置为:time、region、selector、multiSelector,区分时间、地区、单列&am…

2022高教社杯全国大学生数学建模竞赛B题解析(更新完结)

2022高教社杯全国大学生数学建模竞赛B题解析(更新完结) 题目解析前言问题一1.11.21.3问题二 题目 B 题 无人机遂行编队飞行中的纯方位无源定位 无人机集群在遂行编队飞行时,为避免外界干扰,应尽可能保持电磁静默,少向…

LC-LCP 41. 黑白翻转棋

LCP 41. 黑白翻转棋 难度中等32 在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 "X", 白棋记作字母 "O",空余位置记作 "."。当落下的棋子与其他相同颜色的棋子在行、列或对角线完全包围(中间不…

Kotlin 一劳永逸实现 TAG

1 TAG 经典写法 对于 Android 开发,当我们需要在类中打印 Log 时,通常在Java中会这么定义一个 TAG: private static final String TAG "TestClass"; 或者不具体指定名字: private static final String TAG TestClass.…

Java粮油质量管控防伪溯源系统源码 粮油MES源码

Java粮油质量管控防伪溯源系统源码, 粮油MES源码,有演示,有源码。 一、全生命周期的追踪与溯源 (1)通过一物一码管理生产销售、追踪包装关联,配送管理及终端查询来实现窜货预警,及时处理问题&…

(一)rstudio容器用户配置root权限,安装conda

1、查看运行中的容器:docker ps 2、进入容器:docker exec -it my_rstudio /bin/bash 3、安装工具:apt-get install 4、查看权限配置文件:cat /etc/sudo 5、查看确认用户(rstudio):cat /etc/passwd | cut -d: -f1 ro…

判断给定数据中是否存在True只要存在一个True结果为Turenp.sometrue()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 判断给定数据中是否存在True 只要存在一个True结果为Ture np.sometrue() 选择题 下列说法错误的是? import numpy as np a np.array([False, False, True]) print("【显示】a "…

三年时间打磨,MeterSphere v2.10 LTS版本给测试用户带来的价值

2023年5月,MeterSphere开源持续测试平台(https://github.com/metersphere)发布了v2.10 LTS版本。这是这个开源项目自2020年2月写下第一行代码后发布的第三个LTS版本。 在软件行业,LTS(即Long Term Support&#xff09…

SQL太慢如何进行优化

1.慢SQL优化思路。 慢查询日志记录慢SQL explain分析SQL的执行计划 profile 分析执行耗时 Optimizer Trace分析详情 确定问题并采用相应的措施 1.1 慢查询日志记录慢SQL 如何定位慢SQL呢、我们可以通过慢查询日志来查看慢SQL。默认的情况下呢,MySQL数据库是不开…

C盘文件恢复怎么做?数据恢复,就看这4招!

我一般比较重要的文件都会保存到c盘中。最近电脑有点卡顿,想清理一下不需要的文件,但不小心删除了一个很重要的文件,c盘删除的文件还能恢复吗?谁可以帮我想想c盘中的文件如何恢复呢? C盘对于电脑来说是个很重要的磁盘&…

Linux教程——Vim移动光标快捷键汇总

Vim 文本编辑器中,最简单的移动光标的方式是使用方向键,但这种方式的效率太低,更高效的方式使用快捷键。 Vim 移动光标常用的快捷键及其功能如下面各表所示,需要注意的是,表中所有的快捷键都在命令模式(默…

安卓蓝牙L2CAP协议简介及报文格式

概述 逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)是蓝牙的核心协议,负责适配基带中的上层协议。它同链路管理器并行工作,向上层协议提供定向连接的和无连接的数据业务。L2CAP具有分…

彻底理解SQL中的JOIN

数据准备 -- 建表语句 CREATE TABLE tbl_dept (id int(11) NOT NULL AUTO_INCREMENT,deptName varchar(30) DEFAULT NULL,locAdd varchar(40) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;CREATE TABLE tbl_emp (id int(11) NOT NULL …