基于html和mongodb的電子產(chǎn)品購(gòu)物網(wǎng)站-馬志強(qiáng)_第1頁(yè)
基于html和mongodb的電子產(chǎn)品購(gòu)物網(wǎng)站-馬志強(qiáng)_第2頁(yè)
基于html和mongodb的電子產(chǎn)品購(gòu)物網(wǎng)站-馬志強(qiáng)_第3頁(yè)
基于html和mongodb的電子產(chǎn)品購(gòu)物網(wǎng)站-馬志強(qiáng)_第4頁(yè)
基于html和mongodb的電子產(chǎn)品購(gòu)物網(wǎng)站-馬志強(qiáng)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

摘要大部分網(wǎng)站都還停留在使用傳統(tǒng)的html+css上,通過(guò)對(duì)其他相似課題文獻(xiàn)的調(diào)查研究,本系統(tǒng)更多的集中在如何使購(gòu)物網(wǎng)站能夠在保證個(gè)人信息安全的同時(shí)提高系統(tǒng)運(yùn)行效率,也要給用戶(hù)良好的體驗(yàn)感。因此本系統(tǒng)決定使用nodejs搭建運(yùn)行環(huán)境,express框架作為系統(tǒng)本系統(tǒng)開(kāi)發(fā)框架,利用ajax異步操作來(lái)提高用戶(hù)體驗(yàn)和數(shù)據(jù)交互速度,使用了當(dāng)下較為流行的nosql數(shù)據(jù)庫(kù)——MongoDB數(shù)據(jù)庫(kù):具有更高的插入速度、能處理大規(guī)模的單表、可以快速、安全以及自動(dòng)的實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)移、查詢(xún)速度更快、非結(jié)構(gòu)化的爆發(fā)增長(zhǎng)等。大量使用session緩存代替?zhèn)鹘y(tǒng)cookie緩存、自定義加密方法對(duì)用戶(hù)密碼加密之后再保存到數(shù)據(jù)庫(kù)使用戶(hù)數(shù)據(jù)的安全性得到極大地提高。遵循MVC設(shè)計(jì)模式,高內(nèi)聚低耦合,系統(tǒng)便于使用和管理、優(yōu)化。關(guān)鍵詞:nodejsMongoDBMVCexpressejs

AbstractMostwebsitesstillusetraditionalHTML+CSS.Throughtheinvestigationandresearchofothersimilarsubjects,thissystemfocusesmoreonhowtomaketheshoppingwebsitetoensurethesecurityofpersonalinformationandimprovetheefficiencyofthesystem,butalsotogiveusersagoodsenseofexperience.Therefore,thesystemdecidedtousenodejstobuildtherunningenvironment.Asthedevelopmentframeworkofthesystem,expressframeworkusedAjaxasynchronousoperationtoimprovetheuserexperienceanddatainteractionspeed.ItusedthecurrentpopularNoSQLdatabasemongodbdatabase,whichhashigherinsertionspeed,canhandlelarge-scalesingletable,andcanquickly,safelyandautomaticallyrealizedataTransfer,queryfaster,unstructuredexplosivegrowthandsoon.Sessioncacheiswidelyusedinsteadoftraditionalcookiecache,anduser-definedencryptionmethodisusedtoencrypttheuser'spasswordbeforesavingittothedatabase,whichgreatlyimprovesthesecurityoftheuser'sdata.FollowMVCdesignmode,highcohesionandlowcoupling,thesystemiseasytouse,manageandoptimize.keyword:nodejsMongoDBMVCexpressejs 目錄TOC\o"1-3"\h\u第一章引言 引言研究現(xiàn)狀伴隨著網(wǎng)絡(luò)的普及,傳統(tǒng)購(gòu)物行業(yè)已經(jīng)逐漸被電子商務(wù)所取代,傳統(tǒng)行業(yè)的倒閉速度不斷加快,每個(gè)城市的步行街在不斷消失,消費(fèi)者在不斷減少。人們對(duì)網(wǎng)上購(gòu)物的依賴(lài)性越來(lái)越大。網(wǎng)絡(luò)銷(xiāo)售成本明顯比線(xiàn)下銷(xiāo)售成本低:不需要雇傭太多店員,不需要門(mén)店。給予用戶(hù)更直觀的購(gòu)物體驗(yàn):購(gòu)物后才能對(duì)商品進(jìn)行評(píng)價(jià)、越來(lái)越嚴(yán)格的刷單懲罰條款等。網(wǎng)上購(gòu)物性?xún)r(jià)比更高:更容易貨比三家,同一樣?xùn)|西商戶(hù)無(wú)法肆無(wú)忌憚的抬高價(jià)格;同樣的時(shí)間在線(xiàn)上逛的店遠(yuǎn)比線(xiàn)下多的多;人越來(lái)越懶導(dǎo)致的更不想動(dòng),逛一下午步行街消費(fèi)者會(huì)疲憊不堪,而逛一天電子商城消費(fèi)者依舊精神抖擻且不會(huì)手腳發(fā)麻疼痛。國(guó)內(nèi)外并沒(méi)有完全成熟的只負(fù)責(zé)做電子產(chǎn)品銷(xiāo)售的網(wǎng)站或APP,競(jìng)爭(zhēng)不過(guò)多樣性客戶(hù)的平臺(tái):客戶(hù)類(lèi)型、交易量的制約,消費(fèi)者對(duì)電子商務(wù)高額度消費(fèi)的疑慮,購(gòu)物平臺(tái)的運(yùn)維成本等。研究目的鑒于國(guó)內(nèi)外這種現(xiàn)狀,本系統(tǒng)在只負(fù)責(zé)做電子產(chǎn)品銷(xiāo)售的同時(shí)希望盡可能提高用戶(hù)隱私的安全性,提高用戶(hù)體驗(yàn)感。一是為了讓用戶(hù)有一個(gè)安心放心的購(gòu)物平臺(tái),專(zhuān)一的才能做到最好。二是讓用戶(hù)有良好的購(gòu)物體驗(yàn),有一種顧客是上帝的感覺(jué)。研究思路和內(nèi)容目前購(gòu)物網(wǎng)站技術(shù)已經(jīng)較為成熟,所以我查看的文獻(xiàn)主要是以如何優(yōu)化為主:目前國(guó)內(nèi)外的web頁(yè)面還是大部分使用的傳統(tǒng)web框架,主要特點(diǎn)是前后端分離,前后端的開(kāi)發(fā)需要不同的團(tuán)隊(duì)執(zhí)行,成本較高,且在用戶(hù)體驗(yàn)和信息處理方面還有待提高,web應(yīng)用系統(tǒng)面臨著高并發(fā)訪(fǎng)問(wèn)的難題,傳統(tǒng)的數(shù)據(jù)庫(kù)不支持大批量數(shù)據(jù)處理,就連淘寶京東等也開(kāi)始使用Nosql數(shù)據(jù)庫(kù),在此時(shí)此刻,基于html的mongodb數(shù)據(jù)庫(kù)就能很好處理大批量數(shù)據(jù)處理的問(wèn)題,而高并發(fā)難題恰恰是nodejs異步非堵塞的特點(diǎn)可以解決的[1][2]。擁有著高并發(fā)特點(diǎn),但并不意味著就不需要系統(tǒng)優(yōu)化,太強(qiáng)大的DOS攻擊同樣會(huì)導(dǎo)致系統(tǒng)癱瘓,在加強(qiáng)過(guò)濾篩選規(guī)則的同時(shí)本系統(tǒng)所應(yīng)用的nodejs能夠解決數(shù)據(jù)重復(fù)申請(qǐng)或者上傳的問(wèn)題,減少對(duì)服務(wù)器對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn),在一定程度上提高了系統(tǒng)運(yùn)行速度和安全性。此外引入了nodejs的express框架[3][4],將一小部分?jǐn)?shù)據(jù)放在前端,減少服務(wù)器負(fù)擔(dān),加強(qiáng)系統(tǒng)安全性,如帳號(hào)密碼等,不使用url數(shù)據(jù)傳遞或者cookie保存數(shù)據(jù)等。系統(tǒng)可行性分析本系統(tǒng)決定使用nodejs搭建運(yùn)行環(huán)境,利用異步操作來(lái)提高用戶(hù)體驗(yàn)和數(shù)據(jù)交互速度,此外使用了當(dāng)下較為流行的nosql數(shù)據(jù)庫(kù):MongoDB數(shù)據(jù)庫(kù),可以更快的插入數(shù)據(jù)到數(shù)據(jù)庫(kù)中、能處理更大規(guī)模的單表、可以在保證安全性的同時(shí)更高速更智能的實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)移、查詢(xún)速度更快、非結(jié)構(gòu)化的爆發(fā)增長(zhǎng)等特點(diǎn)都是提高購(gòu)物網(wǎng)站效率所急需的。

系統(tǒng)開(kāi)發(fā)的關(guān)鍵技術(shù)研究2.1nodejs簡(jiǎn)介2.1.1特點(diǎn)Nodejs是一個(gè)后端JavaScript運(yùn)行,在不對(duì)前端JavaScript進(jìn)行改寫(xiě)的基礎(chǔ)上將其遷移到了服務(wù)器端,使得JavaScript從一個(gè)只支持前端語(yǔ)言變成前后端通用語(yǔ)言[5]。Node區(qū)別于其他語(yǔ)言最大的特點(diǎn)便是異步非堵塞特點(diǎn)。而在nodejs中,如果不改動(dòng)代碼,按照其接口或者函數(shù)來(lái)運(yùn)行的話(huà)絕大多數(shù)都是異步操作。這樣我們能夠從語(yǔ)言層次就輕松進(jìn)行并行I/O操作。優(yōu)化了用戶(hù)體驗(yàn)的同時(shí)提高了系統(tǒng)運(yùn)行速率。事件驅(qū)動(dòng)特性使得系統(tǒng)能更好的按照MVC模式設(shè)計(jì),在并行I/O操作的時(shí)候?qū)⑹录唤o業(yè)務(wù)邏輯,可以同時(shí)的大量的處理事件,有必要時(shí)業(yè)務(wù)邏輯也可以采用并行I/O,可以說(shuō)系統(tǒng)運(yùn)行速度稱(chēng)之為極速也不為過(guò)。回調(diào)函數(shù)的存在使得也是配合著以上兩個(gè)特點(diǎn)來(lái)使用的,如果沒(méi)有回調(diào)函數(shù),意味著要在服務(wù)器端就將數(shù)據(jù)將事件全都處理好,這對(duì)后端人員是一個(gè)極大的挑戰(zhàn)。Nodejs能很好的兼容JavaScript。JavaScript語(yǔ)言很大的一個(gè)特點(diǎn)是單線(xiàn)程操作,因?yàn)镴avaScript主要是用來(lái)響應(yīng)用戶(hù)操作以及對(duì)頁(yè)面上的節(jié)點(diǎn)進(jìn)行操作。在nodejs中,JavaScript是跟其他線(xiàn)程相互獨(dú)立的,很完美的兼容了JavaScript語(yǔ)言。與此同時(shí)child_process子進(jìn)程的出現(xiàn),讓nodejs在單線(xiàn)程方面的健壯性和多核CPU運(yùn)用方面得到了充分滿(mǎn)足,通過(guò)將計(jì)算分解之后分配給不同的子進(jìn)程,然后通過(guò)回調(diào)函數(shù)來(lái)傳遞結(jié)果,使得開(kāi)發(fā)模型變得輕便。Master-Worker模式的管理方式也讓nodejs具備更高的健壯性[6][7]。2.1.2應(yīng)用場(chǎng)景那么基于以上特點(diǎn)就可以清楚的了解到nodejs適合什么樣的場(chǎng)景什么樣的應(yīng)用。I/O操作頻繁的場(chǎng)景單從單線(xiàn)程的I/O密集操作上來(lái)說(shuō),nodejs的處理能力絕對(duì)是有數(shù)的,nodejs能夠高效的統(tǒng)籌更多的應(yīng)用來(lái)達(dá)到更好的服務(wù)效果。Nodejs在這方面的優(yōu)勢(shì)是利用事件驅(qū)動(dòng)的特性循環(huán)處理,而并不是常人思想上的開(kāi)啟每一個(gè)線(xiàn)程為每一個(gè)操作進(jìn)行相應(yīng)[8]。CPU密集型在執(zhí)行效率上,V8的執(zhí)行效率肯定是沒(méi)人否定的,nodejs能很好的兼容JavaScript在上文是有提到過(guò)的。但CPU密集給nodejs帶來(lái)的問(wèn)題在于JavaScript單線(xiàn)程的問(wèn)題,因?yàn)閱尉€(xiàn)程,如果長(zhǎng)時(shí)間計(jì)算會(huì)導(dǎo)致cpu時(shí)間片不能被釋放,總所周知,cpu一旦一直被占用,那么除了等到cpu空閑下來(lái)誰(shuí)也做不了什么操作。但nodejs通過(guò)將計(jì)算分解之后分配給不同的子進(jìn)程,然后通過(guò)回調(diào)函數(shù)來(lái)傳遞結(jié)果保證了不阻塞I/O調(diào)用的發(fā)起,多線(xiàn)程可以頻繁發(fā)起,單線(xiàn)程又可以有更高的計(jì)算效率。2.2VisualStudio簡(jiǎn)介VisualStudio集成開(kāi)發(fā)環(huán)境是一種創(chuàng)新啟動(dòng)板,可用于編輯、調(diào)試并生成代碼,然后發(fā)布應(yīng)用。

