python3+redis问题求解
学生管理系统 更新学生信息没做出来,找个大神补全下。谢谢。
# 记录:
# bug:操作后若退出需要两次退出才行。 待修复
# 下一步:链接redis进行使用。
# 更新学生库信息 待完成 import re
import redis,chardet
class stu_card:
cont = {}
def main(self, student):
print("")
print("1 : 增加学生信息卡;2 : 删除学生信息卡;\n3 : 查看学生信息卡;4 : 修改学生信息卡;\n5 : 查看所有学生信息卡;6 : 退出学生信息系统;\n7:更新学生库信息")
num = input("请选择所需功能:")
if num == "":
self.add_card()
return False
elif num == "":
self.del_card()
return False
elif num == "":
self.show_card()
return False
elif num == "":
self.edit_card()
return False
elif num == "":
self.all_card()
self.main(student)
return False
elif num == "":
print("您已退出该系统")
return False
elif num == "":
self.stu_upd()
return False
elif num == "":
self.main(student)
return False
else:
print("操作错误,自动退出")
return False # 添加学生 引导并获取值
def add_card(self):
self.cont = {}
name = input("请输入姓名:")
self.check_input(1, name)
sax = input("请输入性别: (男/女)")
self.check_input(2, sax)
age = input("请输入年龄: (数字)")
self.check_input(3, age)
stu_nu = input("请输入学号:(数字)")
self.check_input(4, stu_nu)
self.info_card() # 删除学生
def del_card(self):
if len(student) == 0:
print("学生卡为空,请及时添加!")
else:
for nu, stu in enumerate(student):
print(nu + 1, "号学生:", "姓名:", stu['name'], "性别:", stu['sax'], "年龄:", stu['age'], "学号:", stu['stu_nu'])
del_nu = input("请选择要删除的学生编号:")
del_nu = int(del_nu) - 1
if del_nu <= len(student):
r.hdel('users',del_nu)
student.pop(del_nu)
print("删除成功!")
else:
print("信息有误,操作失败")
self.main(student) # 搜索学生 引导并获取值
def show_card(self):
print("精确搜索:\n 1 姓名;2 学号;\n范围搜索:\n 3 性别;4 年龄段(以空格隔开); ")
search = int(input("请选择搜索条件:"))
if search == 1:
name = input("请输入姓名:")
self.check_input(1, name)
self.search('name')
elif search == 2:
stu_nu = input("请输入学号:")
self.check_input(4, stu_nu)
self.search('stu_nu')
elif search == 3:
sax = input("请输入性别:")
self.check_input(2, sax)
self.search('sax')
elif search == 4:
age = input("请输入年龄段:")
age = self.check_input(5, age)
self.search('age', age)
else:
return False # 编辑学生信息 引导并获取值
def edit_card(self, ):
self.all_card()
edit = input("请输入学生编号进行修改:")
self.all_card(nu=int(edit)) # 提交学生修改、添加
def info_card(self, num=-1):
if num == -1:
student.append(self.cont)
r.hset('users',r.hlen('users'),str(self.cont))
print("学生:", self.cont['name'], "信息添加成功")
self.cont = {}
self.main(student)
elif num >= 0:
student[num] = self.cont
r.hset('users', num, str(self.cont))
print("学生:", self.cont['name'], "信息更新成功")
self.cont = {}
self.main(student)
elif num >= len(student):
print("信息有误,操作失败")
self.main(student)
return False # 处理显示信息
def all_card(self, stu=[], nu=-1):
if nu == -1:
if stu == []:
if len(student) == 0:
print("当前没有学生信息,请及时添加!")
else:
for nu, stu in enumerate(student):
print(nu + 1, "号学生:", "姓名:", stu['name'], "性别:", stu['sax'], "年龄:", stu['age'], "学号:",
stu['stu_nu'])
elif stu == ['no search']:
print("搜索结果为空")
self.main(student)
else:
print("查询共有", len(stu), "位学生")
for nu, st in enumerate(stu):
print(nu + 1, "号学生:", "姓名:", st['name'], "性别:", st['sax'], "年龄:", st['age'], "学号:",
st['stu_nu'])
elif nu >= 1 and nu <= len(student):
self.cont = {}
nu = nu - 1
print("您正在修改", student[nu]['name'], "的信息,不修改请直接回车")
self.cont['name'] = student[nu]['name']
self.cont['sax'] = student[nu]['sax']
self.cont['age'] = student[nu]['age']
self.cont['stu_nu'] = student[nu]['stu_nu']
new_name = input("原姓名:%s;新姓名:" % (student[nu]['name']))
if len(new_name.strip(' ')) > 0:
del self.cont['name']
self.check_input(1, new_name)
new_sax = input("原性别:%s;新性别:" % (student[nu]['sax']))
if len(new_sax.strip(' ')) > 0:
del self.cont['sax']
self.check_input(2, new_sax)
new_age = input("原年龄:%s;新年龄:" % (student[nu]['age']))
if len(new_age.strip(' ')) > 0:
del self.cont['age']
self.check_input(3, new_age)
new_stu_nu = input("原学号:%s;新学号:" % (student[nu]['stu_nu']))
if len(new_stu_nu.strip(' ')) > 0:
del self.cont['stu_nu']
self.check_input(4, new_stu_nu)
self.info_card(nu)
else:
print("编号有误,请从新选择")
self.edit_card() # 检查输入信息
def check_input(self, nu, che):
if nu == 1:
if 'name' in self.cont.keys():
pass
else:
che = re.sub('[0-9]', ' ', che)
che = che.strip(' ')
if che == '':
print("姓名输入错误")
name = input("请输入姓名:")
self.check_input(1, name)
else:
self.cont['name'] = che
return True
elif nu == 2:
if 'sax' in self.cont.keys():
pass
else:
if che == "男" or che == "女":
self.cont['sax'] = che
return True
else:
print("性别格式错误")
sax = input("请输入性别: (男/女)")
self.check_input(2, sax)
elif nu == 3:
if 'age' in self.cont.keys():
pass
else:
if che.isdigit() and int(che) >= 6 and int(che) <= 70:
self.cont['age'] = che
return True
else:
print("学生年龄不合法!")
age = input("请输入年龄: (数字)")
self.check_input(3, age)
elif nu == 4:
if 'stu_nu' in self.cont.keys():
pass
else:
if che.isdigit():
self.cont['stu_nu'] = int(che)
return True
else:
print("学号不正确,请重新输入")
stu_nu = input("请输入学号:(数字)")
self.check_input(4, stu_nu)
elif nu == 5:
che = che.split(' ')
che[0] = int(che[0])
che[1] = int(che[1])
if che[0] < che[1]:
return che
else:
print("年龄不正确,请重新输入")
age = input("请输入年龄段(以空格隔开):")
self.check_input(5, age)
else:
return False # 处理搜索学生信息
def search(self, nu, che=[]):
stu = []
if nu == 'name' or nu == 'sax' or nu == 'stu_nu':
for st in student:
if self.cont[nu] in st[nu]:
stu.append(st)
if stu == []:
stu = ['no search']
elif nu == 'age':
for st in student:
if che[0] <= st['age'] and che[1] >= st['age']:
stu.append(st)
if stu == []:
stu = ['no search']
self.all_card(stu)
#更新学生库 待完成
def stu_upd(self):
print("我也想更新啊")
self.main(student)
stu = stu_card()
pool=redis.ConnectionPool(host='localhost',port=6379,password="5tgbnhy67ujm")
r=redis.Redis(connection_pool=pool)
print("欢迎进入学生管理系统!")
print("功能详情:")
student=r.hvals('users') #获取学生信息
n_student=[]
for v in student:
#user=chardet.detect(v) #检测编码类型
user=v.decode('utf-8')
n_student.append(eval(user)) #str转dict并重组student
student=n_student
stu.main(student)
# while stu.main(student) != False:
# pass
问题源码
更加希望能够优化下。
redis存储学生信息用的是hash,key是自然数,val是字符串(json格式的),编码是utf-8

