本科畢業(yè)設(shè)計論文-校園B2C交易系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā)_第1頁
本科畢業(yè)設(shè)計論文-校園B2C交易系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā)_第2頁
本科畢業(yè)設(shè)計論文-校園B2C交易系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā)_第3頁
本科畢業(yè)設(shè)計論文-校園B2C交易系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā)_第4頁
本科畢業(yè)設(shè)計論文-校園B2C交易系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

摘要電子商務(wù)是一種在互聯(lián)網(wǎng)上利用網(wǎng)絡(luò)技術(shù)進(jìn)行商務(wù)活動的形式。近年來隨著互聯(lián)網(wǎng)的興起和普及,全球的電子商務(wù)得到了迅速開展,如何利用最新的網(wǎng)絡(luò)編程技術(shù)生成高效可靠的電子商務(wù)方案已經(jīng)成為了當(dāng)前的熱點問題。ASP.NET框架是Microsoft公司推出的一種全新的網(wǎng)站開發(fā)平臺,提供了豐富的編程類庫和完善的集成開發(fā)環(huán)境,大大簡化了應(yīng)用程序的開發(fā)過程,并且具有良好的移植性和平安性。本論文可分為三局部:首先簡述了電子商務(wù)的根本理論知識,然后著重論述了本系統(tǒng)的數(shù)據(jù)庫設(shè)計,最后應(yīng)用相關(guān)技術(shù)實現(xiàn)系統(tǒng)功能。關(guān)鍵詞:電子商務(wù)ASP.NETADO.NET數(shù)據(jù)庫C#AbstractTheelectroniccommerceisakindofbusinessactivityformonInternetbyusingnetworktechniques.Inrecentyears,ithasdevelopedrapidlywiththedevelopmentofInternet.Howtomaketheefficientandcredibleelectroniccommerceprojectbymakinguseoftheup-to-dateInternetprogrammingtechniqueshasbecomeahotpointissue.MicrosoftCorporationhasreleased.NETframework,whichisanewcomputingplatform.ItprovidesalotofprogrammingclasslibrariesandperfectIntegrationDevelopmentEnvironment(IDE),whichcangreatlysimplifytheproceduresofdeveloppingapplicationprograms.Moreover,itisverysafeandcanbeeasilytransplanted.Thethesiscanbedevidedintothreeparts.Firstly,itintroducesthefoundationalknowledgeofelectroniccommerce.Secondly,itemphaticallyshowstheDataBaseDesigninthissystem.Finallyit,makesuseofcorrelativetechniquestodesignsomefunctionsofthissystem.Keywords:electroniccommerceASP.NETADO.NETDataBaseC#目錄摘要 1Abstract 3目錄 5第一章緒論 11.1電子商務(wù)的開展概況 1國內(nèi)電子商務(wù)的開展概況 1全球電子商務(wù)的開展概況 2電子商務(wù)的平安性概況 31.2課題概述 3課題背景及意義 3本課題主要研究內(nèi)容 4第二章數(shù)據(jù)庫設(shè)計 52.1數(shù)據(jù)庫設(shè)計的地位和作用 52.2數(shù)據(jù)庫設(shè)計原那么 5表的設(shè)計原那么 5字段設(shè)計原那么 62.3數(shù)據(jù)庫中表的設(shè)計 7表的建立 7表的關(guān)系 92.4存儲過程的設(shè)計 10存儲過程的概念和優(yōu)點 10構(gòu)建存儲過程 112.5觸發(fā)器的設(shè)計 12觸發(fā)器的概念和作用 12構(gòu)造觸發(fā)器 132.6本章小結(jié) 14第三章系統(tǒng)功能設(shè)計 153.1系統(tǒng)開發(fā)相關(guān)技術(shù) 153.3.1ASP.NET技術(shù)框架 153.1.2ADO.NET數(shù)據(jù)庫接口技術(shù) 163.2需求描述 18系統(tǒng)總體功能 18后臺管理功能 183.3功能實現(xiàn) 19商品查詢及類別瀏覽功能的實現(xiàn) 19新品入庫的功能實現(xiàn) 23商品圖片上傳的功能實現(xiàn) 25訂單管理的功能實現(xiàn) 263.4本章小結(jié) 30結(jié)束語 31致謝 33參考文獻(xiàn) 35第一章緒論1.1電子商務(wù)的開展概況電子商務(wù)是由計算機(jī)、通信網(wǎng)絡(luò)及程序化、標(biāo)準(zhǔn)化的商務(wù)流程和一系列平安、認(rèn)證法律體系組成的集合;是一種以互聯(lián)網(wǎng)為根底、以交易雙方為主體、以銀行電子支付和結(jié)算為手段、以客戶數(shù)據(jù)為依托的全新商務(wù)模式。隨著通信網(wǎng)絡(luò)技術(shù)的飛速開展,特別是Internet的不斷普及,人們的消費(fèi)觀念發(fā)生了巨大的變化,他們更希望利用網(wǎng)絡(luò)的便利性來進(jìn)行采購和交易,從而導(dǎo)致了電子商務(wù)的出現(xiàn),并在世界范圍內(nèi)掀起了電子商務(wù)的熱潮[3]。國內(nèi)電子商務(wù)的開展概況1998年,是世界的“電子商務(wù)年〞,新成立的信息產(chǎn)業(yè)部提出:推進(jìn)國民經(jīng)濟(jì)信息化,要重點抓好企業(yè)信息化、金融電子化和電子商務(wù)這三個方面的工作。企業(yè)信息化是根底,金融電子化是保證,電子商務(wù)是核心。一場有關(guān)電子商務(wù)研究和討論的“電子商務(wù)熱〞隨之在國內(nèi)掀起,我國的電子商務(wù)已進(jìn)入到起步階段。金橋工程的實施,推動了我國信息根底設(shè)施建設(shè)步伐,促進(jìn)了我國因特網(wǎng)的普及和應(yīng)用,為電子商務(wù)的實施打下了一定的物質(zhì)根底。金卡工程的實施,推動了我國一些商業(yè)銀行的電子化進(jìn)程,為電子商務(wù)的開展打下了根底。金卡工程的建設(shè)為實現(xiàn)網(wǎng)上支付與資金清算提供了很好條件。金貿(mào)工程是電子商務(wù)在經(jīng)貿(mào)流通領(lǐng)域的應(yīng)用工程,也是我國電子貿(mào)易體系建設(shè)的一項試點工程。金貿(mào)工程就是幫助企業(yè),特別是幫助我們的國有大中型企業(yè)進(jìn)行改革,走出困境,學(xué)會利用現(xiàn)代電子信息技術(shù)手段管理企業(yè),研究市場,學(xué)會經(jīng)營貿(mào)易,開創(chuàng)商品交易新的模式的一項計算機(jī)應(yīng)用系統(tǒng)工程。今天,我國電子證券交易覆蓋全國,連接了全國300多家證券公司的近2600個營業(yè)部,開戶投資者超過4000萬戶,最高日成交量到達(dá)300多億元人民幣,有利地保證了我國證券市場的開展。在外貿(mào)部門,由國家外經(jīng)貿(mào)部組織實施的電子配額網(wǎng)上招標(biāo)已深入到該系統(tǒng)的絕大多數(shù)公司、部門。然而,遺憾地是電子商務(wù)的最大利益即得者企業(yè)界對電子商務(wù)的實施還缺乏應(yīng)有的熱忱度和應(yīng)有進(jìn)程速度。新一輪的競爭早已開始,誰不掌握電子商務(wù)的應(yīng)用技術(shù),誰將失去競爭的資格。綜上所述,我國電子商務(wù)起步晚,開展程度低,目前尚停留在對平安、保密、認(rèn)證等技術(shù)手段和標(biāo)準(zhǔn)標(biāo)準(zhǔn)是否成熟可靠的討論上,實際應(yīng)用較少,大局部電子商務(wù)是非支付型電子商務(wù),即網(wǎng)上營銷,網(wǎng)下支付;小局部是支付型電子商務(wù),即網(wǎng)上營銷,網(wǎng)上支付。我國電子商務(wù)開展水平僅為美國的23%,總體上處于初級階段。目前主要面臨以下問題:市場成熟問題。中國的市場及其體系還不健全、不標(biāo)準(zhǔn),假冒偽劣商品屢禁不止,坑蒙拐騙時有發(fā)生,市場行為缺乏必要的自律和嚴(yán)厲的社會監(jiān)督。在這種情況下,要開展電子商務(wù),必須加速培育市場,使其盡快成熟起來,以利于傳統(tǒng)商務(wù)向電子商務(wù)順利轉(zhuǎn)變。金融效勞質(zhì)量問題。電子商務(wù)的進(jìn)行需要支付與結(jié)算,這就應(yīng)有高質(zhì)、高效的金融效勞及其電子化的配合。由于金融效勞的水平和電子化程度都還不高,中國的金融業(yè)亟需加快變革步伐以適應(yīng)全球一體化進(jìn)程。信息網(wǎng)絡(luò)的環(huán)境和條件問題。這幾年中國的信息根底設(shè)施的建設(shè)進(jìn)展順利,成績顯著,在沿海地區(qū)的經(jīng)濟(jì)興旺省市,尤為矚目。但從電子商務(wù)的要求看,無論是網(wǎng)絡(luò)技術(shù)、網(wǎng)絡(luò)管理、技術(shù)標(biāo)準(zhǔn)、消費(fèi)水平、通信速度、平安和保密條件等各方面都存在較大差距??绮块T、跨地區(qū)的協(xié)調(diào)問題。參與電子商務(wù)的不僅僅是交易雙方,更重要的是,它還涉及工商行政管理、海關(guān)、保險、財稅、銀行等眾多部門和不同地區(qū)、不同國家,這就需要有統(tǒng)一的法律、行政框架以及強(qiáng)有力的綜合協(xié)調(diào)組織。人員素質(zhì)和技能問題。電子商務(wù)是新生事物,它的知識亟需普及。全世界因特網(wǎng)網(wǎng)上的商業(yè)用戶和家庭用戶急劇增加,但因特網(wǎng)的使用者仍集中在年齡為15歲至50歲之間、中上收入水平、受過中等以上教育的中青年以男性為主。對中國來說,特別需要提高商務(wù)人員的業(yè)務(wù)素質(zhì)和網(wǎng)絡(luò)技能[1-4]。全球電子商務(wù)的開展概況據(jù)CNNIC于2004年11月公布的?全球互聯(lián)網(wǎng)統(tǒng)計信息跟蹤報告?顯示,截止至2004年9月,全球上網(wǎng)用戶數(shù)已近八億一千三百萬,占全世界人口的12.7%。過10年來,電子商務(wù)已經(jīng)從根本上轉(zhuǎn)變了目前的經(jīng)濟(jì)景觀。電子商務(wù)誕生之始就以超常規(guī)的速度開展,銷售額成倍增長。1994年全球電子商務(wù)銷售額僅為12億美元,1997年即到達(dá)26億美元,1998年銷售額竟高達(dá)500億美元,比1997年增長了近20倍。2000年更猛增到3000億美元。北美地區(qū)在線零售額以每年翻三番的速度增長。歐洲的電子商務(wù)雖比美國起步晚了18個月,但不甘落后,奮起直追。亞太地區(qū)信息產(chǎn)業(yè)興旺的日本、新加坡和韓國,電子商務(wù)開展也是如火如荼。據(jù)VeriSign于2004年8月1日公布的一份調(diào)查報告顯示,全球電子商務(wù)的交易總額在過去的12個月間增長了13.2%,2004年底全球電子商務(wù)總額高達(dá)2.7萬億美元。美國電子商務(wù)的應(yīng)用領(lǐng)域和規(guī)模遠(yuǎn)遠(yuǎn)領(lǐng)先于其他國家,在全球所有電子交易額中,目前大約占50%以上。美國有700萬中小企業(yè),50萬直接上網(wǎng)交易,2003年B2C(企業(yè)對個人消費(fèi)者)的交易額超過500億美元。世界范圍內(nèi)已經(jīng)形成了以美國為首,歐洲和亞洲興旺國家隨后的國際電子商務(wù)開展格局。未來的全球電子商務(wù)開展將具有以下幾個趨勢:傳統(tǒng)企業(yè)將成為電子商務(wù)的主體B2C將成為全球電子商務(wù)開展的主流進(jìn)入電子商務(wù)市場的企業(yè)日趨多元化電子商務(wù)開展的地區(qū)差異日益擴(kuò)大電子商務(wù)的平安性概況電子商務(wù)作為一種全新的業(yè)務(wù)和效勞方式,為全球客戶提供了豐富的商務(wù)信息、簡潔的交易過程和低廉的交易本錢。但是電子商務(wù)在給人們帶來方便的同時,也把人們引進(jìn)了平安陷阱。大量事實說明,要保證電子商務(wù)的正常運(yùn)作,就必須高度重視平安問題。電子商務(wù)的平安涉及方方面面,平安問題是電子商務(wù)成功與否的關(guān)鍵所在,也是致命所在。因為電子商務(wù)的平安問題,不僅關(guān)系到個人的資金平安、商家的貨物平安,還關(guān)系到國家的經(jīng)濟(jì)平安、國家經(jīng)濟(jì)秩序的穩(wěn)定等問題。無法想象一個平安得不到保障的電子商務(wù)世界會是一個什么樣的情形。所以,對于電子商務(wù)的平安問題絕不可以等閑視之,必須把它提到重要的議事日程上來,只有這樣,才能保證電子商務(wù)的健康開展。1.2課題概述課題背景及意義全球經(jīng)濟(jì)開展正在進(jìn)入信息經(jīng)濟(jì)時代。作為21世紀(jì)的主要經(jīng)濟(jì)增長方式——電子商務(wù),將給世界各國和世界經(jīng)濟(jì)帶來巨大的變革,產(chǎn)生深遠(yuǎn)的影響?,F(xiàn)在,電子商務(wù)已經(jīng)在外經(jīng)貿(mào)、海關(guān)、金融、商業(yè)等許多領(lǐng)域中得到應(yīng)用,同時,各種專業(yè)網(wǎng)絡(luò)和增值網(wǎng)絡(luò)開展迅速,電子商務(wù)正在成為各方關(guān)注的焦點。對開展中的中國來說,大力開展電子商務(wù)尤其重要。一方面,電子商務(wù),尤其是B2C已趨于群眾化,其開展前景十分樂觀,可以極大地帶動國民經(jīng)濟(jì)的開展;另一方面,電子商務(wù)的開展直接反映了一個國家的經(jīng)濟(jì)、科技、信息化的開展程度,對我國樹立大國形象,完善市場體制有很大意義。同樣,這次的畢業(yè)設(shè)計課題對本人來說也有很大意義。通過這次畢業(yè)設(shè)計,提高了本人對軟件設(shè)計及開發(fā)的根本流程認(rèn)識;加深對程序模塊化設(shè)計的理解;進(jìn)一步學(xué)習(xí)并掌握ASP.NET,C#等動態(tài)網(wǎng)頁設(shè)計技術(shù);在數(shù)據(jù)庫設(shè)計的過程中,本人對存儲過程,觸發(fā)器等技術(shù)加深了了解,并將其運(yùn)用在畢業(yè)設(shè)計中。此外,這次的畢業(yè)設(shè)計可以增強(qiáng)本人的分析能力,因其屬于團(tuán)體作業(yè),還可以增強(qiáng)本人的團(tuán)體合作意識。當(dāng)然,在此期間不可防止地暴露本人的諸多缺乏,本人將在日后的學(xué)習(xí)過程中不斷彌補(bǔ)。1.2.2本課題主要研究內(nèi)容本次畢業(yè)設(shè)計主要運(yùn)用的技術(shù):ASP.NET、SQLSERVER、C#、ADO.NET等。本人主要負(fù)責(zé)系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā),擔(dān)任系統(tǒng)管理員的角色。對于此局部,主要做的工作和實現(xiàn)的功能如下:1.分析B2C交易的商務(wù)模式,設(shè)計校園B2C交易系統(tǒng)的運(yùn)行模式。應(yīng)用VisualStutio2005Express以及SQLServer2005Express對系統(tǒng)進(jìn)行開發(fā),重點的開發(fā)工作為系統(tǒng)管理員的角色功能;應(yīng)用ASP.NET及C#進(jìn)行界面設(shè)計。了解軟件開發(fā)的根本流程。設(shè)計并建立關(guān)系數(shù)據(jù)庫,創(chuàng)立商品查詢、訂單商品數(shù)量觸發(fā)器。測試完成后,提供應(yīng)小組其他成員。4.設(shè)計訂單查詢界面,實現(xiàn)對訂單信息的管理和統(tǒng)計等功能;第二章數(shù)據(jù)庫設(shè)計2.1數(shù)據(jù)庫設(shè)計的地位和作用數(shù)據(jù)庫設(shè)計(DataBaseDesign)是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲數(shù)據(jù),滿足各種用戶的應(yīng)用需求〔信息要求和處理要求〕。在數(shù)據(jù)庫領(lǐng)域內(nèi),常常把使用數(shù)據(jù)庫的各類系統(tǒng)統(tǒng)稱為數(shù)據(jù)庫應(yīng)用系統(tǒng)。數(shù)據(jù)庫是信息系統(tǒng)的核心和根底,把信息系統(tǒng)中大量的數(shù)據(jù)按一定的模型組織起來,提供存儲、維護(hù)、檢索數(shù)據(jù)的功能,使信息系統(tǒng)可以方便、及時、準(zhǔn)確地從數(shù)據(jù)庫中獲得所需的信息。數(shù)據(jù)庫設(shè)計是信息系統(tǒng)開發(fā)和建設(shè)的重要組成局部。2.2數(shù)據(jù)庫設(shè)計原那么2.2.1表的設(shè)計原那么標(biāo)準(zhǔn)化和標(biāo)準(zhǔn)化數(shù)據(jù)的標(biāo)準(zhǔn)化有助于消除數(shù)據(jù)庫中的數(shù)據(jù)冗余。標(biāo)準(zhǔn)化有好幾種形式,但ThirdNormalForm〔3NF〕通常被認(rèn)為在性能、擴(kuò)展性和數(shù)據(jù)完整性方面到達(dá)了最好平衡。簡單來說,遵守3NF標(biāo)準(zhǔn)的數(shù)據(jù)庫的表設(shè)計原那么是:“OneFactinOnePlace〞即某個表只包括其本身根本的屬性,當(dāng)不是它們本身所具有的屬性時需進(jìn)行分解。表之間的關(guān)系通過外鍵相連接。它具有以下特點:有一組表專門存放通過鍵連接起來的關(guān)聯(lián)數(shù)據(jù)。舉例:某個存放客戶及其有關(guān)定單的3NF數(shù)據(jù)庫就可能有兩個表:Customer和Order。Order表不包含定單關(guān)聯(lián)客戶的任何信息,但表內(nèi)會存放一個鍵值,該鍵指向Customer表里包含該客戶信息的那一行。事實上,為了效率的緣故,對表不進(jìn)行標(biāo)準(zhǔn)化有時也是必要的。數(shù)據(jù)驅(qū)動采用數(shù)據(jù)驅(qū)動而非硬編碼的方式,許多策略變更和維護(hù)都會方便得多,大大增強(qiáng)系統(tǒng)的靈活性和擴(kuò)展性。舉例,假設(shè)用戶界面要訪問外部數(shù)據(jù)源〔文件、XML文檔、其他數(shù)據(jù)庫等〕,不妨把相應(yīng)的連接和路徑信息存儲在用戶界面支持表里。還有,如果用戶界面執(zhí)行工作流之類的任務(wù)〔發(fā)送郵件、打印信箋、修改記錄狀態(tài)等〕,那么產(chǎn)生工作流的數(shù)據(jù)也可以存放在數(shù)據(jù)庫里。角色權(quán)限管理也可以通過數(shù)據(jù)驅(qū)動來完成。事實上,如果過程是數(shù)據(jù)驅(qū)動的,你就可以把相當(dāng)大的責(zé)任推給用戶,由用戶來維護(hù)自己的工作流過程??紤]各種變化在設(shè)計數(shù)據(jù)庫的時候考慮到哪些數(shù)據(jù)字段將來可能會發(fā)生變更。舉例,姓氏就是如此〔注意是西方人的姓氏,比方女性結(jié)婚后從夫姓等〕。所以,在建立系統(tǒng)存儲客戶信息時,在單獨(dú)的一個數(shù)據(jù)表里存儲姓氏字段,而且還附加起始日和終止日等字段,這樣就可以跟蹤這一數(shù)據(jù)條目的變化。2.2.2字段設(shè)計原那么1.每個表中都應(yīng)該添加的3個有用的字段〔因本次設(shè)計的數(shù)據(jù)庫屬于小型數(shù)據(jù)庫,并且不需經(jīng)常改動,所以在此次表的設(shè)計中沒有添加這三個字段〕dRecordCreationDate,在VB下默認(rèn)是Now(),而在SQLServer下默認(rèn)為GETDATE()。sRecordCreator,在SQLServer下默認(rèn)為NOTNULLDEFAULTUSER。nRecordVersion,記錄的版本標(biāo)記;有助于準(zhǔn)確說明記錄中出現(xiàn)null數(shù)據(jù)或者喪失數(shù)據(jù)的原因。2.對地址和采用多個字段描述街道地址就短短一行記錄是不夠的。Address_Line1、Address_Line2和Address_Line3可以提供更大的靈活性。還有,號碼和郵件地址最好擁有自己的數(shù)據(jù)表,其間具有自身的類型和標(biāo)記類別。3.使用角色實體定義屬于某類別的列在需要對屬于特定類別或者具有特定角色的事物做定義時,可以用角色實體來創(chuàng)立特定的時間關(guān)聯(lián)關(guān)系,從而可以實現(xiàn)自我文檔化。舉例:用PERSON實體和PERSON_type實體來描述人員。比方說,當(dāng)JohnSmith,Engineer提升為JohnSmith,Drector乃至最后爬到JohnSmith,CIO的高位,而所有你要做的不過是改變兩個表PERSON和PERSON_type之間關(guān)系的鍵值,同時增加一個日期/時間字段來知道變化是何時發(fā)生的。這樣,你PERSON_TYPE表就包含了所有PERSON的可能類型,比方Associate、Engineer、Director、CIO或者CEO等。還有個替代方法就是改變PERSON記錄來反映新頭銜的變化,不過這樣一來在時間上無法跟蹤個人所處位置的具體時間。4.選擇數(shù)字類型和文本類型盡量充足在SQL中使用smallint和tinyint類型要特別小心。比方,假設(shè)想看看月銷售總額,總額字段類型是smallint,那么,如果總額超過了$32,767就不能進(jìn)行計算操作了。而ID類型的文本字段,比方客戶ID或定單號等等都應(yīng)該設(shè)置得比一般想象更大。假設(shè)客戶ID為10位數(shù)長,那你應(yīng)該把數(shù)據(jù)庫表字段的長度設(shè)為12或者13個字符長,但這額外占據(jù)的空間卻無需將來重構(gòu)整個數(shù)據(jù)庫就可以實現(xiàn)數(shù)據(jù)庫規(guī)模的增長了。5.增加刪除標(biāo)記字段在表中包含一個“刪除標(biāo)記〞字段,這樣就可以把行標(biāo)記為刪除。在關(guān)系數(shù)據(jù)庫里不要單獨(dú)刪除某一行,最好采用去除數(shù)據(jù)程序,而且要仔細(xì)維護(hù)索引整體性。2.3數(shù)據(jù)庫中表的設(shè)計表的設(shè)計是數(shù)據(jù)庫設(shè)計中一個至關(guān)重要的環(huán)節(jié),任何數(shù)據(jù)在數(shù)據(jù)庫中都是在相應(yīng)表中存放的,因此,數(shù)據(jù)庫可看作是假設(shè)干個、有聯(lián)系的表的集合體。表的設(shè)計主要分為表本身的設(shè)計和表之間關(guān)系的建立。下面將對本次數(shù)據(jù)庫設(shè)計中在這兩方面的設(shè)計作較為詳細(xì)的介紹。2.3.1表的建立在這次的畢業(yè)設(shè)計中基于系統(tǒng)功能〔將在第四章進(jìn)行詳細(xì)介紹〕一共設(shè)計了四個表,它們分別是:products〔商品表〕,pro_type〔商品類型表〕,orders〔訂單表〕,detail〔訂單詳情表〕。下面列舉各表的結(jié)構(gòu):表2.1products結(jié)構(gòu)表屬性名中文含義類型長度允許空Pro_id商品號int4NTyp_id類別號int4NPro_model型號nvarchar50YPro_name商品名nvarchar50N屬性名中文含義類型長度允許空Pro_num數(shù)量floatNPro_price單價moneyYPro_ifo備注nvarcharYPro_pic圖片nvarchar100YPro_reg登記日期datetimeNPro_brand品牌nvarchar20Y其中,Pro_id是主鍵,Typ_id是外鍵,對應(yīng)pro_type表的主鍵。Pro_reg的類型在默認(rèn)值或綁定欄中綁定了函數(shù)GETDATE(),添加商品時系統(tǒng)會自動附給當(dāng)前系統(tǒng)時間。〔下面各表中也出現(xiàn)類似情況〕。Pro_num的類型設(shè)為float,是因為考慮到可能出現(xiàn)按斤兩計量的商品。表2.2pro_type結(jié)構(gòu)表屬性名中文含義類型長度允許空Typ_id商品類型編號int4NTyp_name類型名nvarchar20N其中,Typ_id是主鍵。表2.3orders結(jié)構(gòu)表屬性名中文含義類型長度允許空Ord_id訂單號int4NOrd_customer客戶名nvarchar50YOrd_borndate生成日期datetimeYOrd_state訂單狀態(tài)nvarchar20Y其中,Ord_id是主鍵。表2.4detail結(jié)構(gòu)表屬性名中文含義類型長度允許空Det_id訂單詳情號int4NOrd_id訂單號int4NPro_id商品號int4NDet_name購置商品名nvarchar50Y屬性名中文含義類型長度允許空Det_price商品單價moneyYDet_address地址nvarchar100YDet_receiver收件人nvarchar50YDet_sum總價YDet_Tel聯(lián)系char15YDet_Email郵箱nvarchar50YDet_zipcodechar6YDet_ifo訂單備注nvarchar100NDet_num購置數(shù)量floatN其中,Det_id是主鍵,Ord_id和Pro_id是外鍵。Det_sum的值是Det_num和Det_price乘積,在計算所得的列標(biāo)準(zhǔn)中綁定了公式:Det_price*Det_num。2.3.2表的關(guān)系上述四個表的建立為數(shù)據(jù)庫打下了根底,當(dāng)然表在數(shù)據(jù)庫中作用的表達(dá)更多的是表現(xiàn)在它們之間的聯(lián)系上。關(guān)系示意圖如圖2.5所示:圖2.5關(guān)系示意圖detail〔訂單詳情表〕與orders〔訂單表〕是通過外鍵ord_id(訂單號)實現(xiàn)連接的;與products〔商品表〕是通過外鍵pro_id〔商品號〕實現(xiàn)連接的;products〔商品表〕與pro_type〔商品類別表〕是通過外鍵typ_id〔商品類型編號〕實現(xiàn)連接的。表的關(guān)系確立后,對表進(jìn)行更新或刪除操作時,要保證與它有聯(lián)系的表滿足參照完整性。2.4存儲過程的設(shè)計存儲過程的概念和優(yōu)點存儲過程實際上就是將常用的或很復(fù)雜的工作,預(yù)先用SQL語句寫好并用一個指定的名稱存儲起來,