集成開(kāi)發(fā)環(huán)境(IDE)是一個(gè)功能豐富的程序,可用于軟件開(kāi)發(fā)的許多方面。

除了大多數(shù)IDE提供的標(biāo)準(zhǔn)編輯器和調(diào)試器之外,VisualStudio還包括編譯器、代碼完成工具、圖形設(shè)計(jì)器和許多其他功能,以簡(jiǎn)化軟件開(kāi)發(fā)過(guò)程。VisualStudio簡(jiǎn)稱(chēng)vs,里面集成了大量的開(kāi)發(fā)環(huán)境,可以說(shuō)是很豐富了。作為一個(gè)開(kāi)發(fā)工具,肯定有著大多數(shù)IDE都有提供的編譯器和調(diào)試器。作為一個(gè)高大上的集成開(kāi)發(fā)環(huán)境,一些幫助提高工作效率的小功能小插件也是必備的。波浪線(xiàn)提示是一個(gè)很舒服的功能,在編譯工作進(jìn)行的時(shí)候一邊幫助你糾正大多數(shù)的小細(xì)節(jié)性錯(cuò)誤,從此馬虎遠(yuǎn)離你我他。配合波浪線(xiàn)提示的是快速操作功能,如果將鼠標(biāo)放在波浪線(xiàn)錯(cuò)誤代碼上,會(huì)有關(guān)于這個(gè)代碼錯(cuò)誤的其他信息,比如缺少右分號(hào)等信息,或者在左邊距中也有一個(gè)紅叉叉或者黃燈泡,會(huì)有關(guān)于該錯(cuò)誤的英文提示和可選修復(fù)錯(cuò)誤選項(xiàng)。代碼重構(gòu)功能,代碼封裝重構(gòu)是每個(gè)人做編程工作的時(shí)候必不可少的操作了,相信有不少人愿意也會(huì)花大量時(shí)間來(lái)做代碼封裝重構(gòu),因?yàn)檫@意味著可以使代碼接近框架源碼,不只是這個(gè)項(xiàng)目,在其他項(xiàng)目中也不需要再重復(fù)敲寫(xiě)代碼了。搜索框的出現(xiàn)對(duì)于大工程項(xiàng)目來(lái)說(shuō)可是一個(gè)很大的福利,不需要自己在去記憶該代碼或者代碼塊大概在哪個(gè)區(qū)域然后再一行行找,只需要直接使用搜索框就可以了。如果是協(xié)同工作的話(huà)對(duì)于協(xié)同人員來(lái)說(shuō),不需要再去通讀相關(guān)代碼塊代碼文件,提高了工作效率。當(dāng)然,代碼的規(guī)范化還是要好好做的,否則雜亂無(wú)章的代碼會(huì)使人毫無(wú)工作欲望。造成開(kāi)發(fā)以及運(yùn)維人員的不便。協(xié)同工作不只是搜索框的出現(xiàn),對(duì)應(yīng)的是LiveShare功能:實(shí)時(shí)的安全的共享項(xiàng)目,可以根據(jù)需要調(diào)整,更可以語(yǔ)音呼叫,一個(gè)功能實(shí)現(xiàn)類(lèi)似于金山文檔和通訊工具等多個(gè)功能。轉(zhuǎn)到定義和速覽定義功能更是針對(duì)大量代碼而產(chǎn)生的,將開(kāi)發(fā)人員直接傳送到函數(shù)定義的位置或者類(lèi)型定義的位置,不受是否為同個(gè)文件同個(gè)文件夾的影響。速覽定義功能,顧名思義,它會(huì)在你想要看到定義的地方出現(xiàn)一個(gè)類(lèi)似于模態(tài)框的東西,可以清楚看到該函數(shù)該變量的定義內(nèi)容。2.3數(shù)據(jù)庫(kù)介紹Mongodb數(shù)據(jù)庫(kù)是nosql數(shù)據(jù)庫(kù)其中之一,在非關(guān)系型數(shù)據(jù)庫(kù)領(lǐng)域一直在獨(dú)占鰲頭。此數(shù)據(jù)庫(kù)的出現(xiàn)是為了更快更高效的開(kāi)發(fā)web應(yīng)用,具有高速I(mǎi)/O的性能,而且區(qū)別于傳統(tǒng)數(shù)據(jù)庫(kù)的地方在于可以彈性擴(kuò)展,不再需要跟sql數(shù)據(jù)庫(kù)一樣添加一個(gè)數(shù)據(jù)就是要添加一行數(shù)據(jù),可以為0但不可以沒(méi)有。增大了數(shù)據(jù)庫(kù)的占用空間的同時(shí)造成了數(shù)據(jù)讀寫(xiě)傳送的不便。Mongodb是一個(gè)文檔類(lèi)型數(shù)據(jù)庫(kù),顧名思義,就是利用文檔來(lái)存儲(chǔ)數(shù)據(jù),不再使用關(guān)系型數(shù)據(jù)庫(kù)當(dāng)中的表格形式,一個(gè)文檔就是一個(gè)數(shù)據(jù)庫(kù)表。當(dāng)然,作為一個(gè)數(shù)據(jù)庫(kù),一些如同動(dòng)態(tài)查詢(xún)、二級(jí)索引等功能在mongodb中也是支持的。

購(gòu)物網(wǎng)站的設(shè)計(jì)3.1需求分析3.1.1系統(tǒng)功能分析登錄注冊(cè)功能:對(duì)用戶(hù)的用戶(hù)名密碼類(lèi)型和長(zhǎng)度進(jìn)行限制,注冊(cè)時(shí)不可重復(fù)注冊(cè)數(shù)據(jù)庫(kù)中已有的用戶(hù)名。搜索/推薦:搜索功能,且根據(jù)用戶(hù)最近搜索記錄推薦相應(yīng)類(lèi)似的商品訂單管理:對(duì)用戶(hù)已購(gòu)買(mǎi)或者未購(gòu)買(mǎi)訂單進(jìn)行管理,刪除查詢(xún)修改等。商品詳情:商城商品的詳細(xì)信息,款式、顏色、大小、價(jià)格等。商品上下架:店主對(duì)自己店鋪的商品管理,上架下架修改商品信息等。瀏覽記錄:用戶(hù)在商城中最近的瀏覽記錄。庫(kù)存管理:店主對(duì)商品數(shù)量可設(shè)置一個(gè)最小值,當(dāng)?shù)陀谧钚≈禃r(shí)會(huì)出現(xiàn)庫(kù)存預(yù)警彈框。數(shù)據(jù)備份和恢復(fù):數(shù)據(jù)庫(kù)的數(shù)據(jù)備份和還原。3.1.2系統(tǒng)設(shè)計(jì)分析根據(jù)身份不同劃分為四個(gè)級(jí)別的權(quán)限:一級(jí)權(quán)限:普通用戶(hù)(游客)二級(jí)權(quán)限:購(gòu)物商城店主三級(jí)權(quán)限:購(gòu)物商城管理員四級(jí)權(quán)限:數(shù)據(jù)庫(kù)管理員3.2系統(tǒng)設(shè)計(jì)3.2.1系統(tǒng)模塊設(shè)計(jì)根據(jù)系統(tǒng)功能分為以下幾個(gè)方面:一:用戶(hù)模塊主要是用戶(hù)的登錄注冊(cè),用戶(hù)權(quán)限的篩選,用戶(hù)信息的修改,用戶(hù)瀏覽記錄。二:商品模塊購(gòu)物商城中商品信息,商品上下架,庫(kù)存預(yù)警,商品訂單管理。三:系統(tǒng)功能模塊包括購(gòu)物商場(chǎng)的商品搜索和推薦,數(shù)據(jù)庫(kù)的備份和還原。3.2.2系統(tǒng)模塊的程序流圖圖3-1注冊(cè)程序流圖打開(kāi)系統(tǒng)注冊(cè)頁(yè)面,輸入用戶(hù)名/密碼/校驗(yàn)密碼,輸入框旁邊會(huì)有提示,當(dāng)鼠標(biāo)失焦時(shí)若符合規(guī)范,無(wú)文字提醒,若不符合規(guī)范,會(huì)有注冊(cè)規(guī)則提示且點(diǎn)擊注冊(cè)按鈕無(wú)響應(yīng)。若符合注冊(cè)規(guī)則則提示注冊(cè)成功,插入數(shù)據(jù)到數(shù)據(jù)庫(kù)中并跳轉(zhuǎn)到登錄頁(yè)面圖3-2登錄程序流圖打開(kāi)登錄頁(yè)面,輸入符合規(guī)范的用戶(hù)名/密碼,若不符合規(guī)范在輸入框旁會(huì)有文字提醒且點(diǎn)擊登錄按鈕無(wú)響應(yīng)。若符合規(guī)范,在數(shù)據(jù)庫(kù)中查詢(xún)是否存在匹配的用戶(hù)名及密碼,匹配成功提示登錄成功并跳轉(zhuǎn)到首頁(yè),匹配不成功返回登錄頁(yè)面。圖3-3推薦程序流圖用戶(hù)登錄進(jìn)入首頁(yè)時(shí)數(shù)據(jù)庫(kù)自動(dòng)查詢(xún)?yōu)g覽記錄并用session形式返回到客戶(hù)端,客戶(hù)端將數(shù)據(jù)渲染到搜索框下方。

