基于python的英文詞典的建立_第1頁
基于python的英文詞典的建立_第2頁
基于python的英文詞典的建立_第3頁
基于python的英文詞典的建立_第4頁
基于python的英文詞典的建立_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

基于python的英文詞典的建立摘要基于python的英文詞典的建立是對于mysql數(shù)據(jù)庫表的增刪改查的應用,通過數(shù)據(jù)的顯示可以加強用戶對于自身的不足有了更多的把控,可以更全面的去復習英語知識,最終促進用戶的英語水平更上一層臺階。本文主要介紹在設計這款英文詞典中所構思的各種模塊,所用到的具體的方法,所遇到的問題和具體解決的辦法。首先先建立思路,確定下來需要實現(xiàn)哪些功能,以及對應功能需要用到的相應的代碼設計,接下來去具體一一實現(xiàn),驗證代碼的正確性和所呈現(xiàn)的效果是否是所需要的,最終設計出簡易字典。該模塊主要以Django模塊為主,運用python的語言,使用mysql實現(xiàn)數(shù)據(jù)庫,運用MVC框架,Model(模型)、控制器(controller)和View(視圖)[12]p45-47,最終實現(xiàn)程序,為用戶帶來方便。關鍵詞:字典PythonMysqlMVCDjangoTheEstablishmentofanEnglishDictionaryBasedonPythonAbstractTheestablishmentofEnglishdictionarybasedonpythonistheapplicationofadding,deleting,modifyingandcheckingmysqldatabasetables.Throughdatadisplay,userscanhavemorecontrolovertheirownshortcomings,reviewEnglishknowledgemorecomprehensively,andfinallypromoteusers'Englishleveltoahigherlevel.ThispapermainlyintroducesthevariousmodulesIconceivedinthedesignofthisEnglishdictionary,thespecificmethodsused,theproblemsencounteredandthespecificsolutions.Firstofall,IsetuptheideologicalsystemtodeterminewhatfunctionsIneedtoachieveandthecorrespondingcodedesignthatmaybeneededforthecorrespondingfunctions.ThenIwilltrytoachievethecorrectnessofthecodeonebyoneandseeifwhatIneediswhatIwant,andfinallyachieveasimpledictionary.ThismodulemainlyfocusesonDjangomodule,USESpythonlanguage,USESmysqltoimplementdatabase,USESMTVframework,Model,TemplateandView,andfinallyimplementstheprogram,bringingconveniencetousers.keywords:DictionaryPythonMysqlMVCDjango目錄引言……………41.設計思路分析………………51.1建立數(shù)據(jù)表……………51.2結構設計………………51.3具體功能模塊實踐……………………52.功能板塊詳解………………72.1程序流程圖詳解………………………72.2代碼及界面詳解………………………8結論……………14參考文獻………………………15致謝……………16附錄……………17引言本設計為設計英文詞典過程中所需用到的python各種代碼的作用與實現(xiàn),會使用到的語法知識點。代碼主要設計成了三個部分,分別對應的是:(1)客戶端:滿足發(fā)起請求和獲取結果的主要功能;(2)服務端:邏輯處理部分,與客戶端的交互;(3)服務端數(shù)據(jù)處理部分,這一部分專門負責客戶端的數(shù)據(jù)的保存。主要采用的是套接字方法實現(xiàn)這些具體功能。課題任務的內(nèi)容:主要介紹自己所編寫的英文詞典所能實現(xiàn)的基本功能以及在實現(xiàn)功能的過程中所遇到的一些問題與相應的解決方案。其中主要是用到了socket的套接字和多進程并發(fā)模型,socket套接字使用的是udp套接字[1]p23-32,這樣雖然有一定的丟失的風險,但是udp操作的比tcp來說會快一些,不會因為等待一個進程而卡頓在那里,其他進程都阻塞等待。基本要求:的設計代碼部分一共分為3個版塊,客戶端版塊要求:歷史記錄方法查找要能實現(xiàn),一號界面和二號界面可以隨意來回的切換不會報錯,客戶注冊功能可以正確的實現(xiàn),可以正確的實現(xiàn)后跳轉(zhuǎn)到二級界面;服務端邏輯部分的要求:這一部分做要講的是前后端交互的,服務端的邏輯非常重要,客戶端返回的值返回到服務端之后,服務端能正確的接收和給出正確的反饋,這是必須要做到的要求,另外創(chuàng)建多進程以確??蛻舳嗽L問量大了之后不會出現(xiàn)卡頓,多進程一實現(xiàn)就要注意僵尸進程的出現(xiàn),要避免僵尸進程浪費內(nèi)存;服務端數(shù)據(jù)處理部分要求:這一部分主要就是和數(shù)據(jù)庫的交互了,將所有用戶的信息存在里面,包括用戶名密碼還有各個用戶的搜索記錄等等,要能正確的存儲是一個很關鍵的要求。研究手段:針對增刪改查所要實現(xiàn)的代碼問題是這樣去解決的,首先明確增刪改查是在mysql表格中去實現(xiàn)的,所以要去查找關于mysql的有關書籍[3]p32-35,確定好方向,然后查找出自己需要的代碼類型;針對客戶端與服務端交互的問題是這樣去解決的,首相客戶端和服務端一定要統(tǒng)一好對接的“暗號”,譬如,客戶端登錄之后請求發(fā)送給了服務端,服務端接受請求,尋找數(shù)據(jù)庫發(fā)現(xiàn)有這個用戶那么就給客戶端返回一個“ok”,客戶端接收到“ok”之后就可以登錄界面,如果沒有該用戶那么就返回一個“用戶不存在”的返回值給客戶端,客戶端直接打印出來給用戶看;代碼上的小問題是通過查閱文獻來解決的需求的。1.設計思路分析1.1建立數(shù)據(jù)表如果完成了英文詞典的建立,那么用戶登錄信息,瀏覽記錄等就需要擁有一個表去存儲這些十分重要的數(shù)據(jù),不然用戶這一次登錄了,下一次再進行登錄顯示不存在用戶或者其他錯誤的話就會很麻煩。于是首先就要先創(chuàng)建一個對應的數(shù)據(jù)庫,命名為dict。在數(shù)據(jù)庫中創(chuàng)建對應的3張表[4]p12-14,首先創(chuàng)建一張用戶信息表,用戶信息表以便于存儲用戶登錄的用戶名和用戶密碼,對應的數(shù)據(jù)表的結構為:user:idnamepasswd;其次需要一張歷史記錄表,用來存儲所有用戶的歷史記錄查詢,以便于用戶在自己客戶端操作查詢歷史記錄時不會出現(xiàn)錯誤,對應的數(shù)據(jù)表的結構:hist:idnamewordtime,其中time顯示為用戶在什么時間查詢了這條記錄。最后也是最重要的一條數(shù)據(jù)表,那就是單詞表,這將是這個軟件所有的詞匯量的表現(xiàn),所有的單詞和它的意思都在這張表內(nèi),說得簡單點,用戶查詢一個英文單詞的意思其實就是在調(diào)用單詞表中的某一條數(shù)據(jù),單詞數(shù)據(jù)表的結構:words:idwordmean。1.2結構設計一段程序的設計首先就要確定好模塊的選擇,模塊主要分為MVC和MTV模塊,在這篇設計中使用的是MVC模塊類型[13]p1-5。首先將整體的需求劃分為3大模塊,(1)服務端1:邏輯處理部分;(2)服務端2:數(shù)據(jù)處理部分;(3)用戶端:發(fā)送請求接收結果,展示結果。如何進行結構的封裝的話,是選擇一些類與函數(shù)方法進行封裝。這次的英文詞典的建立需要滿足以下功能:登錄,注冊,查詢單詞,查看歷史記錄。另外在服務端需要自己設計一些協(xié)議對應的特殊字符,用戶點擊登錄按鈕時,需要向服務端發(fā)一個“L”[2]p122-125,服務端接收到請求給客戶端進行回復。用戶點擊注冊按鈕時,需要向服務端發(fā)一個“R”,服務端接收到請求給客戶端進行回復。用戶點擊查單詞按鈕時,需要向服務端發(fā)一個“Q”,服務端接收到請求給客戶端進行回復。用戶點擊歷史記錄按鈕時,需要向服務端發(fā)一個“H”,服務端接收到請求給客戶端進行回復。如果用戶點擊退出按鈕時,向服務器發(fā)送一個“E”,服務端接收到請求然后退出該用戶。1.3具體功能模塊實踐可以將模塊具體的分為以下幾個大部分:注冊部分;登錄部分;退出部分;查單詞部分;歷史記錄部分。首先注冊部分客戶端需要完成在輸入完注冊用戶名與密碼之后向服務端發(fā)起請求,然后等待結果;注冊的服務端接收到來自客戶端的請求后首先判斷該用戶是否可以注冊[4]p45-49,如果該用戶名已經(jīng)存在的話是不允許被注冊的,返回客戶端“N”通知客戶端結束,如果可以注冊返回一個“Y”然后數(shù)據(jù)庫將這條數(shù)據(jù)插入“user”表中,通知客戶端創(chuàng)建成功。登錄部分[5]p33-35:客戶端需要實現(xiàn)的是:輸入用戶名和密碼,然后客戶端發(fā)送請求給服務端,等待結果響應;服務端接收到來自客戶端的請求,到“user”數(shù)據(jù)庫中核實是否存在這樣一個用戶密碼是否正確,如果可以登錄則返回一個“Y”通知客戶端登陸成功,如果登錄失敗則返回一個“N”通知客戶端結束。查單詞部分:客戶端點擊查單詞按鈕給服務端發(fā)送請求,等待響應結果;服務端接收到客戶端的請求,帶著客戶所需的單詞到數(shù)據(jù)庫中的“words”表中查詢與之相對應的單詞,然后給客戶端返回對應的結果。歷史記錄部分:客戶端點擊歷史記錄按鈕給服務端發(fā)送請求,等待響應結果;服務端接收到客戶端的請求,到數(shù)據(jù)庫的hist表中尋找歷史記錄然后呈現(xiàn)出來返還給客戶端。2.功能板塊詳解程序流程圖詳解圖1思維流程如上述流程圖所示,這是的英語詞典的基本頁面的建立。首先打開這個小軟件會進入到一級界面,也就是注冊、登錄、退出界面。點擊注冊會讓你填寫用戶名和密碼,如果成功的話用戶信息將存儲到數(shù)據(jù)庫[6]p11-15中,方便下一次的登錄;如果失敗的話顯示失敗重新返回第一級界面。點擊登錄按鍵,如果用戶名或者密碼輸入失敗導致登錄失敗的話會跳轉(zhuǎn)回一級界面;如果登錄成功的話會跳轉(zhuǎn)到二級界面,二級界面為查單詞、歷史記錄、注銷。點擊查單詞選項,輸入你想要尋找的單詞,如果找到該單詞,那么字典將會把該單詞的注解和單詞本身打印出來顯示給客戶;如果你輸入的單詞不對的話或者沒有這個單詞的話會跳出“未找到該單詞”的字樣。二級界面點擊歷史記錄按鈕,系統(tǒng)將會匹配你現(xiàn)在登錄的用戶,到數(shù)據(jù)庫中給你匹配到相對的歷史記錄,然后打印出最近的10條記錄。如果二級界面點擊注銷按鈕,那么將會注銷掉當前用戶然后自動返回一級界面。如果在一級界面你點擊了退出按鈕那么將會跳出“謝謝使用”,然后結束英文詞典小程序。以上就是的英文詞典的基本設計思路,后續(xù)代碼就將圍繞這個思路去展開。圖2功能模型圖3結構2.2代碼及界面詳解界面代碼設置:圖4一級界面如圖所示,這是所創(chuàng)建的一級界面的圖示,分為了注冊,登錄,退出三個功能,定義這個界面是循環(huán)的(whileTrue),只要用戶不去選擇3號退出選項就會一直有這樣的一級界面,定義一個變量“cmd”就是用戶會輸入的序號值,選到相對應的序號值時就會調(diào)用定義的相對應的函數(shù)方法[7]p66-69。圖5二級界面二級界面和一級界面性質(zhì)是一樣的,二級界面是由一級界面登錄成功后跳出來的,同樣的點擊相對應的編號可以跳轉(zhuǎn)到相對應的函數(shù)方法用以實現(xiàn)所需實現(xiàn)的目的。圖6注冊功能這是的注冊功能,客戶端定義do_register方法[8]p156-160,創(chuàng)建新的name,password,定義一個新的變量,將“R”+name+password打包賦值給變量,send發(fā)送請求給服務端,服務端先進入數(shù)據(jù)庫查詢該用戶是否已經(jīng)存在,如果存在的話返回一個注冊失敗給客戶端,如果用戶名與數(shù)據(jù)庫中所有用戶名不重復,則創(chuàng)建該用戶到數(shù)據(jù)庫。另外值得關注的是創(chuàng)建成功之后依舊還是在第一界面而不會跳轉(zhuǎn)到第二界面。圖7登錄功能圖8登錄功能登錄操作如圖所示,輸入2號按鍵,進入登錄界面,如果你輸入錯誤的密碼或者用戶名時,服務端執(zhí)行else命令,向客戶端端發(fā)送fail命令[9]p49-55,客戶端接收到fail就會顯示給客戶登錄失敗;登錄時執(zhí)行l(wèi)ogin函數(shù)方法,會將你輸入的用戶名和密碼帶進數(shù)據(jù)庫中進行匹配,如果是可以匹配到相同的用戶名與密碼的話,將會返回True,服務端接受到True然后就會返回給客戶端一個OK,客戶端接收到OK就知道匹配成功,返回登錄成功,并且緊跟著跳轉(zhuǎn)到2級界面。圖9歷史記錄圖10歷史記錄圖11歷史記錄圖12歷史記錄如上圖所示,這些基本就是查詢歷史記錄所會出現(xiàn)的所有可能性。當你登錄成功后你在2級界面點擊2號歷史記錄按鈕后,系統(tǒng)將會自動去匹配相對應的用戶的歷史記錄,如果你是第一次登錄還沒有進行過任何的查詢單詞的話,歷史記錄就會跳出“您還沒有查詢記錄”的字眼;如果你的用戶有過搜索記錄的話,那么系統(tǒng)會將在數(shù)據(jù)庫Hist表中相對應的數(shù)據(jù)匹配打印出來,顯示給用戶看,并且后面還會有顯示你是在什么時間搜索的這個單詞,顯示時間的話是直接在python里面導入的time模塊,這是python自帶的功能模塊[10]p71-79,用起來很方便。可以對比圖11和圖12,一張是用戶界面顯示的歷史記錄,一張是數(shù)據(jù)庫存儲的歷史記錄,可以看到用戶界面只能看到10條記錄,而數(shù)據(jù)庫中歷史記錄表中卻存放著用戶的所有歷史記錄,這是通過定義了一個history函數(shù)方法來實現(xiàn)的,只抓取數(shù)據(jù)庫中前十條數(shù)據(jù)。圖13查詢功能圖14查詢功能如上圖所示,這是查詢單詞的功能。在登錄進入二級界面后,點擊1號按鈕查單詞,本篇設計的英文詞典庫是從網(wǎng)上找到的一份比較完整比較全的英文詞典庫,幾乎包含了所有的英文單詞,當你輸入單詞時,下面會跳出對應的單詞和其所表示的注解,但是如果沒有找到單詞的話則會跳出“沒有找到該單詞”的字樣。本級頁面默認會一直執(zhí)行下去,但當你輸入“##”時,會結束查單詞功能界面,重新跳回二級界面。結論本篇設計主要介紹了簡易英文詞典的建立過程,最終是實現(xiàn)了簡易得英文詞典的諸多功能:登錄、退出、注冊、查找單詞、查詢歷史記錄和注銷。在畢業(yè)設計期間盡管遇到了很多的麻煩,但還是一一克服了,最終成功的將代碼轉(zhuǎn)換為了小程序。其中還是碰到了一些值得思考的問題,其中最主要的框架問題MTV和MVC的選擇,經(jīng)過抉擇選擇了MVC框架。\t"/item/MVC%E6%A1%86%E6%9E%B6/_blank"MVC全名是ModelViewController,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計數(shù)據(jù)可以分別用\t"/item/MVC%E6%A1%86%E6%9E%B6/_blank"柱狀圖、\t"/item/MVC%E6%A1%86%E6%9E%B6/_blank"餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新[11]p79-88。其次需要解決的就是套接字的相關知識,因為本文所用的很大一部分是套接字的使用。套接字:實現(xiàn)網(wǎng)絡編程進行數(shù)據(jù)傳輸?shù)囊环N技術手段,套接字分為流式套接字(tcp)和數(shù)據(jù)報套接字(udp),本設計采用的是流式套接字,主要步驟為:(1)創(chuàng)建套接字;(2)綁定地址;(3)設置監(jiān)聽隊列;(4)等待處理客戶端連接請求;(5)消息的收發(fā)(6)關閉套接字。總體來說這篇設計還是有一些難度的,在4年的大學知識上拓寬了不少,這篇設計主要就是在代碼的實現(xiàn)上面和框架思想流程上面花了很大一部分功夫,框架一旦搭好,接下來就輕松一些了。在編寫代碼框架時有過一些時間的猶豫,究竟是使用MTV模式框架還是MVC模式框架,最終決定了選擇MVC模式框架,因為這次做的簡易的英文詞典走的是http協(xié)議,這樣思路更明確一些。除了問題外,還是有很多的收獲的,通過這次的畢業(yè)設計對自己知識的積累又更深了一些,認識了網(wǎng)絡的tcp協(xié)議,還有udp協(xié)議;網(wǎng)絡模型的搭建,各個模塊間的關系建立[13]p22-29。認為的這次畢業(yè)設計總體來說還是可圈可點的。本人的設計“基于python的英文詞典的建立”相較于其他的類似的英文詞典的優(yōu)勢:1.界面淺顯易懂,大眾都可以操作,不論是什么年齡段的;2.代碼量較少,代碼類型見名知意,雖然看上去不是優(yōu)勢,但是代碼量的多少決定著后期的修改程序的困難程度,并且尋找問題可以直接找到對應的問題;3.歷史記錄可以精確到時分秒,其他類似的設計有的查詢是不包括時間這一項的,有的只是大概到年月日,沒有去更加的精確。參考文獻[1]張若愚.Python科學計算[M].北京:清華大學出版社,2012(01)[2]張若愚.Python科學計算(第二版)[M].北京:清華大學出版社,2016(04)[3]唐漢明翟振興關寶軍王洪權黃瀟.深入淺出MySQL[M]:人民郵電出版社,2014(01)[4]AlbertSweigart.python編程快速上手[M]:人民郵電出版社,2016(07)[5]LucianoRamalho.流暢的python[M]:人民郵電出版社,2017(05)[6]JeffForcier/PaulBissex.DjangoWeb開發(fā)指南[M]:機械工業(yè)出版社,2009[7]juilaElman/MarkLavin.輕量級Django[M]:中國電力出版社,2016(11)[8]段藝涂偉忠.Django開發(fā)從入門到實踐[M]:機械工業(yè)出版社,2019(11)[9]Ericmatthes.python編程從入門到實踐[M]:人民郵電出版社,2016年(07)[10]BaronSchwartz,PeterZaitsev,VadimTkachenko.高性能MYSQL[M]:電子工業(yè)出版社,2013(05)[11]西澤夢路.MySQL基礎教程[M]:人民郵電出版社,2018(01)[12]王耀.深入理解SpringMVC源代碼[M]:中國水利水電出版社,2019(11)[13]小甲魚李佳宇.零基礎入門學習Python[M]:清華大學出版社,2016(11)致謝感到是十分的榮幸可以擁有這么一次編寫設計的機會,這次編寫設計充分的展示了在大學四年中的所有所學所知所感,將所有的大學知識進行了融會貫通,是一次十分重要的設計。在編寫設計的期間,經(jīng)常會有一些不懂的不會的問題,就會向的指導老師費老師指教問題,費老師接到的消息都能在第一時間聯(lián)系,指導解決的問題,然后詢問的設計進度,督促的學習。真的十分榮幸能有費老師當做指導老師來指導的設計,的畢業(yè)設計的完成脫離不了指導老師的功勞。編寫設計都是要有理論基礎支撐的,在確定了的設計題目之后也是有過一大段時間區(qū)尋找自己相關的設計文獻、知識和一些相關理論,在搭建自己的設計主體框架的過程中真的十分困難,問了的指導老師究竟該怎么辦,指導老師給指明了方向,于是在指導老師的指導下很快的確立好了方向和主體框架,然后一步一步完成了的畢業(yè)設計,非常謝謝指導老師的幫助。大學四年匆匆一眼就過去了,還沒有什么感觸就已經(jīng)到了離開校園的時刻了。這篇設計將是在大學里留下的最后一筆,再見了的母校,再見了同學老師。在此再一次的感謝費老師的設計指導,祝您工作順利。附錄"""客戶端:發(fā)起請求獲取結果"""fromsocketimport*importsys#全局變量服務器地址ADDR=('',8000)defdo_query(s,name):whileTrue:word=input("單詞:")ifword=="##":breakmsg="Q%s%s"%(name,word)s.send(msg.encode())#發(fā)送請求#無論是否查到單詞都進行打印data=s.recv(1024).decode()print(data)#歷史記錄defdo_hist(s,name):msg="H"+names.send(msg.encode())data=s.recv(128).decode()#判斷該用戶是否有歷史記錄ifdata=='OK':#接收歷史記錄whileTrue:data=s.recv(1024).decode()ifdata=='##':breakprint(data)else:print("您還沒有查詢記錄")#二級界面defsecond(s,name):whileTrue:print("===============Query===============")print("1.查單詞2.歷史記錄3.注銷")print("===================================")cmd=input("輸入命令:")ifcmd=='1':do_query(s,name)elifcmd=='2':do_hist(s,name)elifcmd=='3':Returnelse:print("請選擇正確命令")#注冊功能defdo_register(s):name=input("Name:")passwd=input('Password:')#發(fā)送請求msg="R%s%s"%(name,passwd)s.send(msg.encode())data=s.recv(128).decode()#等待結果ifdata=='OK':print("注冊成功")else:print("注冊失敗")#登錄功能defdo_login(s):name=input("Name:")passwd=input('Password:')#發(fā)送請求msg="L%s%s"%(name,passwd)s.send(msg.encode())data=s.recv(128).decode()#等待結果ifdata=='OK':print("登錄成功")second(s,name)else:print("登錄失敗")#鏈接服務器defmain():s=socket()s.connect(ADDR)#發(fā)起鏈接#一級界面whileTrue:print("=============Welcome==============")print("1.注冊2.登錄3.退出")print("==================================")cmd=input("輸入命令:")ifcmd=='1':do_register(s)elifcmd=='2':do_login(s)elifcmd=='3':s.send(b'E')sys.exit("謝謝使用")else:print("請選擇正確命令")if__name__=='__main__':main()"""服務端邏輯處理"""fromsocketimport*frommultiprocessingimportProcessimportsignal,sysfromdict_dbimportDatabasefromtimeimportsleep#定義地址為全局變量HOST=''PORT=8000ADDR=(HOST,PORT)#實例化一個對象幫助處理數(shù)據(jù)庫交互的工作(鏈接數(shù)據(jù)庫)db=Database()#注冊處理函數(shù)defdo_register(connfd,name,passwd):#調(diào)用數(shù)據(jù)處理方法判定可否注冊ifdb.register(name,passwd):connfd.send(b'OK')else:connfd.send(b'FAIL')#處理登錄請求defdo_login(connfd,name,passwd):ifdb.login(name,passwd):connfd.send(b'OK')else:connfd.send(b'FAIL')#處理單詞查詢defdo_query(connfd,name,word):db.insert_history(name,word)#插入歷史記錄mean=db.query(word)#查單詞msg="%s:%s"%(word,mean)connfd.send(msg.encode())#處理歷史記錄defdo_hist(connfd,name):r=db.history(name)#獲取歷史記錄查詢結果ifnotr:#沒有歷史記錄connfd.send(b'FAIL')returnelse:connfd.send(b'OK')foriinr:#i-->(namewordtime)msg="%s%s%s"%isleep(0.1)connfd.send(msg.encode())sleep(0.1)connfd.send(b'##')#處理客戶端請求defhandle(connfd):db.create_cursor()#每個進程創(chuàng)建各自的游標whileTrue:data=connfd.recv(1024).decode()#接收請求tmp=data.split('')ifnottmportmp[0]=='E':connfd.close()db.cur.close()returneliftmp[0]=='R':#"Rnamepassword"do_register(connfd,tmp[1],tmp[2])eliftmp[0]=='L':#"Lnamepassword"do_login(connfd,tmp[1],tmp[2])eliftmp[0]=='Q':#"Qnameword"do_query(connfd,tmp[1],tmp[2])eliftmp[0]=='H':#"Hname"do_hist(connfd,tmp[1])#創(chuàng)建多進程并發(fā)模型defmain():#創(chuàng)建套接字s=socket()s.bind(ADDR)s.listen(3)#處理僵尸進程signal.signal(signal.SIGCHLD,signal.SIG_IGN)print("Listentheport8000")whileTrue:#等待客戶端鏈接c,addr=s.accept()print("Connectfrom",addr)#為每個客戶端創(chuàng)建進程p=Process(target=handle,args=(c,))p.start()if__name__=='__main__':main()"""服務端數(shù)據(jù)處理部分"""importpymysqlclassDatabase:def__init__(self):self.host=''self.port=3306self.user='root'self.password='123456'self.charset='utf8'self.database='dict'self.connect_database()defconnect_database(self):self.db=pymysql.connect(host=self.host,port=self.port,user=self.user,password=self.password,database=self.database,charset=self.charset)defcreate_cursor(self):self.cur=self.db.cursor()#幫server處理注冊成功True失敗返回Falsedefregister(self,name,passwd):#判斷這個姓名的用戶是否存在sql="selectnamefromuserwherename=%s;"self.cur.execute(sql,[name])r=self.cur.fetchone()#如果查詢到了說明該用戶已經(jīng)存在ifr:returnFalse#不可注冊else:#插入數(shù)據(jù)庫try:sql="insertintouser(name,passwd)values(%s,%s);"self.cur.execute(sql,[name,passwd])mit()returnTrueexcept:self.db.rollback()returnFalse#處理登錄deflogin(self,name,passwd):sql="selectnamefromuserwherename=%sandpasswd=%s;"self.cur.execute(sql,[name,passwd])r=self.cur.fetchone()ifr:returnTrueelse:returnFalse#查詢單詞defquery(self,word):sql="selectmeanfromwordswhereword=%s;"self.cur.execute(sql,[word])r=self.cur.fetchone()#也有可能查不到ifr:returnr[0]#將單詞解釋返回else:return"沒有找到該單詞"#插入歷史記錄definsert_history(self,name,word):sql="insertintohist(name,word)values(%s,%s);"try:self.cur.execute(sql,[name,word])mit()except:self.db.rollback()#提供歷史記錄defhistory(self,name):sql="selectname,word,timefromhistwherename=%sorderbytimedesclimit10;"self.cur.execute(sql,[name])returnself.cur.fetchall()#沒有查詢到內(nèi)容()查詢到了((),(),()。。。)"""將dict.txt單詞本中的單詞插入數(shù)據(jù)庫中words表"""importpymysql