邮箱: hkdnxycz@outlook.com 谢谢
python3+redis问题求解的更多相关文章
- python3 Redis未授权检测脚本
`import sys import getopt import socket def get_target(): opts, args = getopt.getopt(sys.argv[1:], ' ...
- python3 Redis利用脚本
### Redis weakpassword # 获取password def passwd_dict(dict): with open(str(password_dict), 'r', encodi ...
- 猿说python
一.简介 知识改变命运,程序改变世界.互联网时代潜移默化的改变着我们的生活,伴随技术的进步,我想下一个时代应该属于人工智能和机器学习,属于python. pytho ...
- python教程 - 猿说python
一.简介 知识改变命运,程序改变世界.互联网时代潜移默化的改变着我们的生活,伴随技术的进步,我想下一个时代应该属于人工智能和机器学习,属于python. pytho ...
- python3操作redis
redis也被称为缓存 1.redis是一个key-value存储系统,没有ForeignKey和ManyToMany的字段. 2.在redis中创建的数据彼此之间是没有关系的,所以也被称为是非关系型 ...
- Linux下python3、virtualenv、Mysql、redis安装配置
一.在Linux安装python解释器 1.下载python3源码包 cd /opt/ wget https://www.python.org/ftp/python/3.6.2/Python-3.6. ...
- Linux中python3,django,redis以及mariab的安装
1. Linux中python3,django,redis以及mariab的安装 2. CentOS下编译安装python3 编译安装python3.6的步骤 1.下载python3源码包 wget ...
- Linux下的python3,virtualenv,Mysql、nginx、redis安装配置
常用服务安装部署 学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环境: centos7 + vmware + xshell MYSQL(mariadb) ...
- CentOS7.5搭建Flask环境python3.6+mysql+redis+virtualenv
wget安装环境装备 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncur ...
随机推荐
- Python设计模式 - UML - 通信图(Communication Diagram)
简介 通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的. 通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送 ...
- Docker容器镜像瘦身的三个小窍门(转)
[转自:http://dockone.io/article/8174] 在构建Docker容器时,我们应尽可能减小镜像的大小.使用共享层的镜像尺寸越小,其传输和部署速度越快. 不过在每个RUN语句都会 ...
- 如何给php数组添加元素
以参考下 本文较为详细的总结了php数组添加元素方法.分享给大家供大家参考.具体分析如下: 如果我们是一维数组增加数组元素我们可以使用ArrayListay_push,当然除这种方法之外我们还有更直接 ...
- CRM--自定义stark
一:启动 解释django的启动 完成以上两步,在app01下创建stark.py文件,就会被加载 (admin.py就是这样启动的) 二:注册 三:设计urls 四:增删改查
- stark组件开发之组合搜索基本显示
数据的获取,上一篇,已经有了!然后就是,如何进行展示的问题.到了展示这里,又有了新的问题, 因为从数据库,取得的数据. 分为 queryset 和 tuple 两种数据结构.tuple 中,只是字符串 ...
- ERRORS !MySQL 和 Javaweb 的报错合集
ERROR:1175. You are using safe update mode and you tried to update a table without a WHERE that uses ...
- Oracle通过SCN做增量备份修复DG
DG由于网络原因或者bug原因经常不同步,有时隔得时间久了,就会丢失归档日志,或者长时间的归档恢复较慢,有一种可以基于scn的方式来恢复DG库,使用基于scn的增量备份来恢复standby库可以节省大 ...
- 实际操作--create DB link
我可以查看6D1数据库中的表了:我在哪个表里创建database说明我想访问database中的表~ SELECT * FROM TEST001MX@TESTLINK1 databa ...
- Finance公式说明
公式说明 代码 说明 Y 期末余额 JY 期末借方余额 DY 期末贷方余额 C 期初余额 JC 期初借方余额 DC 期初贷方余额 SY 本期实际发生额 SL 利润表本年实际发生额 SY 期末余额 SJ ...
- 较大的互联网公司对Java的要求(转)
现在各大互联网公司,对Java类的校招要求越来越高,导致很多小伙伴都很迷茫,今天分享一篇谢照东关于Java学习进阶之路,希望能帮助到一些人 佛说五蕴六毒是妄,将因果都念作业障 把看过的书罗列一下 &l ...