圖3-4搜索商品程序流圖用戶(hù)或者游客進(jìn)入首頁(yè)點(diǎn)擊搜索按鈕,輸入想搜索的商品信息,點(diǎn)擊搜索時(shí)數(shù)據(jù)庫(kù)以正則表達(dá)式形式查詢(xún)是否存在符合條件的商品,存在時(shí)將數(shù)據(jù)傳遞到客戶(hù)端,跳轉(zhuǎn)頁(yè)面并將數(shù)據(jù)渲染到頁(yè)面中。若不符合條件,則返回首頁(yè)。圖3-5訂單管理程序流圖用戶(hù)登錄之后進(jìn)入訂單管理頁(yè)面,對(duì)該用戶(hù)的訂單進(jìn)行查詢(xún)修改刪除,由于存在同個(gè)用戶(hù)多個(gè)客戶(hù)端登錄的情況,可能導(dǎo)致操作沖突,此時(shí)彈出提示信息框并刷新訂單詳情頁(yè)。操作成功則刷新頁(yè)面。圖3-6訂單詳情程序流圖用戶(hù)/游客在首頁(yè)或者推薦頁(yè)/訂單詳情頁(yè)等有商品名字/圖片鏈接的頁(yè)面,點(diǎn)擊該商品,客戶(hù)端將商品id以session形式發(fā)送到服務(wù)器端,服務(wù)器在數(shù)據(jù)庫(kù)中查詢(xún)?cè)撋唐沸畔?,若商品已下架,則提示查無(wú)此商品并返回首頁(yè)。若存在該商品則跳轉(zhuǎn)到商品詳情頁(yè)。圖3-7商品上下架程序流圖用戶(hù)登錄后點(diǎn)擊店鋪管理鏈接時(shí)從數(shù)據(jù)庫(kù)中驗(yàn)證用戶(hù)權(quán)限,如果用戶(hù)是店主身份,則跳轉(zhuǎn)到店鋪商品信息頁(yè)面,查詢(xún)?cè)摰晟唐窋?shù)據(jù)并渲染到頁(yè)面上。若不符合權(quán)限,則提示非店主并返回首頁(yè)。圖3-8歷史記錄查詢(xún)程序流圖用戶(hù)登錄后點(diǎn)擊瀏覽記錄鏈接,數(shù)據(jù)庫(kù)查詢(xún)?cè)撚脩?hù)瀏覽記錄,若存在瀏覽記錄則跳轉(zhuǎn)到瀏覽記錄頁(yè)面并渲染數(shù)據(jù)。若不存在瀏覽記錄,在瀏覽頁(yè)面中顯示熱門(mén)商品信息列表。圖3-9庫(kù)存報(bào)警程序流程圖店主登錄之后點(diǎn)擊店鋪管理,當(dāng)中有一個(gè)庫(kù)存量預(yù)警功能,可設(shè)置最低庫(kù)存量預(yù)警,此后每次登錄時(shí)都會(huì)自動(dòng)對(duì)照商品是否達(dá)到警戒點(diǎn),若達(dá)到了警戒點(diǎn)則彈出警戒框,否則無(wú)任何反映。圖3-10數(shù)據(jù)庫(kù)增刪查改程序流程圖數(shù)據(jù)庫(kù)管理員在可視化數(shù)據(jù)庫(kù)管理工具中登錄,通過(guò)權(quán)限驗(yàn)證即可登錄數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。圖3-11數(shù)據(jù)庫(kù)備份和恢復(fù)程序流程圖數(shù)據(jù)庫(kù)管理登錄數(shù)據(jù)庫(kù)軟件后,可使用數(shù)據(jù)庫(kù)自帶的備份以及還原語(yǔ)句對(duì)系統(tǒng)數(shù)據(jù)庫(kù)進(jìn)行備份/恢復(fù)。3.3數(shù)據(jù)庫(kù)設(shè)計(jì)Mongodb是一個(gè)文檔類(lèi)型數(shù)據(jù)庫(kù),表現(xiàn)形式為bson。類(lèi)似于json數(shù)據(jù)的格式可以用來(lái)儲(chǔ)存關(guān)系型數(shù)據(jù)庫(kù)無(wú)法存儲(chǔ)的非結(jié)構(gòu)性的復(fù)雜數(shù)據(jù)類(lèi)型??梢栽谝粋€(gè)數(shù)組里面再嵌套一個(gè)數(shù)組甚至多個(gè)數(shù)組。在本系統(tǒng)中主要用來(lái)做商品信息的存放,購(gòu)物車(chē)商品信息及數(shù)量的存放等。商品信息各不相同,有些是大小有些是長(zhǎng)度,可選款式也不同。本系統(tǒng)的購(gòu)物車(chē)主要是在用戶(hù)數(shù)據(jù)表中插入購(gòu)物車(chē)數(shù)組,其中一個(gè)數(shù)據(jù)為該商品id,另一個(gè)數(shù)據(jù)為購(gòu)物車(chē)中該商品數(shù)量,在用戶(hù)進(jìn)入購(gòu)物車(chē)的時(shí)候通過(guò)表單關(guān)聯(lián)查詢(xún)的方式,使用商品id在商品數(shù)據(jù)表中查詢(xún)到該商品信息渲染到頁(yè)面上。非常適合用來(lái)做不規(guī)則數(shù)據(jù)的讀寫(xiě)。

3.3.1數(shù)據(jù)庫(kù)圖表圖3-12數(shù)據(jù)庫(kù)E-R圖數(shù)據(jù)庫(kù)可以是嵌套bson數(shù)據(jù),可通過(guò)數(shù)據(jù)關(guān)聯(lián)的方式對(duì)其他數(shù)據(jù)表進(jìn)行連接,商品信息表則是所有商品的所有數(shù)據(jù)。圖3-13用戶(hù)數(shù)據(jù)表實(shí)體圖Id為數(shù)據(jù)庫(kù)自帶objectid,是每個(gè)數(shù)據(jù)插入數(shù)據(jù)庫(kù)中自動(dòng)生成的bson15位數(shù)數(shù)據(jù),不允許空對(duì)象;用戶(hù)名為6-20位數(shù),類(lèi)型為數(shù)字或字母的string類(lèi)型,密碼也一樣;瀏覽記錄為嵌套bson數(shù)據(jù),保存著用戶(hù)最近瀏覽過(guò)的20條商品信息,新用戶(hù)則為空對(duì)象;店鋪商品是注冊(cè)為店主的用戶(hù)特有屬性,若用戶(hù)權(quán)限不夠則無(wú)法也沒(méi)有店鋪商品數(shù)據(jù),最多可上架50個(gè)商品;搜索記錄為嵌套bson數(shù)據(jù),若用戶(hù)沒(méi)有使用過(guò)搜索功能則對(duì)象為空,否則只保留用戶(hù)最新搜索的20條信息;購(gòu)物車(chē)為嵌套bson數(shù)據(jù),若用戶(hù)沒(méi)有增加商品到購(gòu)物車(chē)中可為空,否則最多添加20樣商品到購(gòu)物車(chē)中;訂單為嵌套bson數(shù)據(jù),若用戶(hù)沒(méi)有購(gòu)買(mǎi)或者未付款訂單,則對(duì)象為空,最多保留20條訂單信息;用戶(hù)權(quán)限為1到4級(jí),不可為空。用戶(hù)數(shù)據(jù)表如下圖所示:表3-14用戶(hù)數(shù)據(jù)表序號(hào)數(shù)據(jù)元素?cái)?shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度允許空1idBSON

12否2用戶(hù)名String6-20否3密碼String6-20否4瀏覽記錄Json20是5店鋪商品Json50是6搜索記錄Json20是7購(gòu)物車(chē)Json20是8訂單Json20是9用戶(hù)權(quán)限Int1否圖3-15商品實(shí)體圖Id為數(shù)據(jù)庫(kù)自身生成的bson數(shù)據(jù),不可為空;Price是商品售價(jià);color是商品顏色,有些商品或者店鋪并沒(méi)有其他顏色該商品,可為空;edition是商品款式;click是該商品被點(diǎn)擊次數(shù),為搜索引擎重要排列順序來(lái)源,初始為0,不可為空;num為商品庫(kù)存;img為商品圖片存放路徑,是頁(yè)面img標(biāo)簽鏈接,不可為空;weight為商品重量;discount為商品描述性語(yǔ)句。表3-16商品信息數(shù)據(jù)表序號(hào)數(shù)據(jù)元素?cái)?shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度允許空1IdBson12否2PriceInt否3ColorString是4EditionString否5ClickInt是6NumInt是7ImgString是8WeightInt是9DiscountString否圖3-17搜索記錄實(shí)體圖搜索記錄表為用戶(hù)推薦商品的重要來(lái)源,id是數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí)自動(dòng)生成的,不可為空;在此表中為商品關(guān)聯(lián)查詢(xún)的唯一索引;Time是保存搜索時(shí)間的數(shù)據(jù),由于只保存最新20條搜索記錄,所以不可為空。表3-18搜索記錄表序號(hào)數(shù)據(jù)元素?cái)?shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度允許空1IdBson12否2Timetime_t否圖3-19購(gòu)物車(chē)信息實(shí)體圖Id是商品信息表中的id,也是關(guān)聯(lián)查詢(xún)商品信息的唯一索引;num是該用戶(hù)該商品已付款或者未付款的商品數(shù)量。表3-20購(gòu)物車(chē)信息表序號(hào)數(shù)據(jù)元素?cái)?shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度允許空1IdBson12否2NumInt否圖3-21訂單信息實(shí)體圖Id為商品id;付款狀態(tài)是區(qū)分已付款未付款信息的數(shù)據(jù);num為該商品已付款或者未付款的數(shù)量。表3-22訂單信息表序號(hào)數(shù)據(jù)元素?cái)?shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度允許空1IdBson12否2付款狀態(tài)boolean

否3退換貨狀態(tài)String否4下單時(shí)間time_t否5NumInt否6訂單號(hào)Int16否圖3-23店鋪商品信息實(shí)體圖Id為商品id,num為該店主該商品的庫(kù)存數(shù)量。表3-24店鋪商品信息表序號(hào)數(shù)據(jù)元素?cái)?shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度允許空1IdBson12否2NumInt否3.3.2連接數(shù)據(jù)庫(kù)MongoDB一般都是本機(jī)直接連接,不需要帳號(hào)密碼。但作為一個(gè)商業(yè)性系統(tǒng)的數(shù)據(jù)庫(kù)是必須有身份認(rèn)證登錄的,一是可以遠(yuǎn)程連接,二是為了數(shù)據(jù)安全性。每一個(gè)服務(wù)器都必須有一個(gè)固定的ip地址,每次連接服務(wù)器都有不同ip地址的話(huà)會(huì)導(dǎo)致連接不上,所以需要先有一個(gè)固定的ip地址,然后采用數(shù)據(jù)庫(kù)遠(yuǎn)程連接的方式建立數(shù)據(jù)庫(kù)連接。

購(gòu)物網(wǎng)站的實(shí)現(xiàn)和效果分析4.1系統(tǒng)功能實(shí)現(xiàn)和界面效果分析4.1.1用戶(hù)模塊主要功能用戶(hù)模塊主要包括:用戶(hù)的登錄注冊(cè),用戶(hù)權(quán)限的篩選,用戶(hù)信息的修改,用戶(hù)瀏覽記錄。4.1.2界面效果及部分代碼圖4-1登錄頁(yè)面圖登錄時(shí)輸入框旁會(huì)有用戶(hù)名及密碼規(guī)則提示,若不符合規(guī)則則點(diǎn)擊登錄按鈕無(wú)響應(yīng)。若符合規(guī)則則查詢(xún)數(shù)據(jù)庫(kù)是否有匹配用戶(hù)數(shù)據(jù),匹配則跳轉(zhuǎn)到首頁(yè),否則提示用戶(hù)名錯(cuò)誤/密碼錯(cuò)誤并在三秒后跳轉(zhuǎn)頁(yè)面。部分代碼如下:<script>

var

form1

=

document.getElementById('form1');

var

username

=

document.getElementById('username');

var

usernameTip

=

document.getElementById('usernameTip');

var

password

=

document.getElementById('password');

var

passwordTip

=

document.getElementById('passwordTip');

function

validUsername()

{

if

(username.value.length

<

6

||

username.value.length

>

20)

{

usernameTip.innerHTML

=

'長(zhǎng)度必須是6-20個(gè)';

return

false;

}

for

(var

i

=

0;

i

<

username.value.length;

i++)

{

var

c

=

username.value.charCodeAt(i);

if

((c

>=

48

&&

c

<=

57)

||

(c

>=

97

&&

c

<=

122)

||

(c

>=

65

&&

c

<=

90))

{

//不用管

}

else

{

usernameTip.innerHTML

=

'必須是字母或數(shù)字';

return

false;

}

}

usernameTip.innerHTML

=

'正確!';

return

true;

}

function

validPassword()

