數(shù)據(jù)庫課程設(shè)計(jì)報(bào)告銷售管理系統(tǒng)
數(shù)據(jù)庫系統(tǒng)課程設(shè)計(jì)
目錄
第 1 章 前言 ....................................................... 1
1.1 課題背景................................................. 1
1.2 開發(fā)工具................................................. 1
1.2.1 SQL Server 2005................................ 2
1.2.2 MFC............................................... 2
1.2.3 ADO............................................... 2
第2章 需求分析..................................................... 3
2.1 任務(wù)概述.................................................. 3
2.1.1任務(wù)目標(biāo)............................................. 3
2.1.2用戶特點(diǎn)............................................. 3
2.2 系統(tǒng)的功能需求 ............................................ 3
2.2.1 系統(tǒng)角色功能需求 ................................... 3
2.2.2 功能模塊 ........................................... 3
2.3 系統(tǒng)的性能需求 ............................................ 3
2.4 系統(tǒng)的數(shù)據(jù)需求 ............................................ 4
第 3 章 系統(tǒng)總體設(shè)計(jì) ................................................ 5
3.1 系統(tǒng)功能設(shè)計(jì) .............................................. 5
3.1.1 各功能模塊介紹 ...................................... 5
3.1.2 系統(tǒng)總體模塊圖 ...................................... 5
第 4 章 數(shù)據(jù)庫設(shè)計(jì) ................................................... 6
4.1 數(shù)據(jù)庫概念設(shè)計(jì) ............................................ 6
4.2 數(shù)據(jù)庫邏輯設(shè)計(jì) ............................................ 7
4.2.1 表匯總 ............................................. 7
4.2.2 表邏輯結(jié)構(gòu)設(shè)計(jì) ..................................... 7
第 5 章 詳細(xì)設(shè)計(jì) .................................................... 9
5.1 程序結(jié)構(gòu)的設(shè)計(jì) ............................................. 9
5.2 頁面設(shè)計(jì) ................................................... 10
5.2.1 登錄界面 ............................................ 10
5.2.2 管理界面 .............................................10
5.2.3 用戶管理 .............................................11
5.2.4 客戶信息管理 ........................................ 11
5.2.5 商品信息管理 .........................................12
5.2.6 營(yíng)銷信息管理 .........................................12
5.3 編碼設(shè)計(jì) ................................................... 13
5.3.1ADO連接 ................................................. 13
5.3.2 更改密碼 .............................................. 17
5.3.3 登錄…………........................................... 17
5.3.4 客戶管理.............................................. 18
5.3.5 商品管理.......................................... …….21
5.3.6 銷售管理.......................................... ……..23
第 6 章 結(jié)論與展望 .................................................. 31
6.1 結(jié)論 ........................................................ 31
6.2 系統(tǒng)不足 .................................................... 31
6.3 感謝........................................... …………………31
參考文獻(xiàn) ........................................................... 31
第1章 前言
1.1 課題背景
隨著中國電子商務(wù)、互聯(lián)網(wǎng)業(yè)務(wù)的迅猛發(fā)展,國內(nèi)許多企業(yè)已跨入電腦網(wǎng)絡(luò)管理時(shí)代,并因此提高了管理效率和市場(chǎng)競(jìng)爭(zhēng)力。但目前仍有部分企業(yè)還停留在原始計(jì)賬管理階段。而隨著全球經(jīng)濟(jì)信息化的進(jìn)程和WTO的成功實(shí)現(xiàn),企業(yè)面臨著前所未有的機(jī)遇和挑戰(zhàn),在如此激變的社會(huì)形勢(shì)和激烈的市場(chǎng)競(jìng)爭(zhēng)下,愈來愈多的企業(yè)管理者意識(shí)到效率管理和科學(xué)管理的重要性,以及增強(qiáng)市場(chǎng)競(jìng)爭(zhēng)力的迫切性,因此建立科學(xué)、規(guī)范、高效的管理制度和秉承富有競(jìng)爭(zhēng)力的經(jīng)營(yíng)理念是每一個(gè)企業(yè)管理者的渴望,企業(yè)采用電腦管理進(jìn)貨、庫存、銷售等諸多環(huán)節(jié)也已成為趨勢(shì)及必然。
許多從事商業(yè)活動(dòng)的企業(yè)都需要采購商品、銷售商品以及將商品暫時(shí)存儲(chǔ)在倉庫中,對(duì)這一工作流程進(jìn)行有效地管理和控制,對(duì)這些企業(yè)來說是非常重要。在進(jìn)貨、庫存、銷售環(huán)節(jié)中,由于商品種類繁多、業(yè)務(wù)量大、庫存管理復(fù)雜,使用手工操作的工作量很大,在操作過程中也很容易出現(xiàn)各種錯(cuò)誤。而采用計(jì)算機(jī)管理則可以大大提高日常工作的效率,不僅將原來由手工操作的進(jìn)貨、出貨及銷售這一整套流程用計(jì)算機(jī)進(jìn)行全程管理,而且消除了手工操作中可能存在的不確定因素,達(dá)到進(jìn)銷存管理流程清晰,從而能夠比較徹底地貫徹經(jīng)營(yíng)者的管理模式。
由于科學(xué)技術(shù)的不斷發(fā)展,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們所深刻認(rèn)識(shí),它己進(jìn)入人類社會(huì)的各個(gè)領(lǐng)域并發(fā)揮著越來越重要的作用。采用計(jì)算機(jī)進(jìn)行信息化管理已成為衡量企業(yè)管理科學(xué)化和現(xiàn)代化的重要標(biāo)志,而銷售管理的全面自動(dòng)化、信息化則是其中重要的組成部分。銷售管理的好壞對(duì)于企業(yè)的決策者和管理者來說都至關(guān)重要,在很大程度上影響著企業(yè)的經(jīng)濟(jì)效益和社會(huì)效益。因此,本文所研究的銷售管理系統(tǒng)具有一定的使用價(jià)值和現(xiàn)實(shí)意義。
一直以來人們使用傳統(tǒng)人工的方式進(jìn)行銷售管理,這種管理方式存在著諸多缺點(diǎn),如:工作量大、效率低、保密性差,另外時(shí)間一長(zhǎng),將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于查找、更新和維護(hù)都帶來了不少的困難。鑒于此,本文研究了一種基于關(guān)系型數(shù)據(jù)庫的銷售管理方案。利用SQL Server2005數(shù)據(jù)庫管理系統(tǒng)靈活性和開發(fā)效率高的特點(diǎn),采用面向?qū)ο蟮腣C的方法,開發(fā)出銷售管理系統(tǒng)。該系統(tǒng)具有手工管理所無法比擬的優(yōu)點(diǎn),如:檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、信息利用率高、成本低等。該系統(tǒng)能夠極大地提高銷售管理的效率,優(yōu)化企業(yè)的人力、物力,降低企業(yè)的管理成本,為企業(yè)銷售管理的信息化、正規(guī)化奠定了堅(jiān)實(shí)的基礎(chǔ)。
1.2 開發(fā)工具
本文所采用的開發(fā)工具主要是基于數(shù)據(jù)庫系統(tǒng)的SQL Server 2005 和基于面向?qū)ο蟪绦蛟O(shè)計(jì)的VC,主要利用其MFC技術(shù)。利用SQL Server 2005創(chuàng)建商場(chǎng)客戶表、商品表、商品供應(yīng)商表、進(jìn)貨表、銷售表以及用VC連接數(shù)據(jù)庫用的用戶信息表。利用ADO連接的方法訪問數(shù)據(jù)庫。利用VC和數(shù)據(jù)庫建立連接之后,利用VC中的控件按鈕以及一些程序代碼實(shí)現(xiàn)一些特定的功能,例如營(yíng)銷信息查詢、刪除、修改等,極大地提高了銷售管理的效率。
1.2.1 SQL Server 2005
SQL Server 2005 是微軟公司動(dòng)用上千人的研發(fā)力量,耗費(fèi)五年時(shí)間打造出來 的產(chǎn)品,在企業(yè)及數(shù)據(jù)庫產(chǎn)品中具有里程碑的意義。SQL Server 2005 是一個(gè)關(guān)系 數(shù)據(jù)庫管理系統(tǒng),是一個(gè)全面的數(shù)據(jù)庫平臺(tái),其數(shù)據(jù)庫引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu) 化數(shù)據(jù)提供了更安全可靠的存儲(chǔ)功能。SQL Server 2005 結(jié)合了分析、報(bào)表、集 成和通知功能,引進(jìn)了一套集成的管理工具和管理應(yīng)用編程接口,以提供易用性、 可管理性及對(duì)大型 SQL Server 配置的支持。其新的查詢類型和在交易過程中使用 錯(cuò)誤處理的功能,為開發(fā)人員在 SQL Server 查詢開發(fā)方面提供了更高的靈活性和 控制力。
SQL Server 可以適合大容量數(shù)據(jù)的應(yīng)用,在功能上和管理上都比 Microsoft Access 要強(qiáng)的多。在處理海量數(shù)據(jù)的效率,后臺(tái)開發(fā)的靈活性,可擴(kuò)展等方面強(qiáng) 大。在 SQL Server 2005 中還可以使用存儲(chǔ)過程,在服務(wù)器執(zhí)行操作時(shí),減少網(wǎng)絡(luò) 通訊,提高了執(zhí)行效率,而且保證了數(shù)據(jù)庫的安全。
1.2.2 MFC
MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),同VCL類似,是一種Application Framework,隨微軟Visual C++ 開發(fā)工具發(fā)布。目前最新版本為9.0(截止2008年11月)。該類庫提供一組通用的可重用的類庫供開發(fā)人員使用。大部分類均從CObject 直接或間接派生,只有少部分類例外。
MFC 應(yīng)用程序的總體結(jié)構(gòu)通常由開發(fā)人員從MFC類派生的幾個(gè)類和一個(gè)CWinApp類對(duì)象(應(yīng)用程序?qū)ο螅┙M成。MFC 提供了MFC AppWizard 自動(dòng)生成框架。
Windows 應(yīng)用程序中,MFC 的主包含文件為"Afxwin.h"。
此外MFC的部分類為MFC/ATL 通用,可以在Win32 應(yīng)用程序中單獨(dú)包含并使用這些類。
由于它的易用性,初學(xué)者常誤認(rèn)為VC++開發(fā)必須使用MFC。這種想法是錯(cuò)誤的。作為Application Framework,MFC的使用只能提高某些情況下的開發(fā)效率,只起到輔助作用,而不能替代整個(gè)Win32 程序設(shè)計(jì)。
1.2.3 ADO
微軟公司的ADO (ActiveX Data Objects) 是一個(gè)用于存取數(shù)據(jù)源的COM組件。它提供了編程語言和統(tǒng)一數(shù)據(jù)訪問方式OLEDB的一個(gè)中間層。允許開發(fā)人員編寫訪問數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫是如何實(shí)現(xiàn)的,而只用關(guān)心到數(shù)據(jù)庫的連接。訪問數(shù)據(jù)庫的時(shí)候,關(guān)于SQL的知識(shí)不是必要的,但是特定數(shù)據(jù)庫支持的SQL命令仍可以通過ADO中的命令對(duì)象來執(zhí)行。ADO被設(shè)計(jì)來繼承微軟早期的數(shù)據(jù)訪問對(duì)象層,包括RDO (Remote Data Objects) 和DAO(Data Access Objects)。
第 2 章 需求分析
2.1 任務(wù)概述
2.1.1 系統(tǒng)目標(biāo)
銷售管理系統(tǒng)是為了提高銷售管理效率而開發(fā)的。它包括客戶信息管理、商品信息管理、營(yíng)銷信息管理等模塊,并提供了查詢、修改、添加、刪除等功能。銷售管理系統(tǒng)能簡(jiǎn)化貿(mào)易公司在銷售管理方面的復(fù)雜性,和減少在管理上的龐大開銷。隨著計(jì)算機(jī)行業(yè)的飛速發(fā)展,人類已經(jīng)進(jìn)入了信息時(shí)代,社會(huì)中的各個(gè)單位、部門也陸續(xù)開始使用軟件化的管理模式,由于它具有方便、準(zhǔn)確、快速、靈活的特點(diǎn),使得在管理上實(shí)現(xiàn)了自動(dòng)化、一體化、多元化的目標(biāo)。
本課程設(shè)計(jì)開發(fā)了一個(gè)銷售管理系統(tǒng),該系統(tǒng)完成了對(duì)商品進(jìn)貨、商品銷售、供應(yīng)商信息、客戶信息等的添加、修改、刪除、查詢等功能,迅速準(zhǔn)確地完成各種工作,大大提高了企業(yè)的管理效率。
2.1.2用戶特點(diǎn)
許多從事商業(yè)活動(dòng)的企業(yè)都需要采購商品、銷售商品以及將商品暫時(shí)存儲(chǔ)在倉庫中,對(duì)這一工作流程進(jìn)行有效地管理和控制,對(duì)這些企業(yè)來說是非常重要。在進(jìn)貨、庫存、銷售環(huán)節(jié)中,由于商品種類繁多、業(yè)務(wù)量大、庫存管理復(fù)雜,使用手工操作的工作量很大,在操作過程中也很容易出現(xiàn)各種錯(cuò)誤。本系統(tǒng)采用計(jì)算機(jī)管理則可以大大提高日常工作的效率,不僅將原來由手工操作的進(jìn)貨、出貨及銷售這一整套流程用計(jì)算機(jī)進(jìn)行全程管理,而且消除了手工操作中可能存在的不確定因素,達(dá)到進(jìn)銷存管理流程清晰,從而能夠比較徹底地貫徹經(jīng)營(yíng)者的管理模式。
2.2系統(tǒng)的功能需求
2.2.1 角色功能需求
本系統(tǒng)共包含供應(yīng)商、商品、客戶三中角色:
(1)供應(yīng)商:包括商品供應(yīng)商和商品的品牌商兩種,我們可以通過添加、修改和刪除等操作對(duì)這兩種供應(yīng)商進(jìn)行更新;
(2)商品:進(jìn)貨和銷售功能均以商品為主體,同時(shí)可以添加商品的數(shù)量;
(3)客戶:客戶可以采購商品,也可以添加客戶的數(shù)量及信息
2.2.2功能模塊
系統(tǒng)包括管理員信息模塊、客戶信息模塊、商品信息模塊、營(yíng)銷信息模塊(進(jìn)貨和銷售管理)、供應(yīng)商信息模塊。
(1)管理員信息模塊功能需求:可以添加新的用戶及密碼,也可以更改當(dāng)前用戶的密碼;
(2)客戶信息模塊功能需求:可以添加新客戶的各種信息,也可以進(jìn)行刪除、修改和查詢;
(3)商品信息模塊功能需求:能夠添加新的商品,也可以對(duì)以前的商品信息進(jìn)行刪除、修改和查詢;
(4)營(yíng)銷信息模塊功能需求:包括進(jìn)貨和銷售信息,可以對(duì)其進(jìn)行添加、刪除、修改和查詢;
(5)供應(yīng)商信息模塊功能需求:可以添加、刪除、修改和查詢供應(yīng)商的信息。
2.3 系統(tǒng)的性能分析
為了保證系統(tǒng)能夠長(zhǎng)期、安全、穩(wěn)定、可靠、高效的運(yùn)行,系統(tǒng)應(yīng)該滿足以下的性能需求:
(1)系統(tǒng)處理的準(zhǔn)確性和及時(shí)性 系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。在系統(tǒng)設(shè)計(jì)和開發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時(shí)間能夠滿足用戶對(duì)信息的處理。由于系統(tǒng)的查詢功能對(duì)于整個(gè)系統(tǒng)的功能和性能完成很重要。從系統(tǒng)的多個(gè)數(shù)據(jù)來源來看,學(xué)生信息查詢、教師信息查詢、實(shí)驗(yàn)信息 查詢、排課結(jié)果查詢、實(shí)驗(yàn)成績(jī)查詢,其準(zhǔn)確性很大程度上決定了系統(tǒng)的成敗。 因此,在系統(tǒng)開發(fā)過程中,系統(tǒng)采用優(yōu)化的 SQL 語句及安全擴(kuò)展存儲(chǔ)過程來保證 系統(tǒng)的準(zhǔn)確性和及時(shí)性。
(2)系統(tǒng)的開放性和系統(tǒng)的可擴(kuò)充性 系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后的可擴(kuò)充性。例如實(shí)驗(yàn)信息屬性添加、修改,用戶查詢的需求及管理工作的分級(jí)管理等模塊也會(huì)不斷的更新和完善。所 有這些,都要求系統(tǒng)提供足夠的手段進(jìn)行功能的調(diào)整和擴(kuò)充。而要實(shí)現(xiàn)這一點(diǎn), 應(yīng)通過系統(tǒng)的開放性來完成,既系統(tǒng)應(yīng)是一個(gè)開放系統(tǒng),只要符合一定的規(guī)范, 可以簡(jiǎn)單的加入和減少系統(tǒng)的模塊,配置系統(tǒng)的硬件。通過軟件的修補(bǔ)、替換完 成系統(tǒng)的升級(jí)和更新?lián)Q代。
(3)系統(tǒng)的易用性和易維護(hù)性 系統(tǒng)是直接面對(duì)使用人員的,而有些使用人員往往對(duì)計(jì)算機(jī)并不是非常熟悉。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機(jī)交互界面。要實(shí)現(xiàn)這一點(diǎn), 就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉的術(shù)語和中文信息的界面;針對(duì)用戶可能出現(xiàn) 的使用問題,要提供足夠的在線幫助,縮短用戶對(duì)系統(tǒng)熟悉的過程。
系統(tǒng)中涉及到的數(shù)據(jù)是高校實(shí)驗(yàn)室相當(dāng)重要的信息,因此系統(tǒng)為不同角色的 用戶提供了方便的管理后臺(tái)進(jìn)行數(shù)據(jù)管理,特別為系統(tǒng)管理員提供了數(shù)據(jù)備份, 日常安全管理,防止系統(tǒng)意外崩潰等功能。
2.4系統(tǒng)的數(shù)據(jù)需求
該系統(tǒng)的開發(fā)主要任務(wù)是實(shí)現(xiàn)對(duì)銷售系統(tǒng)自動(dòng)化的處理,所以我們初步規(guī)劃出系統(tǒng)所需要的數(shù)據(jù)有:
客戶的基本信息:公司名稱、聯(lián)系人姓名、地址、城市、地區(qū)、郵編、聯(lián)系電話、傳真、主頁、備注;
供應(yīng)商基本信息:公司名稱、聯(lián)系人姓名、地址、城市、地區(qū)、郵編、聯(lián)系電話、傳真、主頁、備注;
商品的基本信息:商品名稱、商品規(guī)格、規(guī)格單位、商品備注信息;
進(jìn)貨的基本信息:供應(yīng)商名稱、商品名稱、商品規(guī)格、商品規(guī)格單位、數(shù)量、單價(jià)、進(jìn)貨日期、備注;
銷售的基本信息:客戶名稱、商品名稱、產(chǎn)品規(guī)格、規(guī)格單位、數(shù)量、單價(jià)、銷售日期、折扣、備注。
第 3 章 系統(tǒng)總體設(shè)計(jì)
3.1 系統(tǒng)功能設(shè)計(jì)
3.1.1各功能模塊介紹
經(jīng)過分析后確定系統(tǒng)應(yīng)具備以下功能:
(1) 系統(tǒng)管理功能
① 修改密碼:修改正在運(yùn)行的用戶密碼;
② 添加用戶:添加新的用戶,并設(shè)置密碼。
(2)客戶信息管理功能
① 供應(yīng)商信息管理:添加、刪除、修改或查詢供應(yīng)商信息。
② 客戶信息管理:添加、刪除、修改或查詢客戶信息。
(3) 商品信息管理功能
添加、刪除或修改商品信息。
(4) 營(yíng)銷信息管理功能
① 進(jìn)貨信息管理:添加、修改、查詢或刪除進(jìn)貨信息。
② 銷售信息管理:添加、刪除、修改或查詢進(jìn)貨信息。
3.1.2 系統(tǒng)總體模塊圖
第 4 章 數(shù)據(jù)庫設(shè)計(jì)
4.1 數(shù)據(jù)庫概念設(shè)計(jì)
本系統(tǒng)包括的實(shí)體有:客戶、供應(yīng)商、商品、管理員,下面是各實(shí)體的實(shí)體屬性介紹:
(1) 管理員
描述:銷售管理中存儲(chǔ)的所有管理員信息(包括所有查詢的所需信息)
其中包含屬性 用戶名:用于標(biāo)識(shí)登陸系統(tǒng)的用戶賬號(hào),具有唯一性
用戶密碼:用于對(duì)應(yīng)登陸用戶名的密碼
(2) 供應(yīng)商信息supperliers
描述:銷售管理中存儲(chǔ)的所有供應(yīng)商信息
其中包含屬性 CompanyName:用于標(biāo)識(shí)供應(yīng)商,具有唯一性
ContactName:用于標(biāo)識(shí)聯(lián)系人姓名
Address:用于標(biāo)志供應(yīng)商公司地址
City:用于標(biāo)識(shí)供應(yīng)商所在城市
Region:用于標(biāo)識(shí)地區(qū)信息
PostalCode:用于標(biāo)識(shí)郵編
Phone:用于標(biāo)識(shí)聯(lián)系電話
Fax:用于標(biāo)識(shí)傳真信息
HomePage:用于標(biāo)識(shí)公司主頁
SupplierMemo:用于標(biāo)識(shí)備注信息
(3) 客戶信息 customers
描述:銷售管理中存儲(chǔ)的所有客戶信息
其中包含屬性 CompanyName:用于標(biāo)識(shí)客戶公司,具有唯一性
ContactName:用于標(biāo)識(shí)聯(lián)系人姓名
Address:用于標(biāo)志客戶公司地址
City:用于標(biāo)識(shí)客戶所在城市
Region:用于標(biāo)識(shí)地區(qū)信息
PostalCode:用于標(biāo)識(shí)郵編
Phone:用于標(biāo)識(shí)聯(lián)系電話
Fax:用于標(biāo)識(shí)傳真信息
HomePage:用于標(biāo)識(shí)公司主頁
SupplierMemo:用于標(biāo)識(shí)備注信息
(4) 商品信息 products
描述:銷售管理中存儲(chǔ)的所有商品信息
其中包含屬性 ProducName:用于標(biāo)識(shí)商品,具有唯一性
Spec:用于標(biāo)識(shí)商品規(guī)格
Unit:用于標(biāo)識(shí)商品規(guī)格單位
Productmemo:用于標(biāo)識(shí)備注信息
系統(tǒng)總體E-R圖:
4.2數(shù)據(jù)庫邏輯設(shè)計(jì)
4.2.1表匯總
各數(shù)據(jù)庫表的簡(jiǎn)要說明:
表名
簡(jiǎn)要說明
Customers
銷售管理中存儲(chǔ)的所有客戶信息
Orders
銷售管理中存儲(chǔ)的所有商品銷售信息
Supplies
銷售管理中存儲(chǔ)的所有供應(yīng)商信息
Sstock
銷售管理中存儲(chǔ)的所有商品進(jìn)貨信息
Products
銷售管理中存儲(chǔ)的所有商品信息
User_Info
銷售管理中存儲(chǔ)的所有管理員信息
4.2.2 表邏輯結(jié)構(gòu)設(shè)計(jì)
表1 customers表
字段名
數(shù)據(jù)類型
長(zhǎng)度
描述
是否主鍵
CompanyName
varchar
40
客戶公司名稱
是
ContactName
varchar
30
聯(lián)系人姓名
否
Address
varchar
60
聯(lián)系地址
否
City
varchar
15
城市姓名
否
Region
varchar
10
地區(qū)姓名
否
PostalCode
varchar
10
郵政編碼
否
Phone
varchar
24
聯(lián)系電話
否
Fax
varchar
24
傳真
否
Homepage
varchar
50
公司主頁
否
CustomerMemo
text
16
備注信息
否
表2 orders表(銷售表)
字段名
數(shù)據(jù)類型
長(zhǎng)度
描述
是否主鍵
CustomerName
varchar
40
客戶名稱
是
ProducName
varchar
40
商品名稱
是
Spec
varchar
20
商品規(guī)格
否
Unit
varchar
20
商品規(guī)格單位
否
Quantity
varchar
20
商品數(shù)量
否
UnitPrice
float
8
商品單價(jià)
否
OrderDate
datetime
8
銷售日期
否
Discount
float
8
折扣
否
Ordermemo
text
16
備注
否
表3 products表(商品表)
字段名
數(shù)據(jù)類型
長(zhǎng)度
描述
是否主鍵
ProductName
varchar
40
商品名稱
是
Spec
varchar
20
商品規(guī)格
否
Unit
varchar
20
商品規(guī)格單位
否
Productmemo
text
16
備注
否
表4 sstock表(進(jìn)貨表)
字段名
數(shù)據(jù)類型
長(zhǎng)度
描述
是否主鍵
ProviderName
varchar
40
商品公司名稱
是
ProductName
varchar
40
商品名稱
是
Spec
varchar
20
商品規(guī)格
否
Unit
varchar
20
商品規(guī)格單位
否
Quantity
varchar
20
商品數(shù)量
否
UnitPrice
float
8
商品單價(jià)
否
StockDate
datetime
8
進(jìn)貨日期
否
Stockmemo
text
16
備注
否
表5 suppliers表(供應(yīng)商表)
字段名
數(shù)據(jù)類型
長(zhǎng)度
描述
是否主鍵
CompanyName
varchar
40
供應(yīng)商公司名稱
是
ContactName
varchar
30
聯(lián)系人姓名
否
Address
varchar
60
聯(lián)系地址
否
City
varchar
15
城市姓名
否
Region
varchar
10
地區(qū)姓名
否
PostalCode
varchar
10
郵政編碼
否
Phone
varchar
24
聯(lián)系電話
否
Fax
varchar
24
傳真
否
Homepage
varchar
50
公司主頁
否
SuppplierMemo
text
16
備注信息
否
第 5 章 詳細(xì)設(shè)計(jì)
5.1 程序結(jié)構(gòu)的設(shè)計(jì)
數(shù)據(jù)流圖(DFD)
本系統(tǒng)的數(shù)據(jù)流圖如下圖所示:
圖1 頂級(jí)數(shù)據(jù)流圖
圖2 添加或刪除相關(guān)信息數(shù)據(jù)流圖
圖3 查詢信息數(shù)據(jù)流圖
5.2 頁面設(shè)計(jì)
5.2.1 登錄界面
通過用戶輸入的用戶名及密碼,獲取數(shù)據(jù)庫中此用戶名的詳細(xì)信息,如果不存在,提示用戶不存在錯(cuò)誤;若密碼不匹配,提示輸入密碼不正確;數(shù)據(jù)庫鏈接不正常,記錄日志;系統(tǒng)獲取用戶信息后,若用戶名密碼匹配,根據(jù)角色進(jìn)入不同頁面
下面是登錄窗口:
5.2.2管理界面
管理員登錄后,進(jìn)入管理界面,可以通過左上面的菜單連接到不同的功能界面,實(shí)現(xiàn)不同的功能,此菜單是跟管理模塊圖對(duì)應(yīng)的。
5.2.3用戶管理
用戶可以對(duì)當(dāng)前密碼進(jìn)行修改,超級(jí)用戶可以添加新的用戶
5.2.4客戶信息管理
銷售的客戶包括供貨商和銷售客戶,所以客戶信息管理對(duì)應(yīng)了二者的添加、刪除、修改和查詢
5.2.5商品信息管理
商品信息的管理包括對(duì)商品的各種標(biāo)準(zhǔn)管理,可以添加新的商品或修改和刪除就的商品
5.2.6營(yíng)銷信息管理
營(yíng)銷信息包括進(jìn)貨和銷售,二者的添加修改和刪除操作很多比較類似
因?yàn)檫M(jìn)貨的商品種類是固定的,所以只有數(shù)量和單價(jià)及備注是可以填寫的,其他均是默認(rèn)值
5.3編寫代碼
5.3.1 ADO連接
BOOL CTrade_MISApp::InitInstance()
{
AfxEnableControlContainer();
// Init Login Count
m_iLoginCount = 0;
// Create ADO Connection
if( FAILED(::CoInitialize(NULL)) ) //初始化COM環(huán)境
{
AfxMessageBox("ADO Init failed");
return false;
}
try
{
ADOConn.CreateInstance(__uuidof(Connection));//創(chuàng)建連接對(duì)象實(shí)例
ADOConn->Open("DSN=Trade_MIS;Provider=MSDASQL","sa","", adConnectUnspecified);//ADOConn作為連接對(duì)象指針
}//打開數(shù)據(jù)庫
// Catch Exceptions
catch(_com_error &e)
{
CString err;
err.Format("%s", (char*)(e.Description()) );
AfxMessageBox(err);
}
catch(...)
{
AfxMessageBox("Unknown Error...");
}
// Init ADO RecordSet
m_pADOSet.CreateInstance(__uuidof(Recordset));//創(chuàng)建記錄集對(duì)象實(shí)例
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
// Popup Login Dialog
CLoginDLG dlg;
if ( IDOK!=dlg.DoModal() ) return false;
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTrade_MISDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTrade_MISView));
AddDocTemplate(pDocTemplate);
m_nCmdShow = SW_SHOWMAXIMIZED;//Max window when show
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->SetWindowText(_T("銷售管理系統(tǒng)"));
m_pMainWnd->UpdateWindow();
return TRUE;
}
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
// App command to run the dialog
void CTrade_MISApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
//執(zhí)行SQL語句的函數(shù)如下:
bool CTrade_MISApp::ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL)//ADOSet作為引用,起到指針作用,是記錄集對(duì)象指針
{
if ( ADOSet->State == adStateOpen) ADOSet->Close();
try
{
ADOSet->Open(strSQL, ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown);//打開記錄集
return true;//執(zhí)行成功返回真值
}
catch(_com_error &e)
{
CString err;
err.Format("ADO Error: %s",(char*)e.Description());
AfxMessageBox(err);
return false;//捕捉到錯(cuò)誤返回假值
}
}
int CTrade_MISApp::ExitInstance() //斷開數(shù)據(jù)庫連接的函數(shù)
{
// TODO: Add your specialized code here and/or call the base class
// Release ADO RecordSet//釋放指針
if(adStateOpen==m_pADOSet->State) m_pADOSet->Close();//關(guān)閉記錄集
m_pADOSet.Release();
// Release ADO Connection//斷開連接
if( adStateOpen == ADOConn->State ) ADOConn->Close();//斷開數(shù)據(jù)庫連接
ADOConn.Release();
return CWinApp::ExitInstance();
}
5.3.2 更改密碼
void CChangePwdDLG::OnOK()
{
UpdateData(true);
// 確保密碼輸入非空
if ( ""==m_sPWD1 )
{
AfxMessageBox(_T("密碼不能未空"), MB_ICONEXCLAMATION);
return;
}
//判斷兩次輸入的密碼一致
if ( 0!=m_sPWD1.Compare(m_sPWD2) )
{
AfxMessageBox(_T("兩次輸入密碼不一樣,請(qǐng)確認(rèn)"), MB_ICONEXCLAMATION);
return;
}
CDialog::OnOK();
}
BOOL CChangePwdDLG::OnInitDialog()
{
CDialog::OnInitDialog();
((CEdit*)GetDlgItem(IDD_CHANGEPWD_PWD1))->SetLimitText(10);
((CEdit*)GetDlgItem(IDD_CHANGEPWD_PWD2))->SetLimitText(10);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
5.3.3 登錄
void CLoginDLG::OnOK()
{
// TODO: Add extra validation here
// Check UserName Vadilaty
UpdateData(true);
m_sUSER.TrimRight(" ");
//刪除空格
if ( ""==m_sUSER )
{//用戶名輸入為空
AfxMessageBox(_T("請(qǐng)?zhí)顚懹脩裘?quot;), MB_ICONEXCLAMATION);
return;
}
_variant_t Holder, strQuery;
strQuery = "select user_ID, user_PWD from user_Info where user_ID='"+m_sUSER+"'";//查詢用戶名和密碼
theApp.ADOExecute(theApp.m_pADOSet, strQuery);//執(zhí)行查詢語句,獲得記錄集
int iCount = theApp.m_pADOSet->GetRecordCount();//獲取記錄條數(shù)
if (iCount==0)
{//若數(shù)據(jù)庫中記錄數(shù)為0
theApp.m_iLoginCount++;//登錄計(jì)數(shù)
if ( theApp.m_iLoginCount>2 )
{//輸入次數(shù)為三次
AfxMessageBox("沒有這個(gè)用戶\n三次輸入均不正確,請(qǐng)核對(duì)后再來", MB_ICONEXCLAMATION);
CDialog::OnCancel();
return;
}
AfxMessageBox("沒有這個(gè)用戶,請(qǐng)重新輸入用戶名", MB_ICONEXCLAMATION);
return;
}
CString sPWD;
theApp.m_pADOSet->MoveFirst();//指向第一條記錄
Holder = theApp.m_pADOSet->GetCollect("user_PWD");//獲取記錄中user_PWD值
sPWD = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
if ( 0!=sPWD.Compare(m_sPWD) )
{//若sPWD和m_sPWD不相等
theApp.m_iLoginCount++;//登錄次數(shù)加1
if ( theApp.m_iLoginCount>2 )
{//登錄3次
AfxMessageBox("輸入密碼不正確\n三次輸入均不正確,請(qǐng)核對(duì)后再來", MB_ICONEXCLAMATION);
CDialog::OnCancel();
return;
}
AfxMessageBox("輸入密碼不正確,請(qǐng)重新輸入", MB_ICONEXCLAMATION);
return;
}
// Get Login User
theApp.m_sCurrentUser = m_sUSER;
CDialog::OnOK();
}
5.3.4 客戶管理
BOOL CCustomerDLG::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// Set Windows Text
if (m_bAppend) SetWindowText(_T("添加客戶信息"));
else SetWindowText(_T("修改客戶信息"));
m_sOldCompany = m_sCompany;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCustomerDLG::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);
m_sCompany.TrimRight(" ");
m_sPerson.TrimRight(" ");
m_sAddress.TrimRight(" ");
m_sCity.TrimRight(" ");
m_sArea.TrimRight(" ");
m_sPostCode.TrimRight(" ");
m_sPhone.TrimRight(" ");
m_sFax.TrimRight(" ");
m_sHomePage.TrimRight(" ");
// Make sure all needed info is available
CString sWarning="";
if ( ""==m_sCompany ) sWarning=_T("公司名稱");
else if ( ""==m_sPerson ) sWarning=_T("聯(lián)系人姓名");
else if ( ""==m_sAddress ) sWarning=_T("聯(lián)系地址");
else if ( ""==m_sCity ) sWarning=_T("城市名稱");
else if ( ""==m_sArea ) sWarning=_T("地區(qū)名稱");
else if ( ""==m_sPostCode ) sWarning=_T("郵政編碼");
else if ( ""==m_sPhone ) sWarning=_T("聯(lián)系電話");
else if ( ""==m_sFax ) sWarning=_T("傳真號(hào)碼");
else if ( ""==m_sHomePage ) sWarning=_T("公司主頁");
if ( ""!=sWarning )
{
sWarning += _T("不能為空");
AfxMessageBox(sWarning, MB_ICONEXCLAMATION);
return;
}
_variant_t strQuery;
if ( m_bAppend || m_sCompany!=m_sOldCompany )
{
// Judge Customer is unique
strQuery = "select * from customers where CompanyName='"+m_sCompany+"'";
theApp.ADOExecute(theApp.m_pADOSet, strQuery);
int iCount = theApp.m_pADOSet->GetRecordCount();
if ( 0!=iCount )
{
AfxMessageBox(_T("已經(jīng)存在此公司記錄!"), MB_ICONEXCLAMATION);
return;
}
}
if ( !m_bAppend ) // Not Append, delete old record first
{
strQuery = "delete from customers where CompanyName='"+m_sOldCompany+"'";
theApp.ADOExecute(theApp.m_pADOSet, strQuery);
}
// Insert Record
strQuery = "insert customers (CompanyName, ContactName, Address, City, Region, PostalCode, Phone,Fax, HomePage, CustomerMemo) \
values ('"+m_sCompany+"', '"+m_sPerson+"', '"+m_sAddress+"', '"+m_sCity+"', '"+m_sArea+"', '"+m_sPostCode+"', '"+m_sPhone+"', '"+m_sFax+"', '"+m_sHomePage+"', '"+m_sMemo+"')";
if ( theApp.ADOExecute(theApp.m_pADOSet, strQuery) )
{
if (m_bAppend)
{
AfxMessageBox(_T("添加客戶信息成功!"), MB_ICONINFORMATION);
// Clear all input
m_sCompany=m_sPerson=m_sAddress=m_sCity=m_sArea=m_sPostCode=m_sPhone=m_sFax=m_sHomePage=m_sMemo="";
UpdateData(false);
}
else AfxMessageBox(_T("修改客戶信息成功!"), MB_ICONINFORMATION);
}
else
{
if (m_bAppend) AfxMessageBox(_T("添加客戶信息失??!"), MB_ICONEXCLAMATION);
else AfxMessageBox(_T("修改客戶信息失??!"), MB_ICONEXCLAMATION);
}
strQuery = "select * from customers";
CTrade_MISView* p = (CTrade_MISView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
p->RefreshCustomer(strQuery);
if (!m_bAppend) CDialog::OnOK();
}
5.3.5 商品管理
BOOL CProductDLG::OnInitDialog()
{
CDialog::OnInitDialog();
//設(shè)置對(duì)話框標(biāo)題,m_bAppend設(shè)為true表示添加,false表示修改
if (m_bAppend) SetWindowText