版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于python的英文词典的建立摘要 基于python的英文词典的建立是对于mysql数据库表的增删改查的应用,通过数据的显示可以加强用户对于自身的不足有了更多的把控,可以更全面的去复习英语知识,最终促进用户的英语水平更上一层台阶。本文主要介绍在设计这款英文词典中所构思的各种模块,所用到的具体的方法,所遇到的问题和具体解决的办法。首先先建立思路,确定下来需要实现哪些功能,以及对应功能需要用到的相应的代码设计,接下来去具体一一实现,验证代码的正确性和所呈现的效果是否是所需要的,最终设计出简易字典。该模块主要以Django模块为主,运用python的语言,使用mysql实现数据库,运用MVC框架,
2、Model(模型)、控制器(controller)和View(视图)12p45-47,最终实现程序,为用户带来方便。关键词: 字典 Python Mysql MVC DjangoThe Establishment of an English Dictionary Based on PythonAbstract The establishment of English dictionary based on python is the application of adding, deleting, modifying and checking mysql database tables. Th
3、rough data display, users can have more control over their own shortcomings, review English knowledge more comprehensively, and finally promote users English level to a higher level. This paper mainly introduces the various modules I conceived in the design of this English dictionary, the specific m
4、ethods used, the problems encountered and the specific solutions. First of all, I set up the ideological system to determine what functions I need to achieve and the corresponding code design that may be needed for the corresponding functions. Then I will try to achieve the correctness of the code o
5、ne by one and see if what I need is what I want, and finally achieve a simple dictionary. This module mainly focuses on Django module, USES python language, USES mysql to implement database, USES MTV framework, Model, Template and View, and finally implements the program, bringing convenience to use
6、rs. keywords: Dictionary Python Mysql MVC Django目 录引 言 41.设计思路分析 51.1建立数据表 51.2结构设计 51.3具体功能模块实践 52.功能板块详解 72.1 程序流程图详解 72.2 代码及界面详解 8结 论 14参考文献 15致 谢 16附 录 17引 言本设计为设计英文词典过程中所需用到的python各种代码的作用与实现,会使用到的语法知识点。代码主要设计成了三个部分,分别对应的是:(1)客户端:满足发起请求和获取结果的主要功能;(2)服务端:逻辑处理部分,与客户端的交互;(3)服务端数据处理部分,这一部分专门负责客户端的数
7、据的保存。主要采用的是套接字方法实现这些具体功能。课题任务的内容:主要介绍自己所编写的英文词典所能实现的基本功能以及在实现功能的过程中所遇到的一些问题与相应的解决方案。其中主要是用到了socket的套接字和多进程并发模型,socket套接字使用的是udp套接字1p23-32,这样虽然有一定的丢失的风险,但是udp操作的比tcp来说会快一些,不会因为等待一个进程而卡顿在那里,其他进程都阻塞等待。基本要求:的设计代码部分一共分为3个版块,客户端版块要求:历史记录方法查找要能实现,一号界面和二号界面可以随意来回的切换不会报错,客户注册功能可以正确的实现,可以正确的实现后跳转到二级界面;服务端逻辑部分
8、的要求:这一部分做要讲的是前后端交互的,服务端的逻辑非常重要,客户端返回的值返回到服务端之后,服务端能正确的接收和给出正确的反馈,这是必须要做到的要求,另外创建多进程以确保客户端访问量大了之后不会出现卡顿,多进程一实现就要注意僵尸进程的出现,要避免僵尸进程浪费内存;服务端数据处理部分要求:这一部分主要就是和数据库的交互了,将所有用户的信息存在里面,包括用户名密码还有各个用户的搜索记录等等,要能正确的存储是一个很关键的要求。研究手段:针对增删改查所要实现的代码问题是这样去解决的,首先明确增删改查是在mysql表格中去实现的,所以要去查找关于mysql的有关书籍3p32-35,确定好方向,然后查找
9、出自己需要的代码类型;针对客户端与服务端交互的问题是这样去解决的,首相客户端和服务端一定要统一好对接的“暗号”,譬如,客户端登录之后请求发送给了服务端,服务端接受请求,寻找数据库发现有这个用户那么就给客户端返回一个“ok”,客户端接收到“ok”之后就可以登录界面,如果没有该用户那么就返回一个“用户不存在”的返回值给客户端,客户端直接打印出来给用户看;代码上的小问题是通过查阅文献来解决的需求的。1.设计思路分析1.1建立数据表如果完成了英文词典的建立,那么用户登录信息,浏览记录等就需要拥有一个表去存储这些十分重要的数据,不然用户这一次登录了,下一次再进行登录显示不存在用户或者其他错误的话就会很麻
10、烦。于是首先就要先创建一个对应的数据库,命名为dict。在数据库中创建对应的3张表4p12-14,首先创建一张用户信息表,用户信息表以便于存储用户登录的用户名和用户密码,对应的数据表的结构为:user :id name passwd ;其次需要一张历史记录表,用来存储所有用户的历史记录查询,以便于用户在自己客户端操作查询历史记录时不会出现错误,对应的数据表的结构:hist : id name word time,其中time显示为用户在什么时间查询了这条记录。最后也是最重要的一条数据表,那就是单词表,这将是这个软件所有的词汇量的表现,所有的单词和它的意思都在这张表内,说得简单点,用户查询一个英
11、文单词的意思其实就是在调用单词表中的某一条数据,单词数据表的结构:words:id word mean。1.2 结构设计一段程序的设计首先就要确定好模块的选择,模块主要分为MVC和MTV模块,在这篇设计中使用的是MVC模块类型13p1-5。首先将整体的需求划分为3大模块,(1)服务端1:逻辑处理部分;(2)服务端2:数据处理部分;(3)用户端:发送请求接收结果,展示结果。如何进行结构的封装的话,是选择一些类与函数方法进行封装。这次的英文词典的建立需要满足以下功能:登录,注册,查询单词,查看历史记录。另外在服务端需要自己设计一些协议对应的特殊字符,用户点击登录按钮时,需要向服务端发一个“L”2p
12、122-125,服务端接收到请求给客户端进行回复。用户点击注册按钮时,需要向服务端发一个“R”,服务端接收到请求给客户端进行回复。用户点击查单词按钮时,需要向服务端发一个“Q”,服务端接收到请求给客户端进行回复。用户点击历史记录按钮时,需要向服务端发一个“H”,服务端接收到请求给客户端进行回复。如果用户点击退出按钮时,向服务器发送一个“E”,服务端接收到请求然后退出该用户。1.3 具体功能模块实践可以将模块具体的分为以下几个大部分:注册部分;登录部分;退出部分;查单词部分;历史记录部分。首先注册部分客户端需要完成在输入完注册用户名与密码之后向服务端发起请求,然后等待结果;注册的服务端接收到来自
13、客户端的请求后首先判断该用户是否可以注册4p45-49,如果该用户名已经存在的话是不允许被注册的,返回客户端“N”通知客户端结束,如果可以注册返回一个“Y”然后数据库将这条数据插入“user”表中,通知客户端创建成功。登录部分5p33-35:客户端需要实现的是:输入用户名和密码,然后客户端发送请求给服务端,等待结果响应;服务端接收到来自客户端的请求,到“user”数据库中核实是否存在这样一个用户密码是否正确,如果可以登录则返回一个“Y”通知客户端登陆成功,如果登录失败则返回一个“N”通知客户端结束。查单词部分:客户端点击查单词按钮给服务端发送请求,等待响应结果;服务端接收到客户端的请求,带着客
14、户所需的单词到数据库中的“words”表中查询与之相对应的单词,然后给客户端返回对应的结果。历史记录部分:客户端点击历史记录按钮给服务端发送请求,等待响应结果;服务端接收到客户端的请求,到数据库的hist表中寻找历史记录然后呈现出来返还给客户端。2.功能板块详解2.1 程序流程图详解图1 思维流程如上述流程图所示,这是的英语词典的基本页面的建立。首先打开这个小软件会进入到一级界面,也就是注册、登录、退出界面。点击注册会让你填写用户名和密码,如果成功的话用户信息将存储到数据库6p11-15中,方便下一次的登录;如果失败的话显示失败重新返回第一级界面。点击登录按键,如果用户名或者密码输入失败导致登
15、录失败的话会跳转回一级界面;如果登录成功的话会跳转到二级界面,二级界面为查单词、历史记录、注销。点击查单词选项,输入你想要寻找的单词,如果找到该单词,那么字典将会把该单词的注解和单词本身打印出来显示给客户;如果你输入的单词不对的话或者没有这个单词的话会跳出“未找到该单词”的字样。二级界面点击历史记录按钮,系统将会匹配你现在登录的用户,到数据库中给你匹配到相对的历史记录,然后打印出最近的10条记录。如果二级界面点击注销按钮,那么将会注销掉当前用户然后自动返回一级界面。如果在一级界面你点击了退出按钮那么将会跳出“谢谢使用”,然后结束英文词典小程序。以上就是的英文词典的基本设计思路,后续代码就将围绕
16、这个思路去展开。图2 功能模型图3 结构2.2 代码及界面详解界面代码设置:图4 一级界面如图所示,这是所创建的一级界面的图示,分为了注册,登录,退出三个功能,定义这个界面是循环的(while True),只要用户不去选择3号退出选项就会一直有这样的一级界面,定义一个变量“cmd”就是用户会输入的序号值,选到相对应的序号值时就会调用定义的相对应的函数方法7p66-69。图5 二级界面二级界面和一级界面性质是一样的,二级界面是由一级界面登录成功后跳出来的,同样的点击相对应的编号可以跳转到相对应的函数方法用以实现所需实现的目的。图6 注册功能这是的注册功能,客户端定义do_register方法8p
17、156-160,创建新的name,password,定义一个新的变量,将“R”+name+password 打包赋值给变量,send发送请求给服务端,服务端先进入数据库查询该用户是否已经存在,如果存在的话返回一个注册失败给客户端,如果用户名与数据库中所有用户名不重复,则创建该用户到数据库。另外值得关注的是创建成功之后依旧还是在第一界面而不会跳转到第二界面。图7 登录功能图8 登录功能登录操作如图所示,输入2号按键,进入登录界面,如果你输入错误的密码或者用户名时,服务端执行else命令,向客户端端发送fail命令9p49-55,客户端接收到fail就会显示给客户登录失败;登录时执行login函数
18、方法,会将你输入的用户名和密码带进数据库中进行匹配,如果是可以匹配到相同的用户名与密码的话,将会返回True,服务端接受到True然后就会返回给客户端一个OK,客户端接收到OK就知道匹配成功,返回登录成功,并且紧跟着跳转到2级界面。图9 历史记录图10 历史记录图11 历史记录图12 历史记录如上图所示,这些基本就是查询历史记录所会出现的所有可能性。当你登录成功后你在2级界面点击2号历史记录按钮后,系统将会自动去匹配相对应的用户的历史记录,如果你是第一次登录还没有进行过任何的查询单词的话,历史记录就会跳出“您还没有查询记录”的字眼;如果你的用户有过搜索记录的话,那么系统会将在数据库Hist表中
19、相对应的数据匹配打印出来,显示给用户看,并且后面还会有显示你是在什么时间搜索的这个单词,显示时间的话是直接在python里面导入的time模块,这是python自带的功能模块10p71-79,用起来很方便。可以对比图11和图12,一张是用户界面显示的历史记录,一张是数据库存储的历史记录,可以看到用户界面只能看到10条记录,而数据库中历史记录表中却存放着用户的所有历史记录,这是通过定义了一个history函数方法来实现的,只抓取数据库中前十条数据。图13 查询功能图14 查询功能如上图所示,这是查询单词的功能。在登录进入二级界面后,点击1号按钮查单词,本篇设计的英文词典库是从网上找到的一份比较完
20、整比较全的英文词典库,几乎包含了所有的英文单词,当你输入单词时,下面会跳出对应的单词和其所表示的注解,但是如果没有找到单词的话则会跳出“没有找到该单词”的字样。本级页面默认会一直执行下去,但当你输入“#”时,会结束查单词功能界面,重新跳回二级界面。结 论本篇设计主要介绍了简易英文词典的建立过程,最终是实现了简易得英文词典的诸多功能:登录、退出、注册、查找单词、查询历史记录和注销。在毕业设计期间尽管遇到了很多的麻烦,但还是一一克服了,最终成功的将代码转换为了小程序。其中还是碰到了一些值得思考的问题,其中最主要的框架问题MTV和MVC的选择,经过抉择选择了MVC框架。MVC全名是Model Vie
21、w Controller,是模型(model)视图(view)控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新11p79-88。其次需要解决的就是套接字的相关知识,因为
22、本文所用的很大一部分是套接字的使用。套接字:实现网络编程进行数据传输的一种技术手段,套接字分为流式套接字(tcp)和数据报套接字(udp),本设计采用的是流式套接字,主要步骤为:(1)创建套接字;(2)绑定地址; (3)设置监听队列;(4)等待处理客户端连接请求; (5)消息的收发(6)关闭套接字。总体来说这篇设计还是有一些难度的,在4年的大学知识上拓宽了不少,这篇设计主要就是在代码的实现上面和框架思想流程上面花了很大一部分功夫,框架一旦搭好,接下来就轻松一些了。在编写代码框架时有过一些时间的犹豫,究竟是使用MTV模式框架还是MVC模式框架,最终决定了选择MVC模式框架,因为这次做的简易的英文
23、词典走的是http协议,这样思路更明确一些。除了问题外,还是有很多的收获的,通过这次的毕业设计对自己知识的积累又更深了一些,认识了网络的tcp协议,还有udp协议;网络模型的搭建,各个模块间的关系建立13p22-29。认为的这次毕业设计总体来说还是可圈可点的。本人的设计“基于python的英文词典的建立”相较于其他的类似的英文词典的优势:1.界面浅显易懂,大众都可以操作,不论是什么年龄段的;2.代码量较少,代码类型见名知意,虽然看上去不是优势,但是代码量的多少决定着后期的修改程序的困难程度,并且寻找问题可以直接找到对应的问题;3.历史记录可以精确到时分秒,其他类似的设计有的查询是不包括时间这一
24、项的,有的只是大概到年月日,没有去更加的精确。参考文献1 张若愚.Python科学计算M.北京:清华大学出版社,2012(01)2 张若愚.Python科学计算(第二版)M.北京:清华大学出版社,2016(04)3 唐汉明 翟振兴 关宝军 王洪权 黄潇.深入浅出MySQLM:人民邮电出版社, 2014(01)4 Albert Sweigart.python编程快速上手M:人民邮电出版社,2016(07) 5 Luciano Ramalho.流畅的pythonM:人民邮电出版社, 2017(05)6 Jeff Forcier / Paul Bissex.Django Web开发指南M:机械工业出
25、版社, 20097 juila Elman/Mark Lavin.轻量级DjangoM:中国电力出版社,2016(11)8 段艺 涂伟忠.Django开发从入门到实践M:机械工业出版社, 2019(11)9 Eric matthes.python编程从入门到实践M:人民邮电出版社, 2016年(07) 10 Baron Schwartz,Peter Zaitsev,Vadim Tkachenko.高性能MYSQLM :电子工业出版社 ,2013(05)11 西泽梦路.MySQL基础教程M:人民邮电出版社, 2018(01)12 王耀.深入理解Spring MVC源代码M:中国水利水电出版社,
26、2019(11)13 小甲鱼 李佳宇.零基础入门学习PythonM:清华大学出版社, 2016(11)致 谢感到是十分的荣幸可以拥有这么一次编写设计的机会,这次编写设计充分的展示了在大学四年中的所有所学所知所感,将所有的大学知识进行了融会贯通,是一次十分重要的设计。在编写设计的期间,经常会有一些不懂的不会的问题,就会向的指导老师费老师指教问题,费老师接到的消息都能在第一时间联系,指导解决的问题,然后询问的设计进度,督促的学习。真的十分荣幸能有费老师当做指导老师来指导的设计,的毕业设计的完成脱离不了指导老师的功劳。编写设计都是要有理论基础支撑的,在确定了的设计题目之后也是有过一大段时间区寻找自己
27、相关的设计文献、知识和一些相关理论,在搭建自己的设计主体框架的过程中真的十分困难,问了的指导老师究竟该怎么办,指导老师给指明了方向,于是在指导老师的指导下很快的确立好了方向和主体框架,然后一步一步完成了的毕业设计,非常谢谢指导老师的帮助。大学四年匆匆一眼就过去了,还没有什么感触就已经到了离开校园的时刻了。这篇设计将是在大学里留下的最后一笔,再见了的母校,再见了同学老师。在此再一次的感谢费老师的设计指导,祝您工作顺利。附录客户端 : 发起请求获取结果from socket import *import sys# 全局变量 服务器地址ADDR = (,8000)def do_qu
28、ery(s,name): while True: word = input(单词:) if word = #: break msg = Q %s %s%(name,word) s.send(msg.encode() # 发送请求 # 无论是否查到单词都进行打印 data = s.recv(1024).decode() print(data)# 历史记录def do_hist(s,name): msg = H +name s.send(msg.encode() data = s.recv(128).decode() # 判断该用户是否有历史记录 if data = OK: # 接收历史记录 wh
29、ile True: data = s.recv(1024).decode() if data = #: break print(data) else: print(您还没有查询记录)# 二级界面def second(s,name): while True: print(=Query=) print(1. 查单词 2. 历史记录 3.注销) print(=) cmd = input(输入命令:) if cmd = 1: do_query(s,name) elif cmd = 2: do_hist(s,name) elif cmd = 3: Returnelse: print(请选择正确命令)#
30、注册功能def do_register(s): name = input(Name:) passwd = input(Password:) # 发送请求 msg = R %s %s%(name,passwd) s.send(msg.encode() data = s.recv(128).decode() # 等待结果 if data = OK: print(注册成功) else: print(注册失败)# 登录功能def do_login(s): name = input(Name:) passwd = input(Password:) # 发送请求 msg = L %s %s%(name,p
31、asswd) s.send(msg.encode() data = s.recv(128).decode() # 等待结果 if data = OK: print(登录成功) second(s,name) else: print(登录失败)# 链接服务器def main(): s = socket() s.connect(ADDR) # 发起链接 # 一级界面 while True: print(=Welcome=) print(1. 注册 2. 登录 3.退出) print(=) cmd = input(输入命令:) if cmd = 1: do_register(s) elif cmd =
32、 2: do_login(s) elif cmd = 3: s.send(bE) sys.exit(谢谢使用) else: print(请选择正确命令)if _name_ = _main_:main()服务端逻辑处理from socket import *from multiprocessing import Processimport signal, sysfrom dict_db import Databasefrom time import sleep# 定义地址为全局变量HOST = PORT = 8000ADDR = (HOST, PORT)# 实例化一个对象帮助处理数
33、据库交互的工作 (链接数据库)db = Database()# 注册处理函数def do_register(connfd, name, passwd): # 调用数据处理方法判定可否注册 if db.register(name, passwd): connfd.send(bOK) else: connfd.send(bFAIL)# 处理登录请求def do_login(connfd, name, passwd): if db.login(name, passwd): connfd.send(bOK) else: connfd.send(bFAIL)# 处理单词查询def do_query(co
34、nnfd, name, word): db.insert_history(name, word) # 插入历史记录 mean = db.query(word) # 查单词 msg = %s : %s % (word, mean) connfd.send(msg.encode()# 处理历史记录def do_hist(connfd, name): r = db.history(name) # 获取历史记录查询结果 if not r: # 没有历史记录 connfd.send(bFAIL) return else: connfd.send(bOK) for i in r: # i - (name
35、word time) msg = %s %s %s % i sleep(0.1) connfd.send(msg.encode() sleep(0.1) connfd.send(b#)# 处理客户端请求def handle(connfd): db.create_cursor() # 每个进程创建各自的游标 while True: data = connfd.recv(1024).decode() # 接收请求 tmp = data.split( ) if not tmp or tmp0 = E: connfd.close() db.cur.close() return elif tmp0 =
36、R: # R name password do_register(connfd, tmp1, tmp2) elif tmp0 = L: # L name password do_login(connfd, tmp1, tmp2) elif tmp0 = Q: # Q name word do_query(connfd, tmp1, tmp2) elif tmp0 = H: # H name do_hist(connfd, tmp1)# 创建多进程并发模型def main(): # 创建套接字 s = socket() s.bind(ADDR) s.listen(3) # 处理僵尸进程 sign
37、al.signal(signal.SIGCHLD, signal.SIG_IGN) print(Listen the port 8000) while True: # 等待客户端链接 c, addr = s.accept() print(Connect from, addr) # 为每个客户端创建进程 p = Process(target=handle, args=(c,) p.start()if _name_ = _main_:main()服务端数据处理部分import pymysqlclass Database: def _init_(self): self.host = self.port = 3306 self.user = root self.password = 123456 self.charset=utf8 self.database = dict self.connect_database() def connect_database(self): self.db = pymysql.connect(host = self.host, port = self.port, user = self.user, password =self.password,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 凉山州经济和信息化局招聘园区产业发展服务专员考试真题2025
- 2型糖尿病胰岛β细胞功能评估与保护临床专家共识总结2026
- 简化型咨询合同协议
- 2023年超小型微特电机企业组织架构及部门职责
- 中班安全出口
- 遗传性耳聋基因筛查技术
- 高职单招语文模拟试题及答案详解
- 电焊工安全培训试卷测试题及答案
- (2026年)弃土场合同范本
- 2026笔试结构化面试题及答案
- 2026年高考政治时政热点(必背)
- 2026年陕西高速铁路投资有限公司招聘(5人)考试参考试题及答案解析
- 2026年云南新版基层法律工作试题库(附含参考答案)
- 2026上半年四川遂宁产业投资集团有限公司招聘11人笔试历年备考题库附带答案详解
- 2026年镇江市交通运输系统事业单位人员招聘考试备考试题及答案详解
- 4输变电工程施工质量验收统一表式(电缆工程电气专业)-2024年版
- 酶在化工、轻工方面的应用
- 工程项目施工人员安全指导手册75页课件
- 人卫社系列丛书编写要求
- 线型低密度聚乙烯
- 中医内科出科试题与答案
评论
0/150
提交评论