電腦不啟動故障診治了解電腦啟動的過程在諸多電腦故障中,無法正常啟動是最令用戶頭痛的事了。筆者長期從事維護電腦的工作,在這個方面積累了一些經(jīng)驗,現(xiàn)在就將這些經(jīng)驗整理歸納出來與朋友們分享。本文將以家用電腦和windows98操作系統(tǒng)為基礎,介紹電腦無法正常啟動故障的診治。要想準確地診斷電腦不啟動故障,首先要了解的起動過程,當我們按下電源開關時,電源就開始向主板和其它設備供電,此時電壓還沒有完全穩(wěn)定,主板控制芯片組會根據(jù)CMOS中的CPU主頻設置向CPU發(fā)出一個Reset(重置)信號,讓CPU初始化,電壓完全穩(wěn)定后,芯片組會撤去Reset信號,CPU馬上從地址FFFF0H處執(zhí)行一條跳轉(zhuǎn)指令,跳到系統(tǒng)BIOS中真正的啟動代碼處。系統(tǒng)BIOS首先要做的事情就是進行POST(PowerOnSelfTest,加電自檢)。POST的主要任務是檢測系統(tǒng)中的一些關鍵設備(電源、CPU芯片、BIOS芯片、定時器芯片、數(shù)據(jù)收發(fā)邏輯電路、DMA控制器、中斷控制器以及基本的64K內(nèi)存和內(nèi)存刷新電路等)是否存在和能否正常工作,如內(nèi)存和顯卡等。自檢通過后,系統(tǒng)BIOS將查找顯示卡的BIOS,由顯卡BIOS來完成顯示卡的初始化,顯示器開始有顯示,自此,系統(tǒng)就具備了最基本的運行條件,可以對主板上的其它部分進行診斷和測試,再發(fā)現(xiàn)故障時,屏幕上會有提示,但一般不死機,接著系統(tǒng)BIOS將檢測CPU的類型和工作頻率,然后開始測試主機所有的內(nèi)存容量,內(nèi)存測試通過之后,系統(tǒng)BIOS將開始檢測系統(tǒng)中安裝的一些標準硬件設備,這些設備包括:硬盤、CD-ROM、軟驅(qū)、串行接口和并行接口等連接的設備,大多數(shù)新版本的系統(tǒng)BIOS在這一過程中還要自動檢測和設置內(nèi)存的相關參數(shù)、硬盤參數(shù)和訪問模式等。標準設備檢測完畢后,系統(tǒng)BIOS內(nèi)部的支持即插即用的代碼將開始檢測和配置系統(tǒng)中已安裝的即插即用設備。每找到一個設備之后,系統(tǒng)BIOS都會在屏幕上顯示出設備的名稱和型號等信息,同時為該設備分配中斷、DMA通道和I/O端口等資源。最后系統(tǒng)BIOS將更新ESCD(ExtendedSystemConfigurationData,擴展系統(tǒng)配置數(shù)據(jù))。ESCD數(shù)據(jù)更新完畢后,系統(tǒng)BIOS的啟動代碼將進行它的最后一項工作,即根據(jù)用戶指定的啟動順序從軟盤、硬盤或光驅(qū)啟動。以從C盤啟動為例,系統(tǒng)BIOS將讀取并執(zhí)行硬盤上的主引導記錄,主引導記錄接著從分區(qū)表中找到第一個活動分區(qū),然后讀取并執(zhí)行這個活動分區(qū)的分區(qū)引導記錄,而分區(qū)引導記錄將負責讀取并執(zhí)行IO.SYS,這是Windows最基本的系統(tǒng)文件。IO.SYS首先要初始化一些重要的系統(tǒng)數(shù)據(jù),然后就顯示出我們熟悉的藍天白云,在這幅畫面之下,Windows將繼續(xù)進行DOS部分和GUI(圖形用戶界面)部分的引導和初始化工作,一切順利結束,電腦正常啟動。根據(jù)故障現(xiàn)象診治了解電腦啟動的過程,故障就好判斷了,下面我們就根據(jù)故障現(xiàn)象開始診治了:現(xiàn)象一:系統(tǒng)完全不能啟動,見不到電源指示燈亮,也聽不到冷卻風扇的聲音。這時,基本可以認定是電源部分故障,檢查:電源線和插座是否有電、主板電源插頭是否連好,UPS是否正常供電,再確認電源是否有故障,最簡單的就是替換法,但一般用戶家中不可能備有電源等備件,這時可以嘗試使用下面的方法(注意:要慎重):先把硬盤,CPU風扇,或者CDROM連好,然后把ATX主板電源插頭用一根導線連接兩個插腳(把插頭的一側(cè)突起對著自己,上層插腳從左數(shù)第4個和下層插腳從右數(shù)第3個,方向一定要正確),然后把ATX電源的開關打開,如果電源風扇轉(zhuǎn)動,說明電源正常,否則電源損壞。如果電源沒問題直接短接主板上電源開關的跳線,如果正常,說明機箱面板的電源開關損壞?,F(xiàn)象二:電源批示燈亮,風扇轉(zhuǎn),但沒有明顯的系統(tǒng)動作。這種情況如果出現(xiàn)在新組裝電腦上應該首先檢查CPU是否插牢或更換CPU,而正在使用的電腦的CPU損壞的情況比較少見(人為損壞除外),損壞時一般多帶有焦糊味,如果剛剛升級了BIOS或者遭遇了CIH病毒攻擊,這要考慮BIOS損壞問題(BIOS莫名其妙的損壞也是有的),修復BIOS的方法很多雜志都介紹過就不重復了;確認CPU和BIOS沒問題后,就要考慮CMOS設置問題,如果CPU主頻設置不正確也會出現(xiàn)這種故障,解決方法就是將CMOS信息清除,既要將CMOS放電,一般主板上都有一個CMOS放電的跳線,如果找不到這個跳線可以將CMOS電池取下來,放電時間不要低于5分鐘,然后將跳線恢復原狀或重新安裝好電池即可;如果CPU、BIOS和CMOS都沒問題還要考慮電源問題:PC機電源有一個特殊的輸出信號,稱為POWERGOOD(PG)信號,如果PG信號的低電平持續(xù)時間不夠或沒有低電平時間,PC機將無法啟動。如果PG信號一直為低電平,則PC機系統(tǒng)始終處于復位狀態(tài)。這時PC機也出現(xiàn)黑屏、無聲響等死機現(xiàn)象。但這需要專業(yè)的維修工具外加一些維修經(jīng)驗,因此,建議采用替換法;電源沒有問題就要檢查是否有短路,確保主板表面不和金屬(特別是機箱的安裝固定點)接觸。把主板和電源拿出機箱,放在絕緣體表面,如果能啟動,說明主板有短路現(xiàn)象;如果還是不能啟動則要考慮主板問題,主板故障較為復雜,可以使用替換法確認,然后更換主板?,F(xiàn)象三:電源指示燈亮,系統(tǒng)能啟動,但系統(tǒng)在初始化時停住了,而且可以聽到嗽叭的鳴叫聲(沒有視頻):根據(jù)峰鳴代碼可以判斷出故障的部位。ccid_page/AwardBIOS1短聲:說明系統(tǒng)正常啟動。表明機器沒有問題。2短聲:說明CMOS設置錯誤,重新設置不正確選項。1長1短:說明內(nèi)存或主板出錯,換一個內(nèi)存條試試。1長2短:說明顯示器或顯示卡存在錯誤。檢查顯卡和顯示器插頭等部位是否接觸良好或用替換法確定顯卡和顯示器是否損壞。1長3短:說明鍵盤控制器錯誤,應檢查主板。1長9短:說明主板FlashRAM、EPROM錯誤或BIOS損壞,更換FlashRAM。重復短響:說明主板電源有問題。不間斷的長聲:說明系統(tǒng)檢測到內(nèi)存條有問題,重新安裝內(nèi)存條或更換新內(nèi)存條重試。AMIBIOS1短:說明內(nèi)存刷新失敗。更換內(nèi)存條。2短:說明內(nèi)存ECC較驗錯誤。在CMOS中將內(nèi)存ECC校驗的選項設為Disabled或更換內(nèi)存。3短:說明系統(tǒng)基本內(nèi)存檢查失敗。換內(nèi)存。4短:說明系統(tǒng)時鐘出錯。更換芯片或CMOS電池。5短:說明CPU出現(xiàn)錯誤。檢查CPU是否插好。6短:說明鍵盤控制器錯誤。應檢查主板。7短:說明系統(tǒng)實模式錯誤,不能切換到保護模式。8短:說明顯示內(nèi)存錯誤。顯示內(nèi)存有問題,更換顯卡試試。9短:說明BIOS芯片檢驗和錯誤。1長3短:說明內(nèi)存錯誤。內(nèi)存損壞,更換。1長8短:說明顯示測試錯誤。顯示器數(shù)據(jù)線沒插好或顯示卡沒插牢?,F(xiàn)象四:系統(tǒng)能啟動,有視頻,出現(xiàn)故障提示,這時可以根據(jù)提示來判斷故障部位。下面就是一些常見的故障提示的判斷:一、提示“CMOSBatteryStateLow”原因:CMOS參數(shù)丟失,有時可以啟動,使用一段時間后死機,這種現(xiàn)象大多是CMOS供電不足引起的。對于不同的CMOS供電方式,采取不同的措施:1.焊接式電池:用電烙鐵重新焊上一顆新電池即可;2.鈕扣式電池:直接更換;3.芯片式:更換此芯片,最好采用相同型號芯片替換。如果更換電池后時間不長又出現(xiàn)同樣現(xiàn)象的話,很可能是主板漏電,可檢查主板上的二極管或電容是否損壞,也可以跳線使用外接電池,不過這些都需要有一定的硬件維修基礎才能完成。二、提示“CMOSChecksumFailure”CMOS中的BIOS檢驗和讀出錯;提示“CMOSSystemOptionNotSet”,CMOS系統(tǒng)未設置;提示“CMOSDisplayTypeMismatch”,CMOS中顯示類型的設置與實測不一致;提示“CMOSMemorySizeMismatch”,主板上的主存儲器與CMOS中設置的不一樣;提示“CMOSTime&DateNotSet”,CMOS中的時間和日期沒有設置。這些都需要對CMOS重新設置。三、提示“KeyboardInterfaceError”后死機原因:主板上鍵盤接口不能使用,拔下鍵盤,重新插入后又能正常啟動系統(tǒng),使用一段時間后鍵盤無反應,這種現(xiàn)象主要是多次拔插鍵盤引起主板鍵盤接口松動,拆下主板用電烙鐵重新焊接好即可;也可能是帶電拔插鍵盤,引起主板上一個保險電阻斷了(在主板上標記為Fn的東西),換上一個1歐姆/0.5瓦的電阻即可。四、自檢過程中斷在xxxKCache處這表示主板上Cache損壞,可以在CMOS設置中將“ExternalCache”項設為“Disable”故障即可排除。同理,在自檢主板部件時出現(xiàn)中斷,則可以認為該部件損壞,解決方法一般可以在CMOS中將其屏蔽,如果不能屏蔽該部件最好更換主板。五、提示“FDDControllerFailure”BIOS不能與軟盤驅(qū)動器交換信息;提示“HDDControllerFailure”,BIOS不能與硬盤驅(qū)動器交換信息。應檢查FDD(HDD)控制卡及電纜。六、提示“8042GateA20Error”8042芯片壞;提示“DMAError”,DMA控制器壞。這種故障需要更換。七、提示“DisplaySwitchNotProper”主板上的顯示模式跳線設置錯誤,重新跳線。八、提示“KeyboardisLock...Unlockit”鍵盤被鎖住,打開鎖后重新引導系統(tǒng)。九、IDE接口設備檢測信息為:“DetectingPrimary(或Secondary)Master(或Slave)...None”表示該IDE接口都沒有找到硬盤,如果該IDE口確實接有硬盤的話,則說明硬盤沒接上或硬盤有故障,可以從以下幾方面檢查:1、硬盤電源線和數(shù)據(jù)線是否接觸不良,或換一根線試試;2、CMOS設置有無錯誤,進入CMOS將“PrimaryMaster”、“PrimarySlave”、“SecondaryMaster”三項的的“TYPE”都設置成“Auto”;3、替換法確認硬盤本身有故障。十、IDE接口設備檢測信息下面顯示“Floppydisk(s)fail(40)”出錯信息表示CMOS所指定的軟盤驅(qū)動器有問題。判斷和解決的方法與硬盤相似?,F(xiàn)象五:系統(tǒng)不能引導。這種故障一般都不是嚴重問題,只是系統(tǒng)在找到的用于引導的驅(qū)動器中找不到引導文件,比如:BIOS的引導驅(qū)動器設置中將軟驅(qū)排在了硬盤驅(qū)動的前面,而軟驅(qū)中又放有沒有引導系統(tǒng)的軟盤或者BIOS的引導驅(qū)動器設置中將光驅(qū)排在了硬盤驅(qū)動的前面,而光驅(qū)中又放有沒有引導系統(tǒng)的光盤,這個都很簡單,將光盤或軟盤取出就可以了,實際應用中遇到“DiskBootFailure,InsertSystemDiskAndPressEnter”的提示,多數(shù)都是這個原因。如果是硬盤不能引導的話一般有兩種情況:一種是硬盤數(shù)據(jù)線沒有插好,另一種就是硬盤數(shù)據(jù)損壞。前者一般多會出現(xiàn)硬盤容量檢測不正確和引導時出現(xiàn)死機的現(xiàn)象;后者則是干脆找不到引導文件或提示文件損壞。前者只需重新連接好數(shù)據(jù)線即可;后者則需要用win98的啟動軟盤或啟動光盤啟動,根據(jù)實際情況來定:一、提示“Invalidpartitiontable”或“NotFoundany[activepartition]inHDDDiskBootFailure,InsertSystemDiskAndPressEnter”,這說明找不到硬盤活動分區(qū),需要對硬盤重新分區(qū)。二、提示“Missoperationsyste”,說明硬盤活動分區(qū)需要重新格式化(formatc:/s)。三、提示“InvalidsystemdiskReplacethedisk,andthenpressanykey”或顯示“StartingWindows98…”時出現(xiàn)死機,說明硬盤上的系統(tǒng)文件丟失了或損壞,使用“sysc:”,命令傳遞系統(tǒng)文件給c盤,再將C拷貝給c盤?,F(xiàn)象六:硬盤可以引導,但Windows不能正常啟動,也不能進入安全模式。這種情況表明Windows98出現(xiàn)了嚴重的錯誤,首先,用殺毒軟件查殺病毒,看是不是病毒造成的,如果沒有發(fā)現(xiàn)病毒可以用以下方法試一試。一、直接將接口卡與各個外設都撥去,再插回去,并調(diào)整接口卡上的設置(如果可以的話)來檢查是否是硬件沖突造成,開機看看是否可正常進入Windows。二、檢查CMOS中的設置是否有不正確的地方,若不清楚,可選擇LoadBiosDefault項目,然后重開機,開機看是否可正常進入Windows。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論