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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。