{

if

(password.value.length

<

6)

{

passwordTip.innerHTML

=

'長(zhǎng)度必須是6個(gè)以上';

return

false;

}

for

(var

i

=

0;

i

<

password.value.length;

i++)

{

var

c

=

password.value.charCodeAt(i);

if

((c

>=

48

&&

c

<=

57)

||

(c

>=

97

&&

c

<=

122)

||

(c

>=

65

&&

c

<=

90))

{

//不用管

}

else

{

passwordTip.innerHTML

=

'必須是字母或數(shù)字';

return

false;

}

}

passwordTip.innerHTML

=

'正確!';

return

true;

}

username.onfocus

=

function

()

{

usernameTip.innerHTML

=

'請(qǐng)輸入6-20個(gè)數(shù)字或字母';

}

username.onblur

=

validUsername;

password.onfocus

=

function

()

{

passwordTip.innerHTML

=

'請(qǐng)輸入6-20個(gè)數(shù)字或字母';

}

password.onblur

=

validPassword;

form1.onsubmit

=

function

()

{

if

(validUsername()

==

true

&&

validPassword()

==

true)

{

return

true;

}

else

{

return

false;

}

}</script>圖4-2登錄后首頁(yè)圖圖4-3已登錄下拉框圖圖4-4未登錄下拉框圖若未登錄用戶(hù),在首頁(yè)右上角會(huì)顯示歡迎使用字樣,旁邊的下拉框有登錄注冊(cè)按鈕,若已登錄,則顯示用戶(hù)名,旁邊下拉框則是個(gè)人信息跳轉(zhuǎn)鏈接以及退出按鈕。導(dǎo)航條為include注入,有商品管理頁(yè)面、購(gòu)物車(chē)、收藏夾、商品分類(lèi)以及聯(lián)系客服按鈕。部分效果圖如圖4-2、圖4-3、圖4-4所示部分代碼如下:<body>

<div

style="height:

60px;"><%-

include('./head')

%></div>

<%

data.forEach(function(data)

{

%>

<div

div

class="out"

onmouseover="this.className='in'"

onmouseout="this.className='out'">

<img

src="data.src"

title="data.discount"><br>

<a

id=""></a>

<%

});

%>

</div></body>router.get('/',

function

(req,

res,

next)

{

console.log(123);

commodity.find({},{},function(err,result){

if

(err)

{

res.render('msg',

{

msg:

'注冊(cè)失敗!',

nextPageName:

'注冊(cè)頁(yè)面',

nextPageUrl:

'/register'

});

res.render('index',

{

title:

'Express',

data:

result

});

}

})

});圖4-5訂單管理界面登錄后可進(jìn)入訂單管理頁(yè)面,一頁(yè)最多顯示四條數(shù)據(jù),總共五頁(yè)剛好顯示在數(shù)據(jù)庫(kù)中保留的20條訂單數(shù)據(jù)。左邊是導(dǎo)航菜單,可以跳轉(zhuǎn)到購(gòu)物車(chē)和瀏覽記錄頁(yè)面,可點(diǎn)擊訂單商品名字/圖片跳轉(zhuǎn)到商品詳情頁(yè)。點(diǎn)擊修改按鈕彈出模態(tài)框,可對(duì)商品部分屬性進(jìn)行修改:備注、退換貨等操作。圖4-6商品分類(lèi)界面由于系統(tǒng)商品日漸增多,設(shè)置了電子產(chǎn)品分類(lèi)導(dǎo)航,使用戶(hù)能瀏覽某一類(lèi)型的商品,提高用戶(hù)體驗(yàn)。圖4-7修改個(gè)人信息頁(yè)面購(gòu)物網(wǎng)站也可以作為交友平臺(tái),因此一個(gè)完善的用戶(hù)信息表是必備的,目前網(wǎng)站只有用戶(hù)名、年齡、頭像、郵箱、手機(jī)號(hào)信息,并且用戶(hù)在填寫(xiě)后依舊可隱藏某一項(xiàng)或者某幾項(xiàng)數(shù)據(jù),不會(huì)對(duì)用戶(hù)造成困擾的。且有專(zhuān)門(mén)的修改密碼頁(yè)面,一是避免一次填寫(xiě)過(guò)多數(shù)據(jù),二是減輕服務(wù)器負(fù)擔(dān)。

系統(tǒng)測(cè)試和調(diào)試5.1測(cè)試計(jì)劃5.1.1測(cè)試過(guò)程前期測(cè)試準(zhǔn)備:閱讀需求報(bào)告,了解項(xiàng)目需求;中期測(cè)試準(zhǔn)備:評(píng)估測(cè)試時(shí)間;制定測(cè)試用例后期測(cè)試流程:根據(jù)項(xiàng)目使用手冊(cè)以及中期測(cè)試準(zhǔn)備中的素材進(jìn)行測(cè)試并擬寫(xiě)測(cè)試用例報(bào)告;反復(fù)測(cè)試并編寫(xiě)測(cè)試報(bào)告5.1.2測(cè)試方法功能測(cè)試:主要采用的是邊界值分析法用戶(hù)界面測(cè)試:基本上所有測(cè)試人員采用的都是場(chǎng)景分析法兼容性測(cè)試:因?yàn)楸鞠到y(tǒng)是購(gòu)物商場(chǎng)系統(tǒng),不受電腦操作系統(tǒng)影響,所以測(cè)試的是各個(gè)瀏覽器對(duì)本系統(tǒng)的兼容性,使用了不同瀏覽器驗(yàn)證系統(tǒng)兼容性。安全性測(cè)試:應(yīng)用程序級(jí)別的安全性測(cè)試。容量測(cè)試:黑盒測(cè)試。性能測(cè)試:黑盒測(cè)試。5.2測(cè)試用例以及結(jié)果測(cè)試在注冊(cè)功能中是否能注冊(cè)不符合規(guī)范的用戶(hù)名/密碼,注冊(cè)成功后能否插入數(shù)據(jù)到數(shù)據(jù)庫(kù)中:表5-1注冊(cè)流程測(cè)試用例編號(hào)測(cè)試項(xiàng)操作步驟預(yù)期結(jié)果數(shù)據(jù)實(shí)際結(jié)果結(jié)果比較說(shuō)明1成功新增用戶(hù)-成功登錄系統(tǒng)在注冊(cè)頁(yè)面填寫(xiě)合法信息,點(diǎn)擊‘注冊(cè)’按鈕在登錄頁(yè)面輸入新注冊(cè)的用戶(hù)名、密碼點(diǎn)擊‘登錄’按鈕查看數(shù)據(jù)庫(kù)是否插入數(shù)據(jù)注冊(cè)成功后,提示用戶(hù)注冊(cè)成功并跳轉(zhuǎn)到登錄頁(yè)面用戶(hù)使用新增成功的帳號(hào)能成功登錄系統(tǒng),且顯示用戶(hù)名在導(dǎo)航條數(shù)據(jù)庫(kù)中已新增該用戶(hù)數(shù)據(jù)用戶(hù)名:1005380483登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime測(cè)試通過(guò)正常2用戶(hù)名稱(chēng)不合法,新增用戶(hù)失敗在注冊(cè)頁(yè)面填寫(xiě)不合法信息,點(diǎn)擊‘注冊(cè)’按鈕在登錄頁(yè)面輸入新注冊(cè)的用戶(hù)名、密碼查看數(shù)據(jù)庫(kù)中是否新增數(shù)據(jù)在注冊(cè)頁(yè)面輸入框旁邊顯示請(qǐng)輸入6-20位數(shù)字或字母用戶(hù)名點(diǎn)擊注冊(cè)按鈕無(wú)響應(yīng)新增用戶(hù)失敗后,在用戶(hù)列表未顯示該用戶(hù)相應(yīng)信息用戶(hù)新增失敗的用戶(hù)名、密碼,不能登錄系統(tǒng),提示該用戶(hù)未注冊(cè),返回登錄頁(yè)面用戶(hù)名:空/、、/,,/。。等登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime測(cè)試不通過(guò)非法用戶(hù)名無(wú)法注冊(cè)3密碼不合法,新增用戶(hù)失敗進(jìn)入注冊(cè)頁(yè)面填寫(xiě)非法密碼,點(diǎn)擊‘注冊(cè)’按鈕返回登陸頁(yè)面輸入注冊(cè)的用戶(hù)名、密碼查看數(shù)據(jù)庫(kù)中是否新增數(shù)據(jù)在注冊(cè)頁(yè)面輸入框旁邊顯示請(qǐng)輸入6-20位數(shù)字或字母密碼點(diǎn)擊注冊(cè)按鈕無(wú)響應(yīng)新增用戶(hù)失敗后,在用戶(hù)列表未顯示該用戶(hù)相應(yīng)信息用戶(hù)新增失敗的用戶(hù)名、密碼,不能登錄系統(tǒng),提示該用戶(hù)未注冊(cè),返回登錄頁(yè)面用戶(hù)名:1005380483注冊(cè)密碼:./1008611等校驗(yàn)密碼:./1008611測(cè)試不通過(guò)非法密碼無(wú)法注冊(cè)4校驗(yàn)密碼錯(cuò)誤,新增用戶(hù)失敗使用注冊(cè)功能,進(jìn)入注冊(cè)頁(yè)面填寫(xiě)合法用戶(hù)名和密碼,與注冊(cè)密碼不同的校驗(yàn)密碼,點(diǎn)擊‘注冊(cè)’按鈕查看數(shù)據(jù)庫(kù)中是否新增數(shù)據(jù)新增用戶(hù)失敗后,提示用戶(hù)注冊(cè)失敗,請(qǐng)重新填寫(xiě)新增用戶(hù)失敗后,在用戶(hù)列表未顯示該用戶(hù)相應(yīng)信息用戶(hù)新增失敗的用戶(hù)名、密碼,不能登錄系統(tǒng),提示校驗(yàn)失敗,注冊(cè)系統(tǒng)失敗,返回登錄頁(yè)面用戶(hù)名:1005380483登錄密碼:7758258ainime校驗(yàn)密碼:wayingting970129測(cè)試不通過(guò)錯(cuò)誤校驗(yàn)碼無(wú)法注冊(cè)5重復(fù)用戶(hù)名,新增用戶(hù)失敗使用注冊(cè)功能,進(jìn)入注冊(cè)頁(yè)面填寫(xiě)合法信息,用戶(hù)名處寫(xiě)入以存在的名稱(chēng),點(diǎn)擊‘注冊(cè)’按鈕返回登陸頁(yè)面輸入重復(fù)注冊(cè)的用戶(hù)名、密碼點(diǎn)擊‘登錄’按鈕新增用戶(hù)失敗后,提示用戶(hù)該用戶(hù)名已注冊(cè),請(qǐng)重新注冊(cè)新增用戶(hù)失敗后,在用戶(hù)列表未顯示該用戶(hù)相應(yīng)信息用戶(hù)新增失敗的用戶(hù)名、密碼,不能登錄系統(tǒng),提示用戶(hù)名重復(fù)或錯(cuò)誤,返回注冊(cè)頁(yè)面用戶(hù)名:重復(fù)名稱(chēng)登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime測(cè)試不通過(guò)重復(fù)用戶(hù)名無(wú)法注冊(cè)6不填寫(xiě)任何信息,新增用戶(hù)失敗使用注冊(cè)功能,進(jìn)入注冊(cè)頁(yè)面直接點(diǎn)擊‘注冊(cè)’按鈕返回登陸頁(yè)面點(diǎn)擊注冊(cè)按鈕無(wú)響應(yīng)用戶(hù)名:空登錄密碼:空校驗(yàn)密碼:空測(cè)試不通過(guò)不填寫(xiě)任何信息無(wú)法注冊(cè)

