![客戶關(guān)系管理系統(tǒng)的設(shè)計_第1頁](http://file4.renrendoc.com/view/6dae1ded127581b98fce0d4f5c8d3d93/6dae1ded127581b98fce0d4f5c8d3d931.gif)
![客戶關(guān)系管理系統(tǒng)的設(shè)計_第2頁](http://file4.renrendoc.com/view/6dae1ded127581b98fce0d4f5c8d3d93/6dae1ded127581b98fce0d4f5c8d3d932.gif)
![客戶關(guān)系管理系統(tǒng)的設(shè)計_第3頁](http://file4.renrendoc.com/view/6dae1ded127581b98fce0d4f5c8d3d93/6dae1ded127581b98fce0d4f5c8d3d933.gif)
![客戶關(guān)系管理系統(tǒng)的設(shè)計_第4頁](http://file4.renrendoc.com/view/6dae1ded127581b98fce0d4f5c8d3d93/6dae1ded127581b98fce0d4f5c8d3d934.gif)
![客戶關(guān)系管理系統(tǒng)的設(shè)計_第5頁](http://file4.renrendoc.com/view/6dae1ded127581b98fce0d4f5c8d3d93/6dae1ded127581b98fce0d4f5c8d3d935.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第15章客戶關(guān)系管理系統(tǒng)CRM的設(shè)計CRM的英文是CustomerRelationshipManagement,中文為“客戶關(guān)系管理”。CRM軟件的主要目的就是通過對客戶詳細(xì)資料的深入分析,來提高客戶滿意程度,從而提高企業(yè)的競爭力的一種手段。網(wǎng)絡(luò)時代的客戶關(guān)系管理是利用現(xiàn)代信息手段,在企業(yè)與用戶之間建立一種實時的交互管理系統(tǒng)。本章主要講解客戶關(guān)系管理系統(tǒng)的設(shè)計,設(shè)計流程如圖15-1所示。圖15-1客戶關(guān)系管理系統(tǒng)設(shè)計流程15.1CRM的分類和價值體現(xiàn)15.1.1CRM的分類CRM系統(tǒng)有三種類型:操作型、分析型和協(xié)同型。(1)操作型CRM:主要方便與客戶的交流,簡化操作流程。利用業(yè)務(wù)系統(tǒng)以及渠道系統(tǒng)收集的客戶信息,進(jìn)行深層次的挖掘,提升系統(tǒng)的業(yè)務(wù)價值。(2)分析型CRM:了解客戶的需求,比如新業(yè)務(wù)有沒有客戶群、如何吸引他們、如何創(chuàng)造更高價值、潛在客戶群是什么類型等等。分析型CRM強(qiáng)調(diào)對各種數(shù)據(jù)的分析,并從中獲得有價值的信息。其主要包括的模塊類型應(yīng)為客戶分析、客戶分析、數(shù)據(jù)管理和市場定向,核心是分析已發(fā)生的事情,同時根據(jù)歷史數(shù)據(jù)和數(shù)據(jù)挖掘技術(shù),預(yù)測即將發(fā)生的事情。(3)協(xié)同型CRM:整合各種職能,協(xié)調(diào)各個部門之間的聯(lián)系。協(xié)同型CRM其實可以算是輔助型軟件,主要實現(xiàn)的是數(shù)據(jù)共享和業(yè)務(wù)協(xié)同。CRM軟件系統(tǒng)主要表現(xiàn)在這三個層面:第一層操作型CRM;第二層分析型CRM;第三層協(xié)同型CRM。15.1.2CRM的價值體現(xiàn)CRM的價值主要體現(xiàn)在:(1)通過對用戶信息資源的整合,在企業(yè)內(nèi)部達(dá)到資源共享,從而為客戶提供更快速周到的優(yōu)質(zhì)服務(wù),吸引和保持更多的客戶。(2)通過對業(yè)務(wù)流程的重新設(shè)計,更有效地管理客戶關(guān)系,降低企業(yè)成本。(3)通過滿足客戶的個性需求,提高客戶的忠誠度和保有率。(4)根據(jù)對客戶特征、購買行為和價值取向的深入分析,為企業(yè)的決策提供科學(xué)、量化的指導(dǎo)。(5)客戶及其所有關(guān)聯(lián)信息,均得到合理的分類和管理。(6)分析競爭對手,改善客戶關(guān)系,增加企業(yè)收益。企業(yè)根據(jù)CRM的分類和價值體現(xiàn)體現(xiàn),選擇合適的客戶關(guān)系管理軟件。15.2企業(yè)的CRM需求分析一個軟件的成功離不開一個好的需求分析,其處于軟件開發(fā)的初期階段,直接影響到后期的模塊設(shè)計。15.2.1企業(yè)的需求列表本例的客戶關(guān)系管理系統(tǒng),是為中小型軟件公司定制的一款操作型CRM。軟件公司結(jié)合自身業(yè)務(wù)特點,提出了下列需求:(1)詳細(xì)的客戶資料庫,并能實現(xiàn)按照不同信息進(jìn)行查詢,允許添加、修改。(2)客戶按照不同地域劃分。地域主要分為5大區(qū)域:華東、華北、東北、西北、華南,每個區(qū)域下面包含幾個主要的一級城市。(3)客戶分為三種狀態(tài):已簽約、跟進(jìn)、終止合同。(4)客戶分為不同的等級:有效客戶、潛在客戶、意向客戶。(5)公司內(nèi)部部門列表,并能列出部門內(nèi)部的人員。(6)公司競爭對手資料庫,允許實現(xiàn)查找、添加等功能。(7)允許公司成員隨時都能查看公告。允許任何人發(fā)布公告信息。(8)公司成員根據(jù)每天的工作情況填寫工作日志。(9)銷售人員每天將聯(lián)系的用戶信息登記到聯(lián)系記錄表。(10)實施人員每周提交自己的工作任務(wù)和計劃。(11)專門設(shè)立投訴功能,處理用戶的投訴信息,并有相應(yīng)的回訪記錄。(12)專門設(shè)立用戶需求庫,處理用戶需要的功能列表。開發(fā)人員要每天查看,并由具體負(fù)責(zé)人給出處理意見。(13)實施人員每次實施完畢后,要登記實施記錄表,并填寫實施總結(jié)。(14)客戶資料庫的聯(lián)系人和電話要求是客戶公司信息,可單獨建立聯(lián)系人資料庫,記錄所有與公司有關(guān)系的人的資料。項目經(jīng)理或者系統(tǒng)分析員以Excel表的形式,羅列出用戶的所有需求,上報給開發(fā)項目組討論。15.2.2分析企業(yè)的需求項目經(jīng)理根據(jù)呈報的用戶需求列表,召集項目組成員,安排項目的分工情況,由項目小組組長主持需求分析的會議。仔細(xì)分析需求列表中的每一條,不明白的地方,要提出來大家分析,并做會議記錄,由分析人員去跟用戶確認(rèn)。下面列表體現(xiàn)分析時的不確定因素:(1)詳細(xì)的客戶資料。詳細(xì)到什么程度,主要包括客戶的哪些信息?(2)5大區(qū)域是固定在數(shù)據(jù)庫中的信息,還是允許用戶自定義。(3)發(fā)布公告信息的需求是否與當(dāng)前OA系統(tǒng)沖突。(4)是否由專人處理客戶的投訴信息。(5)權(quán)限的主要劃分依據(jù)是什么?(6)與其他現(xiàn)存系統(tǒng)是否掛鉤?(7)數(shù)據(jù)庫的選擇標(biāo)準(zhǔn),是否根據(jù)已有硬件系統(tǒng)決定。以上只是列出了需求分析的一些比較淺顯的內(nèi)容,在實際業(yè)務(wù)中,每一條需求都要仔細(xì)的斟酌,列出所有的疑問點,否則出現(xiàn)漏洞,引起用戶不滿或者程序返工,都將提高軟件的工作成本。15.2.3體驗企業(yè)業(yè)務(wù)流程并確定最終需求根據(jù)需求分析會議討論的內(nèi)容和筆記,分析人員親自到用戶處,親身體驗企業(yè)的工作流程,與企業(yè)負(fù)責(zé)人員詳細(xì)討論每一條需求,并最終確定需求,與企業(yè)簽定合同。CRM系統(tǒng)需求的最終修改如下:(1)詳細(xì)的客戶資料,包括客戶名稱、使用的軟件版本、客戶地址、客戶的行業(yè)類型、電話、主要聯(lián)系人和客戶所在區(qū)域。(2)5大區(qū)域由用戶自己添加,并可實現(xiàn)編輯。(3)CRM中不實現(xiàn)公告管理功能,OA系統(tǒng)已經(jīng)實現(xiàn)。(4)投訴信息的處理,由投訴部人員決定(5)暫時不實現(xiàn)權(quán)限管理。(6)與其他系統(tǒng)無任何聯(lián)系。(7)數(shù)據(jù)庫使用SQLServer系統(tǒng)。需求列表中的其他內(nèi)容不變。確定需求后,開始設(shè)計系統(tǒng)的模塊。15.3系統(tǒng)模塊設(shè)計需求分析之后,項目小組討論需求的實現(xiàn)工具和方法,詳細(xì)討論需求并確定最終模塊的劃分。15.3.1根據(jù)需求確定模塊內(nèi)容根據(jù)需求列表和功能相似的原則,將整個系統(tǒng)分成4個模塊:基礎(chǔ)配置模塊、客戶管理
模塊、員工管理模塊和客戶服務(wù)管理模塊。下面具體介紹這些模塊所包含的內(nèi)容。(1)基礎(chǔ)配置模塊:主要包括一些系統(tǒng)需要的基礎(chǔ)設(shè)置。有區(qū)域、客戶等級、客戶業(yè)務(wù)類型、客戶狀態(tài)和部門設(shè)置5部分。公司主要有4個部門:開發(fā)部、銷售部、測試部和客服部。模塊的結(jié)構(gòu)圖如15-2所示。圖15-2圖15-2基礎(chǔ)配置模塊組成(2)客戶管理模塊:主要處理客戶的一些資料,以及與公司有關(guān)系的一些聯(lián)系人的信息。該模塊的結(jié)構(gòu)如圖15-3所示。|客戶管理模塊|聯(lián)系人的管理客戶資料的管理聯(lián)系人的管理客戶資料的管理圖15-3客戶管理模塊組成(3)成員管理模塊:主要用于管理公司內(nèi)部的人員。包括人員的基本資料、工作日志、任務(wù)計劃等。該模塊的結(jié)構(gòu)如圖15-4所示。圖15-4圖15-4成員管理模塊組成(4)客戶服務(wù)管理模塊:主要處理一些與客戶溝通的信息。包括客戶需求的處理、客戶投訴的處理、客戶實施記錄、合同管理等,該模塊的結(jié)構(gòu)如圖15-5所示??蛻舴?wù)管理需求登記投訴需求登記投訴回訪——實施管理合同管理工需求處理意見圖15-5客戶服務(wù)管理模塊組成模塊劃分完畢后,根據(jù)模塊的內(nèi)容,進(jìn)行類圖的設(shè)計。15.3.2分析功能模塊并設(shè)計類圖在實際流程中,要求每個功能都設(shè)計一個類,通常稱為面向?qū)ο笤O(shè)計。根據(jù)上一節(jié)中模塊功能的介紹,現(xiàn)在為功能設(shè)計類,并以圖形化的方式表示?;A(chǔ)配置模塊:基礎(chǔ)配置模塊完成一些必要的基本配置,功能相似,本實例設(shè)計一個基礎(chǔ)配置類,來實現(xiàn)其功能?;A(chǔ)配置模塊的主要功能包括:添加區(qū)域、城市、獲取區(qū)域ID,添加客戶等級、狀態(tài)和業(yè)務(wù)類型,添加部門。為模塊設(shè)計一個類,命名為BasicSet,圖15-6說明了類中的方法和方法的參數(shù),其中還包括參數(shù)的類型°In表示是輸入?yún)?shù),out表示輸出參數(shù)。BasicSet+AddArea(inareaname:string):bool+AddCity(incityname:string):bool+GetAreaID(inareaname:string,outareaid:int):int+AddGrade(ingradename:string):bool+AddState(instatename:string):bool+AddType(intypename:string):bool+AddDepart(indepartname:string):bool圖15-6基礎(chǔ)配置類靜態(tài)類圖客戶管理模塊:主要包括兩大功能,客戶的管理和聯(lián)系人的管理。考慮到客戶和聯(lián)系人的屬性比較多,采用實體設(shè)計的模式完成其設(shè)計。兩大功能分別包含兩個類:實體類和實體方法類??蛻粜畔嶓w類,如圖15-7所示??蛻魧嶓w方法類,如圖15-8所示。聯(lián)系人信息實體類,如圖15-9所示。聯(lián)系人實體方法類,如圖15-10所示。UserInfoEntity-UserName+SoftVersion:string+UserGrade:string+UserState:string+UserType:string+City:string+Address:string+Linkman:string+Phone:string+Fax:string+QQ:string+Mail:string+PeopleAmount:int圖15-7客戶信息實體類圖UserInfoDA+InsertUser(inuser:UserInfoEntity):bool-GetCityID(incityname:string,outcityid:int):int-GetStateID(instatename:string,outstateid:int):int-GetTypeID(intypename:string,outtypeid:int):int-GetStateID(instatename:string,outstateid:int):int-GetParameters():sqlparameter圖15-8客戶信息實體方法類圖LinkmanEntity+Name:string+Sex+Phone:string+QQ:string+Mail:string+Birthday+Like:string+CompanyName:string+Note:string圖15-9聯(lián)系人信息實體類圖LinkmanDA+InsertLinkman(inlinkman:LinkmanEntity):bool-GetParameters():sqlparameter+GetBirthMan():datetime+GetCompanyID(incompanyname:string,outcompanyid:int):int圖15-10聯(lián)系人信息實體方法類圖
注意:實體方法類實現(xiàn)了對實體類的調(diào)用。(3)成員管理模塊:管理內(nèi)部員工,主要包括員工的添加和員工所在部門的設(shè)置。使用實體設(shè)計模式實現(xiàn)其功能。成員信息實體類,參考類圖15-11。成員信息實體方法類圖,參考圖15-12EmployeeEntity+Name:string+Phone:string+Sex:string+Mail:string+Depart:string+Birthday:DateTime+Note:string圖15-11員工信息實體方法類圖EmployeeDA+InsertEmployee(inemployee:EmployeeEntity):bool+GetDepartID(indepartname:string,outdepartid:int):int+GetParameters():SqlParameter圖15-12員工信息實體方法類圖(4)客戶服務(wù)管理模塊:主要包括的方法有添加投訴、登記需求、簽訂合同和登記實施項目等,還有日志管理、任務(wù)管理和聯(lián)系記錄管理3個大的功能。為了減少代碼冗余,3個功能用實體類設(shè)計模式,而其他4個方法統(tǒng)一放在一個客戶服務(wù)操作類中。受版面限制,本模塊的所有類圖設(shè)計,請參考隨書光盤。類圖設(shè)計完畢后,準(zhǔn)備進(jìn)行系統(tǒng)數(shù)據(jù)庫的設(shè)計。15.4數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計主要考慮如何以最簡單的關(guān)系存儲數(shù)據(jù)信息,而且數(shù)據(jù)表之間的關(guān)聯(lián)必須正確的體現(xiàn)。15.4.1數(shù)據(jù)庫的表信息根據(jù)需求列表和功能設(shè)計,將需要的信息分類,保存在不同的表中。下面分別介紹這些表。(1)區(qū)域表:主要內(nèi)容是區(qū)域名稱。表結(jié)構(gòu)如表15-1所示。表15-1區(qū)域表(Area)信息ArealDint(自增長列)區(qū)域IDAreaNamenvarchar(20)區(qū)域名稱(2)城市表:包括城市名稱和所屬區(qū)域的ID。該表與區(qū)域表相關(guān)聯(lián),結(jié)構(gòu)如表15-2所示,其中PK表示主鍵,F(xiàn)K表示外鍵。表15-2城市表(City)信息CitvIDint(自增長列)城市IDAreaIDint區(qū)域IDCitvNamenvarchar(20)城市名稱(3)客戶等級表:主要是區(qū)別客戶是否與公司存在合同關(guān)系,或是否正準(zhǔn)備與公司簽訂合同等。目前主要有三個級別:潛在、意向、有效。結(jié)構(gòu)如表15-3所示。表15-3客戶等級表(UserGrade)信息GradeIDint(自增長列)等級IDGradeNamenvarchar(20)等級名稱(4)客戶業(yè)務(wù)類型表:主要是列出客戶的經(jīng)營范圍,所屬行業(yè)。結(jié)構(gòu)如表15-4所示。表15-4客戶業(yè)務(wù)類型表(UserType)信息TvneIDint(自增長列)類型IDTvpeNamenvarchar(20)類型名稱(5)客戶狀態(tài)表:一般針對客戶等級為意向的用戶群。主要狀態(tài)有跟進(jìn)和簽約。結(jié)構(gòu)如表15-5所示。表15-5客戶狀態(tài)表(UserState)信息StateIDint(自增長列)狀態(tài)IDStateNamenvarchar(20)狀態(tài)名稱(6)部門表:列出公司的主要組織結(jié)構(gòu)名稱,結(jié)構(gòu)如表15-6所示。表15-6部門表(Department)信息DepartIDint(自增長列)部門IDDepartNamenvarchar(20)部門名稱(7)客戶資料表:詳細(xì)描述用戶信息的表。該表與多個基礎(chǔ)設(shè)置表有關(guān)聯(lián),結(jié)構(gòu)如表15-7所示。表15-7客戶資料表(UserInfo)信息
UserIDint(自增長列)客戶^CitylDint城市IDGradelDint客戶等級IDTypelDint客戶業(yè)務(wù)類型IDStateIDint客戶狀態(tài)IDUserNamenvarchar(20)客戶名稱UserAddressnvarchar(100)客戶聯(lián)系地址SoftVersionnvarchar(50)所用軟件版本UserLinkmannvarchar(20)客戶的主要聯(lián)系人UserPhonenvarchar(20)客戶的聯(lián)系電話Emailnvarchar(20)郵箱QQnvarchar(20)QQ號Faxnvarchar(20)傳真PeopleAmountint公司人員規(guī)模(8)聯(lián)系人表:與公司有關(guān)的人的詳細(xì)資料,結(jié)構(gòu)如表15-8所示。聯(lián)系人通過UserID與用戶資料表進(jìn)行關(guān)聯(lián),表示此聯(lián)系人屬于公司的客戶。為了提高數(shù)據(jù)庫的訪問速度,此處用bit類型表示性別,0表示男,1表示女。Bit類型有且只有這兩個值。表15-8聯(lián)系人表(Linkman)信息LinkmanIDint(自增長列)聯(lián)系人【。UserIDint聯(lián)系人所屬公司LinkmanNamenvarchar(20)聯(lián)系人名稱LinkmanPhonenvarchar(20)電話LinkmanEmailnvarchar(20)郵箱LinkmanQQnvarchar(20)QQ號LinkmanBirthdaydatetime聯(lián)系人的生日LinkmanLikenvarchar(50)聯(lián)系人的業(yè)務(wù)愛好LinkmanSexbit性別Notenvarchar(50)各注(9)員工資料表:包括公司所有雇員的信息,結(jié)構(gòu)如表15-9所示。通過DepartID與部門表關(guān)聯(lián)。表15-9員工資料表(Employeeinfo)信息EmployeeIDint(自增長列)員工IDDepartIDint員工所屬部門EmployeeNamenvarchar(20)聯(lián)系人名稱EmployeePhonenvarchar(20)電話EmployeeEmailnvarchar(20)郵箱EmployeeBirthdaydatetime聯(lián)系人的生日EmployeeSexbit性別Notenvarchar(50)備注(10)工作日志表:包含所有員工登記的工作日志記錄。結(jié)構(gòu)如表15-10所示。表15-10工作日志表(WorkLog)信息LogIDint(自增長列)日志IDEmployeeIDint人員IDLogTitlenvarchar(20)日志主題LogContentnvarchar(100)日志內(nèi)容(11)聯(lián)系記錄表:登記銷售人員每天的工作情況,主要記錄聯(lián)系客戶的時間和內(nèi)容。結(jié)構(gòu)如表15-11所示。表15-11工作日志表(LinkRecord)信息LinkRecordIDint(自增長列)日志ID
EmploveelDint人員1。UserIDint客戶IDLinkDatedatetime聯(lián)系時間LinkNotenvarchar(100)聯(lián)系內(nèi)容摘要(12)計劃任務(wù):針對實施人員制定的一個計劃安排表,結(jié)構(gòu)如表15-12所示。表15-12計劃任務(wù)表(Task)信息TaskIDint(自增長列)任務(wù)IDEmploveelDint人員IDUserIDint客戶IDTaskTimenvarchar(20)任務(wù)主題TaskBiginDatedatetime任務(wù)開始日期TaskEndDatedatetime任務(wù)結(jié)束日期TaskNotenvarchar(100)任務(wù)內(nèi)容摘要(13)投訴處理表:顯示所有的投訴信息和處理意見,結(jié)構(gòu)如表15-13所示。表15-13投訴處理表(Notion)信息NotionIDint(自增長列)投訴IDEmploveeIDint處理人員IDUserIDint投訴客戶【。NotionContentnvarchar(100)投訴內(nèi)容HandleContentnvarchar(100)處理意見NotionDatedatetime投訴日期HandleDatedatetime處理日期(14)需求處理表:顯示用戶的新需求和開發(fā)人員給予的處理意見,結(jié)構(gòu)如表15-14所/示O表15-14需求處理表(Requirement)信息RequirementIDint(自增長列)需求IDEmploveeIDint處理人員IDUserIDint需求客戶IDRequirementcontentnvarchar(100)需求內(nèi)容HandleContentnvarchar(100)處理意見RequirementDatedatetime需求登記日期HandleDatedatetime處理日期(15)實施表:記錄實施人員每次的實施情況,結(jié)構(gòu)如表15-15所示。表15-15實施表(Implement)信息ImplementIDint(自增長列)實施IDEmploveeIDint實施人員IDUserIDint被實施客戶IDSoftVersionnvarchar(20)實施軟件的版本ImplementBiginDatedatetime實施開始日期ImplementEndDatedatetime實施結(jié)束日期ImplementSumUpnvarchar(100)實施總結(jié)Notenvarchar(100)備注(16)合同表:管理與用戶之間的合同,主要用于合同到期時的提醒功能,結(jié)構(gòu)如表15-16所示。表15-13合同表(Bargain)信息BargainIDint(自增長列)任務(wù)IDEmploveeIDint簽合同人員IDUserIDint合同簽訂對象ID
BargainBiginDatedatetime合同開始日期BargainEndDatedatetime合同結(jié)束日期BargainNotenvarchar(100)合同內(nèi)容摘要說明:在數(shù)據(jù)庫的設(shè)計中,類似于區(qū)域設(shè)置、客戶狀態(tài)設(shè)置等這種表,被稱為字典表,表示預(yù)先設(shè)置好的各種選項。15.4.2數(shù)據(jù)庫的表關(guān)系數(shù)據(jù)表之間的關(guān)系,通過ID來關(guān)聯(lián),因為每個表的ID都具有唯一性。主鍵表示本表內(nèi)部的唯一鍵值,外鍵表示本表與其他表之間的關(guān)聯(lián)ID。根據(jù)功能設(shè)計和表結(jié)構(gòu),現(xiàn)在分析這些表之間的關(guān)聯(lián)。(1)本實例是客戶關(guān)系管理系統(tǒng),所以客戶表幾乎與所有的表都有關(guān)系,都通過主鍵UserID與其他表關(guān)聯(lián)。圖15-13所示的是客戶表通過UserID相關(guān)聯(lián)的表。在其他表中都有一個名為UserID的字段,表示外鍵。VsexlnfoE&rgainJiarcaiuII1IrnployVsexlnfoE&rgainJiarcaiuII1IrnployeIII[Jserlli:LiiLkRccord.Keq-aireBentEB.diLniremenitIIIrnplo?eelll[Jserlli:IrnnlcyialU[JscrlD圖15-13通過UserID關(guān)聯(lián)的表(2)客戶表中的資料非常詳細(xì),但并不是所有內(nèi)容都必須登記在其中的,為了減少數(shù)據(jù)冗余,并且維護(hù)方便,設(shè)計時將城市、客戶等級、客戶業(yè)務(wù)類型和客戶狀態(tài)4個類型單獨列出來,并分別為其設(shè)計一個表,用于存儲信息。并將這4個表的主鍵保存在客戶表中,作為客戶表的外鍵。其關(guān)系如圖15-14所示。Userlnfo0CTserlliCityIIItrddeIPUserlnfo0CTserlliCityIIItrddeIP51a.teIDTraillUscrlamc□"=erld.dxess£■:■ft!rersie-nUstriiniminUserriic-iLdItillQQFaiFe-:'D1el_n>='TiiitierTypeTjucIIiTjpelTame1UserState業(yè)Sta_trill1EtltdlTimi!UeerGradeCityCitripItea.HiCityMima:&VGTa-ddlHIjia.drlTiinio在數(shù)據(jù)庫中還有一個很重要的表:員工表,從功能模塊圖中可以發(fā)現(xiàn),每個操作功能都有員工的參與,根據(jù)模塊圖,設(shè)計員工表與其他表之間的關(guān)系,如圖15-15所示。所有關(guān)聯(lián)表的外鍵都是EmployeeZDoLinkKecord&LinilecorilHEmjil>:>7i:elli—[I=B=rIHLiniHiteRequirenent<3B.eilTLircmen-tIIImoloyeell>ETscrlDB.eilTLiremenlConlRequirenent<3B.eilTLircmen-tIIImoloyeell>ETscrlDB.eilTLiremenlConl—■lapleHaikt0ImjiIcni^iLtll1Imjil-:-ydeILU=£TIHfircrsiwiL▲▼Enployeelnfo^^elD.Ilciia.rtIDInnIo?eeHimeImji1':'7eeEh-jueImii1oyeCta£1Lmnloji:cEixtliriiieSei「Ho-te干Ea.reinil)Inwloyeelli[IserIFEa.rco.iml!e1!nlia.1,TFTorkLog—ImjiIqjLorTitlepliant£11JlotivnIffc-ti-z-nlDIrmloyi:i:HiIffotlonLonlent▲▼Task<3Ta=kIHEnnlojecIDn=erIIITasklitld除了這些主要的關(guān)系之外,數(shù)據(jù)庫中還有一些小關(guān)系,例如區(qū)域和城市之間的關(guān)聯(lián),部門與員工之間的關(guān)聯(lián)等,在此不再詳細(xì)描述,讀者可參考隨書光盤。15.4.3數(shù)據(jù)庫的操作類每一個軟件系統(tǒng),只要用到數(shù)據(jù)庫,都必須包括數(shù)據(jù)操作類,本例所有數(shù)據(jù)操作方法,都使用Microsoft提供的數(shù)據(jù)訪問助手SqlHelperoSqlHelper是一個數(shù)據(jù)操作類,主要包括三類方法:ExcuteNonQuery、ExcuteScalar和ExcuteReadero雖然只有三類方法,但通過方法的重載,此類共提供6個操作數(shù)據(jù)的方法。通過這些方法,可以簡化邏輯層與數(shù)據(jù)層之間的交互,方便了程序的開發(fā)。此類的所有代碼請參考清單15-1o代碼清單15-1數(shù)據(jù)操作類SqlHelper的代碼usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Collections;usingSystem.Data.SqlClient;///<summary>III數(shù)據(jù)庫的通用訪問代碼///此類為抽象類,不允許實例化,在應(yīng)用時直接調(diào)用即可///</summary>publicabstractclassSqlHelper{〃獲取數(shù)據(jù)庫連接字符串,其屬于靜態(tài)變量且只讀,項目中所有文檔可以直接使用,但不能修改publicstaticreadonlystringConnectionStringLocalTransaction=ConfigurationManager.ConnectionStrings["SoftCRMConnectionString"].ConnectionString;//哈希表用來存儲緩存的參數(shù)信息,哈希表可以存儲任意類型的參數(shù)。privatestaticHashtableparmCache=Hashtable.Synchronized(newHashtable());///<summary>///執(zhí)行一個不需要返回值的SqlCommand命令,通過指定專用的連接字符串。///使用參數(shù)數(shù)組形式提供參數(shù)列表///</summary>///<remarks>///使用示例:///intresult=ExecuteNonQuery(connString,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid”,24));///</remarks>///<paramname="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>///<paramname="commandType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)</param>///<paramname="commandText">ff儲過程的名字或者T-SQL語句</param>///<paramname="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>///<returns>返回一個數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù)</returns>publicstaticintExecuteNonQuery(stringconnectionString,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters){SqlCommandcmd=newSqlCommand();using(SqlConnectionconn=newSqlConnection(connectionString)){//通過PrePareCommand方法將參數(shù)逐個加入到SqlCommand的參數(shù)集合中PrepareCommand(cmd,conn,null,cmdType,cmdText,commandParameters);intval=cmd.ExecuteNonQuery();//清空SqlCommand中的參數(shù)列表cmd.Parameters.Clear();returnval;///<summary>///執(zhí)行一條不返回結(jié)果的SqlCommand,通過一個已經(jīng)存在的數(shù)據(jù)庫連接///使用參數(shù)數(shù)組提供參數(shù)///</summary>///<remarks>///使用示例:///intresult=ExecuteNonQuery(conn,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid”,24));///</remarks>///<paramname="conn">一個現(xiàn)有的數(shù)據(jù)庫連接</param>///<paramname="commandType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)</param>///<paramname="commandText">ff儲過程的名字或者T-SQL語句</param>///<paramname="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>///<returns>返回一個數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù)</returns>publicstaticintExecuteNonQuery(SqlConnectionconnection,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters){SqlCommandcmd=newSqlCommand();PrepareCommand(cmd,connection,null,cmdType,cmdText,commandParameters);intval=cmd.ExecuteNonQuery();cmd.Parameters.Clear();returnval;}///<summary>///執(zhí)行一條不返回結(jié)果的SqlCommand,通過一個已經(jīng)存在的數(shù)據(jù)庫事物處理///使用參數(shù)數(shù)組提供參數(shù)///</summary>///<remarks>///使用示例:///intresult=ExecuteNonQuery(trans,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid",24));///</remarks>///<paramname="trans">一個存在的sql事物處理</param>///<paramname="commandType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)</param>///<paramname="commandText">ff儲過程的名字或者T-SQL語句</param>///<paramname="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>///<returns>返回一個數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù)</returns>publicstaticintExecuteNonQuery(SqlTransactiontrans,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)SqlCommandcmd=newSqlCommand();PrepareCommand(cmd,trans.Connection,trans,cmdType,cmdText,commandParameters);intval=cmd.ExecuteNonQuery();cmd.Parameters.Clear();returnval;}///<summary>///執(zhí)行一條返回結(jié)果集的SqlCommand命令,通過專用的連接字符串。///使用參數(shù)數(shù)組提供參數(shù)///</summary>///<remarks>///使用示例:///SqlDataReaderr=ExecuteReader(connString,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid”,24));///</remarks>///<paramname="connectionString">—個有效的數(shù)據(jù)庫連接字符串</param>///<paramname="commandType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)</param>///<paramname="commandText">ff儲過程的名字或者T-SQL語句</param>///<paramname="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>///<returns>返回一個包含結(jié)果的SqlDataReader</returns>publicstaticSqlDataReaderExecuteReader(stringconnectionString,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters){SqlCommandcmd=newSqlCommand();SqlConnectionconn=newSqlConnection(connectionString);//在這里使用try/catch處理是因為,如果方法出現(xiàn)異常,則SqlDataReader就不存在。CommandBehavior.CloseConnection的語句就不會執(zhí)行,觸發(fā)的異常由catch捕獲。〃關(guān)閉數(shù)據(jù)庫連接,并通過throw再次引發(fā)捕捉到的異常。try{PrepareCommand(cmd,conn,null,cmdType,cmdText,commandParameters);SqlDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.Parameters.Clear();returnrdr;}catch{conn.Close();throw;}}///<summary>III執(zhí)行一條返回第一條記錄第一列的SqlCommand命令,通過專用的連接字符串。///使用參數(shù)數(shù)組提供參數(shù)///</summary>///<remarks>///使用示例:///Objectobj=ExecuteScalar(connString,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid”,24));///</remarks>///<paramname="connectionString">—個有效的數(shù)據(jù)庫連接字符串</param>///<paramname="commandType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)</param>///<paramname="commandText">ff儲過程的名字或者T-SQL語句</param>///<paramname="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>///<returns>返回一個object類型的數(shù)據(jù),可以通過Convert.To{Type}方法轉(zhuǎn)換類型</returns>publicstaticobjectExecuteScalar(stringconnectionString,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters){SqlCommandcmd=newSqlCommand();using(SqlConnectionconnection=newSqlConnection(connectionString)){PrepareCommand(cmd,connection,null,cmdType,cmdText,commandParameters);objectval=cmd.ExecuteScalar();cmd.Parameters.Clear();returnval;}}///<summary>///執(zhí)行返回第一條記錄第一列的SqlCommand命令,通過已經(jīng)存在的數(shù)據(jù)庫連接。///使用參數(shù)數(shù)組提供參數(shù)///</summary>///<remarks>///使用示例:///Objectobj=ExecuteScalar(connString,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid",24));///</remarks>///<paramname="conn">一個已經(jīng)存在的數(shù)據(jù)庫連接</param>///<paramname="commandType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)</param>///<paramname="commandText">ff儲過程的名字或者T-SQL語句</param>///<paramname="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>///<returns>返回一個object類型的數(shù)據(jù),可以通過Convert.To{Type}方法轉(zhuǎn)換類型</returns>publicstaticobjectExecuteScalar(SqlConnectionconnection,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters){SqlCommandcmd=newSqlCommand();PrepareCommand(cmd,connection,null,cmdType,cmdText,commandParameters);objectval=cmd.ExecuteScalar();cmd.Parameters.Clear();returnval;}///<summary>///緩存參數(shù)數(shù)組///</summary>///<paramname="cacheKey">參數(shù)緩存的鍵值</param>///<paramname="cmdParms”>被緩存的參數(shù)列表</param>publicstaticvoidCacheParameters(stringcacheKey,paramsSqlParameter[]commandParameters){parmCache[cacheKey]=commandParameters;}///<summary>///獲取被緩存的參數(shù)///</summary>///<paramname="cacheKey">^于查找參數(shù)的KEY^</param>///<returns>返回緩存的參數(shù)數(shù)組</returns>publicstaticSqlParameter[]GetCachedParameters(stringcacheKey){SqlParameter[]cachedParms=(SqlParameter[])parmCache[cacheKey];if(cachedParms==null)returnnull;//新建一個參數(shù)的克隆列表SqlParameter[]clonedParms=newSqlParameter[cachedParms.Length];//通過循環(huán)為克隆參數(shù)列表賦值for(inti=0,j=cachedParms.Length;i<j;i++)//使用clone方法復(fù)制參數(shù)列表中的參數(shù)clonedParms[i]=(SqlParameter)((ICloneable)cachedParms[i]).Clone();returnclonedParms;}///<summary>Ill為執(zhí)行命令準(zhǔn)備參數(shù)///<lsummary>Ill<paramname="cmd">SqlCommand命令<lparam>Ill<paramname="conn”>已經(jīng)存在的數(shù)據(jù)庫連接<lparam>lll<paramname="trans">^據(jù)庫事物處理<lparam>lll<paramname="cmdType">SqlCommand命令類型(存儲過程,T-SQL語句,等等。)<lparam>lll<paramname="cmdText">Commandtext,T-SQL語句例如Select*fromProducts<lparam>lll<paramname="cmdParms">返回帶參數(shù)的命令<lparam>privatestaticvoidPrepareCommand(SqlCommandcmd,SqlConnectionconn,SqlTransactiontrans,CommandTypecmdType,stringcmdText,SqlParameter[]cmdParms){〃判斷數(shù)據(jù)庫連接狀態(tài)if(conn.State!=ConnectionState.Open)conn.Open();cmd.Connection=conn;cmd.CommandText=cmdText;〃判斷是否需要事物處理if(trans!=null)cmd.Transaction=trans;cmd.CommandType=cmdType;if(cmdParms!=null){foreach(SqlParameterparmincmdParms)cmd.Parameters.Add(parm);}}}15.5開發(fā)前期的項目構(gòu)建在正式開發(fā)前,要創(chuàng)建一個項目,并將項目加入到VSS管理中,還要添加所需要的公用代碼。15.5.1創(chuàng)建項目VS2005取消了Web項目的概念,取而代之的是“網(wǎng)站”。下面介紹如何創(chuàng)建一個客戶關(guān)系系統(tǒng)的網(wǎng)站。打開VS2005。單擊“文件I新建I網(wǎng)站”菜單命令,打開“新建網(wǎng)站”對話框。默認(rèn)網(wǎng)站地址是“http:lllocalhostlWebSite”,修改為“http:lllocalhostlSoftCRM”。為新網(wǎng)站添加一些公共代碼。將15.4.3節(jié)創(chuàng)建的數(shù)據(jù)操作類SqlHelper,添加到網(wǎng)站中來。在網(wǎng)站根目錄下,添加一個類,命名為SqlHelper。添加時會出現(xiàn)一個提示信息,如圖15-16所示,這里選擇“是”按鈕。系統(tǒng)自動將類添加到App_Code目錄下。r\您理A'I-'應(yīng)用程序.對于網(wǎng)站中SB用的類,應(yīng)將癩敏如p_e血史件笑中.是否安椅美L":.",一、5"快中?□瓦二|朝|取精|圖15-16添加類時的提示(4)打開SqlHelper.cs文件,將代碼清單15-1的內(nèi)容添加進(jìn)去。按“Ctrl+S”保存所做的改動。(5)如果已經(jīng)安裝了VSS,則右擊網(wǎng)站根目錄,在彈出的菜單中選擇“將解決方案添加到源代碼管理器”。項目文件會自動添加到了版本管理工具中,并自動創(chuàng)建工程目錄。此時一個基本的網(wǎng)站框架就設(shè)計完成了,接下來要做的是網(wǎng)站的設(shè)計。15.5.2設(shè)計母版頁為了讓讀者學(xué)習(xí)更多的ASP.NET2.0中控件的使用方法,本例設(shè)計一個具有導(dǎo)航功能的母版頁,并且導(dǎo)航信息由XML文件提供。設(shè)計步驟如下:(1)右擊網(wǎng)站根目錄,在彈出的菜單中選擇“添加新項”,添加一個母版頁。(2)按上面的步驟再添加一個XML文件,名稱為SiteMap.xml,文件內(nèi)容如清單15-2所示。只在導(dǎo)航信息中添加了幾個主要功能,具體還要等到實際模塊開發(fā)中完善。此文件主要為TreeView導(dǎo)航控件提供XML格式的數(shù)據(jù)源。代碼清單15-2SiteMap.xml文件代碼<?xmlversion="1.0"encoding="utf-8”?><siteMapNodeurl=""title="客戶關(guān)系管理系統(tǒng)”description」'"〉<siteMapNodeurl=""title="基礎(chǔ)配置"description=""><siteMapNodeurl=""title="區(qū)域設(shè)置"description」'"/><siteMapNodeurl=""title="客戶業(yè)務(wù)類型設(shè)置"description」”'/></siteMapNode><siteMapNodeurl=""title="客戶管理"description=""><
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 3 Where did you go(說課稿)-2023-2024學(xué)年人教PEP版英語六年級下冊
- Unit 6 Review Period 4 (說課稿)-2024-2025學(xué)年北師大版(三起)英語三年級上冊
- 《1、了解學(xué)習(xí)好習(xí)慣》(說課稿)-2024-2025學(xué)年二年級上冊綜合實踐活動魯科版
- 《10 交通安全小常識》(說課稿)-2023-2024學(xué)年四年級上冊綜合實踐活動長春版
- 23《梅蘭芳蓄須》說課稿2024-2025學(xué)年統(tǒng)編版語文四年級上冊
- 14《我要的是葫蘆》第一課時 說課稿-2024-2025學(xué)年語文二年級上冊統(tǒng)編版
- Unit5 The colourful world第三課時(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 2024-2025學(xué)年高中歷史 第四單元 工業(yè)文明沖擊下的改革 第12課 俄國農(nóng)奴制改革(2)教學(xué)說課稿 岳麓版選修1
- 2025合同約定的“滯納金”是否可以視為違約金
- 2025建安施工合同文本
- 新人教版小學(xué)數(shù)學(xué)五年級下冊教材解讀
- 標(biāo)桿地產(chǎn)集團(tuán) 研發(fā)設(shè)計 工程管理 品質(zhì)地庫標(biāo)準(zhǔn)研發(fā)成果V1.0
- TMS開發(fā)業(yè)務(wù)需求文檔
- 2023年1月浙江高考英語聽力試題及答案(含MP3+錄音原文)
- HI-IPDV10芯片產(chǎn)品開發(fā)流程V10宣課件
- 房產(chǎn)抵押注銷申請表
- 【課件】第三課 蒙娜麗莎 課件高中美術(shù)湘美版美術(shù)鑒賞
- 象數(shù)療法好療效
- A320系列飛行訓(xùn)練課程:電子飛行儀表系統(tǒng)概況
- 2020新版?zhèn)€人征信報告模板
- 東芝空調(diào)維修故障代碼匯總
評論
0/150
提交評論