




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、分布式數(shù)據(jù)庫課程設(shè)計與實現(xiàn)面向連鎖超市管理系統(tǒng)的分布式數(shù)據(jù)庫設(shè)計與實現(xiàn)65目錄1.連鎖超市管理系統(tǒng)概述11.1背景介紹11.2 可行性分析11.3系統(tǒng)目標和先進之處21.4 小組成員和任務(wù)分配32.需求分析42.1用戶需求概述42.2 業(yè)務(wù)需求分析52.3功能分析63.系統(tǒng)總體設(shè)計83.1繪制用例圖設(shè)計系統(tǒng)功能83.2繪制系統(tǒng)流程圖93.3 系統(tǒng)開發(fā)環(huán)境103.4系統(tǒng)的運行環(huán)境113.5 系統(tǒng)運行演示113.6系統(tǒng)類庫設(shè)計144.分布式數(shù)據(jù)庫分析與設(shè)計164.1數(shù)據(jù)庫分析164.2數(shù)據(jù)庫概念設(shè)計164.3數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計204.4 分片與位置分配設(shè)計244.4.1站點通信模型244.4.2數(shù)
2、據(jù)表的分片與位置分配設(shè)計255.基于SQL的SMS的詳細設(shè)計(實現(xiàn))275.1公共類設(shè)計275.1.1文件操作類CFileOperate275.1.2時間格式轉(zhuǎn)換類CMyTime295.1.3數(shù)據(jù)操作類CADOConn295.1.4數(shù)據(jù)庫表的操作類CtablePartInfo375.2界面窗口設(shè)計415.2.1系統(tǒng)啟動登錄開發(fā)415.2.2主界面對話框設(shè)計435.2.3通用報表對話框設(shè)計開發(fā)445.2.4打印對話框設(shè)計開發(fā)465.3基本資料模塊設(shè)計485.3.1 基本資料管理功能開發(fā)48.2 價格自動生成功能開發(fā)525.3.3 報表功能實現(xiàn)545.4進貨/銷售模塊設(shè)計555.4.1進貨/銷售登
3、記設(shè)計555.4.2進貨設(shè)計595.4.3月度統(tǒng)計設(shè)計615.5庫存模塊設(shè)計625.5.1 庫存查詢功能開發(fā)625.5.2 庫存報警功能開發(fā)636.開發(fā)技巧和難點分析646.1OLE技術(shù)使用646.2MFC Grid Control控件的使用651. 連鎖超市管理系統(tǒng)概述1.1 背景介紹 隨著市場經(jīng)濟的發(fā)展和人民生活水平的提高,原來單一、小規(guī)模的超市已無法滿足人民對購物環(huán)境的要求,大規(guī)模、物品豐富的超市正在蓬勃發(fā)展。超市銷售數(shù)據(jù)規(guī)模的日益龐大,商品數(shù)目的迅速增長,采用以往的手工管理已直接或間接地降低了工作效率,最終影響超市的日常運轉(zhuǎn)。另外超市的發(fā)張壯大,尤其是連鎖超市(如家樂福、美廉美)的擴張
4、,使得他們具有地域上分散而管理上又相對集中的特點,往往既要有各門店的局部控制和分散管理,同時也要有整個組織的全局控制和高層次的協(xié)同管理。因此把這些門店和中心通過網(wǎng)絡(luò)連接起來,設(shè)計開發(fā)一款基于分布式數(shù)據(jù)庫的連鎖超市管理系統(tǒng)SMS(Supermarket management system)勢在必行。1.2 可行性分析(1)經(jīng)濟可行性使用連鎖超市管理系統(tǒng)對超市連鎖店進行信息化管理將直接提高公司管理部門的工作效率。通過網(wǎng)絡(luò)遠程提交匯總各門店的信息,節(jié)省了許多的時間和金錢。另一方面,用信息化管理統(tǒng)計大量數(shù)據(jù),節(jié)省了很多的人力和財力,為管理者提供更好的決策支持。(2)技術(shù)可行性 網(wǎng)絡(luò)應(yīng)用基礎(chǔ)設(shè)施完善,由
5、于信息技術(shù)的發(fā)展,我國的計算機網(wǎng)絡(luò)飛速發(fā)展,先后建成了中國公眾多媒體通信網(wǎng)、China Net、 中國教育與科研計算機網(wǎng)絡(luò)等組成了中國Internet主體,網(wǎng)絡(luò)應(yīng)用進入企業(yè)與普通家庭,這為發(fā)展連鎖超市網(wǎng)絡(luò)辦公提供了基礎(chǔ)設(shè)施。 網(wǎng)絡(luò)安全技術(shù)應(yīng)用,包括加密算法、CA數(shù)字認證、數(shù)字簽名等,為網(wǎng)絡(luò)辦公系統(tǒng)的應(yīng)用提供安全保證,它實現(xiàn)了網(wǎng)絡(luò)傳輸數(shù)據(jù)的安全性、完整性等。 最后,就是網(wǎng)絡(luò)技術(shù)的普及與掌握,如網(wǎng)絡(luò)互聯(lián)、網(wǎng)絡(luò)安全技術(shù)、網(wǎng)絡(luò)數(shù)據(jù)庫技術(shù)等,使我們有能力開發(fā)實現(xiàn)適合自己的管理系統(tǒng)。因此,公司構(gòu)建跨區(qū)域的管理系統(tǒng)的技術(shù)瓶頸問題(網(wǎng)絡(luò)應(yīng)用基礎(chǔ)設(shè)施、網(wǎng)絡(luò)安全、開發(fā)技術(shù))得到了有效解決,公司構(gòu)建網(wǎng)絡(luò)管理系統(tǒng)技術(shù)
6、上可行。(3)操作可行性由于SMS的操作是基于C/S的客戶端的頁面操作,簡單明了,用戶無需學習,一般都能夠很容易的知道如何操作。而管理員也無需具備專業(yè)知識,只需要對一些數(shù)據(jù)進行輸入以及平時的日常維護就夠了。1.3系統(tǒng)目標和先進之處 (1)系統(tǒng)目標為連鎖超市提高效率、降低成本;實現(xiàn)連鎖超市管理的優(yōu)化,簡化工作流程,節(jié)省人力物力,提高工作效率,極大地滿足客戶需要;對各環(huán)節(jié)進行控制分析,實現(xiàn)統(tǒng)一調(diào)度。滿足連鎖超市的基本管理功能,發(fā)揮信息系統(tǒng)的靈活性,減輕企業(yè)管理人員和操作人員的工作負擔,提高工作效率。 本系統(tǒng)是一項功能比較完善的連鎖超市管理系統(tǒng),對連鎖店運作過程中的后臺數(shù)據(jù)可以隨時進行分析,便于企業(yè)
7、管理人員的經(jīng)營、決策。 全面體現(xiàn)了現(xiàn)代企業(yè)管理理論所倡導(dǎo)的工作高效、環(huán)境輕松的氛圍。(2)系統(tǒng)先進之處 Ø 多數(shù)處理就地完成。Ø 各地的計算機由數(shù)據(jù)通信網(wǎng)絡(luò)相聯(lián)系。 Ø 克服了中心數(shù)據(jù)庫的弱點:降低了數(shù)據(jù)傳輸代價。 Ø 提高了系統(tǒng)的可靠性,局部系統(tǒng)發(fā)生故障,其他部分還可繼續(xù)工作。 Ø 各個數(shù)據(jù)庫的位置是透明的,方便系統(tǒng)的擴充。 Ø 為了協(xié)調(diào)整個系統(tǒng)的事務(wù)活動,事務(wù)管理的性能花費高。1.4 小組成員和任務(wù)分配 2.1用戶需求概述 下面是通過調(diào)查研究獲得的關(guān)于連鎖超市主要信息數(shù)據(jù)的需求分析結(jié)果:(1) 連鎖超市通常由一個中心(公司總部)、
8、多個遠程連鎖店(門店)組成,并且每個連鎖店分布在不同地域。 (2)連鎖超市的各個部門之間、各個分店之間、分店與總部之間需要交換數(shù)據(jù),這種數(shù)據(jù)交換是通過局域網(wǎng)和廣域網(wǎng)進行的。(3)公司總部負責產(chǎn)生并管理該連鎖超市的整體匯總數(shù)據(jù),即各門店的明細匯總表數(shù)據(jù),如銷售匯總表等。(4)每一個遠程站點(各門店和公司總部)分別有一個數(shù)據(jù)庫系統(tǒng),各自組成一個獨立的子系統(tǒng),可以分別獨立進行本部門業(yè)務(wù)處理。(5)總部為了便于對各店進行管理,同時也為了比較各店的銷售情況,要求門店將所有商品歸入相應(yīng)的商品類別,由總部統(tǒng)一管理并提供各門店使用,而且,商品類別信息數(shù)據(jù)在各門店都要經(jīng)常使用。(6)有關(guān)商品信息、供應(yīng)商信息、P
9、OS機信息、進貨信息和銷售信息等經(jīng)營基礎(chǔ)數(shù)據(jù)都是各門店單獨管理和使用,門店之間互不相關(guān)。(7)整個連鎖超市的職員信息由公司總部管理和維護,各門店只可以查詢本部門的職員信息。2.2 業(yè)務(wù)需求分析通過對超市的營業(yè)、管理業(yè)務(wù)流程的調(diào)查,得到下面的業(yè)務(wù)需求。Ø 可以對商品類別、商品、供應(yīng)商、POS機等基礎(chǔ)信息進行管理。Ø 可以實現(xiàn)采購開單、銷售開單、采購?fù)素洝N售退貨等基本功能。Ø 軟件可根據(jù)商品資料中設(shè)置的最高庫存、最低庫存進行庫存報警。Ø 商品的批發(fā)價、零售價可自動生成,減輕定價的工作量。Ø 可以生成各類統(tǒng)計報表,提供詳盡的營業(yè)報告,實現(xiàn)對商品進、
10、銷、存及利潤等財務(wù)狀況了如指掌。Ø 所有單據(jù)、報表均可以在打印前預(yù)覽,并且可以導(dǎo)出為Excel文件,然后根據(jù)實際需要進行特別的編排處理。Ø 為了系統(tǒng)安全,每次用戶登錄都創(chuàng)建相應(yīng)的日志文件,記錄用戶的所有操作。此外,對系統(tǒng)的性能主要有以下幾個方面的需求。系統(tǒng)在設(shè)計過程中應(yīng)充分考慮到可擴充性,要求操作界面美觀大方,容易上手。2.3功能分析根據(jù)對系統(tǒng)的業(yè)務(wù)調(diào)查和用戶的需求分析,結(jié)合計算機信息管理的特點,設(shè)計系統(tǒng)實現(xiàn)的功能如下。(1) 基礎(chǔ)信息管理基礎(chǔ)信息管理包括業(yè)種商品類別信息、商品信息、供應(yīng)商信息、POS機信息和價格信息維護與管理,實現(xiàn)的功能包括:Ø 基本信息的添加、
11、刪除和更新操作。Ø 生成各類基礎(chǔ)信息報表。Ø 打印和導(dǎo)出報表。(2) 進貨管理進貨管理主要實現(xiàn)對商品的采購入庫信息進行管理,具體實現(xiàn)功能如下:Ø 進貨開單,實現(xiàn)商品的進貨結(jié)算、入庫操作。Ø 進貨退貨,退還商家相關(guān)的商品。Ø 生成進貨、退貨的單據(jù)、商品報表。Ø 打印和導(dǎo)出報表。(3) 銷售管理銷售管理主要實現(xiàn)對商品的銷售出庫相關(guān)信息進行管理,具體實現(xiàn)的功能如下:Ø 銷售開單,實現(xiàn)商品的銷售結(jié)算、出庫操作。Ø 銷售退貨,允許客戶退出相關(guān)的商品。Ø 生成銷售、銷售退貨的單據(jù)、商品報表。Ø 打印和導(dǎo)出報
12、表。(4) 庫存管理庫存管理主要實現(xiàn)對商品的庫存相關(guān)信息進行管理,具體實現(xiàn)的功能如下:Ø 庫存查詢,可以查看所有庫存商品的相關(guān)信息。Ø 庫存報警,對庫存過多或過少的商品進行報表統(tǒng)計。Ø 庫存盤點,可以修改商品的庫存數(shù)量。(5) 帳務(wù)管理帳務(wù)管理主要實現(xiàn)對營業(yè)員的銷售商品、業(yè)務(wù)提成、營業(yè)收入等情況進行分類報表統(tǒng)計。(6) 數(shù)據(jù)管理數(shù)據(jù)管理主要實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)進行備份、還原及清理等相關(guān)工作。(7) 系統(tǒng)管理系統(tǒng)管理主要實現(xiàn)登錄用戶(職員)管理、系統(tǒng)日志、修改登錄密碼等相關(guān)工作。2. 系統(tǒng)總體設(shè)計3.1繪制用例圖設(shè)計系統(tǒng)功能用例圖表示了角色和用例以及它們之間的關(guān)系。它描
13、述了系統(tǒng)、子系統(tǒng)和類的一致的功能集合,表現(xiàn)為系統(tǒng)和一個或多個外部交互者(角色)的消息交互動作序列。也就是角色(用戶或外部系統(tǒng))和系統(tǒng)(要設(shè)計的系統(tǒng))為了實現(xiàn)一個目的交互,這個目的的描述通常是一個謂詞短語,例如簽合同等。系統(tǒng)設(shè)計包含超級管理員、管理員和營業(yè)員四種用戶角色。超級管理員具有所有的操作權(quán)限,其用例圖如圖3-1所示。圖3-1 超級管理員角色系統(tǒng)用例圖管理員不具備系統(tǒng)設(shè)置模塊中的用戶管理和商品類別信息管理功能,其他功能均具備。而銷售人員則只具有銷售開單管理功能。3.2繪制系統(tǒng)流程圖結(jié)合系統(tǒng)的具體設(shè)計要求,連鎖超市管理系統(tǒng)的主要功能流程圖如圖3-2所示。圖3-2 系統(tǒng)主要功能流程圖系統(tǒng)首先對
14、登錄用戶身份進行驗證,根據(jù)用戶的權(quán)限激活相關(guān)功能。超級管理員具有所有的操作權(quán)限,系統(tǒng)的功能結(jié)構(gòu)圖如圖3-3所示。圖3-3 系統(tǒng)功能結(jié)構(gòu)圖上圖只是列出了一些主要功能,系統(tǒng)還能夠根據(jù)不同需求生成各種統(tǒng)計報表。3.3 系統(tǒng)開發(fā)環(huán)境 本系統(tǒng)是在Windows XP中文版操作系統(tǒng)環(huán)境下,使用Microsoft Visual Studio 2008中文版用C+語言開發(fā)成功的。在開發(fā)過程中,使用了OLE技術(shù)和ActiveX控件技術(shù)。后臺數(shù)據(jù)庫系統(tǒng)設(shè)計采用的是Microsoft的 SQL Server 2005和Access數(shù)據(jù)庫系統(tǒng),通過ADO數(shù)據(jù)庫開發(fā)技術(shù),直接操作數(shù)據(jù)庫文件。3.4系統(tǒng)的運行環(huán)境系統(tǒng)可以
15、直接在Win98、Win2000、WinXP環(huán)境下運行。系統(tǒng)預(yù)設(shè)的超級管理員用戶名為“admin”,密碼為“admin”。3.5 系統(tǒng)運行演示程序啟動,首先彈出如圖3-4所示的“系統(tǒng)登錄”對話框,只有輸入正確的用戶ID、登錄密碼才能進入系統(tǒng)能夠。圖3-4 “系統(tǒng)登錄”對話框如果登錄用戶為超級管理員或管理員,會進入系統(tǒng)的主界面窗口,如圖3-5所示。圖3-5 系統(tǒng)的主界面窗口如果登錄用戶權(quán)限為營業(yè)員,由于其只具有售貨權(quán)限,因此系統(tǒng)會直接彈出“銷售開單”對話框,如圖3-6所示。圖3-6 “銷售開單”對話框在進行相關(guān)操作前,首先需要添加、設(shè)置一些基本資料,如商品分類登記,其操作設(shè)置對話框,如圖3-7所
16、示。圖3-7 “商品分類登記”對話框另外,系統(tǒng)還提供了豐富的報表功能,如圖3-8所示的商品分類報表,同時對報表提供了導(dǎo)出到Excel文件和打印的功能。圖3-8 商品分類報表對話框3.6系統(tǒng)類庫設(shè)計 BITVRLab超市管理系統(tǒng)主框架的設(shè)計是通過MFC創(chuàng)建向?qū)?chuàng)建的基于對話框的窗口程序,在對話框程序中添加了菜單欄,系統(tǒng)的主要類庫設(shè)計如下。 Ø 自定義擴展類:為了提高開發(fā)效率、便于代碼重用,自定義了一些數(shù)據(jù)操作類和控件擴展類,如表3-1所示。表3-1 自定義擴展類及功能類說 明CADOConn通過ADO實現(xiàn)對ACCESS、SqlServer等數(shù)據(jù)庫的訪問CtablePartInfo根據(jù)數(shù)
17、據(jù)庫表的分配、分片信息,實現(xiàn)對數(shù)據(jù)庫表的增、刪、改、查CFileOperate實現(xiàn)對硬盤文件的常用操作CMyChiToLetter實現(xiàn)根據(jù)逐字提取漢字拼音的首字母CMyButtonCButton類的派生類,實現(xiàn)帶有位圖和文本的按鈕CMyMenuCMenu類的派生類,用于定制自己的菜單CMenuItemContextCMenu類中用到此類,用于保存菜單項的信息CMyTime實現(xiàn)簡單的時間格式的轉(zhuǎn)換CMyExcel完成VC對Excel文件的操作Ø 對話框窗口類:在系統(tǒng)中,用戶所有的數(shù)據(jù)查詢、操作都是通過對話框窗口來實現(xiàn)的,系統(tǒng)開發(fā)的對話框類如表3-2所示。表3-2 對話框類及說明類說 明
18、CDlgFenJiBasePOS機基本信息管理對話框類CShopManageDlg主框架對話框類CDlgFenLeiBase商品分類基本信息管理對話框類CDlgDanganBase商品基本信息管理對話框類CDlgGongYingShangBase供應(yīng)商基本信息管理對話框GDlgJiaGeSheZhi價格自動設(shè)置對話框類CDlgJinHuoKanDan商品進貨開單管理對話框類CDlgJinHuoTuiDan商品進貨退單管理對話框類CDlgXiaoShouKanDan商品銷售開單管理對話框類CDlgXiaoShouTuiDan商品銷售退單管理對話框類CDlgAll用于查找信息顯示對話框類CDlgR
19、eport用于報表顯示對話框類CDlgLogo用戶登錄對話框類CDlgPwd更改密碼對話框類CDlgQuit退出系統(tǒng)提示對話框類Ø 打印相關(guān)類:系統(tǒng)能夠提供了報表的打印和打印預(yù)覽功能,其相關(guān)的設(shè)計類如表3-3所示。表3-3 打印相關(guān)類及說明類說 明CPrintFrameCFrameWnd派生類,用于構(gòu)建打印框架類CPrintView打印視圖類另外,系統(tǒng)還包含一些主框架相關(guān)類、導(dǎo)入ActiveX控件(MFC Grid Control)相關(guān)類和導(dǎo)入OLE對象(Excel)相關(guān)類。3. 分布式數(shù)據(jù)庫分析與設(shè)計 4.1數(shù)據(jù)庫分析考慮到總站點的信息量大采用SQL Server2005數(shù)據(jù)庫,而
20、區(qū)域站點信息量相對較小采用Access數(shù)據(jù)庫。當區(qū)域業(yè)務(wù)拓展,操作終端增加時,Access數(shù)據(jù)庫也很容易的移植到SQL Server數(shù)據(jù)庫系統(tǒng)中。另外區(qū)域站點采用Access數(shù)據(jù)庫可以實現(xiàn)方便的部署。4.2數(shù)據(jù)庫概念設(shè)計分析超市管理功能流程,系統(tǒng)的數(shù)據(jù)實體主要包括基本資料對象實體、庫存實體、進貨/銷售開單、進貨/銷售退單、進貨/銷售商品實體、各站點數(shù)據(jù)庫服務(wù)器IP信息實體、數(shù)據(jù)庫表分配分片信息實體等。Ø 基本資料對象實體包括商品類別、商品明細、供應(yīng)商、POS機和登錄用戶實體。Ø 商品庫存實體記錄庫存商品的數(shù)量和價格信息,其實體的E-R圖如下。Ø 商品進貨單實體用于
21、記錄進貨單的統(tǒng)計信息,其實體的E-R圖如下所示。Ø 進貨商品實體用于記錄進貨單對應(yīng)的商品信息,其實體的E-R圖如下所示。Ø 進貨退單實體用于記錄進貨退單信息,其實體的E-R圖如下所示。與進貨相對應(yīng)的銷售單實體、銷售商品實體和銷售退單實體的E-R圖如下所示。Ø 各站點數(shù)據(jù)庫服務(wù)器IP信息,記錄各個區(qū)域數(shù)據(jù)庫服務(wù)器對應(yīng)的IP地址,其實體的E-R圖,如下圖所示。Ø 數(shù)據(jù)庫表分配分片信息,記錄數(shù)據(jù)中所有的表的分布式分配和分片信息,其實體E-R圖,如圖所示。4.3數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計商品類別表、商品明細表、供應(yīng)商表、POS機表、登錄用戶表、庫存表、進貨/銷售開單表、
22、進貨/銷售商品表、進貨/銷售退貨商品表、IP地址登錄信息表、數(shù)據(jù)庫表的分配和分片信息。商品類別表:商品明細表:供應(yīng)商表:POS機表:用戶表:庫存表:進貨單表:進貨商品表:進貨商品退單表:銷售單表:銷售商品表:銷售商品退單表:服務(wù)器IP信息表:分片及分布信息表:4.4 分片與位置分配設(shè)計 4.4.1站點通信模型在我們的連鎖超市管理系統(tǒng)中,有一個總店并下分多個分店,總店和分店之間或分店與分店之間都可以進行通信。每個分店是一個相對獨立的數(shù)據(jù)庫服務(wù)系統(tǒng),其可以連接任意數(shù)量的客戶端。通信模型如下圖所示:4.4.2數(shù)據(jù)表的分片與位置分配設(shè)計根據(jù)以上得到的關(guān)于主要信息數(shù)據(jù)的需求分析結(jié)果,為該連鎖超市系統(tǒng)的分
23、布式數(shù)據(jù)庫系統(tǒng)進行主要信息數(shù)據(jù)的分片和分配設(shè)計如下:1、數(shù)據(jù)的分片設(shè)計(1)由于該連鎖超市系統(tǒng)的各連鎖店之間在經(jīng)營上是獨立的,每個門店只關(guān)心自己的經(jīng)營狀況,有關(guān)供應(yīng)商信息、POS機信息、商品信息和進貨/銷貨信息等基礎(chǔ)數(shù)據(jù)都是各門店單獨管理和使用,門店之間互不相關(guān)。因此,商品明細表、供應(yīng)商表、POS機表、庫存表、進貨/銷售開單表、進貨/銷售商品表、進貨/銷售退貨商品表按照地域(門店所在區(qū)域標志)采用水平分片的方法得到水平片段。(2)這里我們對于商品信息進行了垂直分片,分成了商品明細表和庫存表,因為商品的某些屬性,例如庫存量等需要經(jīng)常更新,因此將這些屬性劃分出來構(gòu)成單獨的實體可以減少系統(tǒng)開銷。(3
24、)由于整個連鎖超市的職員信息由總公司管理和維護,各門店只可以查詢本店的職員信息。所以職員信息不必分片,可以采用視圖的形式提供給各門店查詢本門店的職員信息。另外,各個區(qū)域數(shù)據(jù)庫服務(wù)器的IP地址信息也只是由總部管理、維護,所以也不必分片。(4)由于商品分類數(shù)據(jù)由總部統(tǒng)一管理并提供各門店使用,而且,商品類別信息數(shù)據(jù)在各門店都要經(jīng)常使用。因此,商品類別信息數(shù)據(jù)也不必分片。(5)該分布式數(shù)據(jù)庫系統(tǒng)實現(xiàn)了簡單的目錄管理,記錄數(shù)據(jù)庫中各個表的分片和分配信息,以便數(shù)據(jù)更新時,維護各個站點上數(shù)據(jù)的一致性。這個表由總部規(guī)劃建立,各門店也會經(jīng)常使用。因此,數(shù)據(jù)庫目錄信息表也不必分片。2、數(shù)據(jù)及其片段的分配設(shè)計(1)
25、對于只在各門店單獨使用的除商品類別信息和數(shù)據(jù)庫目錄信息以外的其他基礎(chǔ)信息的片段,采用按區(qū)域分片然后分配到各個門店的數(shù)據(jù)庫服務(wù)器上。總站上有所有門店的所有信息。(2)整個系統(tǒng)的職員信息、IP地址信息由公司總部管理和維護,所以只分配在總部站點中。(3)商品類別信息、數(shù)據(jù)庫目錄信息是由總部統(tǒng)一規(guī)定并下發(fā)到各門店的,由于各店經(jīng)常會使用到這類基礎(chǔ)信息,因此在各門店都具有相同的副本。所以,商品類別信息、數(shù)據(jù)庫目錄信息都不會分片但被復(fù)制,且復(fù)制的個數(shù)為門店的個數(shù)。4. 基于SQL的SMS的詳細設(shè)計(實現(xiàn))5.1公共類設(shè)計為了提高程序代碼的開發(fā)效率,便于代碼重用,在系統(tǒng)開發(fā)中,創(chuàng)建了一些數(shù)據(jù)操作類和控件擴展類
26、。5.1.1文件操作類CFileOperate為了便于對硬盤文件的操作,開發(fā)了文件操作類CFileOperate,它通過調(diào)用API函數(shù)實現(xiàn)常用的文件操作。CFileOperate類的聲明代碼如下。extern CString strTmpPath;class CFileOperatepublic:/構(gòu)造函數(shù)CFileOperate();/取得當前程序運行的路徑CString GetAppPath();/判斷是否存在strFn文件夾BOOL IsFileExist(CString strFn, BOOL bDir);/制作strFloderName文件夾返回文件夾名CString MakeDir
27、ectory(CString strFloderName);/自動生成文件夾CString MakeDirectory();/得到文件夾名為strFloderName的路徑CString GetDirectoryPath(CString strFloderName);/刪除strFloderdName文件夾void delDirectory(CString strFloderdName);/刪除主文件夾(data)void delMainDirectory();/制作主文件夾void MakeMainDirectory();/判斷strIntDigit是否為整數(shù),是否小于intBigBOOL
28、CheckIntDigit(CString strIntDigit,int intBig);/判斷strFileName是否可以做文件夾或文件的名字BOOL CheckFileName(CString strFileName);/判斷strText是否為空BOOL CheckEmpty(CString strText);/刪除strFloderName文件夾下名為strFileName的文件void delFile(CString strFloderName,CString strFileName);/得到strFloderName文件夾下名為strFileName的文件路徑CString G
29、etFileName(CString strFolderName,CString strFileName);/制作strFloderName文件夾下名為strFileName的文件CString MakeFile(CString strFloderName,BOOL blnMake);/顯示文件夾對話框BOOL GetFolder(CString* strSelectedFolder,const char* lpszTitle,const HWND hwndOwner,const char* strRootFolder,const char* strStartFolder);系統(tǒng)程序中主要用到
30、了CFileOperate類中的GetAppPath函數(shù)。GetAppPath函數(shù)用于獲取當前運行程序所在文件夾的路徑,其實現(xiàn)代碼如下。CString CFileOperate:GetAppPath()/取得當前運行程序所在文件夾路徑char lpFileNameMAX_PATH;/路徑數(shù)組/獲取當前運行程序的全路徑GetModuleFileName(AfxGetInstanceHandle(),lpFileName,MAX_PATH);CString strFileName = lpFileName;/從字符串的最右邊向左搜索''串int nIndex = strFileNa
31、me.ReverseFind ('');CString strPath;if (nIndex > 0)strPath = strFileName.Left (nIndex);/取''串左邊字符elsestrPath = ""return strPath;/返回前運行程序的文件夾路徑5.1.2時間格式轉(zhuǎn)換類CMyTime系統(tǒng)開發(fā)中,需要頻繁的對日期、時間數(shù)據(jù)進行操作,因此這里設(shè)計了類CMyTime,實現(xiàn)簡單的時間日期轉(zhuǎn)換,CMyTime類的聲明如下。class CMyTimepublic:CTime ValueTime;/CTime類型的
32、值/blnChinese:TRUE-"年月日時分秒" FALSE-"-:"CString GetAllString(BOOL blnChinese);/返回字符串形式的日期時間/blnChinese:TRUE-"年月日" FALSE-"-"CString GetDateString(BOOL blnChinese);/返回字符串形式的日期/blnChinese:TRUE-"時分秒" FALSE-":"CString GetTimeString(BOOL blnChinese)
33、;/返回字符串形式的時間CString GetSimpleString();/返回簡單字符串形式的日期時間CString GetWeek();/返回星期"星期日"/設(shè)置字符串形式的值/blnSimple:TRUE-(%Y%m%d%H%M%S) FALSE-(年月日時分秒或-:)void SetAllString(CString Value,BOOL blnSimple);void SetNow();/設(shè)置成現(xiàn)在時間CMyTime();/構(gòu)造函數(shù);SetNow函數(shù)獲取當前日期,時間,將其值賦予ValueTime。void CMyTime:SetNow()ValueTime=C
34、Time:GetCurrentTime();5.1.3數(shù)據(jù)操作類CADOConn系統(tǒng)開發(fā)了數(shù)據(jù)操作類CADOConn,它是本系統(tǒng)的核心,實現(xiàn)了對數(shù)據(jù)庫數(shù)據(jù)的基本操作功能,CADOConn類的聲明代碼如下。#import "c:program filescommon filessystemadomsado15.dll" no_namespace rename ("EOF", "adoEOF")class CADOConn / 定義變量public:_ConnectionPtr m_pConnection;/指向Connection對象指
35、針:/添加一個指向Recordset對象的指針:_RecordsetPtr m_pRecordset;_bstr_t m_strData;int m_DataType;CADOConn(int DataType);/構(gòu)造函數(shù)CADOConn();virtual CADOConn();void OnInitCADOConn();/初始化連接數(shù)據(jù)庫_RecordsetPtr& GetRecordSet(CString strSQL);/執(zhí)行查詢BOOL ExecuteSQL(CString strSQL);/執(zhí)行SQL語句,Insert Update deletevoid ExitConn
36、ect();/退出連接BOOL MoveFirst();/字段集移向開頭BOOL MoveNext();/字段集向下移BOOL Open(CString strSQL);/打開記錄集BOOL OpenLogo(CString strSQL);/打開記錄集CString GetValueString(int index,int strSum);/返回記錄集中某字段的字符串byte GetValueByte(int index);/返回記錄集中某字段的字節(jié)int GetValueInt(int index);/返回記錄集中某字段的短整數(shù)double GetValueDouble(int index
37、);/返回記錄集中某字段的雙精度數(shù)float GetValueFloat(int index);/返回記錄集中某字段的單精度數(shù)long GetValueLong(int index);/返回記錄集中某字段的長整型數(shù)CTime GetValueDate(int index);/返回記錄集中某字段的日期時間/獲取記錄集某字段的BYTE值,并換為CString返回CString GetValueByteStr(int index,int strSum);/獲取記錄集某字段的INT值,并換為CString返回CString GetValueIntStr(int index,int strSum);/獲
38、取記錄集某字段的Double值,并換為CString返回CString GetValueDoubleStr(int index,int strLSum,int strRSum);/獲取記錄集某字段的Float值,并換為CString返回CString GetValueFloatStr(int index,int strLSum,int strRSum);/獲取記錄集某字段的Long值,并換為CString返回CString GetValueLongStr(int index,int strSum);/獲取記錄集某字段的CTime值,并換為CString返回CString GetValueDat
39、eStr(int index,CString strType);/添加單項數(shù)據(jù)BOOL AddItem(CString strTable,int strSum,LPCTSTR pszText, . );/得到字段中數(shù)據(jù)的類型int GetValueType(int index);BOOL adoEOF();/記錄集的結(jié)束判斷BOOL FillList(CListCtrl *listMain,int ColOpenEnd);/填充列表(ColOpenEnd代表展開多少列)BOOL InitList(CListCtrl *listMain,int colSum);/初始化列表CString Get
40、AppPath();/得到應(yīng)用程序所在的文件夾BOOL FillList(CListCtrl *listMain);/填充列表CString GetFieldsName(int index);/返回字段名字int GetFeildsCount();/返回字段數(shù)量/返回數(shù)據(jù)集數(shù)long GetRecordCount();void WriteLog(CString strSql);/寫日志文件void WriteLog1(CString userName);/寫日志文件,誰誰登錄;1、數(shù)據(jù)庫操作函數(shù)對常用的數(shù)據(jù)庫操作定義了相關(guān)函數(shù)。(1)連接數(shù)據(jù)庫在類的構(gòu)造函數(shù)CADOConn中,聲明數(shù)據(jù)庫的名稱
41、。CADOConn:CADOConn()m_DataType=1;/數(shù)據(jù)庫類型Acessm_strData= _bstr_t("ShopData.mdb");/數(shù)據(jù)庫名稱在OnInitCADOConn函數(shù)中,實現(xiàn)連接數(shù)據(jù)庫。void CADOConn:OnInitCADOConn()/ 初始化OLE/COM庫環(huán)境:CoInitialize(NULL); try/初始化指針m_pConnection=NULL;/初始化指針m_pRecordset=NULL;/ 創(chuàng)建Connection對象m_pConnection.CreateInstance("ADODB.Con
42、nection");/ 設(shè)置連接字符串,必須是BSTR型或者_bstr_t類型_bstr_t strConnect;switch(m_DataType)case 1:/ACCESSstrConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");strConnect=strConnect+_bstr_t("Data Source=");strConnect=strConnect+_bstr_t(IPAddress)+_bstr_t("data");strConnect=strCo
43、nnect+m_strData;break;case 2:/EXCELstrConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");strConnect=strConnect+_bstr_t("Data Source=");strConnect=strConnect+_bstr_t(GetAppPath()+_bstr_t("");strConnect=strConnect+m_strData;strConnect=strConnect+"Extended Propertie
44、s=Excel 8.0"break;case 3:/SQLSERVERstrConnect="Provider=SQLOLEDB; Server="+MainIP+"Database=ShopData; uid=admin; pwd=123456"break;m_pConnection->Open(strConnect,"","",adModeUnknown);/ 捕捉異常catch(_com_error e)/ 顯示錯誤信息AfxMessageBox(e.Description();ASSERT(
45、m_pConnection != NULL);(2)對數(shù)據(jù)庫進行查詢GetRecordSet函數(shù)實現(xiàn)執(zhí)行Select查詢語句,返回查詢結(jié)果集_RecordsetPtr& CADOConn:GetRecordSet(CString strSQL)try/ 連接數(shù)據(jù)庫,如果Connection對象為空,則重新連接數(shù)據(jù)庫if(m_pConnection=NULL)OnInitCADOConn();strSQL.TrimLeft();strSQL.TrimRight();/ 創(chuàng)建記錄集對象m_pRecordset.CreateInstance(_uuidof(Recordset);/ 取得表中
46、的記錄m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);/ 捕捉異常catch(_com_error e)/ 顯示錯誤信息AfxMessageBox(e.Description();ASSERT(m_pRecordset!= NULL);/ 返回記錄集return m_pRecordset;CADOConn類的Open函數(shù)的實現(xiàn)與GetRecordSet函數(shù)基本類似,只是它不返回記錄集,而是打開數(shù)據(jù)庫表。(3)執(zhí)行數(shù)據(jù)庫操
47、作語句ExecuteSQL函數(shù)實現(xiàn)執(zhí)行SQL數(shù)據(jù)操作語句,如INSERT/UPDATE/DELETE語句等。BOOL CADOConn:ExecuteSQL(CString strSQL)try/ 是否已經(jīng)連接數(shù)據(jù)庫if(m_pConnection = NULL) OnInitCADOConn();strSQL.TrimLeft();strSQL.TrimRight();m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);WriteLog(strSQL);return TRUE;catch(_com_error e)AfxMess
48、ageBox(e.Description();return FALSE;2、記錄集操作函數(shù)為了便于對記錄集進行操作,在CADOConn類中定義了常用的記錄集操作函數(shù)。GetValueInt實現(xiàn)了從記錄集中獲取不同類型的字段值函數(shù),以獲取整形字段值。int CADOConn:GetValueInt(int index)_variant_t vValue;/var型返回值_variant_t vIndex;/索引int iValue;/數(shù)值返回值vIndex.vt=VT_I2;vIndex.iVal=index;vValue=m_pRecordset->Fields->GetItem(
49、vIndex)->Value;/獲取索引字段的值switch(vValue.vt)case VT_NULL:/為空值iValue=0;/賦值break;case VT_ERROR:/錯誤iValue=0;/賦值break;case VT_EMPTY:/不存在iValue=0;/賦值break;default:iValue=vValue.iVal;/獲取值return iValue;/返回整數(shù)值3、列表控件操作函數(shù)在CADOConn類中定義了列表控件的操作函數(shù),實現(xiàn)將記錄集數(shù)據(jù)添加到指定的列表控件中。其中InitList函數(shù)實現(xiàn)初始化列表控件。BOOL CADOConn:InitList(
50、CListCtrl *listMain,int colSum)long lMax=0;_variant_t vIndex;/var類型索引vIndex.vt=VT_I2;int i;lMax=m_pRecordset->Fields->Count;/獲取記錄集字段數(shù)/設(shè)置列表框控件風格listMain->SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);for(i=0;i<lMax;i+)/遍歷各字段CString strTitle=""vIndex.iVal=i;/字段索引/獲取字段名稱
51、strTitle=(LPCTSTR)m_pRecordset->Fields->GetItem(vIndex)->GetName();/在列表框中添加列l(wèi)istMain->InsertColumn(i,strTitle,LVCFMT_CENTER,100,0);int intWidth=0;/列表框列的寬度for(i=0;i<colSum;i+)/遍歷列表框中添加列/根據(jù)字段標題自動設(shè)置列寬listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);intWidth=intWidth+listMain->G
52、etColumnWidth(i);/計算列寬總和RECT rectList;listMain->GetWindowRect(&rectList);/獲取列表框的窗口區(qū)域if(intWidth<(rectList.right-rectList.left)/使列表項充滿列表框窗口intWidth=(rectList.right-rectList.left-intWidth)/colSum;listMain->SetColumnWidth(i,listMain->GetColumnWidth(i)+intWidth);return TRUE;FillList函數(shù)用于向
53、列表框中添加記錄BOOL CADOConn:FillList(CListCtrl *listMain,int ColOpenEnd)int i,iType,iRow=0,listWidth=0;_variant_t vIndex;/var類型索引long lMax=0;lMax=m_pRecordset->Fields->Count;/記錄集字段數(shù)目vIndex.vt=VT_I2;listMain->DeleteAllItems();/刪除列表控件各列的值if(!m_pRecordset->adoEOF)/遍歷記錄集MoveFirst();/首條記錄while (!m_
54、pRecordset->adoEOF)for (i=0;i<lMax;i+)CString strValue=""vIndex.iVal=i;/字段索引/獲取字段類型iType=m_pRecordset->Fields->GetItem(vIndex)->GetType();switch(iType)case ado_Field_Str:case ado_Field_Text:/文本strValue=GetValueString(i,0);/獲取文本值break;case ado_Field_Long:/長整型strValue=GetValueLongStr(i,0);/獲取長整值并轉(zhuǎn)換為文本break;case ado_Field_Int:/Int型strValue=GetValueIntStr(i,0);/獲取INT值并轉(zhuǎn)換為文本break;case ado_Field_Float:/Float型strValue=GetValueFloatStr(i,0,2);/獲取Float值并
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 液力機械的流體動力特性分析考核試卷
- 3-9數(shù)據(jù)選擇器2電子課件教學版
- 筆的制造業(yè)國際市場拓展與貿(mào)易實務(wù)考核試卷
- 皮革物理性能測試方法與設(shè)備考核試卷
- 教案新人教版高一語文必修1第四單元訓練卷
- 煤炭直接燃燒與污染控制技術(shù)考核試卷
- 一年級數(shù)學上冊《常考試題》
- 慢性阻塞性肺疾病診斷與治療 2
- 山東省平原縣第一中學2024-2025學年高一下學期3月月考 數(shù)學試題【含答案】
- 臨床骨折救治應(yīng)急預(yù)案
- 廣州市黃埔區(qū)教育局招聘事業(yè)編制教職員考試真題2024
- 2025世界防治哮喘日知識講座專題課件
- 糧食安全時政試題及答案
- 小學開展常規(guī)教育經(jīng)驗交流活動方案
- 第四單元專題學習《孝親敬老傳承家風》公開課一等獎創(chuàng)新教學設(shè)計-(同步教學)統(tǒng)編版語文七年級下冊名師備課系列
- 2025年03月四川成都農(nóng)業(yè)科技中心公開招聘筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2024年鄭州鐵路職業(yè)技術(shù)學院單招職業(yè)技能測試題庫必考題
- 全過程工程咨詢投標方案(技術(shù)方案)
- 2025團校入團培訓考試題庫(含答案)
- GB 14934-2016食品安全國家標準消毒餐(飲)具
- 自然辯證法(2023修訂版)課后思考題
評論
0/150
提交評論