對(duì)注冊(cè)登錄界面是否滿(mǎn)足需求規(guī)格進(jìn)行測(cè)試:表5-2用戶(hù)界面測(cè)試用例編號(hào)測(cè)試項(xiàng)操作步驟預(yù)期結(jié)果數(shù)據(jù)實(shí)際結(jié)果結(jié)果比較說(shuō)明1注冊(cè)頁(yè)面使用注冊(cè)功能,進(jìn)入注冊(cè)頁(yè)面能成功打開(kāi)新增用戶(hù)界面;界面布局及其他規(guī)范(如:字體)與需求/設(shè)計(jì)說(shuō)明書(shū)一致;用戶(hù)名稱(chēng)、登錄密碼、校驗(yàn)密碼文本框可輸入;界面中的注冊(cè)、重置按鈕可用且事件未丟失用戶(hù)名稱(chēng):1005380483登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime測(cè)試通過(guò)注冊(cè)頁(yè)面符合需求2登陸頁(yè)面打開(kāi)登陸頁(yè)面能成功打開(kāi)新增用戶(hù)界面;界面布局及其他規(guī)范(如:字體)與需求/設(shè)計(jì)說(shuō)明書(shū)一致;用戶(hù)名稱(chēng)、登錄密碼、校驗(yàn)密碼文本框可輸入;界面中的保存、取消按鈕可用且事件未丟失用戶(hù)名稱(chēng):1005380483登錄密碼:7758258ainime測(cè)試通過(guò)登陸頁(yè)面符合需求

由于本系統(tǒng)為網(wǎng)站,不受電腦操作系統(tǒng)的影響,但是受客戶(hù)端類(lèi)型的影響,因此本測(cè)試用例主要測(cè)試了幾個(gè)主流瀏覽器對(duì)本系統(tǒng)是否兼容:表5-3兼容性測(cè)試用例編號(hào)測(cè)試項(xiàng)操作步驟預(yù)期結(jié)果數(shù)據(jù)實(shí)際結(jié)果結(jié)果比較說(shuō)明1使用IE瀏覽器,測(cè)試新增用戶(hù)功能打開(kāi)IE8瀏覽器使用管理員賬號(hào)成功登錄系統(tǒng)點(diǎn)擊“用戶(hù)管理”鏈接,進(jìn)入用戶(hù)管理模塊點(diǎn)擊‘新增’按鈕,進(jìn)入新增用戶(hù)頁(yè)面填入用戶(hù)信息,點(diǎn)擊‘保存’按鈕界面布局及其他規(guī)范(如:字體)與需求/設(shè)計(jì)說(shuō)明書(shū)一致,未出現(xiàn)數(shù)據(jù)錯(cuò)位現(xiàn)象;界面中內(nèi)容顯示完整界面中的保存、取消按鈕可用且事件未丟失用戶(hù)名稱(chēng):1005380483登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime測(cè)試通過(guò)IE瀏覽器可正常使用2使用Firefox瀏覽器,測(cè)試新增用戶(hù)功能打開(kāi)Firefox瀏覽器使用管理員賬號(hào)成功登錄系統(tǒng)點(diǎn)擊“用戶(hù)管理”鏈接,進(jìn)入用戶(hù)管理模塊點(diǎn)擊‘新增’按鈕,進(jìn)入新增用戶(hù)頁(yè)面填入用戶(hù)信息,點(diǎn)擊‘保存’按鈕界面布局及其他規(guī)范(如:字體)與需求/設(shè)計(jì)說(shuō)明書(shū)一致,未出現(xiàn)數(shù)據(jù)錯(cuò)位現(xiàn)象;界面中內(nèi)容顯示完整界面中的保存、取消按鈕可用且事件未丟失用戶(hù)名稱(chēng):1005380483登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime3使用360瀏覽器,測(cè)試新增用戶(hù)功能打開(kāi)360瀏覽器使用管理員賬號(hào)成功登錄系統(tǒng)點(diǎn)擊“用戶(hù)管理”鏈接,進(jìn)入用戶(hù)管理模塊點(diǎn)擊‘新增’按鈕,進(jìn)入新增用戶(hù)頁(yè)面填入用戶(hù)信息,點(diǎn)擊‘保存’按鈕界面布局及其他規(guī)范(如:字體)與需求/設(shè)計(jì)說(shuō)明書(shū)一致,未出現(xiàn)數(shù)據(jù)錯(cuò)位現(xiàn)象;界面中內(nèi)容顯示完整界面中的保存、取消按鈕可用且事件未丟失用戶(hù)名稱(chēng):1005380483登錄密碼:7758258ainime校驗(yàn)密碼:7758258ainime

主要對(duì)需要不同用戶(hù)權(quán)限的功能進(jìn)行測(cè)試,測(cè)試系統(tǒng)是否篩選規(guī)則完善,具有高安全性:表5-4安全性測(cè)試用例編號(hào)測(cè)試項(xiàng)操作步驟預(yù)期結(jié)果數(shù)據(jù)實(shí)際結(jié)果結(jié)果比較說(shuō)明1用戶(hù)管理功能分別使用買(mǎi)家/賣(mài)家/管理員賬號(hào)成功登錄系統(tǒng)點(diǎn)擊“用戶(hù)管理”鏈接,進(jìn)入用戶(hù)管理模塊使用買(mǎi)家賬號(hào)登陸后在其菜單欄不可見(jiàn)“用戶(hù)管理”和“商品上下架”鏈接使用賣(mài)家賬號(hào)登陸后在其菜單欄不可可見(jiàn)“操作員管理”鏈接,但可見(jiàn)“商品上下架”鏈接,且能成功點(diǎn)擊該鏈接進(jìn)入該模塊使用管理員賬號(hào)登陸后在其菜單欄可見(jiàn)“操作員管理”和“商品上下架”鏈接,且能成功點(diǎn)擊該鏈接進(jìn)入模塊用戶(hù)名稱(chēng):對(duì)應(yīng)賬號(hào)登錄密碼:對(duì)應(yīng)密碼校驗(yàn)密碼:對(duì)應(yīng)校驗(yàn)碼測(cè)試通過(guò)各級(jí)用戶(hù)相應(yīng)權(quán)限符合需求2商品管理使用賣(mài)家/管理員賬號(hào)登陸點(diǎn)擊“商品管理”鏈接,進(jìn)入商品管理模塊輸入商品信息,點(diǎn)擊“確認(rèn)”保存信息點(diǎn)擊“下架”鏈接,商品下架成功點(diǎn)擊“審核”鏈接,可審核商品是否符合規(guī)范使用賣(mài)家用戶(hù)登陸后在其菜單欄可看到“商品上下架鏈接”,且能成功點(diǎn)擊該鏈接進(jìn)入該模塊使用管理員賬號(hào)登陸后在其菜單欄可看到“商品審核”鏈接,且能成功點(diǎn)擊該鏈接進(jìn)入該模塊用戶(hù)名稱(chēng):對(duì)應(yīng)賬號(hào)登錄密碼:對(duì)應(yīng)密碼校驗(yàn)密碼:對(duì)應(yīng)校驗(yàn)碼測(cè)試通過(guò)各級(jí)用戶(hù)相應(yīng)權(quán)限符合需求

對(duì)本系統(tǒng)同一時(shí)間登錄大量用戶(hù)是否會(huì)導(dǎo)致系統(tǒng)崩塌以及高頻率登錄用戶(hù)是否會(huì)導(dǎo)致系統(tǒng)崩塌進(jìn)行測(cè)試:表5-5性能測(cè)試用例編號(hào)測(cè)試項(xiàng)操作步驟預(yù)期結(jié)果數(shù)據(jù)實(shí)際結(jié)果結(jié)果比較說(shuō)明150個(gè)已注冊(cè)用戶(hù)同時(shí)登錄打開(kāi)首頁(yè)輸入用戶(hù)名、密碼點(diǎn)擊“登錄”按鈕出錯(cuò)率不超過(guò)10%系統(tǒng)響應(yīng)時(shí)間在10S內(nèi)內(nèi)存占有率不超過(guò)90%CPU使用率不超過(guò)90%用戶(hù)名:參數(shù)化數(shù)據(jù)表數(shù)據(jù)密碼:參數(shù)化數(shù)據(jù)表數(shù)據(jù)測(cè)試通過(guò)性能良好2每次登陸20個(gè)用戶(hù),每次登陸相隔5秒,共耗時(shí)50秒打開(kāi)首頁(yè)輸入用戶(hù)名、密碼點(diǎn)擊“登錄”按鈕出錯(cuò)率不超過(guò)10%系統(tǒng)響應(yīng)時(shí)間在10S內(nèi)內(nèi)存占有率不超過(guò)90%CPU使用率不超過(guò)90%用戶(hù)名:參數(shù)化數(shù)據(jù)表數(shù)據(jù)密碼:參數(shù)化數(shù)據(jù)表數(shù)據(jù)測(cè)試通過(guò)性能良好

對(duì)本系統(tǒng)數(shù)據(jù)庫(kù)是否支持同時(shí)插入大量數(shù)據(jù)以及大量數(shù)據(jù)是否會(huì)導(dǎo)致數(shù)據(jù)庫(kù)癱瘓進(jìn)行測(cè)試:表5-6容量測(cè)試用例編號(hào)測(cè)試項(xiàng)操作步驟預(yù)期結(jié)果數(shù)據(jù)實(shí)際結(jié)果結(jié)果比較說(shuō)明150個(gè)并發(fā)用戶(hù)同時(shí)查詢(xún)商品信息打開(kāi)首頁(yè)輸入用戶(hù)名、密碼點(diǎn)擊“登錄”按鈕進(jìn)入商品信息頁(yè)面輸入查詢(xún)條件點(diǎn)擊查詢(xún)按鈕出錯(cuò)率不超過(guò)10%系統(tǒng)響應(yīng)時(shí)間在10S內(nèi)內(nèi)存占有率不超過(guò)90%CPU使用率不超過(guò)90%用戶(hù)名:對(duì)應(yīng)賬號(hào)密碼:對(duì)應(yīng)密碼測(cè)試通過(guò)良好2添加最大的容量數(shù)據(jù)打開(kāi)首頁(yè)輸入用戶(hù)名、密碼點(diǎn)擊“登錄”按鈕進(jìn)入商品信息頁(yè)面輸入商品信息點(diǎn)擊保存按鈕(此處暫定為2w條)出錯(cuò)率不超過(guò)10%系統(tǒng)響應(yīng)時(shí)間在10S內(nèi)內(nèi)存占有率不超過(guò)90%CPU使用率不超過(guò)90%用戶(hù)名:對(duì)應(yīng)賬號(hào)密碼:對(duì)應(yīng)密碼測(cè)試通過(guò)在達(dá)到最大容量時(shí)功能能夠正常運(yùn)行;

系統(tǒng)優(yōu)化及合理化建議6.1系統(tǒng)優(yōu)化的內(nèi)容6.1.1數(shù)據(jù)緩存不再使用傳統(tǒng)的cookie緩存用戶(hù)帳號(hào)密碼的方式,而是通過(guò)session緩存的方式存儲(chǔ)在服務(wù)器端,給session一個(gè)特定的cookie碼,使其在需要存取session數(shù)據(jù)的時(shí)候能被服務(wù)器有效識(shí)別。6.1.2文件上傳傳統(tǒng)的nodejs原生實(shí)現(xiàn)是使用formidable模塊進(jìn)行文件上傳,再通過(guò)path模塊獲取文件名,通過(guò)構(gòu)建輸入流和輸出流管道實(shí)現(xiàn)文件跨磁盤(pán)移動(dòng)。新優(yōu)化的文件上傳功能使用的是express框架中的multer模塊,通過(guò)dest參數(shù)設(shè)置實(shí)現(xiàn)文件上傳之后緩存在服務(wù)器端,如果不設(shè)置的話(huà)文件是不會(huì)保存在磁盤(pán)中的。此外multer模塊還可以設(shè)置單文件上傳還是多文件上傳,上傳文件最大數(shù)量等[9]。6.1.3用戶(hù)隱私加密如果直接保存用戶(hù)帳號(hào)密碼在數(shù)據(jù)庫(kù)中,如果數(shù)據(jù)庫(kù)被非法爆破或者侵入,就一定會(huì)導(dǎo)致用戶(hù)隱私泄露,因此需要對(duì)重要數(shù)據(jù)進(jìn)行加密,而購(gòu)物網(wǎng)站最重要的數(shù)據(jù)就是用戶(hù)帳號(hào)密碼和銀行卡等信息了。這里采用的是express框架下的crypto模塊,通過(guò)傳參的方式構(gòu)建加密函數(shù):function

