python实现电子词典
本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下
服务端
#!/usr/bin/envpython3
from__future__importunicode_literals
#coding=utf-8
fromsocketimport*
importos
importpymysql
importtime
importsys
importsignal
DICT_TEXT="./dict.txt"
HOST='0.0.0.0'
PORT=8000
ADDR=(HOST,PORT)
#主控制流程
defmain():
#连接数据库
db=pymysql.connect\
('localhost','root','123456','dict')
#创建流式套接字
s=socket()
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.bind(ADDR)
s.listen(5)
#或略子进程退出
signal.signal(signal.SIGCHLD,signal.SIG_IGN)
whileTrue:
try:
c,addr=s.accept()
print("Connectfrom",addr)
exceptKeyboardInterrupt:
s.close()
sys.exit("服务器退出")
exceptExceptionase:
print(e)
continue
#创建子进程处理客户端请求
pid=os.fork()
ifpid==0:
s.close()
do_child(c,db)
else:
c.close()
defdo_child(c,db):
#循环接收请求
whileTrue:
data=c.recv(128).decode()
print("Request:",data)
if(notdata)ordata[0]=='E':
c.close()
sys.exit(0)
elifdata[0]=='R':
do_register(c,db,data)
elifdata[0]=="L":
do_login(c,db,data)
elifdata[0]=='Q':
do_query(c,db,data)
elifdata[0]=='H':
do_history(c,db,data)
defdo_register(c,db,data):
l=data.split('')
name=l[1]
passwd=l[2]
cursor=db.cursor()
sql=\
"select*fromuserwherename='%s'"%name
cursor.execute(sql)
r=cursor.fetchone()
ifr!=None:
c.send(b'EXISTS')
return
sql="insertintouser(name,passwd)\
values('%s','%s')"%(name,passwd)
try:
cursor.execute(sql)
db.commit()
c.send(b'OK')
except:
db.rollback()
c.send(b'FALL')
return
else:
print("%s注册成功"%name)
defdo_login(c,db,data):
l=data.split('')
name=l[1]
passwd=l[2]
cursor=db.cursor()
sql="select*fromuserwhere\
name='%s'andpasswd='%s'"%(name,passwd)
cursor.execute(sql)
r=cursor.fetchone()
ifr==None:
c.send('用户名或密码不正确'.encode())
else:
c.send(b'OK')
defdo_query(c,db,data):
l=data.split('')
name=l[1]
word=l[2]
cursor=db.cursor()
definsert_history():
tm=time.ctime()
sql="insertintohist(name,word,time)\
values('%s','%s','%s')"%(name,word,tm)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
return
try:
f=open(DICT_TEXT,'rb')
except:
c.send("500服务端异常".encode())
return
whileTrue:
line=f.readline().decode()
w=line.split('')[0]
if(notline)orw>word:
c.send("没找到该单词".encode())
break
elifw==word:
c.send(b'OK')
time.sleep(0.1)
c.send(line.encode())
insert_history()
break
f.close()
defdo_history(c,db,data):
name=data.split('')[1]
cursor=db.cursor()
try:
sql="select*fromhist\
wherename='%s'"%name
cursor.execute(sql)
r=cursor.fetchall()
ifnotr:
c.send('没有历史记录'.encode())
return
else:
c.send(b'OK')
except:
c.send("数据库查询错误".encode())
return
n=0
foriinr:
n+=1
#最多显示10条
ifn>10:
break
time.sleep(0.1)
msg="%s%s%s"%(i[1],i[2],i[3])
c.send(msg.encode())
time.sleep(0.1)
c.send(b'##')
if__name__=="__main__":
main()
客户端
#!/usr/bin/envpython3
#coding=utf-8
fromsocketimport*
importsys
importgetpass
defmain():
iflen(sys.argv)<3:
print("argviserror")
return
HOST=sys.argv[1]
PORT=int(sys.argv[2])
ADDR=(HOST,PORT)
s=socket()
s.connect(ADDR)
whileTrue:
print('''\n
===========Welcome=========
--1.注册2.登录3.退出--
===========================
''')
try:
cmd=int(input("输入选项>>"))
exceptException:
print("输入命令错误")
continue
ifcmdnotin[1,2,3]:
print("对不起,没有该命令")
sys.stdin.flush()#清除输入
continue
elifcmd==1:
name=do_register(s)
ifname!=1:
print("注册成功,直接登录!")
login(s,name)
else:
print("注册失败!")
elifcmd==2:
name=do_login(s)
ifname!=1:
print("登录成功!")
login(s,name)
else:
print("登录失败!")
elifcmd==3:
s.send(b"E")
sys.exit("谢谢使用")
defdo_register(s):
whileTrue:
name=input("用户名:")
passwd=getpass.getpass("密码:")
passwd1=getpass.getpass("确认密码:")
if(''inname)or(''inpasswd):
print("用户名密码不允许空格")
continue
ifpasswd!=passwd1:
print("两次密码不一致")
continue
msg="R{}{}".format(name,passwd)
#发送请求
s.send(msg.encode())
#接收回复
data=s.recv(128).decode()
ifdata=="OK":
returnname
elifdata=='EXISTS':
print("该用户已存在")
return1
else:
return1
defdo_login(s):
name=input("用户名:")
passwd=getpass.getpass("密码:")
msg="L{}{}".format(name,passwd)
s.send(msg.encode())
data=s.recv(128).decode()
ifdata=='OK':
returnname
else:
print(data)
return1
deflogin(s,name):
whileTrue:
print('''\n
===========查询界面============
1.查词2.历史记录3.注销
=============================
''')
try:
cmd=int(input("输入选项>>"))
exceptException:
print("命令错误")
continue
ifcmdnotin[1,2,3]:
print("对不起,没有该命令")
sys.stdin.flush()#清除输入
continue
elifcmd==1:
do_query(s,name)
elifcmd==2:
do_history(s,name)
elifcmd==3:
return
defdo_query(s,name):
whileTrue:
word=input("单词:")
ifword=="##":
break
msg="Q{}{}".format(name,word)
s.send(msg.encode())
data=s.recv(128).decode()
ifdata=='OK':
data=s.recv(2048).decode()
print(data)
else:
print(data)
defdo_history(s,name):
msg="H{}".format(name)
s.send(msg.encode())
data=s.recv(128).decode()
ifdata=='OK':
whileTrue:
data=s.recv(1024).decode()
ifdata=="##":
break
print(data)
else:
print(data)
if__name__=="__main__":
main()
插入字典
importpymysql
importre
f=open('dict.txt')
db=pymysql.connect\
('localhost','root','123456','dict')
cursor=db.cursor()
forlineinf:
try:
l=re.split("[]+",line)
except:
pass
sql="insertintowords(word,interpret)\
values('%s','%s')"%(l[0],''.join(l[1:]))
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
f.close()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。