版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于基于 delphidelphi 的小型超市進(jìn)存銷(xiāo)管理系統(tǒng)的小型超市進(jìn)存銷(xiāo)管理系統(tǒng)摘摘 要要在市場(chǎng)經(jīng)濟(jì)中,銷(xiāo)售是企業(yè)運(yùn)作的重要環(huán)節(jié),為了更好地推動(dòng)銷(xiāo)售,不少企業(yè)建立分公司代理,通過(guò)分公司或代理把產(chǎn)品推向最終用戶(hù)。這些分公司或代理商大多分布在全國(guó)各地,甚至是在國(guó)外,遠(yuǎn)距離頻繁的業(yè)務(wù)信息交流構(gòu)成了這些企業(yè)業(yè)務(wù)活動(dòng)的主要特點(diǎn)。在傳統(tǒng)方式上,公司之間通常采用電傳、電報(bào)、電話等方式傳遞發(fā)貨、到貨、壓貨、換貨、退貨等信息,并且對(duì)進(jìn)貨、銷(xiāo)售、庫(kù)存等信息進(jìn)行手工存檔,工作效率極其低下。本畢業(yè)設(shè)計(jì)針對(duì)傳統(tǒng)的進(jìn)存銷(xiāo)系統(tǒng)的一些弊端,根據(jù)進(jìn)存銷(xiāo)系統(tǒng)的基本流程,實(shí)現(xiàn)了一個(gè)小型超市的進(jìn)存銷(xiāo)管理系統(tǒng)。本系統(tǒng)主要包含有資料
2、管理、進(jìn)貨管理、銷(xiāo)售管理、庫(kù)存查詢(xún)、系統(tǒng)管理、歷史查詢(xún)、賬目查詢(xún)等進(jìn)存銷(xiāo)管理的基本功能。其中,資料管理包括有商品資料、供貨商資料、客戶(hù)資料的添加、刪除、修改、查詢(xún)等操作。本系統(tǒng)采用 c/s 模式,由 delphi 7.0 開(kāi)發(fā),數(shù)據(jù)庫(kù)設(shè)計(jì)使用 ms sql server2000。關(guān)鍵詞關(guān)鍵詞:c/s 模式;delphi;sql server 2000;進(jìn)存銷(xiāo)管理系統(tǒng)the stocking selling and storing management systemof small supermarket based on delphi abstractsalesmanship is an im
3、portant part of operation of enterprises in the market economy. in order to promote the sales of the produces, many enterprises establish the agencies of branch, push products to the terminal customers through these agencies. many agencies or branches are distributed all over the country, even abroa
4、d, so that the main feature of these business activities is remote frequent exchange of operational information. in the traditional way, the company usually exchange messages about the transmission, arrival, storage, change, return of goods by telex, telegraph, telephone and store the data of purcha
5、se, sale, storage by manual. the working efficiency is extremely low.according to the basic process of the stocking selling and storing management , the author realized a stocking selling and storing management system of small supermarket. the basic functions of this system include data management,
6、inventory management, sales management, storage inquiry, system management, history inquiry, account inquiry. the data management which include add, delete, modify and inquire the data about goods, data about supplier and data about customer. the system uses c/s model and has been developed by delph
7、i 7.0. database design use sql server 2000.key words: c/s model; delphi; sql server 2000; stocking selling and storing目目 錄錄1 引言 .11.1 課題背景與開(kāi)發(fā)目的.11.2 開(kāi)發(fā)環(huán)境.11.3 硬件需求.1系統(tǒng)總體設(shè)計(jì).22.1 功能概述.22.2 數(shù)據(jù)庫(kù)設(shè)計(jì).32.2.1 數(shù)據(jù)庫(kù)概念模型.32.2.2 數(shù)據(jù)庫(kù)各表設(shè)計(jì).42.2.3 進(jìn)貨單與銷(xiāo)售單存儲(chǔ)過(guò)程.73 超市進(jìn)存銷(xiāo)系統(tǒng)的實(shí)現(xiàn).83.1 用戶(hù)登錄.83.2 進(jìn)存銷(xiāo)系統(tǒng)主界面 .83.3 資料管理.93.4 進(jìn)貨管理
8、.103.5 銷(xiāo)售管理.133.6 庫(kù)存管理.143.7 系統(tǒng)管理.143.8 歷史查詢(xún).183.9 帳目查詢(xún).19結(jié) 論.22參考文獻(xiàn).22致 謝.23聲 明.241 1 引言引言1.11.1 課題背景與開(kāi)發(fā)目的課題背景與開(kāi)發(fā)目的電子商務(wù)的發(fā)展和市場(chǎng)競(jìng)爭(zhēng)的加劇將企業(yè)推上了風(fēng)口浪尖,中小企業(yè)除了積極迎接挑戰(zhàn)之外,別無(wú)選擇,網(wǎng)絡(luò)的興起與電子商務(wù)的發(fā)展帶來(lái)了時(shí)空界限的突破、貿(mào)易方式的變革和經(jīng)濟(jì)活動(dòng)的革命,從某種意義上講,這些變化為中小企業(yè)創(chuàng)造了與大型企業(yè)、國(guó)外企業(yè)平等競(jìng)爭(zhēng)的有利條件。然而,管理水平的差異會(huì)弱化這種平等的實(shí)際意義。具體而言,中小企業(yè)在進(jìn)、存、銷(xiāo)等環(huán)節(jié)的管理上都存在著一定程度的不足,而
9、這些不足無(wú)疑將使其在市場(chǎng)競(jìng)爭(zhēng)中陷入被動(dòng)的境地。在網(wǎng)絡(luò)經(jīng)濟(jì)的時(shí)代背景下,進(jìn)行有效的進(jìn)存銷(xiāo)管理已經(jīng)成為中小企業(yè)存身立業(yè)的頭等要事。然而對(duì)于一貫疏于管理的中小企業(yè)而言,實(shí)現(xiàn)有效的進(jìn)存銷(xiāo)管理必然存在著一定的難度,因此必須借助現(xiàn)代化的管理方法和管理技術(shù)計(jì)算機(jī)進(jìn)存銷(xiāo)管理系統(tǒng)。超市最主要的任務(wù)是商品進(jìn)貨存貨及銷(xiāo)售管理,即商品進(jìn)存銷(xiāo)管理,由于商品種類(lèi)繁多且數(shù)據(jù)量大,傳統(tǒng)手工操作任務(wù)繁重、工作效率低下,不適應(yīng)現(xiàn)代化信息社會(huì)發(fā)展需要,所以急需使用商品進(jìn)存銷(xiāo)管理軟件進(jìn)行現(xiàn)代化管理:超市運(yùn)作中批發(fā)及零售企業(yè)基本上都屬于中小型規(guī)模、而且單位數(shù)量特別多,因此商品進(jìn)銷(xiāo)存管理軟件有很大的需求市場(chǎng)。本文作者選擇 delphi
10、來(lái)開(kāi)發(fā)一個(gè)小型超市的進(jìn)存銷(xiāo)管理系統(tǒng),得到快速完美的開(kāi)發(fā)效果。本文對(duì)商業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)進(jìn)行系統(tǒng)分析,給出了管理系統(tǒng)用到的數(shù)據(jù)結(jié)構(gòu)及開(kāi)發(fā)過(guò)程中的關(guān)鍵技術(shù)。本系統(tǒng)采用 c/s 模式設(shè)計(jì),把超市工作人員從繁雜的數(shù)據(jù)管理以及處理中解放出來(lái),避免了手工數(shù)據(jù)統(tǒng)計(jì)的種種弊端,大大地提高了工作效率。將超市進(jìn)存銷(xiāo)的各種信息存儲(chǔ)于數(shù)據(jù)庫(kù)中,再通過(guò)前臺(tái)友好的用戶(hù)界面來(lái)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行插入、刪除、修改與更新等操作,由于本系統(tǒng)設(shè)計(jì)的界面友好,操作方便,用戶(hù)能輕而易舉地學(xué)會(huì)使用,有利于企業(yè)創(chuàng)造更大的經(jīng)濟(jì)效益。1.21.2 開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境delphi 是 inprise 公司的可視化軟件開(kāi)發(fā)工具,是目前創(chuàng)建 windo
11、ws 應(yīng)用程序最強(qiáng)大的開(kāi)發(fā)工具之一,它具有 c+的強(qiáng)大功能和 visual basic 的易用性,delphi 具有友好的開(kāi)發(fā)環(huán)境、真正面向?qū)ο蟮某绦蛟O(shè)置、組件化的編程方式、快速 pascal 編譯器,是軟件開(kāi)發(fā)人員不可多得的好工具。本系統(tǒng)是在 windows xp 操作系統(tǒng)下,使用 borland delphi 7.0 作為開(kāi)發(fā)工具,數(shù)據(jù)庫(kù)使用的是 sql server 2000 開(kāi)發(fā)。1.31.3 硬件需求硬件需求在運(yùn)行本系統(tǒng)前,請(qǐng)檢查一下計(jì)算機(jī)是否滿足以下要求:1.服務(wù)器要求的配置為:(1) cpu:intel 賽揚(yáng)以上,建議 intel pentium以上(2) 內(nèi)存:128m 以上,
12、建議 256m 以上(3) 硬盤(pán):1g 以上的可用硬盤(pán)安裝空間(4) microsoft sql server 7.0 以上2.客戶(hù)機(jī)硬件配置要求為:(1) cpu:intel 賽揚(yáng) 以上,建議 intel pentium 以上(2) 內(nèi)存:128m 以上,建議 256m 以上系統(tǒng)總體設(shè)計(jì)系統(tǒng)總體設(shè)計(jì)2.12.1 功能概述功能概述根據(jù)進(jìn)存銷(xiāo)管理系統(tǒng)的邏輯劃分,本系統(tǒng)一共分為七個(gè)功能,分別是資料維護(hù)、進(jìn)貨管理、銷(xiāo)售管理、庫(kù)存查詢(xún)、系統(tǒng)管理、歷史查詢(xún)、帳目查詢(xún)。其功能結(jié)構(gòu)圖如圖 2-1 所示。超市進(jìn)存銷(xiāo)管理系統(tǒng)資料維護(hù)進(jìn)貨管理銷(xiāo)售管理庫(kù)存查詢(xún)系統(tǒng)管理帳目查詢(xún)歷史查詢(xún)權(quán)限設(shè)置用戶(hù)管理圖 2-1 系統(tǒng)
13、功能結(jié)構(gòu)圖(1) 資料管理主要包括商品資料、供貨商資料和客戶(hù)資料的維護(hù),可以進(jìn)行添加、刪除、修改與查詢(xún)等一系列操作。商品資料、供貨商資料、客戶(hù)資料是進(jìn)銷(xiāo)存管理系統(tǒng)基本資料。(2) 進(jìn)貨管理主要功能是進(jìn)貨的過(guò)程中,對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行實(shí)時(shí)更新,入庫(kù)的時(shí)候,將供貨商、商品等基本信息讀入數(shù)據(jù)庫(kù)的表格中,主要是讀入進(jìn)貨單歷史和進(jìn)貨單明細(xì)歷史中;對(duì)庫(kù)存庫(kù)中對(duì)應(yīng)的商品信息,諸如,庫(kù)存數(shù)量、倉(cāng)庫(kù)、庫(kù)存金額等數(shù)據(jù)進(jìn)行更新操作;對(duì)應(yīng)于進(jìn)貨單中供貨商,產(chǎn)生應(yīng)付款金額;同時(shí)打印進(jìn)貨單。(3) 銷(xiāo)售管理主要功能是銷(xiāo)售的過(guò)程中,對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行實(shí)時(shí)更新,出庫(kù)的時(shí)候,將客戶(hù)、商品等基本信息讀入數(shù)據(jù)庫(kù)表格中,主要是讀入銷(xiāo)售
14、單歷史和銷(xiāo)售單明細(xì)歷史中;對(duì)庫(kù)存庫(kù)中對(duì)應(yīng)的商品信息進(jìn)行修改,主要是減去銷(xiāo)售的商品數(shù)量;對(duì)應(yīng)于銷(xiāo)售單中的客戶(hù),產(chǎn)生應(yīng)收款金額;同時(shí)打印銷(xiāo)售單。(4) 庫(kù)存查詢(xún)主要功能是對(duì)庫(kù)存庫(kù)中的商品信息進(jìn)行查詢(xún),輸入貨號(hào)、商品拼音或是倉(cāng)庫(kù),便可以方便快捷地查詢(xún)到庫(kù)存庫(kù)中對(duì)應(yīng)的商品信息。(5) 系統(tǒng)管理系統(tǒng)管理中包含系統(tǒng)用戶(hù)的權(quán)限修改功能,同時(shí)還包含有只有管理員admin 才擁有的用戶(hù)管理功能,包括對(duì)用戶(hù)信息的添加、刪除、修改等操作,同時(shí)考慮到安全問(wèn)題,本系統(tǒng)對(duì)用戶(hù)對(duì)應(yīng)的密碼進(jìn)行了 md5 加密處理。(6) 歷史查詢(xún)主要功能是對(duì)進(jìn)貨單歷史、進(jìn)貨單明細(xì)歷史、銷(xiāo)售單歷史、銷(xiāo)售單明細(xì)歷中的數(shù)據(jù)進(jìn)行查詢(xún)操作。(7) 帳
15、目查詢(xún)主要功能是對(duì)進(jìn)貨過(guò)程中產(chǎn)生的應(yīng)付款及銷(xiāo)售過(guò)程中產(chǎn)生的應(yīng)收款進(jìn)行操作,輸入對(duì)應(yīng)的供貨商號(hào)或客戶(hù)編號(hào)就能查詢(xún)到對(duì)應(yīng)的應(yīng)付款或應(yīng)收款金額匯總,結(jié)算后,將對(duì)應(yīng)的記錄從應(yīng)付款或應(yīng)收款表中刪除,同時(shí)對(duì)已付款或已收款中的數(shù)據(jù)進(jìn)行更新。2.22.2 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì).1 數(shù)據(jù)庫(kù)概念模型數(shù)據(jù)庫(kù)概念模型 數(shù)據(jù)庫(kù)主要涉及到三個(gè)實(shí)體:商品、供貨商、客戶(hù)。進(jìn)貨時(shí),一張進(jìn)貨單對(duì)應(yīng)一個(gè)供貨商,可以向供貨商進(jìn)多種貨物。銷(xiāo)售時(shí),一張銷(xiāo)售單對(duì)應(yīng)一個(gè)客戶(hù),可以向客戶(hù)銷(xiāo)售多種商品。因此,一個(gè)商品可以向多個(gè)供貨商進(jìn)貨,也可以銷(xiāo)售給多個(gè)客戶(hù),只是對(duì)應(yīng)著不同的進(jìn)貨單或銷(xiāo)售單。 e-r(eneity-relatio
16、nship approach)圖是最常用的概念模型表示方法,也是數(shù)據(jù)庫(kù)的核心和基礎(chǔ),它是按用戶(hù)的觀點(diǎn)來(lái)對(duì)數(shù)據(jù)和信息建模,依據(jù)概念模型設(shè)計(jì)應(yīng)具的特點(diǎn):真實(shí)性、易理解性、易修改性、易轉(zhuǎn)換性。下面畫(huà)出商品、供貨商、客戶(hù)三個(gè)之間的實(shí)體關(guān)系圖(e-r 圖):商 品貨號(hào)條碼拼音編碼銷(xiāo)售進(jìn)貨供貨商客戶(hù)客戶(hù)編號(hào)名 稱(chēng)名 稱(chēng)拼音編碼拼音編碼供貨商號(hào)nmpq圖 2-2 商品、供貨商和客戶(hù) e-r 圖.2 數(shù)據(jù)庫(kù)各表設(shè)計(jì)數(shù)據(jù)庫(kù)各表設(shè)計(jì)對(duì)于本超市進(jìn)存銷(xiāo)系統(tǒng)所用到的數(shù)據(jù)庫(kù)表有:供貨商清單:保存關(guān)于供貨商的資料信息,如供貨商號(hào)、名稱(chēng)等。商品清單:保存超市所經(jīng)營(yíng)商品的資料信息,如貨號(hào)、品名、進(jìn)貨價(jià)和銷(xiāo)售價(jià)等
17、??蛻?hù)清單:保存超市客戶(hù)的資料信息。庫(kù)存庫(kù):保存超市商品庫(kù)存的數(shù)量、金額等信息。應(yīng)付款:保存進(jìn)貨過(guò)程中產(chǎn)生的應(yīng)付款信息。應(yīng)收款:保存銷(xiāo)售過(guò)程中產(chǎn)生的應(yīng)收款信息。權(quán)限清單:保存本系統(tǒng)所有使用者的權(quán)限信息。用戶(hù)清單:保存本系統(tǒng)所有使用者的信息。進(jìn)貨單:進(jìn)貨單主表,保存一次進(jìn)貨中的所有商品的概括信息。進(jìn)貨單歷史:保存進(jìn)貨單歷史。進(jìn)貨單明細(xì):進(jìn)貨單從表,保存每一商品的進(jìn)貨信息,如進(jìn)價(jià)、稅額和倉(cāng)庫(kù)等。進(jìn)貨單明細(xì)歷史:保存進(jìn)貨單明細(xì)歷史。銷(xiāo)售單:銷(xiāo)售單主表,保存一次銷(xiāo)售中的所有商品的概括信息。銷(xiāo)售單歷史:保存銷(xiāo)售單歷史。銷(xiāo)售單明細(xì):銷(xiāo)售單從表,保存每一商品的銷(xiāo)售信息,如銷(xiāo)售數(shù)量和銷(xiāo)售價(jià)等。銷(xiāo)售單明細(xì)歷史:
18、保存銷(xiāo)售單明細(xì)歷史。倉(cāng)庫(kù)清單:保存超市的倉(cāng)庫(kù)信息,可以用于生成數(shù)據(jù)字典。已收款:保存超市結(jié)算“應(yīng)收款”的情況。已付款:保存超市結(jié)算“應(yīng)付款”的情況。下面給出幾個(gè)主要表的具體信息:表 2-1 供貨商清單字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述供貨商號(hào)char10否主鍵拼音編碼char40否以便查詢(xún)名稱(chēng)varchar80是地址varchar80是郵編char6是傳真varchar20是電話varchar20是電報(bào)varchar20是銀行帳號(hào)varchar20是庫(kù)房地址varchar40是庫(kù)房電話varchar20是表 2-2 庫(kù)存庫(kù)字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述貨號(hào)char14否商品貨號(hào)倉(cāng)庫(kù)
19、varchar20否庫(kù)存數(shù)量decimal(28,6)否庫(kù)存金額decimal(28,6)否庫(kù)存單價(jià)decimal(28,6)否最新進(jìn)價(jià)decimal(28,6)是表 2-3 應(yīng)付款字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述編號(hào)char14否主鍵進(jìn)貨單號(hào)char14是外鍵貨號(hào)char14否外鍵供貨商號(hào)char10否外鍵數(shù)量decimal(28,6)否進(jìn)貨單價(jià)decimal(28,6)是金額decimal(28,6)是進(jìn)貨日期datetime8是狀態(tài)char6是應(yīng)付表 2-4 權(quán)限清單字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述權(quán)限序號(hào)int4否自增字段用戶(hù)編號(hào)char6是外鍵部門(mén)char20是權(quán)限名稱(chēng)c
20、har30否表 2-5 用戶(hù)清單字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述用戶(hù)編號(hào)char20否主鍵部門(mén)char20是姓名char10否性別char2是密碼varchar32否md5 加密表 2-6 進(jìn)貨單字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述編號(hào)char14否主鍵供貨商號(hào)char10否外鍵進(jìn)貨日期datetime8是業(yè)務(wù)員char10是制單人char10是稅價(jià)合計(jì)decimal(28,6)是不含稅價(jià)decimal(28,6)是稅額decimal(28,6)是表 2-7 進(jìn)貨單明細(xì)字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述編號(hào)char14否主鍵進(jìn)貨單號(hào)char14否外鍵貨號(hào)char14否外鍵進(jìn)貨數(shù)量d
21、ecimal(28,6)否進(jìn)價(jià)decimal(28,6)是稅價(jià)合計(jì)decimal(28,6)是稅率decimal(28,6)是不含稅價(jià)decimal(28,6)是稅額decimal(28,6)是倉(cāng)庫(kù)char20是表 2-8 已付款字段名數(shù)據(jù)類(lèi)型長(zhǎng)度是否允許為空字段描述供貨商號(hào)char10否主鍵供貨商名稱(chēng)varchar80是已付金額decimal(28,6)否最近結(jié)算datetime8是 最近的結(jié)算日期以上便是數(shù)據(jù)庫(kù)中的主要表單,商品清單、客戶(hù)清單與表 2-1(供貨商清單)類(lèi)似,應(yīng)收款與表 2-3(應(yīng)付款)類(lèi)似,銷(xiāo)售單與進(jìn)貨單的對(duì)應(yīng)表單類(lèi)似,已收款與表 2-10(已付款)類(lèi)似。.
22、3 進(jìn)貨單與銷(xiāo)售單存儲(chǔ)過(guò)程進(jìn)貨單與銷(xiāo)售單存儲(chǔ)過(guò)程數(shù)據(jù)庫(kù)中還設(shè)計(jì)了兩個(gè)存儲(chǔ)過(guò)程,分別是 sf_進(jìn)貨單和 sf_銷(xiāo)售單,分別用于進(jìn)貨和銷(xiāo)售時(shí),對(duì)數(shù)據(jù)庫(kù)中各表的數(shù)據(jù)更新操作。進(jìn)貨的時(shí)候,庫(kù)存庫(kù)中的倉(cāng)庫(kù)和貨號(hào)要與進(jìn)貨單明細(xì)中的倉(cāng)庫(kù)和貨號(hào)相匹配,若不匹配,證明是新的記錄,進(jìn)貨單明細(xì)中所對(duì)應(yīng)的貨號(hào)與倉(cāng)庫(kù)記錄添加到庫(kù)存庫(kù)中,若匹配,證明同一商品入的是同一倉(cāng)庫(kù),便將庫(kù)存庫(kù)中的庫(kù)存數(shù)量累加新入庫(kù)的數(shù)量;將進(jìn)貨單明細(xì)中所對(duì)應(yīng)的供貨商號(hào)、稅價(jià)合計(jì)、進(jìn)貨數(shù)量、貨號(hào)等信息插入到應(yīng)付款中,以產(chǎn)生應(yīng)付款金額;將進(jìn)貨單和進(jìn)貨單明細(xì)中的記錄添加到對(duì)應(yīng)的歷史表格中;清除進(jìn)貨單和進(jìn)貨單明細(xì)表格。銷(xiāo)售的時(shí)候,將銷(xiāo)售單明細(xì)中銷(xiāo)售的對(duì)應(yīng)
23、貨號(hào)數(shù)量從庫(kù)存庫(kù)對(duì)應(yīng)的記錄中減去;將銷(xiāo)售單明細(xì)中對(duì)應(yīng)的客戶(hù)編號(hào)、銷(xiāo)售價(jià)、金額等信息插入到應(yīng)收款中,以產(chǎn)生應(yīng)收款金額;將銷(xiāo)售單和銷(xiāo)售單明細(xì)中的記錄添加于應(yīng)的歷史表格中;清除銷(xiāo)售單和銷(xiāo)售單明細(xì)表格中的記錄。3 3 超市進(jìn)存銷(xiāo)系統(tǒng)的實(shí)現(xiàn)超市進(jìn)存銷(xiāo)系統(tǒng)的實(shí)現(xiàn)3.13.1 用戶(hù)登錄用戶(hù)登錄用戶(hù)登錄是一個(gè)系統(tǒng)安全性能的重要體現(xiàn),本系統(tǒng)用到的所有密碼均通過(guò)md5 加密。登錄界面上放置了一個(gè) adoquery1 控件,并設(shè)置它的connetionstring 屬性指向的數(shù)據(jù)庫(kù) my_jxc,用以完成數(shù)據(jù)庫(kù)的連接。登錄過(guò)程是:首先在用戶(hù)清單中查找輸入的用戶(hù)名和密碼所對(duì)應(yīng)的用戶(hù)編號(hào)。若沒(méi)有找到,說(shuō)明輸入的用戶(hù)名或
24、密碼有誤,并給出提示。若找到這樣的用戶(hù)編號(hào),說(shuō)明是合法用戶(hù),再在權(quán)限清單中,查找對(duì)應(yīng)的權(quán)限,找到什么權(quán)限,便將對(duì)應(yīng)的功能按鈕所對(duì)應(yīng)的 enabled 值置為 true。特別指出,在用戶(hù)清單中查找用戶(hù)名和密碼所對(duì)應(yīng)的用戶(hù)編號(hào)的時(shí)候,由于界面上輸入的是明文,而用戶(hù)清單中的密碼字段是 32 位的密文,且 md5 是單向加密的密碼算法,所以在查找之前,先引用 md5 單元,再調(diào)用 md5string( )函數(shù)對(duì)密碼框中的明文進(jìn)行加密,再用md5print( )函數(shù)將加密后的密文顯示出來(lái),賦值給 encrypt_num 變量,實(shí)際在用戶(hù)清單中找查密碼是以密文為準(zhǔn),而非輸入的明文,其查找用戶(hù)編號(hào)主要代碼如
25、下:/保存用戶(hù)輸入的帳號(hào)和密碼 user:=edit1.text; pass:=edit2.text; encrypt_num:=md5.md5print(md5string(pass);/加密明文/將原來(lái)的 sql 語(yǔ)句清除后再添加新的 sql 語(yǔ)句adoquery1.sql.text:=select 用戶(hù)編號(hào) from 用戶(hù)清單 where 姓名= +user+and 密碼=+encrypt_num+; temp:=adoquery1.fieldbyname(用戶(hù)編號(hào)).asstring;之后便以用戶(hù)編號(hào)和權(quán)限名稱(chēng)在權(quán)限清單中查找對(duì)應(yīng)的權(quán)限序號(hào),若找到對(duì)應(yīng)的權(quán)限序號(hào),說(shuō)明該用戶(hù)擁有該權(quán)限,
26、若沒(méi)有找到權(quán)限序號(hào),說(shuō)明該用戶(hù)沒(méi)有該權(quán)限,找到什么權(quán)限,便將 manage 和 info 窗體上對(duì)應(yīng)的按鈕 enabled值置為 true。3.23.2 進(jìn)存銷(xiāo)系統(tǒng)主界面進(jìn)存銷(xiāo)系統(tǒng)主界面超市進(jìn)銷(xiāo)存系統(tǒng)主界面上放置七個(gè)按鈕,分別對(duì)應(yīng)七個(gè)功能模塊:資料管理、進(jìn)貨管理、銷(xiāo)售管理、庫(kù)存管理、系統(tǒng)管理、歷史查詢(xún)、帳目查詢(xún)。點(diǎn)擊對(duì)應(yīng)的按鈕,便跳轉(zhuǎn)到對(duì)應(yīng)的功能窗體上。圖 3-1 系統(tǒng)主界面在主界面的左下方會(huì)顯示當(dāng)前登錄的用戶(hù)名字。因?yàn)楫?dāng)前登錄的用戶(hù)為系統(tǒng)管理員 admin,所以圖 3-1 中顯示的登錄用戶(hù)名為 ad。3.33.3 資料管理資料管理資料管理窗體上放置的幾個(gè)主要控件是 dbnavigator1
27、控件、dbgrid1 控件、adoquery1 控件和 datasource1 控件。首先是設(shè)置 adoquery1 的 connection string 屬性指向 my_jxc,再設(shè)置 datasource1 的 dataset 屬性為 adoquery1,設(shè)置 dbnavigator1 和 dbgrid1 的 datasource 屬性為 datasource1,資料管理分為商品資料維護(hù)、供貨商資料維護(hù)和客戶(hù)資料維護(hù),以 dbnavigator1 來(lái)控制刪除、插入或修改等功能。分別點(diǎn)擊 mainmenu 菜單上不同的菜單項(xiàng),來(lái)更新數(shù)據(jù)集,以顯示不同表格中的數(shù)據(jù)。例如,點(diǎn)擊了商品資料維護(hù),
28、便在adoquery1 的 sql 中添加這樣的語(yǔ)句:adoquery1.sql.text:=select * from 商品清單;使 dbgrid1 顯示出由數(shù)據(jù)集返回的結(jié)果,同時(shí) dbnavigator1 控制的商品清單中的數(shù)據(jù)。同理,點(diǎn)擊了供貨商資料維護(hù)或是客戶(hù)資料維護(hù)菜單時(shí),便向adoquery1 的 sql 中添加新的 sql 語(yǔ)句,以使控制不同的數(shù)據(jù)集。同時(shí),窗體上還能對(duì)商品資料、供貨商資料、客戶(hù)資料進(jìn)行查詢(xún),輸入對(duì)應(yīng)的拼音編碼部分或全部便能進(jìn)行查詢(xún)。查詢(xún)按鈕所響應(yīng)的事件:首先是根據(jù)label1 的 caption 內(nèi)容來(lái)判斷是對(duì)那一張表格進(jìn)行操作的,而 label1.captio
29、n是由點(diǎn)擊 mainmenu 上不同的菜單項(xiàng)而改變的。例如,點(diǎn)擊了 mainmenu 上的商品資料維護(hù),label1.caption 便為“商品拼音” ,點(diǎn)擊了“查詢(xún)”按鈕時(shí),先判斷 label1.caption=商品拼音,于是對(duì)商品清單進(jìn)行查詢(xún)。同時(shí),dbgrid1 還有一個(gè)鼠標(biāo)雙擊的響應(yīng)事件,因?yàn)樵谶M(jìn)貨管理或銷(xiāo)售管理時(shí),選擇供貨商、商品或是客戶(hù)信息時(shí),需要跳轉(zhuǎn)到資料管理窗體上,雙擊dbgrid1 上的記錄,以把數(shù)據(jù)傳遞到進(jìn)貨單或銷(xiāo)售單窗體上。這樣也大大地提高了系統(tǒng)使用的方便性,簡(jiǎn)單易用的圖形化操作界面,使用戶(hù)能更方便快捷學(xué)會(huì)使用。這部分代碼將在進(jìn)貨管理和銷(xiāo)售管是部分詳細(xì)闡述。3.43.4
30、進(jìn)貨管理進(jìn)貨管理這部分實(shí)現(xiàn)對(duì)進(jìn)貨單的管理,主要提供保存進(jìn)貨單、顯示進(jìn)貨單報(bào)表和打印進(jìn)貨單并記帳的功能。進(jìn)貨單 input 窗體上,放置 adoquery1 和adocommand1 控件,并且設(shè)置它們的 connectionstring 屬性指向 my_jxc,以完成數(shù)據(jù)庫(kù)的連接。進(jìn)貨日期默認(rèn)為當(dāng)前系統(tǒng)日期,制單人為前當(dāng)?shù)卿浻脩?hù),在下拉菜單中選擇業(yè)務(wù)員,這幾項(xiàng)都可以為空,但為了使數(shù)據(jù)更加詳盡,最好不要為空。進(jìn)貨單窗體如圖所示:圖 3-2 進(jìn)貨單窗體首先選擇供貨商,鼠標(biāo)點(diǎn)擊 combobox2 時(shí),對(duì)應(yīng)的 dropdown 事件響應(yīng),跳轉(zhuǎn)到資料管理中去,同時(shí)將 input 窗體置為不可用。然后在
31、 info 窗體中,dbgrid1 的雙擊事件響應(yīng),判斷input.enabled=false 且 label1.caption=供貨商拼音,于是執(zhí)行相應(yīng)代碼,設(shè)置了兩個(gè) string 類(lèi)型的變量:num,name,分別接收 dbgrid1.fields0和dbgrid1.fields2中的內(nèi)容,傳遞給 input 窗體上的 combobox2.text 和edit3.text。將供貨商號(hào)和供貨商名稱(chēng)返回到進(jìn)貨單窗體上,以此完成了供貨商的選擇。其代碼如下:if (input.enabled=false)and(label1.caption=供貨商拼音) then begin/將供貨商的標(biāo)號(hào)和名
32、稱(chēng)傳回進(jìn)貨單窗體 num:=dbgrid1.fields0.asstring; name:=dbgrid1.fields2.asstring; input.combobox2.text:=num; input.edit3.text:=name;/成功后返回進(jìn)貨單 input.enabled:=true; info.close; manage.hide; end;接著,選擇需要進(jìn)貨的商品。在 stringgrid1 中雙擊單元格,以跳轉(zhuǎn)到資料管理的窗體上。在 dbgrid1 的雙擊事件里響應(yīng),判斷 input.enabled 屬性為false 且 label1.caption=商品拼音,雙擊對(duì)應(yīng)
33、紀(jì)錄,將商品清單中的貨號(hào)、品名和銷(xiāo)售價(jià) 1 的信息傳遞到進(jìn)貨單窗體中,代碼如下:if (input.enabled=false)and(label1.caption=商品拼音) then begin/將貨號(hào)和商品名稱(chēng)傳回進(jìn)貨單窗體 num:=dbgrid1.fields0.asstring; name:=dbgrid1.fields3.asstring; price:=dbgrid1.fields7.asstring; if input.currentrow=0 then input.currentrow:=1; input.stringgrid1.cells1,input.currentro
34、w:=num; input.stringgrid1.cells2,input.currentrow:=name; input.stringgrid1.cells6,input.currentrow:=price;/成功后返回進(jìn)貨單 input.enabled:=true; info.close; manage.hide; end;特別指出,num,name,price 分別對(duì)應(yīng)著貨號(hào)、品名和價(jià)格。cells 1,input.currentrow指的是 stringgrid1 中當(dāng)前行第 1 列所對(duì)應(yīng)的單元格。在 forminput 單元文件中的接口部分的 public 處聲明了 current
35、row 和currentcol 兩個(gè)整型變量,在 implementation 部分中,由 stringgrid1 selectcell 事件激發(fā),以 currentrow 和 currentcol 來(lái)接收 arow 和 acol 兩個(gè)變量。這樣便達(dá)到了,在 input 窗體上激發(fā)的變量,被兩個(gè) public 變量接收,可以被 info 窗體引用的目的。在商品入庫(kù)之前,要對(duì)所進(jìn)商品進(jìn)貨到哪個(gè)倉(cāng)庫(kù)進(jìn)行選擇。添加倉(cāng)庫(kù)的下拉菜單與添加業(yè)務(wù)員的過(guò)程相似,只有當(dāng)選擇了商品信息且點(diǎn)擊了“倉(cāng)庫(kù)”所對(duì)應(yīng)的列,才能進(jìn)行倉(cāng)庫(kù)選擇。另外,當(dāng)點(diǎn)擊某條記錄的“金額”單元格時(shí),自動(dòng)算出對(duì)應(yīng)進(jìn)貨記錄的金額、稅價(jià)與稅價(jià)合計(jì)。
36、點(diǎn)擊“保存進(jìn)貨單”按鈕時(shí),將把進(jìn)貨信息插入到進(jìn)貨單和進(jìn)貨單明細(xì)兩個(gè)表格中去,進(jìn)貨單中的一條記錄保存的是一次進(jìn)貨中向某個(gè)供貨商所有進(jìn)貨商品的總稅價(jià)合計(jì) 、 總不含稅額和總稅額 ;進(jìn)貨單明細(xì)則保存的是向某個(gè)供貨商進(jìn)貨的每一商品所對(duì)應(yīng)的稅價(jià)合計(jì),不含稅價(jià)和稅額等信息。首先是編號(hào)的插入,如果是插入的第一條記錄,編號(hào)為00000,如果不是插入第一條記錄,則分別是從進(jìn)貨單歷史和進(jìn)貨單明細(xì)歷史中查找出最大編號(hào),將其加1,再插入到進(jìn)貨單和進(jìn)貨單明細(xì)表格中。例如進(jìn)貨單記錄的插入過(guò)程:獲取最大編號(hào):adoquery1.sql.add(select max(編號(hào)) 最大編號(hào) from 進(jìn)貨單歷史);maxnum:=
37、adoquery1.fieldbyname(最大編號(hào)).asstring; 如果是第一條記錄,插入編號(hào)00000:if (maxnum=)or(maxnum= ) then temp:=00000向進(jìn)貨單中插入對(duì)應(yīng)記錄:adocommand1.commandtext:=insert into 進(jìn)貨單(編號(hào),供貨商號(hào), 進(jìn)貨日期,業(yè)務(wù)員,制單人,稅價(jià)合計(jì),不含稅價(jià),稅額) values (+inputnum+,+combobox2.text+,+edit1.text+,+combobox1.text+,+edit2.text+,+edit4.text+,+edit5.text+,+edit6.t
38、ext+);adocommand1.execute;然后點(diǎn)擊“顯示進(jìn)貨單報(bào)表” ,是對(duì)進(jìn)貨單報(bào)表進(jìn)行預(yù)覽。點(diǎn)擊“打印進(jìn)貨單并記帳” ,便可將進(jìn)貨單報(bào)表打印成(.mdi)格式的文檔,同時(shí)執(zhí)行了“sf_進(jìn)貨單”存儲(chǔ)過(guò)程,以對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行實(shí)時(shí)地更新。下面介紹一下,報(bào)表的制作:本畢業(yè)設(shè)計(jì)所使用到的報(bào)表是用 quickreport 控件制作的,由于 delphi 7.0默認(rèn)情況下沒(méi)有安裝此控件,因此需要手動(dòng)添加。在 delphi 的 packages 里,點(diǎn)擊“add”按鈕,找到安裝目錄下borlanddelphi7bindclqrt70.bpl 添加quickreport 控件組。 進(jìn)貨單報(bào)表 r
39、eport 上,放置 quickrep1 控件、adoquery1 控件、若干qrlabel 控件以標(biāo)簽文字說(shuō)明,若干 qrdbtext 控件,設(shè)置其 dataset 屬性為adoquery1,datafield 屬性為欲讀取的字段名。qucikrep1 的 dataset 屬性為adoquery1。adoquery1 控件的 connectionstring 指向 my_jxc 數(shù)據(jù)庫(kù),以完成數(shù)據(jù)庫(kù)的連接。其 sql 屬性中添加查詢(xún)語(yǔ)句,以對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行查詢(xún)返回?cái)?shù)據(jù)集以供報(bào)表上顯示。3.53.5 銷(xiāo)售管理銷(xiāo)售管理銷(xiāo)售過(guò)程與進(jìn)貨過(guò)程類(lèi)似,這部分實(shí)現(xiàn)對(duì)銷(xiāo)售的管理,提供的主要功能有“保存銷(xiāo)售單
40、” 、 “打印銷(xiāo)售單報(bào)表”和“記帳銷(xiāo)售單” 三個(gè)功能。其界面如圖所示:圖 3-3 銷(xiāo)售單窗體首先需要向 combobox1 的下拉菜單上添加項(xiàng)目,其代碼與在進(jìn)貨管理中添加業(yè)務(wù)員菜單項(xiàng)目是一樣的。鼠標(biāo)點(diǎn)擊客戶(hù)下拉框,跳轉(zhuǎn)到資料管理窗體上,以選擇客戶(hù)。同時(shí)將output 的 enabled 值置為 false。然后在 info 窗體上,雙擊相應(yīng)的記錄,由 dbgrid1 的雙擊事件響應(yīng),通過(guò)判斷,執(zhí)行相關(guān)代碼,將客戶(hù)編號(hào)和客戶(hù)名稱(chēng)傳遞至 output 窗體上。此過(guò)程代碼與進(jìn)貨管理中選擇供貨商過(guò)程的代碼類(lèi)似。至此,完成了客戶(hù)選擇操作。然后雙擊 output 中 stringgrid1 的單元格,跳轉(zhuǎn)
41、到庫(kù)存庫(kù) store 窗體上。雙擊庫(kù)存庫(kù) store 窗體上的 stringgrid1 單元,便將貨號(hào)、倉(cāng)庫(kù)、銷(xiāo)售價(jià)等信息傳遞至 store 窗體上。stringgrid1 的雙擊事件中,首先由 adoquery2 在商品清單里查得銷(xiāo)售價(jià) 1 字段,由 price 變量接收。貨號(hào)、品名等信息與進(jìn)貨單中執(zhí)行的過(guò)程類(lèi)似,在此不再贅述。當(dāng)點(diǎn)擊保存銷(xiāo)售單后,第一條記錄編號(hào)為00000,如果不是第一條記錄,從銷(xiāo)售單歷史和銷(xiāo)售單明細(xì)歷史表格中把最大編號(hào)讀取出來(lái),將其加 1,再插入到銷(xiāo)售單和銷(xiāo)售單明細(xì)表格中去。這個(gè)過(guò)程與進(jìn)貨管理中插入到進(jìn)貨單歷史和進(jìn)貨單明細(xì)歷史中相類(lèi)似。點(diǎn)擊“打印銷(xiāo)售報(bào)表”按鈕,以打印出銷(xiāo)
42、售單對(duì)應(yīng)報(bào)表。點(diǎn)擊“記帳銷(xiāo)售單”按鈕,執(zhí)行“sf_銷(xiāo)售單”存儲(chǔ)過(guò)程,以更新數(shù)據(jù)庫(kù)中數(shù)據(jù)。銷(xiāo)售報(bào)表與進(jìn)貨報(bào)表的制作大同小異,只是對(duì)應(yīng)的數(shù)據(jù)集不同,執(zhí)行的 sql 語(yǔ)句當(dāng)然也不同。3.63.6 庫(kù)存管理庫(kù)存管理這部分主要是提供對(duì)庫(kù)存商品信息的查詢(xún),輸入貨號(hào)、商品拼音和倉(cāng)庫(kù)中的任意一項(xiàng)便可對(duì)庫(kù)存中商品的信息進(jìn)行查詢(xún)。設(shè)置 adoquery1 控件、adoquery2 控件的 connectionstring 指向 my_jxc,以完成數(shù)據(jù)庫(kù)的連接。然后向“查詢(xún)”按鈕里添加事件,以使輸入“貨號(hào)” 、 “商品拼音” 和“倉(cāng)庫(kù)”中的任意一項(xiàng),便可進(jìn)行查詢(xún)。由于可以對(duì)商品拼音模糊查詢(xún),如果不輸入商品拼音的話
43、,系統(tǒng)會(huì)將商品拼音看成一個(gè)空字符串,便得不到查詢(xún)的真實(shí)結(jié)果。所以先對(duì)其進(jìn)行判斷,如果為空,便不追加對(duì)應(yīng)查詢(xún)語(yǔ)句。其對(duì)應(yīng)的代碼如下:adoquery1.sql.add(select 庫(kù)存庫(kù).貨號(hào),商品清單.品名,商品清單.單位,庫(kù)存庫(kù).倉(cāng)庫(kù),庫(kù)存庫(kù).庫(kù)存數(shù)量,庫(kù)存庫(kù).庫(kù)存單價(jià),庫(kù)存庫(kù).庫(kù)存金額 from 庫(kù)存庫(kù),商品清單); adoquery1.sql.add(where 庫(kù)存庫(kù).貨號(hào)=商品清單.貨號(hào) and ); adoquery1.sql.add(商品清單.貨號(hào)=+edit1.text+)or); if edit2.text then begin adoquery1.sql.add(商品清單
44、.拼音編碼 like %+ edit2.text +%)or); end; adoquery1.sql.add(庫(kù)存庫(kù).倉(cāng)庫(kù)=+combobox1.text+); adoquery1.open;到此,便完成了庫(kù)存查詢(xún)的操作。3.73.7 系統(tǒng)管理系統(tǒng)管理系統(tǒng)管理功能中分為“用戶(hù)管理”和“權(quán)限設(shè)置”兩項(xiàng)功能。在用戶(hù)管理功能中,可以對(duì)用戶(hù)信息進(jìn)行添加、刪除或修改等操作。 “用戶(hù)管理”功能只有管理員擁有,而“權(quán)限管理”功能,只有被授予了該權(quán)限的用戶(hù)才擁有。作為系統(tǒng)管理員,所有權(quán)限均為其開(kāi)放,并且系統(tǒng)管理員的權(quán)限是不能修改的。管現(xiàn)員可以對(duì)本系統(tǒng)的其它普通用戶(hù)的資料進(jìn)行修改,或給其它普通用戶(hù)授予權(quán)限。系
45、統(tǒng)管理窗體 rights 上放置 adoquery1、adoquery2、adoquery3 和adocommand1 控件,它們的 connectionstring 均指向 my_jxc,用以連接數(shù)據(jù)庫(kù)。最左邊下拉列表框是對(duì)用戶(hù)的選擇,選擇了對(duì)應(yīng)的用戶(hù),此時(shí)在右邊的列表框中顯示它所具有的所有權(quán)限的名稱(chēng),且在最下面的組合復(fù)選框中,將其所具有的權(quán)限名稱(chēng)前面顯示有”,可以修改復(fù)選組合框中的內(nèi)容,再點(diǎn)擊“確認(rèn)修改”,即可完成對(duì)所對(duì)應(yīng)用戶(hù)的權(quán)限的權(quán)限。點(diǎn)擊“用戶(hù)管理”按鈕,進(jìn)入到用戶(hù)管理的窗體上。系統(tǒng)管理的主要界面如下圖所示:圖 3-4 權(quán)限管理窗體在系統(tǒng)管理窗體中,只有當(dāng)前用戶(hù)為管理員, “用戶(hù)管理
46、”按鈕才可見(jiàn),權(quán)限功能的修改實(shí)現(xiàn)過(guò)程是這樣的:首先在 combobox1change 事件中,當(dāng)選擇了對(duì)應(yīng)的用戶(hù)后,執(zhí)行相關(guān)代碼,在 listbox 中用以更新顯示出當(dāng)前用戶(hù)名所對(duì)應(yīng)的權(quán)限名稱(chēng)。先以用戶(hù)名在用戶(hù)清單里查詢(xún)得到對(duì)應(yīng)的用戶(hù)編號(hào),再以用戶(hù)編號(hào)在權(quán)限清單里查詢(xún)所對(duì)應(yīng)的用權(quán)限名稱(chēng),將查找到的權(quán)限名稱(chēng)添加到listbox1 的項(xiàng)目中去,查詢(xún)權(quán)限的對(duì)應(yīng)代碼如下:adoquery2.sql.text:=select 權(quán)限名稱(chēng) from 權(quán)限清單 where 用戶(hù)編號(hào)=(select 用戶(hù)編號(hào) from 用戶(hù)清單 where 姓名=+ combobox1.text + +);向列表框中添加查詢(xún)到
47、的權(quán)限項(xiàng)目:while not adoquery2.eof do begin temp:=adoquery2.fieldbyname(權(quán)限名稱(chēng)).asstring; listbox1.items.add(temp); adoquery2.next; end;在 combobox1change 事件中同時(shí)也對(duì)下方的 checkbox 的 checked 屬性進(jìn)行修改。以對(duì)應(yīng)的用戶(hù)編號(hào)和權(quán)限名稱(chēng)對(duì)權(quán)限清單進(jìn)行查找,如果查找到的用戶(hù)編號(hào)不為空,說(shuō)明該用戶(hù)存在這樣的權(quán)限,便將對(duì)應(yīng) checkbox 的 checked 屬性設(shè)為 true;否則 checked 屬性為 false。例如:判斷用戶(hù)是否具有
48、商品資料維護(hù)的權(quán)限,其代碼如下:adoquery2.sql.add(select 用戶(hù)編號(hào) from 權(quán)限清單 where (用戶(hù)編號(hào)=(select 用戶(hù)編號(hào) from 用戶(hù)清單 where 姓名=+combobox1.text+ ) and(權(quán)限名稱(chēng)=+checkbox2.caption+);adoquery2.open;if adoquery2.fieldbyname(用戶(hù)編號(hào)).asstring then checkbox2.checked:=true else checkbox2.checked:=false;另外,對(duì)于“確認(rèn)修改”按鈕響應(yīng)的事件,首先獲取用戶(hù)編號(hào),以用戶(hù)姓名在用戶(hù)清
49、單里查找對(duì)應(yīng)的用戶(hù)編號(hào)賦值給臨時(shí)變量 username;在權(quán)限清單里查找到最大的權(quán)限序號(hào)賦值給 maxnumber;刪除該用戶(hù)在權(quán)限清單里擁有的所有權(quán)限。判斷下方的 checkbox 的 checked 屬性是否為 true,同時(shí)將先前查找到的最大權(quán)限序號(hào)增加,以新的權(quán)限序號(hào)插入到權(quán)限清單里,以免跟以前的權(quán)限序號(hào)沖突。例如對(duì)“商品資料維護(hù)”權(quán)限的修改,對(duì)應(yīng)代碼如下:if checkbox1.checked thenbegin order:=strtoint(maxnumber)+1; str:=inttostr(order); adocommand1.commandtext:=insert i
50、nto 權(quán)限清單(權(quán)限序號(hào),用戶(hù)編號(hào),權(quán)限名稱(chēng)) values(+str+,+usernumber+,+ checkbox1.caption+); adocommand1.execute;end;如果當(dāng)前用戶(hù)為管理員的話,會(huì)看到系統(tǒng)管理窗體上出現(xiàn)一個(gè)“用戶(hù)管理”按鈕,點(diǎn)擊它會(huì)跳轉(zhuǎn)到用戶(hù)管理 users 的窗體,如圖所示:圖 3-5 用戶(hù)管理窗體在用戶(hù)管理窗體上,可以完成對(duì)用戶(hù)資料的修改,刪除和添加用戶(hù)的功能。雙擊上方的 dbgrid 中的記錄,便把對(duì)應(yīng)的字段讀取出來(lái)(密碼字段除外),顯示在下方的若干 edit 文本框里,修改對(duì)應(yīng)的記錄后,點(diǎn)擊“確認(rèn)修改”按鈕便完成了用戶(hù)資料的修改。特別指出,由
51、于本系統(tǒng)所有用戶(hù)的密碼字段,均使用了md5 加密。當(dāng)提交時(shí),如果提交的密碼字段為空,默認(rèn)情況下不修改密碼;如果提交的密碼字段不為空,便調(diào)用 md5 單元中的 md5string()函數(shù)將密碼加密成為 32 位的密文,以 md5print()函數(shù)將加密的字段顯示出來(lái)。這樣很好的避免了當(dāng)提交空密碼的時(shí)候,對(duì)空字符串也進(jìn)行加密。如果提交的密碼字段不為空,將該字段加密后更新記錄:encrypt_num:=md5.md5print(md5string(edit5.text);adocommand1.commandtext:=update 用戶(hù)清單 set 用戶(hù)編號(hào)=+ edit1. text+,部門(mén)=+
52、edit2.text+,姓名=+edit3.text+,性別= + edit4.text+,密碼=+encrypt_num+ where 用戶(hù)編號(hào)=+ edit1. text+;鼠標(biāo)點(diǎn)擊 dbgrid 里的某一條記錄后,再點(diǎn)擊“刪除”按鈕,即可將該用戶(hù)刪除。在下方的 edit 方本框中輸入新添加的用戶(hù)信息后,點(diǎn)擊添加按鈕,將新用戶(hù)的記錄插入到用戶(hù)清單里。插入之前,先做判斷,如果用戶(hù)清單里已經(jīng)有相同的用戶(hù)編號(hào),給出提示。同時(shí)插入新用戶(hù)記錄前,也對(duì)輸入的密碼(明文)調(diào)用 md5 加密算法加密成為 32 位密文再插入:encrypt_num:=md5.md5print(md5string(edit5
53、.text);adocommand1.commandtext:=insert 用戶(hù)清單 values(+edit1.text +,+edit2.text+,+edit3.text+,+edit4.text+,+encrypt_num+);以上便是“系統(tǒng)管理”中的全部功能的實(shí)現(xiàn)過(guò)程。3.83.8 歷史查詢(xún)歷史查詢(xún)歷史查詢(xún)主要是對(duì)以往進(jìn)貨記錄和銷(xiāo)售紀(jì)錄進(jìn)行查詢(xún)。主要是對(duì)進(jìn)貨單歷史、進(jìn)貨單明細(xì)歷史、銷(xiāo)售單歷史或銷(xiāo)售單明細(xì)歷史進(jìn)行查詢(xún)。輸入對(duì)應(yīng)的記錄編號(hào)或拼音編碼便可進(jìn)行查詢(xún)。歷史查詢(xún)窗體 history 上的 adoquery1 控件的 connectionstring 指向 my_jxc,以此做為
54、數(shù)據(jù)集返回結(jié)果。通過(guò)點(diǎn)擊主菜單上的按鈕來(lái)動(dòng)態(tài)的改變 adoquery1 所指向的數(shù)據(jù)集。圖 3-6 歷史查詢(xún)窗體例如,點(diǎn)擊了“進(jìn)出貨歷史”主菜單中的“進(jìn)貨單歷史” ,便把a(bǔ)doquery1 中的 sql 查詢(xún)語(yǔ)句指向進(jìn)貨單歷史中,同時(shí)改變 label1 和 label2的 caption 值以提示用戶(hù)輸入進(jìn)貨單編號(hào)或供貨商拼音進(jìn)行查詢(xún)。點(diǎn)擊“查詢(xún)”按鈕,首先判斷 label1 的 caption 值,來(lái)決定當(dāng)前是對(duì)哪一個(gè)表進(jìn)行操作,輸入“進(jìn)貨單編號(hào)”或是“供貨商拼音”中的任何一項(xiàng),便可進(jìn)行查詢(xún),同時(shí)“供貨商拼音”可以進(jìn)行模糊查詢(xún),所以在查詢(xún)之前,應(yīng)該先判斷,如果拼音編碼輸入框不為空時(shí)才追加對(duì)應(yīng)
55、的 sql 語(yǔ)句。if edit2.text thenadoquery1.sql.add( or 供貨商號(hào) in (select 供貨商號(hào) from 供貨商清單 where 拼音編碼 like %+edit2.text+%);以上便是點(diǎn)擊了“進(jìn)貨單歷史”,程序所執(zhí)行的過(guò)程。點(diǎn)擊“銷(xiāo)售單歷史”,其執(zhí)行過(guò)程與此類(lèi)似。另外,當(dāng)點(diǎn)擊了“進(jìn)出貨明細(xì)歷史”中的“進(jìn)貨單明細(xì)歷史”時(shí),也是動(dòng)態(tài)的改變 adoquery1 中所對(duì)應(yīng)的 sql 查詢(xún)語(yǔ)句,同時(shí)改變 label1 和 label2 的標(biāo)簽內(nèi)容。點(diǎn)擊了“查詢(xún)”按鈕,執(zhí)行過(guò)程也是先由 label1 的 caption 來(lái)判斷,當(dāng)前操作的是哪一個(gè)表,再對(duì)相
56、應(yīng)的表進(jìn)行查詢(xún)。又由于可以進(jìn)行模糊查詢(xún),所以在查詢(xún)之前也應(yīng)該判斷如果拼音輸入框不為空時(shí),便追加 sql 查詢(xún)語(yǔ)句:if edit2.text thenadoquery1.sql.add( or 進(jìn)貨單號(hào) in (select 編號(hào) from 進(jìn)貨單歷史 where 供貨商號(hào) in (select 供貨商號(hào) from 供貨商清單 where 拼音編碼 like %+edit2.text+%);點(diǎn)擊“銷(xiāo)售單明細(xì)歷史”,所執(zhí)行的過(guò)程與之類(lèi)似。3.93.9 帳目查詢(xún)帳目查詢(xún)帳目查詢(xún)功能中,可以對(duì)應(yīng)收款和應(yīng)付款進(jìn)行匯總,匯總結(jié)算后,首先將該記錄從應(yīng)收款或應(yīng)付款中刪除,再將結(jié)算的信息添加到已付款或已收款中
57、去。帳目查詢(xún)窗體 account 上,adoquery1、adoquery2、adocommand 控件的connection string 屬性設(shè)置為指向 my_jxc,用以連接數(shù)據(jù)庫(kù)。圖 3-7 帳目查詢(xún)窗體點(diǎn)擊上面的“未結(jié)算”主菜單中的“應(yīng)付款”或“應(yīng)收款”,動(dòng)態(tài)的改變窗體上 label 的 caption 值,同時(shí)將更新數(shù)據(jù)集 adoquery1 返回不同的查詢(xún)結(jié)果。例如點(diǎn)擊了“應(yīng)收款”,響應(yīng)對(duì)應(yīng)的執(zhí)行代碼: adoquery1.sql.text:=select * from 應(yīng)收款;/提示用戶(hù)輸入客戶(hù)拼音編碼label1.caption:=客戶(hù)編號(hào);label5.caption:=應(yīng)
58、收款查詢(xún);然后,輸入客戶(hù)編號(hào)進(jìn)行查詢(xún),將查詢(xún)出來(lái)該客戶(hù)未結(jié)算的帳目匯總以顯示在窗體上。如果不存在這樣的客戶(hù)編號(hào),系統(tǒng)給出提示信息。圖 3-8 匯總結(jié)果由 label5.caption=應(yīng)收款查詢(xún)判斷是對(duì)應(yīng)收款進(jìn)行操作,在 adoquey1的 sql 屬性中添加:adoquery1.sql.text:=select * from 應(yīng)收款 where 客戶(hù)編號(hào)= + edit1.text+;以數(shù)據(jù)集 adoquery1 返回查詢(xún)所得結(jié)果,顯示在窗體上。在 adoquery2 的sql 屬性中添加語(yǔ)句以匯總該用戶(hù)編號(hào)所對(duì)應(yīng)的應(yīng)收款總金額:adoquery2.sql.text:=select tota
59、l=sum(金額) from 應(yīng)收款 where 客戶(hù)編號(hào)=+edit1.text+;edit2.text:=adoquery2.fieldbyname(total).asstring;匯總結(jié)束后,再點(diǎn)擊“結(jié)算”按鈕,便將匯總的帳目結(jié)算,先將帳目從應(yīng)收款中刪除記錄,然后對(duì)已收款中的數(shù)據(jù)進(jìn)行更新,更新過(guò)程是這樣的:判斷新添加的應(yīng)收款記錄所對(duì)應(yīng)的客戶(hù)編號(hào)是否在已收款中已經(jīng)存在記錄,如果存在,便將對(duì)應(yīng)的已收金額累加進(jìn)去,并將最近結(jié)算日期更新為當(dāng)前的日期。如果不存在,說(shuō)明是新的記錄,直接將新的結(jié)算記錄插入到已收款表格中去。圖 3-9 結(jié)算成功刪除結(jié)算記錄:adocommand1.commandtext
60、:=delete from 應(yīng)收款 where 客戶(hù)編號(hào)= + edit1.text+;adocommand1.execute;以輸入的客戶(hù)編號(hào)在客戶(hù)清單中查找到對(duì)應(yīng)的客戶(hù)名稱(chēng),于是在數(shù)據(jù)集的sql 屬性中添加如下查詢(xún)語(yǔ)句,以獲取客戶(hù)名稱(chēng):adoquery2.sql.text:=select 名稱(chēng) from 客戶(hù)清單 where 客戶(hù)編號(hào)= +edit1.text+;adoquery2.open;name:=adoquery2.fieldbyname(名稱(chēng)).asstring;獲取到“客戶(hù)名稱(chēng)”后,再以客戶(hù)名稱(chēng)查找已收款記錄:adoquery2.sql.text:=select * from
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《學(xué)前教育概述》課件
- 單位管理制度集合大合集【人力資源管理篇】十篇
- 單位管理制度分享匯編【員工管理篇】十篇
- 單位管理制度分享大全【人員管理篇】
- 單位管理制度范例選集【員工管理】
- 單位管理制度范例合集【人力資源管理篇】十篇
- 單位管理制度呈現(xiàn)合集【員工管理篇】
- 單位管理制度呈現(xiàn)大合集【人事管理】十篇
- 《微點(diǎn)精析》考向19 文化常識(shí) 高考語(yǔ)文一輪復(fù)習(xí)考點(diǎn)微專(zhuān)題訓(xùn)練(原卷+解析)
- 第4單元 民族團(tuán)結(jié)與祖國(guó)統(tǒng)一(B卷·能力提升練)(解析版)
- 關(guān)于調(diào)整縣人民醫(yī)院預(yù)算管理委員會(huì)成員的通知
- 《工程計(jì)量》課件
- 2024年度企業(yè)網(wǎng)絡(luò)搭建及應(yīng)用技能大賽方案
- 2024分娩鎮(zhèn)痛ppt課件完整版
- 教務(wù)處述職報(bào)告
- 進(jìn)口公司創(chuàng)業(yè)計(jì)劃書(shū)
- 2023-2024學(xué)年福建省泉州市晉江市八年級(jí)(上)學(xué)期期末數(shù)學(xué)試題(含解析)
- 完整版中職哲學(xué)與人生教案
- 麥凱66表格(完全版)
- 大學(xué)英語(yǔ)新編語(yǔ)言學(xué)教程Chapter 5 Semantics
- AB-PLC-軟件與Windows操作系統(tǒng)兼容列表
評(píng)論
0/150
提交評(píng)論