md5(data)

{

return

crypto.createHash('md5').update(data).digest('hex');}并非只有這一種加密方法,這只是一個(gè)最簡(jiǎn)單的加密示例,此外還可以截取第x到y(tǒng)位數(shù)的字符或者字符串加密再join到原來(lái)的加密字符上。而對(duì)登錄密碼的驗(yàn)證,修改密碼的驗(yàn)證也是如此,先獲取頁(yè)面上的字符串再通過(guò)同樣的加密方式加密,再與數(shù)據(jù)庫(kù)中的該用戶(hù)密碼進(jìn)行對(duì)比。6.1.4注冊(cè)重復(fù)由于mongodb數(shù)據(jù)庫(kù)是異步操作的方式,一般的注冊(cè)流程是這樣的:頁(yè)面上寫(xiě)入用戶(hù)名跟密碼,與數(shù)據(jù)庫(kù)中的數(shù)據(jù)做對(duì)比,如果沒(méi)有的話(huà)同意注冊(cè)該用戶(hù),然后將用戶(hù)名和密碼寫(xiě)入數(shù)據(jù)庫(kù)中。但mongodb數(shù)據(jù)庫(kù)如果這樣做會(huì)出現(xiàn)一個(gè)問(wèn)題,當(dāng)多個(gè)用戶(hù)注冊(cè)相同用戶(hù)名的時(shí)候,數(shù)據(jù)庫(kù)對(duì)比是同步執(zhí)行的,多個(gè)用戶(hù)都不與數(shù)據(jù)庫(kù)中數(shù)據(jù)沖突,于是全都通過(guò)注冊(cè)篩選,全部注入數(shù)據(jù)庫(kù)中。所以這里用到了唯一索引值:磁盤(pán)上的物理位置的唯一指針,這么理解:同一個(gè)地方只能有一個(gè)數(shù)據(jù),只能一個(gè)人站在某一個(gè)點(diǎn)上,當(dāng)?shù)诙€(gè)人想站在這里的時(shí)候就會(huì)出現(xiàn)異常,在數(shù)據(jù)庫(kù)中的流程理解為:當(dāng)通過(guò)頁(yè)面上簡(jiǎn)單的篩選后,用戶(hù)名和密碼直接注入數(shù)據(jù)庫(kù)中,一個(gè)字符串與之對(duì)應(yīng)有一個(gè)唯一索引值(類(lèi)似于ASCII碼),如果數(shù)據(jù)庫(kù)中已經(jīng)有這個(gè)用戶(hù)名,那么就注冊(cè)失敗,返回fail給服務(wù)器,服務(wù)器返回fail給客戶(hù)端。代碼為:db.users.createIndex({username:1},{unique:true})——在users集合中給username創(chuàng)建唯一索引值。6.1.5重復(fù)頁(yè)面處理購(gòu)物商城一定會(huì)有超級(jí)多的頁(yè)面,比如耐克某一款鞋子的詳情頁(yè),阿迪達(dá)斯鞋子的詳情頁(yè)等等,但頁(yè)面多不代表代碼也要很多,很多都是重復(fù)的,如果代碼重復(fù),我們需要做的就是封裝重構(gòu)代碼,相同的封裝起來(lái),不同的傳參進(jìn)去,頁(yè)面的重復(fù)其實(shí)也可以“封裝重構(gòu)”,剛開(kāi)始使用的是騰訊的template模板,但很遺憾的是數(shù)據(jù)傳遞出現(xiàn)了問(wèn)題,只能相同頁(yè)面?zhèn)鲄?,如果不同?yè)面的話(huà)要么是先跳轉(zhuǎn)以至于跳過(guò)了js程序,要么是無(wú)法跳轉(zhuǎn),如果在js寫(xiě)跳轉(zhuǎn)又在跳轉(zhuǎn)頁(yè)面取不到數(shù)據(jù),后面使用的是cookie緩存?zhèn)鲄?,甚至于session緩存?zhèn)鲄?,但都很繁瑣。最后利用express框架,先寫(xiě)一個(gè)ejs頁(yè)面,最后渲染頁(yè)面,也就是類(lèi)似于做了一個(gè)模板,然后將參數(shù)傳遞進(jìn)來(lái),代碼示例:router.get('/login',function(req,res,next){res.render('login',{});});6.1.6權(quán)限篩選有些頁(yè)面是需要登錄甚至需要權(quán)限的,不可能所有頁(yè)面游客都可以查看。修改密碼,個(gè)人信息頁(yè)面等需要登錄才能查看,而我的店鋪等頁(yè)面則需要店主權(quán)限才能進(jìn)入,等等情況都需要進(jìn)行篩選。在頁(yè)面執(zhí)行的時(shí)候,是有中間函數(shù)的,打個(gè)比方,登錄的時(shí)候需要先通過(guò)第一個(gè)篩選函數(shù):頁(yè)面上的篩選函數(shù),字符串大小,字符類(lèi)型,驗(yàn)證碼都符合的情況下交給下一個(gè)函數(shù)處理,此時(shí)去數(shù)據(jù)庫(kù)對(duì)比用戶(hù)名,對(duì)比失?。〝?shù)據(jù)庫(kù)中沒(méi)有此用戶(hù))則創(chuàng)建輸入用戶(hù)名跟密碼到數(shù)據(jù)庫(kù)中,然后下一個(gè)函數(shù):返回true到頁(yè)面上,跳轉(zhuǎn)頁(yè)面,將用戶(hù)名寫(xiě)到導(dǎo)航欄中。所以我們只需要在js文件最開(kāi)始的地方創(chuàng)建一個(gè)數(shù)據(jù)存放需要一級(jí)權(quán)限的頁(yè)面數(shù)組,二級(jí)權(quán)限頁(yè)面數(shù)組,如果登錄的用戶(hù)符合權(quán)限,則交給下一個(gè)函數(shù)處理,否則提示無(wú)權(quán)限進(jìn)入,跳轉(zhuǎn)到首頁(yè)。代碼示例:varexcludeUrls=['/','/register','/login','logout','/captchapng'];//不需要登錄的url//這里要進(jìn)行攔截過(guò)濾,有些頁(yè)面必須登錄才能訪(fǎng)問(wèn)app.use(function(req,res,next){if(excludeUrls.indexOf(req.path)!=-1){next();}else{if(req.session.username){//如果有登錄,直接放過(guò)next();}else{//如果沒(méi)有登錄,重定向到登錄res.render('msg',{msg:'您還沒(méi)登錄!',nextPageName:'登錄頁(yè)',nextPageUrl:'/login'});}}});6.1.7驗(yàn)證碼剛開(kāi)始用的是隨機(jī)產(chǎn)生一個(gè)數(shù)字,連續(xù)產(chǎn)生四個(gè)然后拼湊字符串成為image路徑的方式生成驗(yàn)證碼,四個(gè)數(shù)字join成一個(gè)字符串,獲取頁(yè)面上文本框字符串跟后臺(tái)字符串做對(duì)比。Express本身有封裝一個(gè)驗(yàn)證碼模塊叫做captchapng2拿過(guò)來(lái)用就可以了,代碼如下://給瀏覽輸出驗(yàn)證碼router.get('/captchapng',function(req,res,next){resp.writeHeader('200',{'Content-Type':'imgae/png'});//解決亂碼問(wèn)題letrand=parseInt(Math.random()*9000+1000);//生成一個(gè)四位數(shù)隨機(jī)數(shù)1000-9999//生成的驗(yàn)證碼要存到session中req.session.validcode=rand;letpng=newcaptchapng(80,30,rand);//width,height,numericcaptcharesp.writeHead(200,{'Content-Type':'image/png'});resp.write(png.getBuffer());resp.end();});router.post('/login',function(req,res,next){varvalidcode=req.body.validcode;varusername=req.body.username;varpassword=req.body.password;//判斷驗(yàn)證碼if(validcode!=req.session.validcode){res.render('msg',{msg:'登錄失敗,驗(yàn)證碼錯(cuò)誤',nextPageName:'登錄頁(yè)面',nextPageUrl:'/login'});return;}6.1.8頁(yè)面拼湊頁(yè)面拼湊算是一個(gè)很簡(jiǎn)單也很復(fù)雜的功能了,由于ajax異步操作的特性,本著優(yōu)化系統(tǒng)的心思一開(kāi)始是使用的ajax導(dǎo)入頁(yè)面的方式來(lái)做頁(yè)面拼湊。后來(lái)遇到諸多問(wèn)題。傳參傳不過(guò)去,多次傳參導(dǎo)致數(shù)據(jù)沖突,無(wú)法在導(dǎo)航條調(diào)用內(nèi)容頁(yè)面的元素,也就是就算傳參過(guò)去導(dǎo)航條了內(nèi)容頁(yè)面也無(wú)法使用,使用了很多種方式最后還是以失敗告終,html當(dāng)中的frameset框架則會(huì)導(dǎo)致下拉按鈕下的頁(yè)面被遮擋,不得已使用了ejs當(dāng)中的include方法偽拼湊頁(yè)面。利用bootstrap中大量寫(xiě)好的css樣式來(lái)做頁(yè)面美工,express框架中的mvc模型,為的是“封裝重構(gòu)”頁(yè)面,避免代碼塊冗余。6.2系統(tǒng)優(yōu)化的建議可以采用csdn云服務(wù)器,服務(wù)器有專(zhuān)門(mén)的提高數(shù)據(jù)訪(fǎng)問(wèn)速度的工具,能進(jìn)一步優(yōu)化系統(tǒng)運(yùn)行速度。與騰訊等一些公司合作,擴(kuò)大注冊(cè)登錄渠道,也能取得更好的廣告效果。增加一些智能合約,減輕管理員工作負(fù)擔(dān)的同時(shí)提高對(duì)用戶(hù)反饋的處理速度。結(jié)論本次畢業(yè)設(shè)計(jì)題目是基于html和mongodb的電子產(chǎn)品購(gòu)物網(wǎng)站,在本次設(shè)計(jì)中,最大的收獲是對(duì)一個(gè)項(xiàng)目完整的設(shè)計(jì)和優(yōu)化。這個(gè)項(xiàng)目可以說(shuō)是在學(xué)校中第一個(gè)獨(dú)立完成的大項(xiàng)目。首先要分析系統(tǒng)的需求,有條理的對(duì)系統(tǒng)進(jìn)行設(shè)計(jì),比如用戶(hù)登錄注冊(cè),首先是對(duì)用戶(hù)名和密碼類(lèi)型和長(zhǎng)度的限制,并且對(duì)比數(shù)據(jù)庫(kù),那么可以把一部分功能交給客戶(hù)端去做,用戶(hù)名和密碼的限制可以用dom對(duì)象獲取變量加以判斷然后限制按鈕的跳轉(zhuǎn)。把多個(gè)線(xiàn)程或者單線(xiàn)程的多個(gè)邏輯分配給不同的業(yè)務(wù)層,配合nodejs的異步非堵塞I/O特性使得系統(tǒng)更高效。要認(rèn)清楚每一個(gè)語(yǔ)言或者數(shù)據(jù)庫(kù)的特點(diǎn),找不出錯(cuò)誤的地方極可能是語(yǔ)言特點(diǎn)數(shù)據(jù)庫(kù)特點(diǎn)的問(wèn)題,nodejs底層接口絕大多數(shù)是異步操作[10],對(duì)數(shù)據(jù)讀寫(xiě)修改會(huì)由于異步的原因?qū)е聰?shù)據(jù)讀取不到而沒(méi)有執(zhí)行下一步函數(shù),此時(shí)應(yīng)該寫(xiě)回調(diào)函數(shù)或者把數(shù)據(jù)讀寫(xiě)修改改成同步操作。由于mongodb數(shù)據(jù)庫(kù)的bson特性,加上關(guān)聯(lián)查詢(xún)方法,可以在用戶(hù)數(shù)據(jù)表里面嵌套購(gòu)物車(chē)json數(shù)組、歷史記錄、瀏覽記錄等,但也由于json數(shù)組的特性,比如result[0]是a:1,result[0].a是1,此時(shí)取不到a名字,無(wú)法直接前面是商品名后面是商品在購(gòu)物車(chē)中的數(shù)量。認(rèn)清楚每一個(gè)工具或者語(yǔ)言的優(yōu)缺點(diǎn)才能盡善盡美的做出好的系統(tǒng)。

