-->
   经过多日的实战,总算实现了模糊搜寻功能,开发的阶段也即将进入高潮,虽说当中感觉挺累的,但回过头来看看今天的成果,觉得一切都值得的,其实编程无非用来用去就那么几个函数,用多了自然就熟悉了,想要成就一身本事,光靠看是不够滴,还是得多动手!那么接下来就来讲解下本次更新的内容吧!
   继上次更新完登录环节那部分后,我再次进行了调整,将登录部分完完全全的阉割到函数里面,可以看到,我的主程序启动后,仅仅只用了几行代码,因为真正运作的是背后的函数,这些函数经过无数遍的修改,至今尚有不足之处,可谓是bug连连,那么本次更新的是模糊查询,因为才刚刚学python不久,还没接触数据库,所以我以文本形式将数据写入,然后当用户调用时只需输入要查找的信息的其中一个字符,即可立即显示出来,而此查找的操作得益于re模块,调用了findall函数进行模糊查询,只要找到的内容与用户输入的有关便会将其加入到result里,而为了使打印的效果看起来不那么的僵硬,我还调用了控制台专用的表格函数pylsy,打印出来的效果虽说不是什么高大上,但看起来还是蛮不错的啦,pylsy需要通过pip安装,可以直接在终端输入pip install pylsy,别跟我说你连这个都不知道....
那么接下来的几天,我会继续完成:1,将用户搜寻返回后的相关信息高亮展示,2,继续完善修改用户、自定义增加用户,删除用户等功能。3.因为这个项目纯粹为了练手,所以难免会后期添加或扩展新的功能,但我都会一一列于本博客,4.如果可以,我将会把所有的用户信息进行加密处理,也就是说用户打开、增加用户都将通过加密/解密的操作,当然这一系列操作都由后台完成。5.将(或)提供扩展支持,读取大量用户数据,如果您有一个很大的数据文件,那么你可以将内容导入到程序中进行解析。
大话就先说到这吧,那么下次再见啦!大家有更好的思路或者学习的方式欢迎留言交谈!也希望大家留下你们宝贵的意见。


#coding: utf-8
__author__ = 'Naruto'
import re
from pylsy import pylsytable
def rigster(flog): #用于注册\登录时输入账号密码,参数flog用于判断登录或注册n为登录y为注册
us = input("请输入您的账号:")
ps = input("请输入您的密码:")
check_acount(us,ps,flog) #将参数传给check_acount
def check_acount(arg,pw,flog): #判断用户是否存在或写入配置
num = 0 #用于增量,配置文件第一行用于标识信息,从第二行才开始遍历内容
account = "用户:%s 密码:%s" % (arg, pw) #将用户密码赋于account
dict={} #用于接收切割后的用户信息
with open('Eycheck.conf', 'a+') as df: #加载本地配置文件,并以读写形式追加
df.seek(0) #将文本指针指向0,表示从头开始遍历
line = df.readlines() #遍历文件内容并赋值给line
if line != '': #非空执行下面的代码
for i in line: #通过for循环将line的变量分别赋值给 i
num+=1 #增量
if num >=2: #从第二行开始遍历
user,psd =i.strip('\n').split() #将文本分割为 用户名:admin 密码:admin 的形式
dict[user[3:]]=psd[3:] #通过分片截取冒号以后的字符,也就是账号密码的值,并以key:value形式写入到字典中
for k,v in dict.items(): #用for循环分别将字典的键值写入到k,v
if arg == k and pw == dict[k]: #通过传入的参数(即用户信息)与字典的键值进行动态配对
if flog == "n": #判断登录或注册,n为登录
print("登录成功!")
return True
elif flog =="y": #判断登录或注册,y为注册
print("该用户已存在于数据库中,请直接登录!")
rigster("n")
elif arg ==k and pw != dict[k]:
if flog == "n": #判断登录或注册,n为登录
print("您输入的账号与密码不符")
rigster('n')
elif flog == "y": #判断登录或注册,y为注册
print("该用户名已被占用,请更换!")
rigster('y')
if arg not in dict: #通过上面的配对后都没有找到的情况下进行非操作,如为登录状态则返回该用户不存在,反之则将新用户写入到配置文本
if flog == 'n': #判断登录或注册,n为登录
print("该用户不存在,请重新输入!")
elif flog == 'y': #判断登录或注册,y为注册
df.write('\n' + account) # 如用户名不存在字典中则创建并返回成功!
print('账户创建完毕')
else: #当配置文件为空时写入配置信息
df.write('#===========这里是系统配置文件,请勿随意修改===========#\n' + account)
print("配置与用户信息写入完毕")
def start(): #加载启动的函数
choose = input("是否初次使用本系统? y|n:")
if choose == 'y':
rigster('y')
elif choose == 'n':
rigster('n')
def choose_Box(arg): #用于查询并显示用户信息
attributes = ['姓名', '年龄', '性别', '联系方式']
table = pylsytable(attributes)
tem = []
tem2 = []
tem3 = []
tem4 = []
if arg == 'A':
UserName = input("请输入您要查询的用户名字,(直接输入您要查找的信息的首写字母即可):")
with open("information.dat", 'a+') as df:
df.seek(0)
line = df.read()
tofind = re.escape(UserName)
result = re.findall('.*' + tofind + '.*',line)
for line in result:
name, age, sex, cons = line.strip('\n').split()
tem.append(name[3:])
tem2.append(age[3:])
tem3.append(sex[3:])
tem4.append(cons[5:])
table.add_data('姓名', tem)
table.add_data('年龄', tem2)
table.add_data('性别', tem3)
table.add_data('联系方式', tem4)
print(table)

#=============================================主程序启动=================================================#
if __name__== "__main__": #判断是否为主文件执行
start()
print("欢迎使用Eyinfo个人信息查询系统,文明使用,请勿将他人信息公开")
choose = input("接下来你是想(A.查询用户 B.修改用户信息 C.添加用户信息 D.删除用户信息:)")
if choose == 'A':
choose_Box('A')
elif choose == 'B':
choose_Box('B')
elif choose == 'C':
choose_Box('C')
elif choose == 'D':
choose_Box('D')
else:
print("对不起,您的输入有误,请重新输入!")