亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件的設(shè)計與實現(xiàn)

        2011-07-25 06:49:00李俊飛趙衛(wèi)東
        計算機工程與設(shè)計 2011年9期
        關(guān)鍵詞:輸入輸出字段樹形

        李俊飛, 陳 皓, 趙衛(wèi)東

        (山東科技大學(xué)信息科學(xué)與工程學(xué)院,山東青島266510)

        0 引 言

        在現(xiàn)實世界中存在大量的具有樹形關(guān)系的數(shù)據(jù),譬如設(shè)備備件分類、計算機資源管理器、各種社會組織機構(gòu)等[1]。Windows環(huán)境下很多開發(fā)工具都提供了一個功能強大的單數(shù)據(jù)源敏感的樹形控件TreeView,該控件顯示樹形數(shù)據(jù)清楚且沒有級數(shù)限制,輸入輸出數(shù)據(jù)簡單靈活[2],因此在Windows環(huán)境中被普遍應(yīng)用[3]。但TreeView控件的輸出樹形數(shù)據(jù)需要大量代碼支持,而且每次TreeView輸出樹形數(shù)據(jù)都要編寫重復(fù)的代碼;TreeView要輸入類似廠家|設(shè)備|型號這樣有父級節(jié)點的完整信息的數(shù)據(jù)時實現(xiàn)起來比較困難;采用逐級輸入的方法,上級數(shù)據(jù)約束下級數(shù)據(jù)且當(dāng)樹形數(shù)據(jù)深度不可預(yù)知或不確定時需要編寫大量復(fù)雜的代碼,一旦輸入錯誤就要返回出錯位置重新輸入,操作繁瑣且容易產(chǎn)生人為錯誤;此外控件也不支持多數(shù)據(jù)源輸入輸出。對此,本文在.Net開發(fā)平臺下設(shè)計并實現(xiàn)了一種樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件來解決以上問題。

        1 樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件的整體設(shè)計

        1.1 樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件的功能要求

        樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件是一個數(shù)據(jù)敏感的樹控件。通過創(chuàng)建幾個屬性,屬性中需要填寫的是與數(shù)據(jù)庫相關(guān)的一些表信息,通過配置這些屬性就可以根據(jù)樹形結(jié)構(gòu)數(shù)據(jù)生成相應(yīng)的目錄樹。該控件能夠輸入包含所有父節(jié)點信息的完整信息。在.Net平臺下TreeView是作為一個獨立的輸出控件使用,輸入需要借助其它控件共同完成,即需要將樹形結(jié)構(gòu)數(shù)據(jù)輸出控件結(jié)合其它控件來共同實現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)完整信息的輸入。在整個開發(fā)過程中主要使用到3個自定義類:樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出類、單表樹形結(jié)構(gòu)數(shù)據(jù)輸出類和多表樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出類,運用于代碼中分別為ComboTreeView類、DBLeveltreeview類和DBMTtreeview類。

        1.2 樹形數(shù)據(jù)數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計

        樹形結(jié)構(gòu)數(shù)據(jù)在數(shù)據(jù)庫表中的存儲主要有兩種方式。一種是單表形式存儲,單表有一個表示樹形結(jié)構(gòu)數(shù)據(jù)的上下級關(guān)系的字段[4],通過本表中一個字段來將上級數(shù)據(jù)與下級數(shù)據(jù)關(guān)聯(lián)在一起。單表結(jié)構(gòu)的好處是樹節(jié)點可以無限增加且等級數(shù)可以不相同[5];另一種是多表形式存儲,這些表都是按照一定的順序兩兩關(guān)聯(lián)的且是通過外鍵將樹形結(jié)構(gòu)數(shù)據(jù)關(guān)聯(lián)起來,這些數(shù)據(jù)從第一個表到最后一個表都是一對多的關(guān)系,這樣每個表存儲的數(shù)據(jù)信息單一清晰,表中的信息有明確的意義[6]。以備件編目為例,單表和多表的結(jié)構(gòu)設(shè)計分別如圖1和圖2所示。

        圖1 備件編目單表結(jié)構(gòu)

        圖2 備件編目多表結(jié)構(gòu)

        備件編目單表結(jié)構(gòu)中編目編碼是唯一標(biāo)識備件的字段;編目名稱是樹節(jié)點要顯示的文本;所屬上級編目編碼是標(biāo)識該樹節(jié)點父節(jié)點的字段;等級即該備件位于整個編目的深度,所處在TreeView中的級數(shù);是否是葉子節(jié)點即備件是否還分小的備件,樹節(jié)點是否葉子節(jié)點;組合名稱是備件的完整名稱,備注記錄備件附加信息。

        備件編目多表結(jié)構(gòu)包括備件分類表、備件廠家表、備件類別表和備件型號表4個表。這4個表順次通過分類編碼、廠家編碼和類別編碼相連接,備件分類表中的備件編碼是唯一標(biāo)識備件分類的字段,分類名稱是樹節(jié)點要顯示的分類名稱;備件廠家表的廠家編碼是唯一標(biāo)識廠家的字段,廠家是樹節(jié)點要顯示的廠家名稱;備件類別表的類編編碼是唯一標(biāo)識類別的字段,類別字段是樹節(jié)點要顯示的類別名稱;備件型號表的型號編碼是唯一標(biāo)識型號的字段,型號字段是樹節(jié)點要顯示的型號名稱。

        2 樹形結(jié)構(gòu)數(shù)據(jù)輸出控件的設(shè)計

        樹形結(jié)構(gòu)數(shù)據(jù)輸出控件在繼承了 TreeView控件的基礎(chǔ)上,添加一些屬性,這些屬性的設(shè)置是填寫數(shù)據(jù)庫相關(guān)表的信息,將TreeView和自定義的方法封裝在控件中,不需要再編寫將樹形結(jié)構(gòu)數(shù)據(jù)形成樹目錄的代碼[7]。單表和多表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件的開發(fā)是不一樣的,分別如圖3和圖4所示。

        圖3 單表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件類圖

        圖4 多表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件類圖

        單表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件類圖中的DBLeveltree-view類繼承自TreeView類,且調(diào)用ImageList類來標(biāo)注樹節(jié)點及樹節(jié)點是否選中的狀態(tài)。Tablename、DataTableName、DataTableNo、Uppdatatable、Filter、Startupper是DBLeveltreeview類中的自定義屬性,都是字符型的,依次是數(shù)據(jù)庫表的名稱、樹要顯示的字段、唯一標(biāo)識表記錄的字段和唯一標(biāo)識所屬上級節(jié)點的字段、樹篩選的條件、0級樹節(jié)點所屬上級節(jié)點的字段即賦給的一個初始值。這些屬性可以將數(shù)據(jù)庫表信息傳入DBLeveltreeview控件中,DBLeveltreeview控件根據(jù)這些信息將樹形結(jié)構(gòu)數(shù)據(jù)以樹目錄的形式表示出來,即DBLeveltreeview就是一個數(shù)據(jù)敏感的自定義樹控件,只需填寫一下數(shù)據(jù)庫表信息就可以以樹形式顯示樹形結(jié)構(gòu)數(shù)據(jù)。其中如果沒有篩選條件Filter可以不填,其它屬性必須填寫,不然控件不能正常顯示樹目錄[8]。CreateTree()、AddFunTree()和 DtFunTree()是 DBLeveltreeview 類的方法,依次是創(chuàng)建0級樹節(jié)點并調(diào)用AddFunTree()方法產(chǎn)生下級樹節(jié)點、一個遞歸函數(shù)遞歸產(chǎn)生0級以下的樹節(jié)點、為創(chuàng)建樹形方法提供datatable。CreateTree()采用的是深度優(yōu)先遍歷添加樹節(jié)點的遞歸算法[9],首先創(chuàng)建樹節(jié)點0級節(jié)點然后調(diào)用AddFunTree()函數(shù),對該節(jié)點以下節(jié)點遞歸添加[10]。

        多表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件類圖中DBMTTreeview類同樣繼承自TreeView類且調(diào)用ImageList類[11]用來標(biāo)注樹節(jié)點及樹節(jié)點是否選中的狀態(tài)。Tablename、DBTableName、DBTableno、DBForkeyfiel和Filter是DBMTTreeview類的自定義屬性,依次是數(shù)據(jù)庫表的名稱、樹要顯示的字段、唯一標(biāo)識表記錄的字段、兩個表之間關(guān)聯(lián)的外鍵字段和樹篩選的條件。由于要顯示表都要填寫這些屬性,所以這些屬性設(shè)置的都是字符數(shù)組,且需要按表中數(shù)據(jù)在樹形結(jié)構(gòu)數(shù)據(jù)中的級數(shù)順次填寫。只有第一個表沒有外鍵可以不填,同樣如果沒有篩選條件Filter可以不填,其它的屬性必須填寫,否則樹目錄不能正常顯示,每個屬性數(shù)組的填寫都是用回車隔開的即有多少個表生成的數(shù)組長度就為多少。createviewname()是DBMTTreeview類的自定義方法,用來創(chuàng)建三級樹節(jié)點即顯示前3個表的表信息,首先判斷屬性數(shù)組長度是否小于3,如果小于則成生1級或2級樹,節(jié)點完全展開,如果不小于則只展開1級樹節(jié)點,第2級和3級的節(jié)點都疊加,然后每點擊一級節(jié)點生成當(dāng)前選中樹節(jié)點深度加2級的樹節(jié)點,3級及以后的樹節(jié)點的形成代碼在事件treeView_AfterSelect中,主要算法與createviewname()方法中的算法類似,獲取當(dāng)前選中節(jié)點深度加1與表的個數(shù)比較,如果小于且當(dāng)前選中節(jié)點的子節(jié)點個數(shù)為0則獲取數(shù)組為當(dāng)前節(jié)點加1的那組屬性即獲取第當(dāng)前節(jié)點加2個表的信息生成當(dāng)前節(jié)點加1級樹節(jié)點否則樹節(jié)點已經(jīng)生成不必執(zhí)行生成樹節(jié)點的代碼。然后判斷當(dāng)前樹節(jié)點深度是否等于表的個數(shù)減2,如果等于則不必再執(zhí)行當(dāng)前節(jié)點加2的樹節(jié)點生成代碼,否則執(zhí)行。每點擊一次樹節(jié)點就進行一次判斷,已經(jīng)生成的樹節(jié)點不必再重新生成,這樣可以不用將所有樹形結(jié)構(gòu)數(shù)據(jù)全部讀出來,減少了讀取數(shù)據(jù)庫的時間,而且不用在代碼中獲取表的個數(shù),來遞歸生成完整的樹,減少了算法復(fù)雜度[12]。

        3 樹形結(jié)構(gòu)數(shù)據(jù)輸入控件的設(shè)計

        樹形結(jié)構(gòu)數(shù)據(jù)輸入控件是在樹形結(jié)構(gòu)數(shù)據(jù)輸出控件基礎(chǔ)上與其它控件相結(jié)合來實現(xiàn)的[13]。以ComboBox與單表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件結(jié)合為例,設(shè)計的樹形結(jié)構(gòu)數(shù)據(jù)輸入控件類圖如圖5所示。

        ToolStripControlHost、ToolStripDropDown和ComboBox都是.Net中自帶的類,DBLeveltreeview和ComboTreeView是自定義類。自定義類ComboTreeView繼承自ComboBox,由Combo-TreeView類調(diào)用DBLeveltreeview類來顯示樹形結(jié)構(gòu)數(shù)據(jù)。且調(diào)用了ToolStripDropDown類和ToolStripControlHost類,Tool-StripControlHost類用來承載 DBLeveltreeview控件,Tool-StripDropDown類是當(dāng)單擊ComboTreeView控件時用來顯示單表樹形結(jié)構(gòu)數(shù)據(jù)輸出控件生成的樹目錄[14]。treeView、count和CombinationName是ComboTreeView類的自定義屬性,treeView是調(diào)用的DBLeveltreeview類作為ComboTreeView的一個屬性,treeView屬性中包含了DBLeveltreeview類中所有可編輯屬性,當(dāng)然也包括DBLeveltreeview類的自定義屬性,count是表的個數(shù),CombinationName是數(shù)據(jù)庫表中顯示組合名稱的字段名稱,方法ComboBoxTreeView()是ComboBoxTreeView控件的構(gòu)造函數(shù)的重載,傳遞參數(shù)Tablename,DataTableNo的信息,用于獲取選中節(jié)點的組合名稱的信息。

        圖5 單表樹形結(jié)構(gòu)數(shù)據(jù)輸入控件類圖

        控件輸入組合名稱的事件是treeView_AfterSelect,觸發(fā)事件后顯示組合名稱的核心代碼如下:

        if(IsLeaf==true){//判斷是否是葉子節(jié)點

        this.ValueMember=e.Node.Name;//ComboBox的ValueMember的值是選中樹節(jié)點的DataTableNo,即是備件編目編碼

        string sql="select"+CombinationName+"from"+Tablename+"where"+DataTableNo+"="+e.Node.Name+"";//獲取選中樹節(jié)點的組合名稱

        dbOperate.RunSQL(sql,ref ds);

        this.Text=ds.Tables[0].Rows[0][0]as string;//ComboBox的文本框中輸入讀取的組合名稱

        dropDown.Close();

        }

        多表樹形結(jié)構(gòu)數(shù)據(jù)輸入控件的設(shè)計與單表類似,就是將圖5中的實體DBLeveltreeview替換為DBMTTreeview。因為表中沒有組合名稱字段,所以方法ComboBoxTreeView()不需要傳遞參數(shù),觸發(fā)treeView_AfterSelect事件后顯示組合名稱的核心代碼如下[15]:

        if(Count==TreeView.SelectedNode.Level+1){//選中的為葉子節(jié)點

        for(int i=0;;i++){

        if(tn.Parent==null){//節(jié)點是否是0級節(jié)點

        cbtext=tn.Text+"|"+cbtext;

        break;//組合名稱賦給字符串以后跳出循環(huán)

        }

        else{

        cbtext=tn.Text+"|"+cbtext;//循環(huán)讀取樹節(jié)點的名稱然后用"|"隔開,賦值給一個字符串

        tn=tn.Parent;//將當(dāng)前節(jié)點的父節(jié)點賦值給樹節(jié)點tn

        }

        }

        cbtext=cbtext.Substring(0,cbtext.Length-1);

        this.Text=cbtext;//將組合名稱輸入到文本框中

        dropDown.Close();

        }

        代碼實現(xiàn)的功能是當(dāng)單擊葉子節(jié)點時,獲取葉子節(jié)點的完整信息并將完整信息輸入到ComboBox文本框中。葉子節(jié)點及其父節(jié)點是由“|”依次隔開的,單表組合名稱是存儲在數(shù)據(jù)庫中的而多表的組合名稱是由葉子節(jié)點遍歷其父節(jié)點得到的。

        4 樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件的實現(xiàn)

        樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件跟其它.Net中自帶控件一樣,從工具箱中拖入窗體,配置屬性。以單表樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件為例,將ComboTreeView的連接數(shù)據(jù)庫的自定義屬性取值添加到窗體初始化控件方法中,控件在窗體內(nèi)運行時的活動圖如圖6所示。

        當(dāng)DBLeveltreeview控件的屬性 Tablename、DataTable-Name、DataTableNo和Uppdatatable中有一個為null時,就會生成一個沒有任何樹形數(shù)據(jù)的樹控件 ;當(dāng)前面屬性都不為null且CombinationName為null時就會生成一個樹形數(shù)據(jù)正確顯示但關(guān)閉不了下拉項而且不能在ComboTreeView文本中顯示組合名稱的控件;當(dāng)5個屬性都不為null時就會生成一個樹形數(shù)據(jù)顯示正確,能關(guān)閉樹控件且可在ComboTreeView文本中顯示組合名稱的樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件;當(dāng)選中節(jié)點為非葉子節(jié)點時,單擊選中節(jié)點,雙擊折疊或展開樹節(jié)點,選中節(jié)點為葉子節(jié)點時單擊在ComboTreeView文本中顯示組合名稱,然后關(guān)閉樹控件。

        動態(tài)綁定數(shù)據(jù)成功運行后生成的樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件如圖7所示。

        圖6 樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件活動

        圖7 單表樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件生成效果

        樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件輸出樹形結(jié)構(gòu)數(shù)據(jù)信息的形式同原有系統(tǒng)自帶樹形控件一樣,只是不需要再編寫大量生成樹形結(jié)構(gòu)數(shù)據(jù)的代碼,只需輸入幾個相關(guān)的自定義屬性,然后借助ComboBox控件,樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件顯示的樹形結(jié)構(gòu)數(shù)據(jù)顯示在ComboBox下拉項中,并且可將完整的樹形結(jié)構(gòu)數(shù)據(jù)信息輸入到ComboBox的文本框。只有葉子節(jié)點能被選中填入文本框中,其它節(jié)點選中后只能折疊或展開,選中葉子節(jié)點后才能將值填入ComboBox的文本框中,輸入的形式為各級節(jié)點有“|”隔開,例如上圖的輸入為。這樣樹形結(jié)構(gòu)數(shù)據(jù)層次清晰,數(shù)據(jù)之間的關(guān)系一目了然,錄入完整信息只需點擊葉子節(jié)點,就可以一步到位,不需要根據(jù)數(shù)據(jù)之間的關(guān)系逐個錄入。

        多表樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件的流程與單表的類似,只是判斷條件略有不同。多表需要判斷各個表的信息是否填寫完整即必須填的屬性是否都按順序填寫好。如果沒有則只生成從第一個表開始屬性填寫完整的樹形結(jié)構(gòu)數(shù)據(jù),從不完整的表信息以下所有的樹形結(jié)構(gòu)數(shù)據(jù)都不顯示;如果第一個表屬性就沒填寫完整則只能生成沒有任何數(shù)據(jù)的空樹;如果屬性都填寫完整則生成的樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件的效果和圖7是一樣的。

        5 結(jié)束語

        雖然樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出有很多方式,而且大多數(shù)開發(fā)平臺也都支持樹形結(jié)構(gòu)數(shù)據(jù)的輸入輸出,但是它們在實際項目應(yīng)用中所表現(xiàn)出來的局限性也是顯而易見的。樹形結(jié)構(gòu)數(shù)據(jù)的輸入輸出通常需要編寫大量的代碼來支持。大量的重復(fù)勞動且代碼質(zhì)量較低,如多數(shù)據(jù)源樹形結(jié)構(gòu)數(shù)據(jù)顯示、樹形結(jié)構(gòu)數(shù)據(jù)完整信息的輸入等問題開發(fā)平臺中自帶的控件也很難解決,因此開發(fā)解決上述問題一種數(shù)據(jù)敏感的樹形結(jié)構(gòu)數(shù)據(jù)輸入輸出控件是非常必要的。本文給出的這套設(shè)計創(chuàng)建數(shù)據(jù)敏感的樹形控件并將樹形控件與其它控件結(jié)合來輸入樹形結(jié)構(gòu)數(shù)據(jù)完整信息的方法,在備件編目的輸入輸出中的到了驗證,取得了很好的效果,并已成功將其運用到視聆公司基站維護管理系統(tǒng)中。

        [1]浮光賓,王葵如,張明倫.ASP.NET中TreeView控件的動態(tài)綁定及定位展開[J].計算機系統(tǒng)應(yīng)用,2008,17(6):112-113.

        [2]郭兆勝,張登榮.ASP.Net環(huán)境下樹狀圖的研究與實現(xiàn)[J].計算機工程與設(shè)計,2005,26(2):388-388.

        [3]彭彬,劉林,萬小虎.基于.NET的個性化高性能樹形菜單的實現(xiàn)[J].計算機應(yīng)用與軟件,2009,26(6):138-139.

        [4]吉杰,陶培基.MS SQL Server樹形結(jié)構(gòu)表遍歷的循環(huán)算法[J].計算機與現(xiàn)代化,2005(4):7-8.

        [5]儲岳中.基于遞歸算法和樹形控件的動態(tài)樹形圖的實現(xiàn)[J].計算機技術(shù)與發(fā)展,2007,17(6):88-88.

        [6]汪華斌.TreeView在主從表關(guān)系處理中的應(yīng)用[J].計算機與現(xiàn)代化,2006(3):74-75.

        [7]姚明,李家蘭.C#開發(fā)自定義控件方法探討[J].電腦知識與技術(shù),2007,3(5):798-798.

        [8]吳文強.用自定義TreeView控件實現(xiàn)層次結(jié)構(gòu)數(shù)據(jù)瀏覽功能[J].電腦編程技巧與維護,2010(9):45-46.

        [9]王桃群,盧東方.利用TreeView控件動態(tài)生成無限級樹[J].儀器儀表用戶,2007,2(14):91-92.

        [10]王昕哲,劉萬軍.在Web應(yīng)用開發(fā)中利用靜態(tài)樹和遞歸算法制作動態(tài)樹型菜單[J].計算機與現(xiàn)代化,2008(3):125-126.

        [11]崔曉陽.用TreeView控件實現(xiàn)樹形管理信息系統(tǒng)[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2007(11):135-136.

        [12]Khosravi S.The custom TreeView ASP.NET 2.0 server control[J].Software Tools for the Professional Programmer,2005,30(11):64-67.

        [13]孫宜貴,王宏勇.NET復(fù)合控件在科研業(yè)績管理系統(tǒng)中的應(yīng)用研究[J].計算機與數(shù)字工程,2010,38(2):43-45.

        [14]劉海鑫.VB.NET中的自定義日期控件開發(fā)[J].電腦知識與技術(shù),2007,3(4):1058-1060.

        [15]李志華,林財興,謝甘第.TreeView控件在ASP.NET2.0中的應(yīng)用[J].現(xiàn)代機械,2009(1):70-72.

        猜你喜歡
        輸入輸出字段樹形
        花光卉影
        花卉(2024年1期)2024-01-16 11:29:12
        圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
        蘋果高光效樹形改造綜合配套技術(shù)
        河北果樹(2022年1期)2022-02-16 00:41:10
        Camtasia Studio高清視頻輸入輸出原理及方法
        鐵路信號系統(tǒng)安全輸入輸出平臺
        獼猴桃樹形培養(yǎng)和修剪技術(shù)
        休眠季榆葉梅自然開心樹形的整形修剪
        輸入輸出理論在大學(xué)英語聽說課堂中的教學(xué)探索
        輸入輸出視角下高職英語教學(xué)研究
        CNMARC304字段和314字段責(zé)任附注方式解析
        人妻少妇精品中文字幕专区| 国产精品国产三级国产专区5o| 免费在线观看蜜桃视频| 精品亚洲av乱码一区二区三区| 国产免费又爽又色又粗视频| 手机在线看永久av片免费| 精品视频专区| 亚洲av网一区二区三区成人| 国产av熟女一区二区三区| 少妇人妻偷人精品视频| 日本一区二区三区激情视频| 久久亚洲综合亚洲综合| 国产av天堂亚洲国产av天堂| 亚洲 暴爽 av人人爽日日碰| 久久久久久岛国免费网站| 亚洲av熟女传媒国产一区二区| 国产av国片精品有毛| 吃奶还摸下面动态图gif| 亚洲AV成人无码天堂| 日本人妻系列中文字幕| 大胸少妇午夜三级| 欧美成aⅴ人高清免费| 国产最新一区二区三区| 免费国产自拍在线观看| 骚小妹影院| 99国产精品无码专区| 亚洲日本中文字幕高清在线| 免费无码a片一区二三区| 成人动漫久久| 国产精品第一区亚洲精品| 亚洲精品乱码久久久久久不卡| 亚洲av片不卡无码久久| 亚洲黄片久久| 91精品国产综合久久久密臀九色| 亚洲人精品亚洲人成在线| 国产爆乳无码一区二区在线| 国产一区二区视频在线看| 在教室伦流澡到高潮hgl动漫| 久久亚洲国产精品成人av秋霞| 亚洲素人日韩av中文字幕| 国产精品无码制服丝袜|