參考文獻(xiàn)席季季.基于nodejs的web應(yīng)用系統(tǒng)高并發(fā)處理模式的研究與實(shí)現(xiàn)[D].北京郵電大學(xué),2018.[2]朱愛(ài)華,付曹政,曹鐘,李強(qiáng),楊建偉.基于Node.js框架和MongoDB數(shù)據(jù)庫(kù)的物流信息服務(wù)系統(tǒng)設(shè)計(jì)[J].北京建筑大學(xué)學(xué)報(bào),2018,34(04):41-46.[3]王伶俐,張傳國(guó).基于NodeJS+Express框架的輕應(yīng)用定制平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2017,44(S2):596-599.[4]熊俊雄,陸海洪,周志文,蘭偉發(fā),朱師琳,徐元中.基于express的內(nèi)容發(fā)布系統(tǒng)[J].電子世界,2019(11):14-16.[5]李晶.NodeJS——服務(wù)器端JavaScript運(yùn)行環(huán)境[J].程序員,2010(12):29.[6]曹文彬,譚新明,劉備,劉傳文.基于事件驅(qū)動(dòng)的高性能WebSocket服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2018,35(01):21-27+91.[7]李興華.基于WebSocket的移動(dòng)即時(shí)通信系統(tǒng)[D].重慶大學(xué),2013.[8]許會(huì)元,何利力.NodeJS的異步非阻塞I/O研究[J].工業(yè)控制計(jì)算機(jī),2015,28(03):127-129.[9]楊曉婷.基于Node.js的基礎(chǔ)框架設(shè)計(jì)與實(shí)現(xiàn)[D].北京郵電大學(xué),2017.[10]黃孝羽.基于NodeJS函數(shù)接口描述的正則引擎的設(shè)計(jì)和實(shí)現(xiàn)[D].東南大學(xué),2017.

致謝此畢業(yè)設(shè)計(jì)的最終完成得到了很多人的協(xié)助,許明鶴老師是一個(gè)很負(fù)責(zé)任的老師,有問(wèn)必答,并且很耐心的幫我注意提醒一些我自己沒(méi)注意到的地方。我的表哥是最大的功臣,項(xiàng)目的優(yōu)化改進(jìn)不足都是他幫我過(guò)目之后給我建議給我方向,甚至告訴我用什么已學(xué)或未學(xué)的知識(shí)點(diǎn)去改進(jìn),擴(kuò)大了知識(shí)面。而我的宿友們對(duì)我最大的幫助來(lái)自于思維的發(fā)散,在一次次聊我們的畢業(yè)設(shè)計(jì)內(nèi)容中,一次又一次思想碰撞給了我新的火花,豐富了系統(tǒng)內(nèi)容以及系統(tǒng)美觀程度。

HYPERLINK如何選擇組裝電腦配件

如何選擇組裝的電腦配件.

第一,選擇好CPU平臺(tái),就是INTER還是AMD,看你是要配什么樣的電腦,高端還是低端的,兩個(gè)平臺(tái)都高低的產(chǎn)品。第二,選擇主板了,主板的品牌比較多,質(zhì)量,價(jià)格也不一,當(dāng)你第一步卻定了,那么主板也就相應(yīng)的卻定下來(lái)了,以INTER為例,只可以選擇775接口的主板(早期有478接口的,不推薦),主板的選擇主要有兩種,一是集成顯卡,二是不集成顯卡。集成顯卡的話(huà),就可以省下顯卡的錢(qián),但是對(duì)游戲玩家不推薦。那么當(dāng)然是選擇不集成顯卡的主板了,而且最好選擇一線(xiàn)品牌,如華碩,技嘉等。主板里,還有個(gè)蕊片組的選擇。關(guān)于蕊片組,各個(gè)品牌的主板命名有些不一樣,主流是INTER965,945,915,VIA的KT890,還有NFORCE4,NFORCE5。等。比較難說(shuō)清楚。最好是選擇INTER的蕊片組,雖然價(jià)格會(huì)稍高一些。推薦945,技術(shù)比較成熟。第三,顯卡的選擇。顯卡主要還是有兩類(lèi)品牌,GEFORCE和ATI,兩個(gè)品牌有高,中,低的顯卡。顯卡選擇要看你個(gè)人喜歡了,預(yù)算充足的話(huà),最好是買(mǎi)中,高端的顯卡。

第四,就是內(nèi)存了,內(nèi)存關(guān)系電腦的穩(wěn)定性。當(dāng)然是要好一點(diǎn)的。買(mǎi)一線(xiàn)品牌的?,F(xiàn)在配電腦,主流是DDR667,DDR800DDR1333第五,顯示器的選擇,推薦液晶。如何選擇硬件組裝電腦這是一個(gè)老生常談的問(wèn)題了,這也是一個(gè)讓高手們顯示自己硬件功底的問(wèn)題,同時(shí)這還是一個(gè)讓很多新手為之焦頭爛額的問(wèn)題。該怎么配?具體配什么?怎樣配才能盡量減小瓶頸?本文就將從內(nèi)到外,從理論到實(shí)踐,為朋友們抽絲剝繭一一道來(lái)。

一、CPU

作為一臺(tái)電腦最關(guān)鍵的組成部分,CPU確實(shí)起著舉足輕重的作用,但體現(xiàn)一臺(tái)電腦的綜合速度,并不是僅僅依靠CPU的,常??吹胶芏嘈率謧?cè)谂潆娔X的時(shí)候,把CPU選的很好,但其他的東西諸如內(nèi)存、主板、硬盤(pán)等都選的不太理想,好像這臺(tái)電腦速度的快慢就體現(xiàn)在CPU速度的快慢上似的。甚至很多著名的品牌機(jī)廠商,都推出過(guò)類(lèi)似“P4+256M內(nèi)存”的這種跛腳配置。其實(shí)對(duì)于一般的家用電腦而言,一個(gè)真正會(huì)配的高手,是不會(huì)把大量的錢(qián)花在CPU上的。家用電腦,畢竟不是做密集型科學(xué)計(jì)算用的,它講求的是多種媒體的配合工作,講求的是能一邊下載文件、一邊上網(wǎng)瀏覽網(wǎng)頁(yè)、一邊聽(tīng)音樂(lè)、一邊還能打開(kāi)其他的程序,在這種情況下,提升內(nèi)存的容量比提升CPU的主頻對(duì)速度的影響要明顯的多?,F(xiàn)今的中國(guó)家庭用戶(hù),很多家長(zhǎng)對(duì)于電腦一竅不通,他們只聽(tīng)說(shuō)“奔四”代表著速度快,并不知道整機(jī)速度的快慢除了CPU以外,還有很多其他的因素影響著它。但在買(mǎi)電腦的時(shí)候,最后做決定并掏錢(qián)的人,往往都是這些啥都不懂的家長(zhǎng)們,于是就出現(xiàn)了上面的一幕:品牌機(jī)廠商為了能有更好的銷(xiāo)路、兼容機(jī)裝機(jī)店的銷(xiāo)售人員為了能拿到更多的獎(jiǎng)金,開(kāi)始違背良心來(lái)配置出這種高主頻處理器、低容量?jī)?nèi)存的跛腳電腦。說(shuō)嚴(yán)重點(diǎn),這是屬于對(duì)消費(fèi)者的不負(fù)責(zé)任,是一種商業(yè)欺詐行為!同樣5000元的配置,高手配出來(lái)的賽揚(yáng),比新手配出來(lái)的P4還要快很多,曾經(jīng)有一家全球著名的硬件網(wǎng)站在2003年的時(shí)候刊登過(guò)一篇關(guān)于配置家用電腦時(shí)各硬件占用總預(yù)算百分比的文章,文中很明確的提到了CPU的價(jià)錢(qián)最好不要超過(guò)總預(yù)算的10%-15%,我們雖然不能說(shuō)他肯定完全正確,但至少人家是通過(guò)很多調(diào)查后得出的結(jié)論,有借鑒的理由。反觀現(xiàn)在的很多所謂的“低價(jià)奔四電腦”、“3999元買(mǎi)P4品牌機(jī)”之類(lèi)的廣告,我想說(shuō)的就是:你花了3999元,只買(mǎi)了一塊P4的處理器,其他的什么都沒(méi)有了!

二、內(nèi)存

對(duì)于配置一臺(tái)電腦來(lái)說(shuō),內(nèi)存是重頭戲,容量、速度、類(lèi)型等等每一項(xiàng)指標(biāo)都對(duì)最終的整機(jī)綜合速度起著至關(guān)重要的影響,尤其是內(nèi)存的帶寬和容量。對(duì)于內(nèi)存帶寬而言,很多人都認(rèn)為400MHz、533MHz前端總線(xiàn)的賽揚(yáng)四或P4,配單通道的DDR內(nèi)存就足夠了,雙通道DDR內(nèi)存是配合800MHz以上前端總線(xiàn)的P4處理器用的,其實(shí)這樣就大錯(cuò)特錯(cuò)了,哪怕是最老的賽揚(yáng)四,都需要雙通道的DDR內(nèi)存才能達(dá)到它的帶寬!也就是說(shuō),你如果選擇賽揚(yáng)四1.8G,必須配合865以上的主板和至少雙通道DDR200的內(nèi)存,才能滿(mǎn)足它的帶寬要求!稍微計(jì)算一下就可以得知:賽揚(yáng)四1.8G的前端總線(xiàn)是400MHz,它的內(nèi)存帶寬理論值是400MHz×64bit÷8=3.2G/s,但當(dāng)它裝在845系列的主板上時(shí),由于845主板的限制,即使你插上能符合它帶寬要求的DDR400內(nèi)存,也只能運(yùn)行在DDR266上,這時(shí)的內(nèi)存所能提供的帶寬是266MHz×64bit÷8=2.1G/s,比3.2G/s要小很多,即使你通過(guò)BIOS里的內(nèi)存調(diào)節(jié)選項(xiàng)往上調(diào)節(jié)一檔(也只能調(diào)節(jié)一檔而已),讓內(nèi)存運(yùn)行在DDR333下,所能提供的帶寬也僅僅是333MHz×64bit÷8=2.66G/s,離3.2G/s還是有一定的距離,而內(nèi)存帶寬的降低,能非常明顯的降低整機(jī)的綜合速度,運(yùn)行任何程序都能明顯的感覺(jué)出來(lái)!所以如果想滿(mǎn)足賽揚(yáng)1.8G處理器的內(nèi)存帶寬要求,你必須要為它配置865以上的主板和雙通道的內(nèi)存才行!P4亦是如此。很多人也許會(huì)問(wèn):那845系列的主板是配什么處理器的呢?我想回答你的就是:845系列的主板是屬于“不能用”的主板,因?yàn)樘幚砥饔肋h(yuǎn)比主板發(fā)展的快,當(dāng)初Intel造出845系列的芯片組是為了能給當(dāng)時(shí)的賽揚(yáng)和P4提供一個(gè)過(guò)渡的平臺(tái),不至于讓它們成為“沒(méi)有主板配合”的處理器而已,也是為了能在低端市場(chǎng)分一杯羹,而現(xiàn)今865甚至9xx系列的主板橫行的時(shí)候,845系列的主板確實(shí)是屬于“不能用”的主板了,滿(mǎn)足不了任何一款處理器的內(nèi)存帶寬,造成性能上的嚴(yán)重低下,試問(wèn)這種主板你會(huì)選擇么?即使配臺(tái)2000多元的超低價(jià)電腦,也不要去選擇845系列的主板,至少需要865以上的和雙通道內(nèi)存才行,因?yàn)閮?nèi)存帶寬是一個(gè)非常影響系統(tǒng)性能的參數(shù),倘若一味的為了省錢(qián)而配置845系列的主板,那就得不償失了。

