目录
废话不多说下面看严谨版不带web界面的:
总结:
写这个博客呢主要是因为之前学校有个简单的课设要做,想着白嫖一个交差的,但是找了一圈没找到合适的能拿来用的,我就下班用了两晚手搓了一个代码。
具体的建表语句我当时也没记录了,给大家把表结构粘出来可以照猫画虎去弄,就行。
整体就是python+mysql,不过我对里面一些逻辑还是做了很多限制和判断的。
然后有需要gui或者web界面的,可以自己搞一搞,gui我这里没有。不过web的我之前有简单套用flask模板做了一个很简单的,但是实现逻辑没有什么初版严谨性,如果需要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(-----.-.------.-..--)