那么以后要叫數(shù)據(jù)庫提供與已定義好的存儲過程的功能相同的效勞時,只需調(diào)用execute,即可自動完成命令。存儲過程在很多方面類似于應(yīng)用程序,因為可以執(zhí)行該存儲過程來執(zhí)行某些操作,通常是對數(shù)據(jù)庫中的數(shù)據(jù)操作。可以使用許多種不同的語言創(chuàng)立存儲過程,這取決于所使用的數(shù)據(jù)庫系統(tǒng)。存儲過程完全存儲在數(shù)據(jù)庫系統(tǒng)之內(nèi),但卻以外部應(yīng)用程序的形式實現(xiàn)。這一結(jié)構(gòu)有著內(nèi)部高速緩存以及獨(dú)立于更大的應(yīng)用程序的優(yōu)點:存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(如對多個表進(jìn)行Update、Insert、Query、Delete時〕,可將復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。平安性高,可設(shè)定只有某用戶才具有對指定存儲過程的使用權(quán)。下面簡要介紹一下存儲過程的種類:系統(tǒng)存儲過程:以sp_開頭,用來進(jìn)行系統(tǒng)的各項設(shè)定。取得信息相關(guān)管理工作,如sp_help就是取得指定對象的相關(guān)信息。擴(kuò)展存儲過程:以XP_開頭,用來調(diào)用操作系統(tǒng)提供的功能。如:exec

master..xp_cmdshell

'ping

.1'用戶自定義的存儲過程,這是我們所指的存儲過程。常用格式:

Create

procedure

procedue_name

[@parameter

data_type][output]

[with]{recompile|encryption}

As

sql_statement解釋:

output:表示此參數(shù)是可傳回的。

with

{recompile|encryption}

recompile:表示每次執(zhí)行此存儲過程時都重新編譯一次。

encryption:所創(chuàng)立的存儲過程的內(nèi)容會被加密。2.4.2構(gòu)建存儲過程鑒于上述存儲過程的優(yōu)點,在這次的數(shù)據(jù)庫設(shè)計中也應(yīng)用了此技術(shù)。下面將列舉其中兩個:〔1〕ALTERPROCEDUREproducts_all@typ_namevarchar(20),@pro_namevarchar(50)asselectpro_id,typ_name,pro_name,pro_brand,pro_model,pro_numpro_price,pro_reg,pro_pic,pro_ifofromproductsinnerjoinpro_typeonproducts.typ_id=pro_type.typ_idwheretyp_namelike'%@typ_name%'orpro_namelike'%@pro_name%'executeproducts_all其中,@是變量標(biāo)示。此存儲過程實現(xiàn)的功能是按商品類別名或商品名查詢。因為使用了“%〞〔字符匹配符〕,所以也可以進(jìn)行模糊查詢?!?〕ALTERPROCEDUREdetail_all@vord_customervarchar(50),@vsumtotaldec(4,2)output@vnumtotaldec(4,2)outputASSelect@vord_customer=count(ord_customer),@vsumtotal=sum(det_sum)@vnumtotal=sum(det_num)fromordersinnerjoindetailonorders.ord_id=detail.ord_idwhereord_customer=@vord_customerexecutedetail_all其中,output為輸出標(biāo)志;表達(dá)式@vord_customer=count(ord_customer),是將客戶的統(tǒng)計數(shù)直接附給變量@vord_customer。此存儲過程的功能主要是統(tǒng)計客戶的購物次數(shù)和購物總金額。2.5觸發(fā)器的設(shè)計2.5.1觸發(fā)器的概念和作用觸發(fā)器是一種特殊類型的存儲過程,它不同于我們前面介紹過的存儲過程。觸發(fā)器主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名字而被直接調(diào)用。當(dāng)對某一表進(jìn)行諸如UPDATE、INSERT、DELETE這些操作時,SQLServer就會自動執(zhí)行觸發(fā)器所定義的SQL語句,從而確保對數(shù)據(jù)的處理必須符合由這些SQL語句所定義的規(guī)那么。觸發(fā)器的主要作用就是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。除此之外,觸發(fā)器還有其它許多不同的功能:強(qiáng)化約束〔Enforcerestriction〕觸發(fā)器能夠?qū)崿F(xiàn)比CHECK語句更為復(fù)雜的約束。跟蹤變化Auditingchanges觸發(fā)器可以偵測數(shù)據(jù)庫內(nèi)的操作,從而不允許數(shù)據(jù)庫中未經(jīng)許可的指定更新和變化。級聯(lián)運(yùn)行〔Cascadedoperation〕。觸發(fā)器可以偵測數(shù)據(jù)庫內(nèi)的操作,并自動地級聯(lián)影響整個數(shù)據(jù)庫的各項內(nèi)容。例如,某個表上的觸發(fā)器中包含有對另外一個表的數(shù)據(jù)操作〔如刪除,更新,插入〕而該操作又導(dǎo)致該表上觸發(fā)器被觸發(fā)。存儲過程的調(diào)用〔Storedprocedureinvocation〕。為了響應(yīng)數(shù)據(jù)庫更新,觸發(fā)器可以調(diào)用一個或多個存儲過程,甚至可以通過外部過程的調(diào)用而在DBMS〔數(shù)據(jù)庫管理系統(tǒng)〕本身之外進(jìn)行操作。由此可見,觸發(fā)器可以解決高級形式的業(yè)務(wù)規(guī)那么或復(fù)雜行為限制以及實現(xiàn)定制記錄等一些方面的問題。例如,觸發(fā)器能夠找出某一個表在數(shù)據(jù)修改前后狀態(tài)發(fā)生的差異,并根據(jù)這種差異執(zhí)行一定的處理。此外一個表的同一類型〔INSERT、UPDATE、DELETE〕的多個觸發(fā)器能夠?qū)ν环N數(shù)據(jù)操作采取多種不同的處理??傮w而言,觸發(fā)器性能通常比擬低。當(dāng)運(yùn)行觸發(fā)器時,系統(tǒng)處理的大局部時間花費(fèi)在參照其它表的這一處理上,因為這些表即不在內(nèi)存中也不在數(shù)據(jù)庫設(shè)備上,而刪除表和插入表總是位于內(nèi)存中,可見觸發(fā)器所參照的其它表的位置決定了操作要花費(fèi)的時間長短。因此,一些數(shù)據(jù)庫的專家們在講到大型數(shù)據(jù)庫的設(shè)計技巧時,建議少用觸發(fā)器,以免導(dǎo)致系統(tǒng)整體性能下降。2.5.2構(gòu)造觸發(fā)器雖然,上節(jié)已提到觸發(fā)器會引起系統(tǒng)整體性能下降,但因為這次畢業(yè)設(shè)計的系統(tǒng)比擬小,相應(yīng)地,設(shè)計的數(shù)據(jù)庫也比擬小。因此,在這里使用觸發(fā)器所引起的系統(tǒng)性能下降完全可以忽略,相反,還可以大量減少前臺的在一些功能設(shè)計時的代碼量。下面將列舉在本次數(shù)據(jù)庫設(shè)計中構(gòu)造的兩個觸發(fā)器[7]:〔1〕ALTERTRIGGERTR_detail_insupdONdbo.detailFORINSERT,UPDATEASifupdate(det_num)begindeclare@vpro_numfloatdeclare@vpro_idintdeclare@vdet_idintdeclare@vdet_numfloatselect@vpro_id=pro_id,@vdet_id=det_id,@vdet_num=det_numfrominsertedselect@vpro_num=pro_numfromproductswherepro_id=@vpro_idif@vpro_num>=@vdet_numupdateproductssetpro_num=@vpro_num-@vdet_numwherepro_id=@vpro_idelsebeginprint'當(dāng)前商品數(shù)量不夠!操作已取消。'rollbacktransactionendend 其中,begin為激發(fā)事件標(biāo)志;declare局部是定義變量局部;當(dāng)商品數(shù)量>=定購量那么更新原商品數(shù)量時,允許客戶購置此數(shù)量商品;當(dāng)商品數(shù)量<定購量時,激發(fā)事務(wù)回滾,并提示客戶“當(dāng)前商品數(shù)量不夠!操作已取消。〞這個觸發(fā)器是應(yīng)用在detail〔訂單詳情表〕中的,主要完成根據(jù)商品現(xiàn)有數(shù)量判斷客戶的購物數(shù)量是否可以滿足。在前臺購物車的設(shè)計中,此觸發(fā)器的作用可以完成相應(yīng)的功能,無需再另外編寫代碼。〔2〕ALTERtriggerTR_detail_inupondbo.detailforinsert,updateasbegindeclare@vdet_namevarchar(50)declare@vdet_pricemoneydeclare@vpro_idintdeclare@pro_idintselect@vpro_id=pro_idfrominsertedselect@vdet_name=pro_name,@vdet_price=pro_pricefromproductswherepro_id=@vpro_idupdatedetailsetdet_name=@vdet_name,det_price=@vdet_pricewherepro_id=@vpro_idend這個觸發(fā)器也是應(yīng)用在detail〔訂單詳情表〕中的,在進(jìn)行insert或update時激發(fā)此觸發(fā)器。它要實現(xiàn)的功能是當(dāng)在detail〔訂單詳情表〕中添加pro_id(商品號)時,系統(tǒng)根據(jù)pro_id(商品號)在products〔商品信息表〕中提取相應(yīng)的pro_name(商品名)、pro_price(單價),分別附給detail〔訂單詳情表〕中的det_name(購置商品名)、det_price(單價)。同樣,在前臺的購物車的功能實現(xiàn)上,此觸發(fā)器也可完成同樣功能。2.6本章小結(jié)在這一章主要對數(shù)據(jù)庫設(shè)計中表和字段的設(shè)計原那么,以及本系統(tǒng)的數(shù)據(jù)庫設(shè)計作了較為詳細(xì)的介紹。這次的數(shù)據(jù)庫設(shè)計基于SQLServer2005Express版。在本章中,主要對存儲過程、觸發(fā)器等技術(shù)做了簡要地介紹,并較為詳細(xì)地討論了這些技術(shù)在本數(shù)據(jù)庫設(shè)計中的應(yīng)用。通過這次的實踐,本人對數(shù)據(jù)庫設(shè)計的流程以及功能實現(xiàn)方式加深了印象,并對SQL語句的語法有了更深一步地認(rèn)識。第三章系統(tǒng)功能設(shè)計上一章討論了數(shù)據(jù)庫的設(shè)計問題,但數(shù)據(jù)庫最終是要被系統(tǒng)應(yīng)用才能顯現(xiàn)它的作用,因此,本章將著重討論基于數(shù)據(jù)庫的系統(tǒng)功能設(shè)計:主要包含功能設(shè)計和頁面設(shè)計。3.1系統(tǒng)開發(fā)相關(guān)技術(shù)這次實現(xiàn)系統(tǒng)功能設(shè)計主要應(yīng)用在ASP.NET平臺上,選用C#編程語言。使用了WebDevelper2005,VisualStudio2005,SQLSERVER2005Express版等軟件,在數(shù)據(jù)庫訪問上,主要運(yùn)用ADO.NET技術(shù)。下面就簡要介紹局部相關(guān)內(nèi)容。ASP.NET技術(shù)框架ASP.NET是一種建立在通用語言上的程序構(gòu)架,可以僅用一臺Web效勞器建立強(qiáng)大的Web應(yīng)用程序。ASP.NET提供許多比現(xiàn)在的Web開發(fā)模式更加強(qiáng)大的優(yōu)勢。相比之下,ASP在這方面就遜色不少。執(zhí)行效率的大幅提高ASP.NET是把基于通用語言的程序在效勞器上運(yùn)行。不像以前的ASP即時解釋程序,而是將程序在效勞器端首次運(yùn)行時進(jìn)行編譯,這樣的執(zhí)行效果,當(dāng)然比一條一條的解釋強(qiáng)很多。世界級的工具支持ASP.NET構(gòu)架是可以用Microsoft公司最新的產(chǎn)品VisualS開發(fā)環(huán)境進(jìn)行開發(fā),WYSIWYG〔WhatYouSeeIsWhatYouGet所見即所得〕的編輯。這些僅是ASP.NET強(qiáng)大化軟件支持的一小局部。強(qiáng)大性和適應(yīng)性因為ASP.NET是基于通用語言的編譯運(yùn)行的程序,所以它的強(qiáng)大性和適應(yīng)性,可以使它運(yùn)行在Web應(yīng)用軟件開發(fā)者的幾乎全部的平臺上〔筆者到現(xiàn)在為止只知道它只能用在Windows2000Server上〕。通用語言的根本庫,消息機(jī)制,數(shù)據(jù)接口的處理都能無縫的整合到ASP.NET的Web應(yīng)用中。ASP.NET同時也是language-independent語言獨(dú)立化的,所以,你可以選擇一種最適合你的語言來編寫你的程序,或者把你的程序用很多種語言來寫,現(xiàn)在已經(jīng)支持的有C#〔C++和Java的結(jié)合體〕,VB,Jscript。將來,這樣的多種程序語言協(xié)同工作的能力保護(hù)您現(xiàn)在的基于COM+開發(fā)的程序,能夠完整的移植到ASP.NET。簡單性和易學(xué)性ASP.NET使運(yùn)行一些很平常的任務(wù)如表單提交客戶端的身份驗證、分布系統(tǒng)和網(wǎng)站配置變得非常簡單。例如ASP.NET頁面構(gòu)架允許你建立自己的用戶界面,使其不同于常見的VB-Like界面。另外,通用語言簡化開發(fā)使把代碼結(jié)合成軟件簡單的就像裝配電腦。高效可管理性ASP.NET使用一種字符根底的、分級的配置系統(tǒng),使你效勞器環(huán)境和應(yīng)用程序的設(shè)置更加簡單。因為配置信息都保存在簡單文本中,新的設(shè)置有可能都不需要啟動本地的管理員工具就可以實現(xiàn)。多處理器環(huán)境的可靠性ASP.NET已經(jīng)被刻意設(shè)計成為一種可以用于多處理器的開發(fā)工具,它在多處理器的環(huán)境下用特殊的無縫連接技術(shù),將很大的提高運(yùn)行速度。即使你現(xiàn)在ASP.NET應(yīng)用軟件是為一個處理器開發(fā)的,將來多處理器運(yùn)行時不需要任何改變都能提高他們的效能,但現(xiàn)在的ASP卻做不到這一點。自定義性和可擴(kuò)展性ASP.NET設(shè)計時考慮了讓網(wǎng)站開發(fā)人員可以在自己的代碼中自己定義"plug-in"的模塊。這與原來的包含關(guān)系不同,ASP.NET可以參加自己定義的如何組件。網(wǎng)站程序的開發(fā)從來沒有這么簡單過[5][9]。3.1.2ADO.NET數(shù)據(jù)庫接口技術(shù)Microsoft的每次發(fā)布新平臺都會帶來訪問數(shù)據(jù)庫的新方法。在.NETFramework中,這個技術(shù)就是ADO.NET,它是構(gòu)建在以前的數(shù)據(jù)訪問功能上。它為現(xiàn)在的應(yīng)用程序中訪問數(shù)據(jù)提供了適當(dāng)?shù)姆椒?,這些應(yīng)用程序比以前的應(yīng)用程序分布更廣。ADO.NET是全新的數(shù)據(jù)訪問技術(shù),以ADO為根底,但只是名字上與之真正相關(guān)。改良之處在于它支持各種類型的數(shù)據(jù)存儲,優(yōu)化了單獨(dú)的數(shù)據(jù)提供者,適用于遠(yuǎn)程數(shù)據(jù),可以處理大量用戶同時訪問數(shù)據(jù)的應(yīng)用程序。ADO.NET有五個主要的對象類型如圖3.1所示:圖3.1ADO.NET的體系結(jié)構(gòu)通過Connection對象,可以將所有指令發(fā)送到數(shù)據(jù)存儲器〔以及發(fā)送來自數(shù)據(jù)存儲器的結(jié)果〕。用戶可以指定連接的數(shù)據(jù)庫,使用的驗證等。Command對象包含了指定將什么信息發(fā)送到數(shù)據(jù)庫〔或檢索什么數(shù)據(jù)〕的指令。它還包括了將使用的連接的鏈接。DataReader對象提供了“獲取〞通過命令對象檢索到的信息的方法。這一信息是只讀的,因此不能被編輯—每次只能讀取一項數(shù)據(jù)。該對象提供了大量數(shù)據(jù)的有效方法;有時他們描述為提供了連接的訪問,因為只要使用DataReader,那么必須保持對數(shù)據(jù)庫的連接。DataAdapter對象提供了一組命令和數(shù)據(jù)庫連接,它是另一種檢索數(shù)據(jù)的方法。它對數(shù)據(jù)更新的支持也是只讀的,因此在某些方面可以把他看作DataReader的“前輩〞。即使這樣,數(shù)據(jù)適配器并不允許直接編輯源;它用數(shù)據(jù)源的信息的副本填充數(shù)據(jù)集,接著用于將對數(shù)據(jù)的改寫寫入數(shù)據(jù)庫中。DataSet對象可以被看作數(shù)據(jù)存儲器的局部數(shù)據(jù)的本地副本,可以讀取、添加、編輯和刪除其中的數(shù)據(jù)行。因為這些數(shù)據(jù)是本地緩存的,與DataReader只向前讀取方式不同,DataSet可以隨機(jī)的方式讀取它。在數(shù)據(jù)改變時,通過數(shù)據(jù)適配器將他們發(fā)回數(shù)據(jù)存儲器。在這之前,數(shù)據(jù)集都是與數(shù)據(jù)存儲器斷開的。利用DataGrid組件查詢并顯示數(shù)據(jù)。DataGrid組件是用于顯示數(shù)據(jù)的一個控件,它可以與Dataset,DataTable,DataView或數(shù)組綁定。默認(rèn)的情況下它是只讀的,要使用DataGrid組件,只需要將其從工具箱至窗體中[5-8]。3.2需求描述3.2.1系統(tǒng)總體功能商品查詢用戶進(jìn)入商品查詢界面,按照自己的需要可進(jìn)行模糊查詢。類別瀏覽暫時有五大類:書籍、生活用品、體育用品、數(shù)碼產(chǎn)品和電腦設(shè)備。在相應(yīng)的界面,用戶選擇要瀏覽的類別,會出現(xiàn)相應(yīng)的商品信息,并給出此類別的商品總數(shù)。訂單管理對于用戶的訂單實現(xiàn)可查詢,可編輯的功能。購物車這個功能在整個系統(tǒng)功能實現(xiàn)上是個難點,即可用后臺數(shù)據(jù)庫實現(xiàn),又可在前臺用Cookie實現(xiàn),其中涉及到Session機(jī)制。用戶可操作購物車,添加、更改、刪除購置商品。新品入庫用戶可以使用此功能在網(wǎng)站添加自己的商品信息。只需選擇商品所屬類別,填寫必要的商品信息,即可完成商品入庫。商品圖片上傳用戶可以上傳相應(yīng)商品的圖片。圖片上傳后文件名將以其原文件名加上所選商品的pro_id〔商品號〕保存,這樣就不會出現(xiàn)圖片重名的問題。3.2.2后臺管理功能本次畢業(yè)設(shè)計主要運(yùn)用的技術(shù):ASP.NET、SQLSERVER、C#、ADO.NET等。本人主要負(fù)責(zé)系統(tǒng)數(shù)據(jù)管理模塊設(shè)計與開發(fā),擔(dān)任系統(tǒng)管理員的角色。對于此局部,主要做的工作和實現(xiàn)的功能如下:分析B2C交易的商務(wù)模式,設(shè)計校園B2C交易系統(tǒng)的運(yùn)行模式;應(yīng)用VisualStutio2005Express以及SQLServer2005Express對系統(tǒng)進(jìn)行開發(fā),重點的開發(fā)工作為系統(tǒng)管理員的角色功能;應(yīng)用ASP.NET及C#進(jìn)行界面的設(shè)計。了解軟件開發(fā)的根本流程。設(shè)計并建立關(guān)系數(shù)據(jù)庫,創(chuàng)立商品查詢、訂單商品數(shù)量觸發(fā)器。測試完成后,提供應(yīng)小組其他成員。設(shè)計訂單查詢界面,實現(xiàn)對訂單信息的管理和統(tǒng)計等功能。3.3功能實現(xiàn)3.3.1商品查詢及類別瀏覽功能的實現(xiàn)商品查詢功能的實現(xiàn)是系統(tǒng)功能的主要組成局部。在這里,數(shù)據(jù)的綁定使用了ASP.NET.2.0中的GridView控件。作為DataGrid的改良版,GridView不僅在功能上更加強(qiáng)大,界面更加友好,更重要的是有些在DataGrid要實現(xiàn)的功能需要另外編寫代碼,比方實現(xiàn)Paging,而在GridView中只需用戶選項即可完成,節(jié)約了用戶大量的精力。商品的模糊查詢也是基于GridView控件中選擇數(shù)據(jù)源,在其中添加相關(guān)查詢SQL語句。語句中使用了查詢變量〔如@pro_id〕和“l(fā)ike〞和“%〞字符匹配符,這是實現(xiàn)模糊查詢的關(guān)鍵。如圖3.2所示:圖3.2查詢語句此外,因為SQL語句的書寫特性,對用戶在查詢欄中輸入的個別字符〔如'〕會產(chǎn)生誤解,無法識別“'〞究竟是語法中的符號還是查詢關(guān)鍵字,最終導(dǎo)致編譯錯誤。鑒于此,應(yīng)該在用戶輸入非法字符時,系統(tǒng)停止編譯,并給用戶提示。綜上,為防止此類情況發(fā)生,在關(guān)鍵字輸入欄綁定了驗證控件:RegularExpressionValidator。它的作用主要是檢查被驗證控件的值是否匹配正那么表達(dá)式定義的模式。這類驗證用于檢查可預(yù)知的字符序列。完成驗證的正那么表達(dá)式為:[^']*。其中,“^'〞含義是不許出現(xiàn)“'〞字符,“*〞含義是匹配前面的子表達(dá)式零次或?qū)掖蝃6]。實現(xiàn)后的界面顯示如圖3.3所示:圖3.3驗證非法字符界面此外,關(guān)鍵字輸入欄還綁定了RequiredFieldValidator驗證空間,驗證查詢欄是否有信息,防止用戶空查詢。實現(xiàn)后的界面顯示如圖3.4所示:圖3.4驗證空信息界面后臺代碼如下:stringkeytext;protectedvoidPage_Load(objectsender,EventArgse){if(Page.PreviousPage!=null)//接受查詢的文本值{TextBoxSourceTextBox=(TextBox)Page.PreviousPage.FindControl("seek");if(SourceTextBox!=null){keytext=SourceTextBox.Text;Session["keytext"]=keytext;}}}intcount;protectedvoidseek_Click1(objectsender,EventArgse){keytext=keys.Text;Session["keytext"]=keytext;SqlConnectionconn=newSqlConnection();conn.ConnectionString=ConfigurationManager.ConnectionStrings["GoodsConnectionString"].ToString();stringsql="selectcount(*)fromproductsWHERE(([pro_brand]LIKE'%"+keys.Text+"%')OR([pro_ifo]LIKE'%"+keys.Text+"%')OR([pro_name]LIKE'%"+keys.Text+"%')OR([pro_model]LIKE'%"+keys.Text+"%')OR([pro_id]LIKE'%"+keys.Text+"%'))";SqlCommandcmd1=newSqlCommand(sql,conn);conn.Open();count=Convert.ToInt32(cmd1.ExecuteScalar().ToString());conn.Close();if(count==0){Response.Write("<scriptlanguage='javascript'>");Response.Write("alert('沒有您要搜索的記錄');");Response.Write("<"+"/script>");}else{this.Label1.Text=Convert.ToString(count);}除了上述的功能,后臺代碼主要完成對查詢出的記錄數(shù)進(jìn)行統(tǒng)計,當(dāng)無相關(guān)記錄時,彈出對話框提示用戶“沒有您要搜索的記錄〞。運(yùn)行界面如圖3.5所示:圖3.5商品查詢界面上面所講的商品查詢中的數(shù)據(jù)綁定是基于GridView的前臺綁定,類別瀏覽功能中的數(shù)據(jù)綁定是在后臺用DataSet綁定的。DataSet數(shù)據(jù)集是在內(nèi)存中的緩存,工作時是與數(shù)據(jù)庫斷開的,可以看做是存放數(shù)據(jù)的容器。相比之下,DataReader讀取數(shù)據(jù)是基于連接的,必須逐行順序且只讀性的訪問數(shù)據(jù),如果想任意訪問某行數(shù)據(jù),或者要對數(shù)據(jù)進(jìn)行修改等操作,DataReader就很不方便了。DataSet是System.Data命名空間的成員,不是.NETFramework數(shù)據(jù)提供程序的組成局部。DataAdapter對象是數(shù)據(jù)源于DataSet的連接橋梁,它可以把數(shù)據(jù)源中的數(shù)據(jù)填充到DataSet中,也可以把DataSet的數(shù)據(jù)更新到數(shù)據(jù)源中。將數(shù)據(jù)綁定到DataSet并其顯示出來的代碼如下:SqlConnectionconn=newSqlConnection();conn.ConnectionString=ConfigurationManager.ConnectionStrings["GoodsConnectionString"].ToString();stringsm;sm="select*fromproducts";SqlDataAdapteradapter=newSqlDataAdapter(sm,conn);DataSetdata=newDataSet();adapter.Fill(data);this.GridView1.DataSource=data;this.GridView1.DataBind();對于用戶如何選擇瀏覽商品類型的功能實現(xiàn),本人在此運(yùn)用了DropDownList控件,根據(jù)用戶選擇的類別名,控件傳遞相應(yīng)的類別號,據(jù)此執(zhí)行相應(yīng)的SQL語句,完成類別瀏覽。代碼如下:protectedvoidDropDownList1_SelectedIndexChanged(objectsender,EventArgse){SqlConnectionconn=newSqlConnection();conn.ConnectionString=ConfigurationManager.ConnectionStrings["GoodsConnectionString"].ToString();stringsql;inttyp_id=int.Parse(this.DropDownList1.SelectedValue);if(typ_id==1){sql="select*fromproducts";}else{sql="SELECT*FROMproductsWHERE([typ_id]="+typ_id+")";}SqlDataAdapteradapter=newSqlDataAdapter(sql,conn);DataSetdata=newDataSet();adapter.Fill(data);this.GridView1.DataSource=data;this.GridView1.DataBind();intnum=Convert.ToInt32(this.DropDownList1.SelectedValue);if(typ_id!=1){SqlCommandcmd=newSqlCommand("selectcount(*)fromproductswheretyp_id=@type_id",conn);cmd.Parameters.Add(newSqlParameter("@type_id",SqlDbType.Int));cmd.Parameters["@type_id"].Value=num;conn.Open();this.Label1.Text=Convert.ToString(cmd.ExecuteScalar());conn.Close();}protectedstringsqltext(){stringsql;inttyp_id=int.Parse(this.DropDownList1.SelectedValue);if(typ_id==1){sql="select*fromproducts";}else{sql="SELECT*FROMproductsWHERE([typ_id]="+typ_id+")";returnsql;}}此外,商品中可能會存在數(shù)量等于0的記錄,這樣的商品是無法進(jìn)行交易的。因此為了使用戶一目了然,在此運(yùn)用了GridView中的RowDataBound事件,實現(xiàn)當(dāng)商品的數(shù)量為0時,在頁面上顯示不同顏色的功能。相關(guān)代碼如下:protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){if(e.Row.RowType==DataControlRowType.DataRow)pro_num=Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,"pro_num"));if(pro_num==0)e.Row.BackColor=Color.BurlyWood;if(e.Row.RowIndex==-1)e.Row.BackColor=Color.CadetBlue;}運(yùn)行界面如圖3.6所示:圖3.6類別瀏覽界面3.3.2新品入庫的功能實現(xiàn)新品入庫實際上就是對商品表進(jìn)行商品信息添加。此功能實現(xiàn)的關(guān)鍵是Insert語句的正確寫法和變量的定義;另外要注意,數(shù)據(jù)庫中設(shè)置的非空字段,在填寫時要設(shè)為必填項,可用驗證控件RequiredFieldValidator對其進(jìn)行綁定;對于某些項的數(shù)據(jù)類型,也要用驗證控件RegularExpressionValidator對其進(jìn)行綁定,限制用戶輸入的數(shù)據(jù)類型。用戶在填寫表單時,可以在下拉框中選擇商品所屬類別。這是用DropDownList控件在數(shù)據(jù)源中綁定的,頁面顯示為typ_name(類別名)選項,當(dāng)用戶選擇時傳遞的是相應(yīng)typ_name(類別名)的typ_id(類別號)。代碼如下:protectedvoidButton1_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection();conn.ConnectionString=ConfigurationManager.ConnectionStrings["GoodsConnectionString"].ToString();stringqueryStr="insertintoproducts(pro_name,typ_id,pro_brand,pro_num,pro_model,pro_price,pro_ifo)values(@pro_name,@typ_id,@pro_brand,@pro_num,@pro_model,@pro_price,@pro_ifo)";SqlCommandaddcmd=newSqlCommand(queryStr,conn);addcmd.Parameters.Add("@pro_name",SqlDbType.NVarChar,50).Value=name.Text;addcmd.Parameters.Add("@pro_brand",SqlDbType.NVarChar,20).Value=brand.Text;addcmd.Parameters.Add("@pro_num",SqlDbType.Float,6).Value=Convert.ToDouble(nums.Text);addcmd.Parameters.Add("@pro_price",SqlDbType.Money,4).Value=price.Text;addcmd.Parameters.Add("@pro_ifo",SqlDbType.NVarChar,200).Value=detail.Text;addcmd.Parameters.Add("@pro_model",SqlDbType.NVarChar,20).Value=model.Text;addcmd.Parameters.Add("@typ_id",SqlDbType.Int,4).Value=type.SelectedItem.Value;try{conn.Open();addcmd.ExecuteNonQuery();conn.Close();Response.Write("<scriptlanguage='javascript'>");Response.Write("alert('新品已入庫!');");Response.Write("<"+"/script>");ClearText();}catch{Response.Write("<scriptlanguage='javascript'>");Response.Write("alert('新品無法入庫!');");Response.Write("<"+"/script>");}}protectedvoidClearText(){name.Text="";brand.Text="";nums.Text="";model.Text="";price.Text="";detail.Text="";}其中,pro_name(商品名)和pro_num(商品數(shù)量)為必填項,因為數(shù)據(jù)庫中這兩個字段是不允許為空的。當(dāng)用戶上傳成功時,會彈出對話框給用戶提示“新品已入庫!〞函數(shù)ClearText()的作用是上傳成功后,調(diào)用其清空用戶填寫的信息。運(yùn)行界面如圖3.7所示:圖3.7新品入庫界面3.3.3商品圖片上傳的功能實現(xiàn)在這局部功能的實現(xiàn)難點主要是驗證用戶是否上傳、上傳文件的類型〔是否為圖片類型〕,以及存儲圖片時可能導(dǎo)致的重名問題。對此,本人運(yùn)用了ASP.NET.2.0中的FileUpload控件,并用DropDownList控件綁定商品名,用來對上傳圖片的重命名。因為DropDownList實際上綁定的是Products(商品表)中的pro_id(商品號),所以在上傳圖片的原文件名前加上相應(yīng)的、唯一的pro_id(商品號),這樣就可以防止當(dāng)圖片數(shù)量多時可能引起的重名問題。代碼如下:protectedvoidupload_Click(objectsender,EventArgse){BooleanfileOK=false;stringuploadpath=Server.MapPath("images/");stringfileExtension=System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();if(FileUpload1.HasFile){String[]allowedExtensions={".gif",".png",".jpeg",".jpg"};for(inti=0;i<allowedExtensions.Length;i++){if(fileExtension==allowedExtensions[i]){fileOK=true;}}}if(fileOK){stringfileName=FileUpload1.FileName;uploadpath+=prolist.SelectedItem.Value;uploadpath+=fileName;FileUpload1.SaveAs(uploadpath);Response.Write("<scriptlanguage='javascript'>");Response.Write("alert('上傳成功!');");Response.Write("<"+"/script>");}else{Response.Write("<scriptlanguage='javascript'>");Response.Write("if(confirm('上傳失敗!是否重傳?')){}else{history.go(-2)}");Response.Write("<"+"/script>");}}其中,調(diào)用HasFile函數(shù)判斷用戶是否上傳文件,如果存在上傳文件那么判斷此文件名的后綴名是否符合圖片的格式。當(dāng)條件都符合后,在圖片名前加上所選的pro_name(商品名)的pro_id(商品號),保存在指定文件下。運(yùn)行界面如圖3.8所示:

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論