內(nèi)存的容量方面,應(yīng)每個(gè)人對(duì)電腦的使用方向不同,容量的要求也是不同的,現(xiàn)在配置的家用電腦,筆者建議:如果不打游戲,或者是打打掃雷、紙牌之類(lèi)的游戲,平時(shí)注重于上網(wǎng)瀏覽或者是聊天、看電影之類(lèi)的應(yīng)用的話(huà),內(nèi)存容量不應(yīng)該低于1G;如果是偶爾打打單機(jī)游戲或者是網(wǎng)絡(luò)游戲,內(nèi)存容量應(yīng)該選擇在2G左右,如果是經(jīng)常打大型的游戲或是進(jìn)行HDTV視頻編輯等應(yīng)用,那么4G的內(nèi)存是必不可少的。

三、主板

一臺(tái)電腦的穩(wěn)定性和兼容性,一大部分是看主板的,一款優(yōu)秀的主板不僅需要擁有上等的用料和優(yōu)良的做工,還需要擁有合理的走線(xiàn)設(shè)計(jì),那些沒(méi)有技術(shù)實(shí)力的三、四線(xiàn)主板廠家生產(chǎn)的主板,多數(shù)是采用公版走線(xiàn),而且用料非常差,穩(wěn)定性不堪一擊,這種類(lèi)型的主板,筆者建議寧愿不買(mǎi)電腦也不要配這種主板,否則以后將會(huì)是個(gè)淘氣的祖宗。對(duì)于家庭用戶(hù),主板方面一定不能省錢(qián),預(yù)算夠的話(huà)最好能買(mǎi)個(gè)一線(xiàn)的主板品牌,如果預(yù)算實(shí)在不足,二線(xiàn)的主板是底線(xiàn)了,不要再往下選擇了,畢竟家用電腦是用來(lái)使用的,不是用來(lái)整天維修的。再談到主板的用料,筆者常??吹胶芏嘈率衷谂渲弥靼宓臅r(shí)候,貌似老鳥(niǎo)似的說(shuō)某某品牌的主板好,某某品牌的不好,試問(wèn)你知道它好在哪里么?不好在哪里么?這個(gè)就要看主板的用料了,雖然用料好的主板并不能代表一定是高檔主板,但最少能代表它的電氣性能出色。舉一個(gè)很簡(jiǎn)單的例子吧:有A、B兩款主板,A主板的處理器供電濾波電容采用的是日系電容,B主板的處理器供電濾波電容采用的是臺(tái)系電容,那么基本上可以肯定的是:如果在電源輸出電壓的波動(dòng)范圍比較大的情況下,A主板就比較能耐得住,而B(niǎo)主板就很容易產(chǎn)生電容鼓包、漏夜等情況。不要小看這小小的電容,筆者從一個(gè)開(kāi)維修店的朋友那里得知,來(lái)維修主板的人,有80%的都是這幾個(gè)小電容損壞,究其原因,就是電源選擇的不好,導(dǎo)致了輸出電壓的不穩(wěn)定,久而久之最終導(dǎo)致這幾個(gè)小電容爆漿,并且詳細(xì)敘述了主板的品牌:“一線(xiàn)廠家的×碩牌主板就很少出現(xiàn)這種情況,但同樣為一線(xiàn)廠家的×星牌主板,經(jīng)常遇到!原因就是前者的大部分主板使用的是日系電容,而后者的大部分主板為了省錢(qián),選用的是臺(tái)系電容!”廠家的廣告不能信,宣傳也不能信,看到一個(gè)產(chǎn)品的廣告之后,你所能相信的唯一一點(diǎn)就是:地球上有這么個(gè)產(chǎn)品的存在!然后其他的就統(tǒng)統(tǒng)都不能信了!網(wǎng)上有好多所謂的“評(píng)測(cè)”文章,都是槍手寫(xiě)的,基本上沒(méi)有任何參考余地,只能作為一篇小說(shuō)來(lái)讀,一款主板的真正性能,只有你自己使用了之后才能知道。廠家為了銷(xiāo)量、商家為了利潤(rùn),他們能把最最垃圾的主板宣傳為最頂級(jí)的產(chǎn)品,筆者曾經(jīng)就看到過(guò)一款四線(xiàn)品牌的主板廠商,在對(duì)其主流主板的廣告上說(shuō)“最優(yōu)秀的設(shè)計(jì)、最精湛的工藝、最穩(wěn)定的性能”……結(jié)果一看報(bào)價(jià):550元/塊……其他的話(huà)我也不想多說(shuō)了,只想問(wèn)問(wèn)這家廠商:你這么垃圾的主板都用了三個(gè)“最”字,那么華碩的同芯片組主板,售價(jià)是你三倍的,應(yīng)該用什么詞語(yǔ)來(lái)描述了??中國(guó)有一句古話(huà):一分錢(qián)一分貨,說(shuō)的非常正確!不要認(rèn)為價(jià)格高的主板就是暴利產(chǎn)品,從市場(chǎng)經(jīng)濟(jì)學(xué)上說(shuō),暴利產(chǎn)品是不會(huì)被市場(chǎng)所接受的,之所以他能存活到今天,而且售價(jià)依然是這么高,肯定有他的理由,他在做工用料方面肯定比其他品牌的要好很多,成本高所以售價(jià)高,在此,筆者奉勸大家一句:買(mǎi)主板千萬(wàn)不要憑僥幸心理,認(rèn)為自己能花很少的錢(qián)買(mǎi)到很好的東西,只有錯(cuò)買(mǎi)的沒(méi)有錯(cuò)賣(mài)的,商家永遠(yuǎn)都比你精明!主板上面還是老老實(shí)實(shí)的多花點(diǎn)錢(qián)來(lái)買(mǎi)個(gè)一線(xiàn)產(chǎn)品吧,否則以后有你吃苦的時(shí)候!

四、硬盤(pán)

現(xiàn)在的電腦,硬盤(pán)的速度當(dāng)之無(wú)愧的成為了“第一大瓶頸”,無(wú)論你是再高的高手,配電腦的時(shí)候也無(wú)法消除這個(gè)瓶頸的存在,我們只有盡量的減小…再減小……。對(duì)于家用電腦的硬盤(pán)來(lái)說(shuō),容量和速度是兩個(gè)非常重要的參數(shù),容量上而言,筆者建議:如果你的電腦只是上網(wǎng)瀏覽瀏覽、偶爾打打小游戲的,那么160G的硬盤(pán)是個(gè)不錯(cuò)的選擇;如果你常常下載軟件或電影,那么250G的硬盤(pán)是個(gè)不錯(cuò)的選擇,如果你是個(gè)下載狂人,那么400G的硬盤(pán)比較適合你;如果你有DV或者是經(jīng)常編輯大型的視頻文件,那么400G×2比較適合你,如果你是個(gè)玩HDTV的人,那么恭喜你,400G×4也許你都不夠用。對(duì)于硬盤(pán)容量上的選擇,你不能考慮現(xiàn)在是否夠用,你應(yīng)該考慮未來(lái)的1年里是否夠用,大概的公式是:現(xiàn)在需要的容量×3。也就是說(shuō),如果你現(xiàn)在感覺(jué)80G的硬盤(pán)差不多夠用了,那么你就需要買(mǎi)個(gè)250G的硬盤(pán)。如果你現(xiàn)在感覺(jué)120G的硬盤(pán)夠用了,那么就去買(mǎi)個(gè)400G的硬盤(pán)吧。硬盤(pán)另外的一個(gè)參數(shù)就是速度,受到內(nèi)部傳輸率等諸多因素的限制,一塊硬盤(pán)的實(shí)際傳輸速度是不可能達(dá)到它的接口速度的,現(xiàn)在的并口硬盤(pán)基本上都是ATA133了,串口硬盤(pán)也都是150了,但民用級(jí)硬盤(pán)的實(shí)際傳輸速度最快的也還沒(méi)突破66M/s,所以跟內(nèi)存相比,硬盤(pán)的速度是電腦中最大的瓶頸,那么怎么來(lái)減小這個(gè)瓶頸呢?于是人們就發(fā)明了RAID,就是磁盤(pán)陣列(當(dāng)然RAID不是僅僅為了這個(gè)而發(fā)明的),用兩塊一模一樣的硬盤(pán)來(lái)組成RAID0,速度理論上能提高1倍,雖然實(shí)際上是不可能達(dá)到1倍的,但至少能非常非常明顯的感覺(jué)到了硬盤(pán)速度的提升,筆者建議:如果你買(mǎi)的主板是帶有RAID功能的,并且你需要保存的數(shù)據(jù)不是很重要的話(huà),那么強(qiáng)烈建議你在預(yù)算允許的情況下購(gòu)買(mǎi)兩塊硬盤(pán)來(lái)組建RAID0,這將使你能親身體會(huì)到飛機(jī)與火車(chē)的速度差別!但最好是串口的,如果是并口的話(huà),因?yàn)椴⒖谧叩氖荘CI總線(xiàn),由于PCI總線(xiàn)上的設(shè)備比較多,所以速度不可能達(dá)到比較高的地步,但如果是串口的話(huà),那么硬盤(pán)的速度提升將更加明顯!

五、顯示器

顯示器方面,筆者想澄清一個(gè)觀念:曾經(jīng)聽(tīng)過(guò)非常多的人說(shuō)液晶顯示器保護(hù)眼睛,因?yàn)闆](méi)有輻射和閃爍……包括很多業(yè)內(nèi)人士都這么認(rèn)為的,其實(shí)錯(cuò)了,液晶顯示器比普通的CRT還要傷眼睛!因?yàn)閭劬Σ粌H僅是輻射和閃爍,還有對(duì)比度、亮度等參數(shù),雖然液晶顯示器的輻射和閃爍比CRT要小的多,但它那要命的對(duì)比度、那要命的色澤度、還有那大于每平方米300cd的亮度,這些都會(huì)對(duì)眼睛造成很大的傷害,并且你即使將液晶顯示器的亮度和對(duì)比度調(diào)節(jié)到最低,也還是非常的刺眼。德國(guó)的一家權(quán)威機(jī)構(gòu)做過(guò)一項(xiàng)調(diào)查:液晶顯示器用久了會(huì)使人的眼睛感覺(jué)到疲倦,甚至頭痛等癥狀,而使用相同時(shí)間的CRT顯示器,卻基本沒(méi)有這些情況出現(xiàn)?,F(xiàn)在的通過(guò)TCO03認(rèn)證的CRT顯示器,其實(shí)外露的輻射已經(jīng)相當(dāng)小了,基本上對(duì)人已經(jīng)沒(méi)有多大的傷害了,閃爍感也可以通過(guò)調(diào)節(jié)刷新率來(lái)降低,筆者實(shí)在是搞不懂為什么很多人非要去選擇液晶顯示器,還非要說(shuō)液晶顯示器不傷眼睛??一個(gè)最差的17寸液晶顯示器的價(jià)格,能買(mǎi)一臺(tái)不錯(cuò)的、通過(guò)TCO03標(biāo)準(zhǔn)的19寸CR

溫馨提示

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

評(píng)論

0/150

提交評(píng)論