已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
用戶登錄系統(tǒng) 2014年6月13日目錄一實(shí)驗(yàn)內(nèi)容3 1.1.實(shí)驗(yàn)?zāi)康?.3 1.2實(shí)驗(yàn)的數(shù)據(jù)結(jié)構(gòu)及流程.3二 實(shí)驗(yàn)驗(yàn)證分析.72.1 LL型調(diào)整驗(yàn)證.7 2.2RR型調(diào)整驗(yàn)證.82.3LR型調(diào)整驗(yàn)證.9 2.4RL型調(diào)整驗(yàn)證.10 三、調(diào)試分析.11 3.1技術(shù)難點(diǎn)及解決方案.113.2印象深刻的調(diào)試錯誤及解決方法.11四、測試結(jié)果12 4.1用戶登錄.12 4.2用戶注冊.16 4.3刪除用戶.19 4.4極端數(shù)據(jù)的測試.21五、實(shí)驗(yàn)總結(jié)22一 實(shí)驗(yàn)內(nèi)容1.1.實(shí)驗(yàn)?zāi)康?這次實(shí)驗(yàn)是讓我們模擬用戶登錄系統(tǒng)。由于用戶信息的驗(yàn)證頻率很高,系統(tǒng)必須有效地組織這些用戶信息,從而快速查找和驗(yàn)證用戶。另外,系統(tǒng)也會經(jīng)常添加新用戶、刪除老用戶和更新用戶密碼等操作,因此,系統(tǒng)必須采用動態(tài)結(jié)構(gòu),在添加、刪除或更新后,依然能保證驗(yàn)證過程的快捷。1.2實(shí)驗(yàn)的數(shù)據(jù)結(jié)構(gòu)及流程1.2.1數(shù)據(jù)結(jié)構(gòu) 系統(tǒng)用到了兩個類AVLNode和AVLTree,其中AVLTree的唯一一個數(shù)據(jù)成員就是指向AVLNode結(jié)點(diǎn)的指針。 1.2.2流程圖 主界面刪除用戶打印AVL樹退出修改密碼用戶注冊用戶登錄用戶名存在嗎用戶名存在嗎 刪除成功添加成功輸入新密碼YN Y 1.2.3 函數(shù)間的調(diào)用關(guān)系main函數(shù)調(diào)用類的成員函數(shù)。插入新結(jié)點(diǎn)時,AVLInsert要根據(jù)平衡因子調(diào)用4個調(diào)整函數(shù)LL_Rotate、RR_Rotate、LR_Rotate和RL_Rotate函數(shù)。關(guān)鍵代碼:if(a-bf=2)b=a-lchild;if(b-bf=1)p=LL_Rotate(a);elsep=LR_Rotate(a);else/此時a-bf的值應(yīng)為-2b=a-rchild;if(b-bf=1)p=RL_Rotate(a);elsep=RR_Rotate(a);二 實(shí)驗(yàn)驗(yàn)證分析將用戶信息存儲在文件中,程序運(yùn)行時從文件中讀取,并建立 適的二叉樹。注意:文件中每行輸入三個字符,第一個字符為用戶名,第二個字符為空格,第三個字符為密碼。2.1LL型調(diào)整驗(yàn)證 在文件user.txt輸入如下:運(yùn)行程序,并選擇4打印AVLTree,結(jié)果如下圖:2. 2 RR型調(diào)整 在文件user.txt輸入如下:運(yùn)行程序,并選擇4打印AVLTree,結(jié)果如下圖:2.3 RL型調(diào)整 在文件user.txt輸入如下: 運(yùn)行程序,并選擇4打印AVLTree,結(jié)果如下圖:2.4 LR型調(diào)整在文件user.txt輸入如下:運(yùn)行程序,并選擇4打印AVLTree,結(jié)果如下圖:3 調(diào)試分析3.1 技術(shù)難點(diǎn)及解決方案 3.1.1插入新結(jié)點(diǎn)后如果二叉樹失去平衡,如何找到最小不 平衡子樹? 在尋找新結(jié)點(diǎn)的插入位置時,始終令指針a指向離插入結(jié)點(diǎn)最近的且平衡因子不為0的結(jié)點(diǎn),同時令指針f指向結(jié)點(diǎn)*a的父結(jié)點(diǎn),如這樣的結(jié)點(diǎn)不存在,則指針a指向根結(jié)點(diǎn)。由此可知,當(dāng)插入新結(jié)點(diǎn)后如果二叉樹失去平衡時,指針a所指向的結(jié)點(diǎn)就是最小不平衡子樹的根。3.1.2新結(jié)點(diǎn)插入時,需修改哪些相關(guān)結(jié)點(diǎn)的平衡因子?如何修改? 失去平衡的最小子樹的根節(jié)點(diǎn)*a在插入新結(jié)點(diǎn)*s之前,平衡因子必然不為0,必然是離插入結(jié)點(diǎn)最近的且平衡因子不為0的結(jié)點(diǎn)。插入新結(jié)點(diǎn)后,需修改從結(jié)點(diǎn)*a到新結(jié)點(diǎn)路徑上個結(jié)點(diǎn)的平衡因子。只需從*a的子結(jié)點(diǎn)*b開始,順序掃描該路徑上結(jié)點(diǎn)*p,若結(jié)點(diǎn)*s插入在*p的左子樹上,*p的平衡因子由0變?yōu)?;否則新結(jié)點(diǎn)插入在*p的右子樹上,*p的平衡因子由0變?yōu)?1.3.1.3 如何判斷以*a為根的子樹是否失去平衡? 當(dāng)結(jié)點(diǎn)*a的平衡因子為1(或-1)時,若新結(jié)點(diǎn)插入在結(jié)點(diǎn)*a的右(或左)子樹中,左右子樹等高,結(jié)點(diǎn)*a的平衡因子為0,則以*a為根的子樹沒有失去平衡;新結(jié)點(diǎn)插入在結(jié)點(diǎn)*a的左(或右)子樹中,則以*a為根的子樹失去平衡,因?qū)σ?a為根的最小不平衡子樹進(jìn)行平衡化調(diào)整。3.1.4 失去平衡后,如何確定旋轉(zhuǎn)類型并作出相應(yīng)的調(diào)整? 當(dāng)結(jié)點(diǎn)*a的平衡因子為2時,若*a的左孩子*b的平衡因子為1,表示新結(jié)點(diǎn)插入到結(jié)點(diǎn)*b的左子樹中,應(yīng)采用LL型調(diào)整,否則結(jié)點(diǎn)*b的平衡因子為-1,表示新結(jié)點(diǎn)插入到結(jié)點(diǎn)*b的右子樹中,應(yīng)采用LR型調(diào)整;當(dāng)結(jié)點(diǎn)*a的平衡因子為-2時,若*a的左孩子*b的平衡因子為1,表示新結(jié)點(diǎn)插入到結(jié)點(diǎn)*b的左子樹中,應(yīng)采用RL型調(diào)整,否則結(jié)點(diǎn)*b的平衡因子為-1,表示新結(jié)點(diǎn)插入到結(jié)點(diǎn)*b的右子樹中,應(yīng)采用RR型調(diào)整;3.2 印象深刻的調(diào)試錯誤及解決方法 由于該項(xiàng)目需要建3個文件,類的聲明放在AVLTree.h文件中,類的實(shí)現(xiàn)放在AVLTree.cpp文件中,main函數(shù)單獨(dú)放在test.cpp文件中,其中在AVLTree.cpp文件中應(yīng)使用#include AVLTree.h導(dǎo)入類的聲明文件,而test.cpp只需使用#include AVLTree.h導(dǎo)入類的聲明文件即可,而我當(dāng)時錯誤的test.cpp使用#include AVLTree.cpp導(dǎo)入了類的實(shí)現(xiàn)文件,所以一直報錯。我在它報錯的位置查了很多次都沒發(fā)現(xiàn)bug,最后在老師的幫助下才發(fā)現(xiàn)了問題所在。 我在插入新結(jié)點(diǎn)時,也一直報錯,最后才發(fā)現(xiàn)在AVLNode的構(gòu)造方法中并沒把成員變量bf初始化為0,而插入新結(jié)點(diǎn)是需要根據(jù)bf的值做相應(yīng)調(diào)整,所以一直報錯。雖然這些都是小Bug,卻花了我大量的時間查找錯誤。 四 測試結(jié)果下面進(jìn)行的測試,文件user.txt存儲的初始數(shù)據(jù)為:4.1用戶登錄運(yùn)行程序,并按提示先選擇4,打印出AVL樹(這樣做是方便登錄),選擇1,進(jìn)入登錄界面,按提示分別輸入用戶名和密碼,輸入正確后,截圖如下接著選擇是否更新密碼(只能輸入Y或N),當(dāng)輸入Y并輸入重置密碼后,截圖如下這時,重新打開文件user.txt,會發(fā)現(xiàn)用戶信息發(fā)生了更新:錯誤輸入: 當(dāng)輸入的不是Y或N時,會輸出“您的選擇有錯”4.2用戶注冊運(yùn)行程序,并按提示先選擇4,打印出AVL樹(這樣做是方便登錄),選擇2進(jìn)圖注冊界面,按提示分別輸入要注冊的用戶名和密碼,輸入正確后,如果輸入的用戶名不存在,注冊成功,并更新文件user.txt,否則注冊失敗。用戶名已存在時:用戶名不存在時這時,文件user.txt中的信息為:4.3刪除用戶運(yùn)行程序,并按提示先選擇4,打印出AVL樹(這樣做是方便登錄),選擇2進(jìn)圖刪除界面,按提示分別輸入要注冊的用戶名,如果輸入的用戶名不存在,提示“您要刪除的用戶不存在!”;否則,刪除成功,并更新文件user.txt,4.4極端數(shù)據(jù)的測試在user.txt中重新輸入以下信息:運(yùn)行程序,并按4打印AVL樹,得到結(jié)果為:5 實(shí)驗(yàn)總結(jié) 通過兩到三周的編寫,我們終于用戶登錄系統(tǒng)。對于這次實(shí)驗(yàn),心里還是蠻有信心的,前期花了大量的時間在類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鯉城區(qū)新步實(shí)驗(yàn)小學(xué)秋季招聘合同制頂崗教師備考題庫完整答案詳解
- 2025年永康市農(nóng)機(jī)產(chǎn)業(yè)園開發(fā)有限公司公開招聘國有企業(yè)合同制員工7人備考題庫完整答案詳解
- 2025年寧夏黃河農(nóng)村商業(yè)銀行科技人員社會招聘備考題庫及一套完整答案詳解
- 重大安全隱患排查治理和建檔監(jiān)控等制度
- 中國電建集團(tuán)昆明勘測設(shè)計研究院有限公司招聘20人備考題庫及參考答案詳解1套
- 2025年關(guān)于為淄博市檢察機(jī)關(guān)公開招聘聘用制書記員的備考題庫及一套答案詳解
- 2025年青島市李滄區(qū)人民法院公開招聘司法輔助人員備考題庫參考答案詳解
- 2025年首都醫(yī)科大學(xué)附屬北京朝陽醫(yī)院石景山醫(yī)院派遣合同制職工招聘備考題庫及答案詳解1套
- 銀聯(lián)企業(yè)服務(wù)(上海)有限公司2026年度招聘備考題庫及參考答案詳解1套
- plc課程設(shè)計彩燈循環(huán)
- GB/T 39693.4-2025硫化橡膠或熱塑性橡膠硬度的測定第4部分:用邵氏硬度計法(邵爾硬度)測定壓入硬度
- 2025年直播帶貨主播服務(wù)合同范本
- 2025年青海省政府采購評審專家考試測試題及答案
- 2025年山東泰山藥業(yè)集團(tuán)有限公司招聘(21人)筆試備考試題及答案解析
- 心電監(jiān)測線路管理規(guī)范
- 北京市西城區(qū)2024-2025學(xué)年七年級上學(xué)期期末道德與法治試卷
- 年生產(chǎn)加工鈉離子電池負(fù)極材料8000 噸、鋰離子電池負(fù)極材料3000噸項(xiàng)目環(huán)境風(fēng)險專項(xiàng)評價報告環(huán)評報告
- (正式版)DB37∕T 4899-2025 《深遠(yuǎn)海養(yǎng)殖管理工作指南》
- 監(jiān)理工作制度(水利工程)
- 拖拉機(jī)運(yùn)輸協(xié)議合同范本
- 遼寧省安全生產(chǎn)條例講解
評論
0/150
提交評論