馮 菁
(淮北職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)科學(xué)技術(shù)系,安徽 淮北 235000)
?
基于Hashtable簡(jiǎn)易購(gòu)物車(chē)的實(shí)現(xiàn)
馮菁
(淮北職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)科學(xué)技術(shù)系,安徽 淮北235000)
摘要:.NET FrameWork 提供了眾多類(lèi)庫(kù),其中Hashtable集合維護(hù)很多對(duì)Key-Value鍵值對(duì),對(duì)于集合中任一元素的查找、定位,都是基于找到對(duì)應(yīng)的Key和Value值,應(yīng)用在處理動(dòng)態(tài)添加、刪除數(shù)據(jù)時(shí)很方便。以電子商務(wù)購(gòu)物車(chē)為例,使用ASP.NET技術(shù)、語(yǔ)言VB.NET和Hashtable類(lèi)的方法、屬性、遍歷等來(lái)實(shí)現(xiàn)一簡(jiǎn)易購(gòu)物車(chē)。
關(guān)鍵詞:HashTable;ASP.NET;集合
購(gòu)物車(chē)是電子商務(wù)網(wǎng)站的重要功能之一,功能大致有將商品添加進(jìn)購(gòu)物車(chē),顯示購(gòu)物車(chē),刪除修改所選商品,修改數(shù)量,計(jì)算總價(jià)等.這些功能操作可以采用數(shù)據(jù)讀取、修改的案例。本例選擇.NET提供的解決方案,ASP.NET提供了WEB編程新技術(shù),并支持多種語(yǔ)言,配套有功能強(qiáng)大的集成開(kāi)發(fā)環(huán)境Visual Studio.Net,本文案例用的是VB.NET語(yǔ)言。開(kāi)發(fā)一個(gè)成功的購(gòu)物車(chē)系統(tǒng),對(duì)于今后開(kāi)發(fā)同類(lèi)項(xiàng)目非常有益。
一、HashTable集合類(lèi)型
ASP.NET是當(dāng)前流行的WEB程序開(kāi)發(fā)技術(shù)之一,是建立在通用語(yǔ)言上的程序構(gòu)架,適用于多種開(kāi)發(fā)語(yǔ)言,能被用于建立強(qiáng)大的WEB應(yīng)用程序.編程語(yǔ)言可支持Visual C#,VC++,Visual Basic.Net,Jscript.Net。
集合是把一群可變長(zhǎng)的對(duì)象類(lèi)型的元素組合在一起,它們的數(shù)據(jù)緊密相關(guān),能夠安全有效地處理這些緊密相關(guān)的數(shù)據(jù)。這些類(lèi)在System.Collections命名空間。[1]
.NET work提供一種Hashtable集合類(lèi)型。Hashtable也是System.Collections命名空間提供的一個(gè)容器。每個(gè)元素通過(guò)一個(gè)鍵(Key)和一個(gè)值(Value)來(lái)組織的。其中key區(qū)分大小寫(xiě),可用來(lái)快速查找;Value用于存儲(chǔ)對(duì)應(yīng)于Key的值。Hashtable中Key/Value鍵值對(duì)均為object類(lèi)型,所以Hashtable可以支持任何類(lèi)型的Key/Value鍵值對(duì)。[2]
定義哈希表Dim Hash as Hashtable
Hashtable的主要屬性有:
1.Hash.Count:獲取Hashtable中的鍵/值對(duì)的數(shù)目。
2.Hash.Item:獲取或設(shè)置與指定的鍵相關(guān)聯(lián)的值。
3.Hash.Keys:獲取Hashtable中的鍵。
4.Hash.Values:獲取Hashtable中的值。
Hashtable的主要方法有:
1.Add(Object key,Object value):將指定鍵/值添加到Hashtable中。
2.Clear():從Hashtable中移除所有元素。
3.Contains(Object key):確定Hashtable是否包含特定鍵。
4.Remove(Object key):從Hashtable中移除帶有指定鍵的元素。[1]
Hashtable集合類(lèi)似于數(shù)組,又不像數(shù)組可以用索引訪問(wèn),即不可以用下標(biāo)訪問(wèn)某一元素。Hashtable通過(guò)關(guān)鍵字來(lái)訪問(wèn)元素,來(lái)刪除元素.它的遍歷使用foreach語(yǔ)句。
使用hashtable類(lèi)必須引入該命名空間,C#語(yǔ)言:using system.collections;
VB.NET語(yǔ)言:Imports System.Collections
二、購(gòu)物車(chē)功能演示
在開(kāi)發(fā)Web應(yīng)用程序中, B2C電子商務(wù)網(wǎng)上購(gòu)物車(chē)這一功能很普及,因此購(gòu)物車(chē)程序的編寫(xiě)就顯得非常重要。購(gòu)物車(chē)的技術(shù)核心功能有添加商品、修改商品、刪除商品、檢查購(gòu)物車(chē)、確認(rèn)定單等。本文只演示查看購(gòu)物車(chē)商品,計(jì)算總價(jià)代碼。這是一個(gè)最簡(jiǎn)易的購(gòu)物車(chē),完成的功能也簡(jiǎn)單,大家可在此基礎(chǔ)上根據(jù)需要繼續(xù)擴(kuò)充其它功能。
例如某企業(yè)網(wǎng)站中的在線定購(gòu)模塊,一個(gè)B/S結(jié)構(gòu)的B-C電子商城系統(tǒng)購(gòu)物車(chē)子系統(tǒng)的用例圖如圖1所示。
圖1 購(gòu)物車(chē)子系統(tǒng)的用例圖
每個(gè)子用例對(duì)應(yīng)著添加商品,刪除商品,確認(rèn)下單等。
三、購(gòu)物車(chē)HashTable代碼編寫(xiě)
購(gòu)物車(chē)的版本,一是目前流行的個(gè)性化服務(wù)界面(如淘寶購(gòu)物),支持匿名用戶;二是使用數(shù)據(jù)庫(kù),但是程序編寫(xiě)量大,難支持匿名用戶;三是登錄結(jié)合ASP內(nèi)置對(duì)象sessin使用。我們只考慮最簡(jiǎn)單實(shí)現(xiàn)購(gòu)物功能。
在購(gòu)物的時(shí)候會(huì)多次對(duì)各類(lèi)商品進(jìn)行挑選,增刪改的方式頻繁。每次購(gòu)物都要進(jìn)行數(shù)據(jù)庫(kù)操作,會(huì)增加服務(wù)器的負(fù)擔(dān),如果將選擇的物品信息存在客戶端,在最后下單的時(shí)候統(tǒng)一存儲(chǔ)數(shù)據(jù),建議使用HashTable來(lái)實(shí)現(xiàn)物品的增刪操作,利用Session或者Cookie保存已選的物品,這樣會(huì)減少與服務(wù)器的通信,節(jié)省數(shù)據(jù)庫(kù)的讀寫(xiě)操作,提高了效率。
以下是部分代碼,其中數(shù)據(jù)庫(kù)連接對(duì)象Conn、數(shù)據(jù)庫(kù)中表的命名,字段命名等命名都是沿用多數(shù)人的習(xí)慣命名的。如shop指數(shù)據(jù)庫(kù)名稱,shopprice指商品單價(jià), shopnum指商品數(shù)量等。
1.使用hashtable類(lèi)引入命名空間。
Imports System.Collections
2.連接數(shù)據(jù)庫(kù)shop,使用數(shù)據(jù)庫(kù)中的表。
Dim Provider=”P(pán)rovider=Microsoft.jet.OLEDB.4.0”
Dim Database=”Data Source=” & Server.MapPath(“shop.mdb”)
3.查看購(gòu)物車(chē)商品,初始化購(gòu)物車(chē)。
If Hash.Count=0 Then Msg.Text=”現(xiàn)在購(gòu)物車(chē)是空的!”
……
Dim ArrKey(Hash.Count-1) As String
DimArrVal(Hash.Count-1) As Integer
Dim Products As String
Hash.Keys.CopyTo(ArrKey,0)
Hash.Values.CopyTo(ArrVal,0)
Products=”(‘” &Join(ArrKey,”’,’”)&”’)”
……
Conn=New OleDbConnection(Provider & “;”&Database)
……
4.讀出哈希表數(shù)據(jù),賦值DataSet實(shí)例,并添加新數(shù)據(jù)列。
Dim X As String
For Each X in Hash.Keys
Table1.Rows.Find(X).Item(“shopnum”)=Hash.Item(X)
Next
Table1.Columns.Add(“allprice”,GetType(Long),”shopprice*shopnum”))
……
遍歷一個(gè)哈希表Hashtable,只能用for each語(yǔ)句進(jìn)行遍歷。統(tǒng)計(jì)商品數(shù)目并計(jì)算總價(jià)。Hashtable中的元素是一個(gè)鍵值對(duì)的集合,不能夠使用索引訪問(wèn)。
四、總結(jié)
ASP.NET是Microsoft公司推出用于編寫(xiě)動(dòng)態(tài)網(wǎng)頁(yè)的強(qiáng)大新技術(shù),支持以可視化的方式建立企業(yè)級(jí)網(wǎng)站,可生成安全穩(wěn)定的應(yīng)用程序。.NET框架中提供了功能多而強(qiáng)大的類(lèi)庫(kù)進(jìn)行編程,如本文簡(jiǎn)述的Hashtable類(lèi),并可使用VB.NET、C#、Jscript.NET等編程語(yǔ)言來(lái)開(kāi)發(fā)。本文中代碼完全可以用C#或其它編程語(yǔ)言進(jìn)行改寫(xiě)。
電子商務(wù)網(wǎng)站普及到老百姓的日常生活、網(wǎng)上商店、書(shū)店、訂餐、售票,等等,這些都需要WEB站點(diǎn)開(kāi)發(fā),并設(shè)有網(wǎng)上購(gòu)物這一功能模塊,所以購(gòu)物車(chē)程序的編寫(xiě)就顯得非常重要??稍诖速?gòu)物車(chē)基礎(chǔ)上開(kāi)發(fā)更安全,質(zhì)量更高,更有效,功能更完善的購(gòu)物系統(tǒng)。
參考文獻(xiàn):
[1]楊樹(shù)林,胡潔萍.ASP.NET程序設(shè)計(jì)案例教程[M].北京:人民郵電出版社,2012:62-64.
[2]朱印宏.Asp.NET2.0基礎(chǔ)與實(shí)例教程:基于VB.C#[M].北京:中國(guó)電力出版社,2007:421-422.
[3]王少鋒.面向?qū)ο蠹夹g(shù)UML教程[M].北京:清華大學(xué)出版社,2008.
[4]王有禮.ASP.NET2.0完全開(kāi)發(fā)指南[M].北京:北京科海電子出版社,2008.
責(zé)任編輯:凈草
收稿日期:2016-05-26
基金項(xiàng)目:本文系安徽省自然科學(xué)基金項(xiàng)目“基于數(shù)據(jù)挖掘技術(shù)的商砼企業(yè)ERP的開(kāi)發(fā)與成本控制應(yīng)用研究”(編號(hào):KJ2013Z289) 階段性研究成果。
作者簡(jiǎn)介:馮菁(1974-),女,上海人,高級(jí)工程師,碩士,研究方向?yàn)閿?shù)據(jù)挖掘。
中圖分類(lèi)號(hào):TP311
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1671-8275(2016)04-0129-02