版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 論文題目 中小型超市管理系統(tǒng)規(guī)劃 </p><p> 學(xué)生姓名 </p><p> 學(xué) 號(hào) 19589 </p><p> 指導(dǎo)教師 </p><p> 專 業(yè) 計(jì)算機(jī)信息管理 </p><p> 年 級(jí)
2、 2012級(jí) </p><p> 學(xué) 校 浙江電大常山分校 </p><p><b> 目 錄</b></p><p><b> 一 需求分析1</b></p><p> ?。ㄒ唬?行業(yè)概念的理解1</p><p> ?。ǘ?業(yè)務(wù)流
3、程說明2</p><p> (三)問題解決方案2</p><p> ?。ㄋ模?數(shù)據(jù)流圖3</p><p><b> 二 系統(tǒng)設(shè)計(jì)3</b></p><p><b> 二 系統(tǒng)設(shè)計(jì)4</b></p><p> (一)系統(tǒng)模塊的劃分4</p>&
4、lt;p> (二) 數(shù)據(jù)字典4</p><p> 三、程序的設(shè)計(jì)與編碼8</p><p> ?。ㄒ唬?POS系統(tǒng)的開發(fā)8</p><p> 1. 功能及實(shí)現(xiàn)方法8</p><p> 2. 問題討論:交易流水號(hào)的確定9</p><p> ?。ǘ┕芾硇畔⑾到y(tǒng)的設(shè)計(jì)9</p><
5、;p><b> 1.界面設(shè)計(jì)9</b></p><p> 2. 各個(gè)功能模塊實(shí)現(xiàn)的要點(diǎn)和技術(shù)10</p><p> 2.1 類繼承與重載10</p><p> 2.2 windows消息機(jī)制11</p><p> 2.3 關(guān)于權(quán)限設(shè)置12</p><p> 2.4 應(yīng)用
6、Delphi顯式事務(wù)控制13</p><p> 2.5 存儲(chǔ)過程的使用13</p><p><b> 參考書錄20</b></p><p> 中小型超市管理系統(tǒng)規(guī)劃</p><p> 內(nèi)容摘要:《中小型超市管理信息系統(tǒng)》是一個(gè)比較復(fù)雜和全面的管理系統(tǒng),可以完成中小型超市的大部分業(yè)務(wù)??偟膩碚f包括進(jìn)貨管理,物
7、價(jià)管理,庫(kù)存管理,銷售管理,供貨廠商管理,POS收款機(jī)子系統(tǒng)等。該系統(tǒng)界面樸素一致,但不失美觀大方;操作方便,查詢功能強(qiáng)大;數(shù)據(jù)全面、準(zhǔn)確。系統(tǒng)采用了目前比較流行而技術(shù)非常成熟地客戶機(jī)/服務(wù)器結(jié)構(gòu)(C/S),前臺(tái)應(yīng)用程序用Delphi開發(fā),后臺(tái)數(shù)據(jù)庫(kù)是Microsoft SQL Server 2000。</p><p> 關(guān)鍵字: 面向?qū)ο蟮某绦蛟O(shè)計(jì),繼承,WINDOWS消息,存儲(chǔ)過程,事務(wù)</p>
8、<p><b> 一 需求分析</b></p><p> ?。ㄒ唬?行業(yè)概念的理解</p><p> POS: Point Of Sells , 電子收款機(jī)系統(tǒng),也就是直接與顧客打交道的收銀機(jī)系統(tǒng)。</p><p> 定單狀態(tài):用來描述商品進(jìn)貨方式,一般分為定單、日配、自采等。</p><p> 定
9、單:表示該商品進(jìn)貨必須先向供貨商發(fā)出定單,供貨商按定單上的商品明細(xì)發(fā)貨,超市則按定單上的商品明細(xì)收貨。</p><p> 日配:指那些每天都要進(jìn)貨的商品或者補(bǔ)貨期較短的商品,例如水果,生鮮蔬菜等。如果按定單,時(shí)間不允許而且工作重復(fù)煩瑣。</p><p> 自采:顧名思義,超市自己負(fù)責(zé)商品的進(jìn)貨。</p><p> 銷售狀態(tài):用來描述某種商品當(dāng)前的銷售狀態(tài),一般
10、定義為正常、促銷、折扣等,正常表示商品處于正常的售價(jià)狀態(tài),即按正常的售價(jià)銷售。</p><p> 促銷:表示超市把某種商品讓利銷售,以此來吸引跟多的消費(fèi)者。一般低于正常售價(jià)甚至成本價(jià)。</p><p> 折扣:表示某種商品銷售情況不好,或者商品有瑕疵,或者保質(zhì)期快到等情況發(fā)生時(shí),使盡快商品銷售出去的一種手段。</p><p> 庫(kù)存調(diào)整:當(dāng)非因正常銷售發(fā)生而實(shí)
11、物數(shù)量變動(dòng)時(shí),通過調(diào)整庫(kù)存使其帳面數(shù)量與實(shí)物數(shù)量相符。</p><p> 日處理:當(dāng)一天的銷售結(jié)束后,開始做日處理。把當(dāng)天的銷售數(shù)據(jù)匯總,調(diào)整商品庫(kù)存。</p><p> 損益:商品出現(xiàn)損壞,變質(zhì),被盜等情況發(fā)生時(shí),商品發(fā)生損益。損益通過調(diào)整庫(kù)存得到體現(xiàn)。</p><p> 商品變價(jià):商品變價(jià)與促銷/折扣調(diào)整價(jià)格是兩個(gè)不同的概念。商品變價(jià)是指修改商品的正常售價(jià)
12、,調(diào)整后在一定的時(shí)間內(nèi)不會(huì)在發(fā)生改變。價(jià)格可能是升高也可能是降低,一般都是由于進(jìn)價(jià)變動(dòng)引起的。</p><p> 促銷/折扣期: 每一種商品促銷/折扣都有一定的期限,即有一定的時(shí)間限制。一種商品不可能無期限的促銷/折扣。當(dāng)期限超過,商品自動(dòng)恢復(fù)正常售價(jià)。</p><p> 毛利、毛利百分比: 毛利=商品售價(jià)-商品進(jìn)價(jià) 毛利百分比=(商品售價(jià)-商品進(jìn)價(jià))÷商品售價(jià)</p&
13、gt;<p> 商品進(jìn)價(jià)及成本核算: 在成本核算中,商品成本價(jià)的確定一般有最后進(jìn)價(jià),移動(dòng)加權(quán)平均,按商品批次定價(jià)等幾種方式,由于后兩種核算方式較復(fù)雜,本系統(tǒng)采用簡(jiǎn)單的最后進(jìn)價(jià)方式。</p><p> ?。ǘ?業(yè)務(wù)流程說明</p><p> 在實(shí)際管理中,有三種信息流動(dòng),即資金流,單據(jù)流和商品實(shí)物流。系統(tǒng)圍繞實(shí)物流展開,對(duì)商品從供應(yīng)商那里進(jìn)貨到商品銷售到顧客手中整個(gè)流程進(jìn)
14、行管理。簡(jiǎn)單來說,就是商品的進(jìn)銷存管理。每個(gè)環(huán)節(jié)通過相應(yīng)的單據(jù)來連接,同時(shí)資金發(fā)生流動(dòng)。在商品管理方面,我們提出部門和商品分類的概念,這種分級(jí)管理方式簡(jiǎn)潔高效。所謂部門,就是按照商品的基本屬性進(jìn)行分類管理。例如,超市一般可分為食品部,生鮮部,日用品部等。部門下面再分類,所謂商品分類,指按商品的具體屬性劃分,例如,食品部下面可以有糖果餅干類,飲料類等,每個(gè)部門和每個(gè)商品類別都有相應(yīng)的負(fù)責(zé)人負(fù)責(zé)。《中小型超市管理信息系統(tǒng)》完全體現(xiàn)了這種管理
15、思想,商品的銷售和商品庫(kù)存都可以按部門級(jí)和分類級(jí)完成查詢等其他操作。作為一個(gè)超市的管理人員,及時(shí)了解銷售情況是非常必要的,以便及時(shí)調(diào)整進(jìn)貨或者安排營(yíng)銷策略,把握商機(jī)。而《中小型超市管理信息系統(tǒng)》正好滿足了這一要求,可以實(shí)時(shí)查詢前臺(tái)的銷售情況,并且數(shù)據(jù)準(zhǔn)確可信。</p><p><b> (三)問題解決方案</b></p><p> 超市系統(tǒng)在運(yùn)行過程中數(shù)據(jù)流量是非
16、常巨大的。有時(shí)候會(huì)因數(shù)據(jù)流量過大而使網(wǎng)絡(luò)發(fā)生阻塞,使POS系統(tǒng)發(fā)生斷網(wǎng),直接影響銷售活動(dòng)的進(jìn)行。這種情況是應(yīng)該堅(jiān)決避免的,應(yīng)該盡量減少網(wǎng)絡(luò)的數(shù)據(jù)流量。這一思想在本系統(tǒng)中的直接體現(xiàn)就是采用日處理和運(yùn)用本地緩存技術(shù)。日處理的主要目的就是把當(dāng)天的銷售數(shù)據(jù)整理匯總,更新商品庫(kù)存表,為第二天的銷售做準(zhǔn)備。與日處理不同的另一種處理方式就是每次商品銷售完成以后就立即更新庫(kù)存。但這樣會(huì)使得服務(wù)器的負(fù)荷非常的重,經(jīng)常會(huì)使POS系統(tǒng)發(fā)生斷網(wǎng)。POS系統(tǒng)銷售
17、商品時(shí)所取的商品信息是服務(wù)器上的數(shù)據(jù),有效的保證了數(shù)據(jù)的一致性和集中控制。雖然商品信息來自服務(wù)器,但我們使用了本地緩存。POS系統(tǒng)會(huì)把取得的數(shù)據(jù)暫時(shí)的存放在本地的內(nèi)存,當(dāng)要讀取商品信息時(shí),會(huì)先在本地緩存里查找,如果成功的話,就不必訪問服務(wù)器。這樣一來就有效的減少了網(wǎng)絡(luò)的數(shù)據(jù)流量和服務(wù)器的負(fù)荷。此外,系統(tǒng)充分利用了客戶機(jī)/服務(wù)器結(jié)構(gòu)的特點(diǎn),比較復(fù)雜的查詢更新等操作都用存儲(chǔ)過程來實(shí)現(xiàn)。存儲(chǔ)過程在服務(wù)器端執(zhí)行完畢僅返回執(zhí)行結(jié)果,能有效的減少網(wǎng)
18、絡(luò)的通訊流量。</p><p><b> ?。ㄋ模?數(shù)據(jù)流圖</b></p><p> 對(duì)整個(gè)業(yè)務(wù)活動(dòng)進(jìn)行分析歸納后,我得出如下的數(shù)據(jù)流圖:</p><p><b> 二 系統(tǒng)設(shè)計(jì)</b></p><p> (一)系統(tǒng)模塊的劃分</p><p> 根據(jù)前面所作的需求分
19、析,我把整個(gè)系統(tǒng)分為如下幾個(gè)模塊:</p><p><b> (二) 數(shù)據(jù)字典</b></p><p> 商品入庫(kù)單明細(xì)ENTER_GOODS_DETAIL</p><p> 商品信息GOODS_INFO</p><p> 供應(yīng)商信息GYS_INFO</p><p> 部門信息LARGE
20、_TYPE</p><p> 商品分類信息SMALL_TYPE</p><p> 人員信息PERSON_INFO</p><p> 前臺(tái)銷售表POS_SALE</p><p> 收銀臺(tái)設(shè)置POS_SET</p><p> 商品變價(jià)記錄表PRICE_ADJUST</p><p> 庫(kù)
21、存調(diào)整記錄表STORE_ADJUST</p><p> 日處理歷史狀態(tài)DIALY_DAN</p><p> 庫(kù)存調(diào)整原因表STORE_ADJUST_REASON</p><p> 商品庫(kù)存表STORE_DETAIL</p><p> 商品促銷/折扣記錄GOODS_PROMOTE_LOG</p><p> 權(quán)限
22、表MENU_FLAG</p><p> 三、程序的設(shè)計(jì)與編碼</p><p> 有了前面的工作,我們選擇就進(jìn)入編碼階段了。</p><p> ?。ㄒ唬?POS系統(tǒng)的開發(fā)</p><p> 1. 功能及實(shí)現(xiàn)方法</p><p> POS系統(tǒng)是作為一個(gè)單獨(dú)的程序開發(fā)的,主要在POS機(jī)上運(yùn)行,完成商品的交易任務(wù)。銷售
23、的商品信息存儲(chǔ)在POS_SALE表中。我們把一次交易放在一個(gè)事務(wù)提交,保證了數(shù)據(jù)的完整性和數(shù)據(jù)的正確性。界面以灰色調(diào)為主,使得收銀員長(zhǎng)時(shí)間工作眼睛不感到疲勞。收銀的操作也很簡(jiǎn)單方便。交易流水號(hào)自動(dòng)增加。</p><p> 當(dāng)某種商品處于促銷或折扣銷售狀態(tài)時(shí),POS系統(tǒng)自動(dòng)取商品的促銷或折扣售價(jià),無需人工干預(yù),并且促銷或折扣期結(jié)束時(shí),系統(tǒng)能自動(dòng)識(shí)別恢復(fù)正常售價(jià)。這一個(gè)功能的實(shí)現(xiàn)是通過商品視圖來完成的。請(qǐng)看商品視圖
24、源碼。</p><p> 前臺(tái)POS銷售時(shí)取商品信息時(shí)用到的視圖:</p><p> CREATE VIEW V_SPXX</p><p><b> AS</b></p><p> SELECT NAME , A.GOODS_ID,A.BAR_ID,A.GUIGE, </p><p>
25、; BUY_PRICE= CASE </p><p> WHEN (GETDATE()>B.END_DATE AND GETDATE()<B.BEGIN_DATE) OR A.FLAG='正常' THEN A.BUY_PRICE1</p><p> WHEN (GETDATE()<B.END_DATE AND GETDATE()>B.B
26、EGIN_DATE) AND A.FLAG='促銷' THEN A.BUY_PRICE2</p><p> WHEN (GETDATE()<B.END_DATE AND GETDATE()>B.BEGIN_DATE) AND A.FLAG='折扣' THEN A.BUY_PRICE2</p><p> ELSE A.BUY_PRICE1 &
27、lt;/p><p><b> END </b></p><p> FROM GOODS_INFO A ,GOODS_PROMOTE_LOG B</p><p> WHERE A.GOODS_ID*=B.GOODS_ID</p><p> 交易是在一個(gè)事務(wù)里完成的,請(qǐng)看交易完成數(shù)據(jù)提交的代碼:</p>&
28、lt;p> if form_pos.Database1.InTransaction then</p><p><b> try</b></p><p> form_pos.query1.ApplyUpdates;把本地緩存修改的操作提交服務(wù)器</p><p> form_pos.Database1.Commit; 事務(wù)提交
29、</p><p> form_pos.query1.CommitUpdates;清空本地緩存</p><p> if form_pos.Database1.InTransaction=false then</p><p> form_pos.Database1.StartTransaction;</p><p><b>
30、 except</b></p><p> form_pos.Database1.Rollback; 事務(wù)回滾</p><p><b> end;</b></p><p> 2. 問題討論:交易流水號(hào)的確定</p><p> 在實(shí)際運(yùn)用中,可能十幾臺(tái)甚至幾十臺(tái)POS機(jī)同時(shí)工作,也就是存在大量的數(shù)據(jù)庫(kù)并
31、發(fā)操作。怎樣使交易流水號(hào)唯一呢?我是這樣實(shí)現(xiàn)的,在每次事務(wù)提交之前,比較本機(jī)的流水號(hào)是否在后臺(tái)數(shù)據(jù)庫(kù)交易流水號(hào)中已經(jīng)存在,如果存在,也就是說已經(jīng)被別人占用,則重新取出最大交易流水號(hào),然后提交整個(gè)事務(wù)。事務(wù)提交成功以后還要更新本地交易流水號(hào)。這是取最大流水號(hào)select max(P_NO) as p_no from pos_sale的SQL語句。</p><p> (二)管理信息系統(tǒng)的設(shè)計(jì)</p>
32、<p><b> 1.界面設(shè)計(jì)</b></p><p> 本系統(tǒng)采用了帶導(dǎo)航欄的多文檔窗體設(shè)計(jì)風(fēng)格,使操作變的簡(jiǎn)單直觀。當(dāng)使用某一個(gè)功能模塊時(shí),只顯示相應(yīng)的菜單,使人不會(huì)覺得眼花繚亂。系統(tǒng)完全擯棄那種界面花哨,色彩絢麗等華而不實(shí)做法,但和傳統(tǒng)的風(fēng)格有有所區(qū)別,傳統(tǒng)的風(fēng)格顯得過于呆板。本系統(tǒng)的界面色調(diào)一致,簡(jiǎn)單樸素,但不失美觀大方。窗體界面一致,操作也大同小異,絲毫沒有雜亂無章
33、的感覺。</p><p> 我首先定義了幾個(gè)重要的窗體基類,其他的窗體基本上這幾個(gè)基類的派生類。在使用時(shí)在對(duì)窗體進(jìn)行重載。所有的窗體都是在運(yùn)行時(shí)動(dòng)態(tài)加載的。需要運(yùn)行那個(gè)窗體時(shí),程序才加載該窗體,用完后立即釋放,這樣使用戶計(jì)算機(jī)系統(tǒng)資源得以最少得占用。請(qǐng)看一個(gè)窗體得創(chuàng)建例子:</p><p> enter_dan:= Tenter_dan.Create(Self); 入庫(kù)單錄入窗體得創(chuàng)建
34、</p><p> form_show(enter_dan,555 ,360,10,2); form_show為自定義函數(shù)</p><p> 對(duì)所有子窗體顯示我自定義了一個(gè)函數(shù)form_show,減少了工作量和代碼量。</p><p> procedure form_show(form:TForm;fwidth ,fheight,fleft,ftop :int
35、eger);</p><p><b> begin</b></p><p> with form do</p><p><b> begin</b></p><p> height:=fheight;</p><p> width:=fwidth;</p>
36、;<p> Left:=fleft;</p><p> top:=ftop;</p><p><b> Show;</b></p><p><b> end;</b></p><p><b> end;</b></p><p>
37、 窗體的釋放實(shí)現(xiàn),例如釋放入庫(kù)單錄入界面窗體:</p><p> procedure Tenter_dan.FormClose(Sender: TObject; var Action: TCloseAction);</p><p><b> begin</b></p><p> action:=cafree; 在內(nèi)存中釋放掉窗體</
38、p><p><b> end;</b></p><p> 2. 各個(gè)功能模塊實(shí)現(xiàn)的要點(diǎn)和技術(shù)</p><p> 這里我只把我在編碼過程中比較重要或者比較有代表性的技術(shù)和部分源碼闡述一下。詳情查看系統(tǒng)的源代碼。</p><p> 2.1 類繼承與重載</p><p> 在編碼過程中,我充分利用
39、了面向?qū)ο缶幊痰奶囟āa的重用,具體實(shí)現(xiàn)起來依靠的是重載和繼承。把具有相同或相似屬性的類抽象出來作為一個(gè)基類。我定義了幾個(gè)重要的窗體基類,基類窗體包含了需要的公有控件和共有事件方法。其他的窗體基本上這幾個(gè)基類的派生類。在使用時(shí)在對(duì)窗體的控件的屬性和方法進(jìn)行繼承或者重載。</p><p> 關(guān)于在DELPHI方法的重載,例如:</p><p> procedure Action7Ex
40、ecute(Sender: TObject); OVERRIDE;</p><p> procedure Tenter_goods_info.Action7Execute(Sender: TObject);</p><p><b> begin</b></p><p><b> try</b></p>
41、<p> if (dbedit1.Text<>'') and (dbedit2.Text<>'') and (dbedit3.Text<>'')and (dbedit4.Text<>'')then</p><p><b> begin</b></p>&
42、lt;p> query1.Post;</p><p> addbutton.Enabled:=true;</p><p> delbutton.Enabled:=true;</p><p> savebutton.Enabled:=false;</p><p><b> end</b></p>
43、<p><b> else</b></p><p> showmessage('你的輸入不完整!');</p><p><b> except</b></p><p> showmessage('代碼重復(fù)!');</p><p><b>
44、; end;</b></p><p><b> end;</b></p><p> 2.2 windows消息機(jī)制</p><p> 當(dāng)查詢窗體要返回結(jié)果時(shí),我們用到了windows消息機(jī)制。</p><p> 首先定義一個(gè)全局的自定義消息常量。</p><p> Cons
45、t My_WM_USER=WM_USER+100; //自定義消息 </p><p> 向指定的窗體發(fā)送自定義消息,傳遞查詢結(jié)果。例如:</p><p> procedure Tgoods_info_search.searchbuttonClick(Sender: TObject);</p><p><b> begin</b><
46、;/p><p><b> try</b></p><p> price_adjust.Query1.Close; price_adjust.Query1.SQL.Clear;</p><p> price_adjust.Query1.SQL:=query1.SQL;</p><p
47、> sendmessage(price_adjust.Handle,My_WM_USER,0,0);</p><p><b> except</b></p><p><b> beep;</b></p><p><b> end;</b></p><p><
48、b> close;</b></p><p><b> end;</b></p><p> 接收消息,并且處理它,例如:</p><p><b> 定義消息響應(yīng)的方法</b></p><p> procedure my_wm_user100(var msg:Tmessage
49、); message My_WM_USER;</p><p><b> 處理消息:</b></p><p> procedure Tgoods_promote.my_wm_user100(var msg:Tmessage) ;</p><p><b> begin</b></p><p>
50、 with query1 do</p><p><b> close;</b></p><p> sql.clear;</p><p> sql.add(sql語句);</p><p><b> open;</b></p><p><b> end;<
51、;/b></p><p> 2.3 關(guān)于權(quán)限設(shè)置</p><p> 權(quán)限設(shè)置是一個(gè)管理系統(tǒng)非常重要的一部分,直接關(guān)系到公司業(yè)務(wù)和財(cái)務(wù)安全性。因此,本系統(tǒng)在這方面的功能是較完善的。操作人員的權(quán)限可以定義到每級(jí)子菜單。對(duì)沒有賦權(quán)限的菜單項(xiàng)不予顯示。也就是說,系統(tǒng)能根據(jù)登陸人員的權(quán)限自動(dòng)顯示具有權(quán)限的功能菜單。我們把人員的權(quán)限信息存放在MENU_FLAG表中,在系統(tǒng)啟動(dòng)時(shí)加載相關(guān)的權(quán)限
52、設(shè)置信息。權(quán)限設(shè)置這一功能只有高級(jí)管理人員和系統(tǒng)管理員才能使用。</p><p> 根據(jù)權(quán)限顯示菜單算法</p><p> with damo.query1 do //query1關(guān)聯(lián)MENU_FLAG表</p><p><b> begin</b></p><p><b> close;</
53、b></p><p> sql.Clear;</p><p> sql.Add('select * from menu_flag where id=:id ');</p><p> ParamByName('id').AsInteger:=person_id;</p><p><b>
54、open;</b></p><p><b> end;</b></p><p> for i:=1 to 42 do</p><p><b> begin</b></p><p> flag:=damo.query1.fields[i].AsInteger;//flag為每項(xiàng)菜單
55、的權(quán)限標(biāo)志</p><p> for j:=0 to main_form.ComponentCount-1 do</p><p><b> begin</b></p><p> if (main_form.Components[j] is TMenuItem) and ((main_form.Components[j] as TMenuI
56、tem).Tag=i-1 ) then</p><p> if flag = 0 then</p><p> (main_form.Components[j] as TMenuItem).Visible:=false</p><p><b> else</b></p><p> (main_form.C
57、omponents[j] as TMenuItem).Visible:=true;</p><p><b> end;</b></p><p><b> end;</b></p><p> 2.4 應(yīng)用Delphi顯式事務(wù)控制</p><p> 事務(wù)控制是一種能夠把數(shù)據(jù)庫(kù)的一組修改作為整體提
58、交給數(shù)據(jù)庫(kù)以保證數(shù)據(jù)的一致性和完整性的機(jī)制。如果其中有一個(gè)操作失敗,則所有操作失敗。</p><p> 2.5 存儲(chǔ)過程的使用</p><p> 在程序設(shè)計(jì)中,系統(tǒng)主要的復(fù)雜的操作我都都是通過存儲(chǔ)過程來實(shí)現(xiàn)的。</p><p> 例如:使用庫(kù)存調(diào)整操作時(shí),我們用P_ADJUST_STORE來完成。</p><p> procedure
59、 Tadjust_store.okbuttonClick(Sender: TObject);</p><p><b> begin</b></p><p> if not damo.Database1.InTransaction then</p><p> damo.Database1.StartTransaction; 開始一個(gè)事務(wù)&l
60、t;/p><p> with P_ADJUST_STORE do //P_ADJUST_STORE為存儲(chǔ)過程</p><p><b> begin</b></p><p> Params[1].AsInteger:=strtoint(edit_id.Text);</p><p> Params[2].AsFl
61、oat:=strtofloat(edit_adjust.Text);</p><p> Params[3].AsInteger:= table1.Fields[0].AsInteger ;</p><p> Params[4].AsInteger:= person_id ;// person_id為全局變量人員ID</p><p><b> Prep
62、are;</b></p><p><b> execproc;</b></p><p><b> end;</b></p><p><b> try</b></p><p> damo.Database1.Commit; 事務(wù)提交</p>&l
63、t;p><b> except</b></p><p><b> begin</b></p><p> damo.Database1.Rollback; 事務(wù)回滾</p><p> showmessage('數(shù)據(jù)提交失敗! ');</p><p><b>
64、end;</b></p><p><b> end; </b></p><p> 以下是幾種典型存儲(chǔ)過程。</p><p><b> 日處理存儲(chǔ)過程:</b></p><p> CREATE PROCEDURE P_DIALY_DO</p><p>
65、; @dialy_date char(12),</p><p> @person_id smallint</p><p><b> AS</b></p><p> DECLARE @goods_id int</p><p> DECLARE @quantity float</p><p&
66、gt; DECLARE @amount money</p><p> DECLARE temp_cursor CURSOR FOR</p><p> SELECT A.GOODS_ID,SUM(A.QUANTITY),SUM(A.QUANTITY*B.COST_PRICE) </p><p> FROM POS_SALE A, GOODS_INFO B
67、</p><p> WHERE convert(char(12),WORK_DATE,102)=@dialy_date </p><p> AND A.GOODS_ID=B.GOODS_ID GROUP BY A.GOODS_ID </p><p> OPEN temp_cursor</p><p> FETCH NE
68、XT FROM temp_cursor INTO @goods_id, @quantity, @amount</p><p> WHILE (@@FETCH_STATUS=0)</p><p><b> BEGIN</b></p><p> if EXISTS(SELECT * FROM STORE_DETAIL WHERE GOOD
69、S_ID = @goods_id)</p><p><b> BEGIN </b></p><p> UPDATE STORE_DETAIL</p><p> SET QUANTITY=QUANTITY-@quantity , AMOUNT=AMOUNT-@amount</p><p> WHERE GO
70、ODS_ID = @goods_id</p><p><b> END</b></p><p> FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p><p><b> END</b></p><p> INSERT
71、 DIALY_DAN</p><p> VALUES( @dialy_date,'已做',@person_id)</p><p> CLOSE temp_cursor</p><p> DEALLOCATE temp_cursor</p><p> 查詢每日商品銷售匯總的存儲(chǔ)過程:</p><p&g
72、t; CREATE PROCEDURE P_DIALY_SALE</p><p><b> AS</b></p><p> CREATE TABLE #temp_table</p><p><b> (</b></p><p> amount float,</p>&
73、lt;p> work_date char(12),</p><p> sale_cost float,</p><p> gain float</p><p><b> )</b></p><p> INSERT INTO #temp_table</p><p> SELEC
74、T </p><p> a.amount,convert(char(12),a.work_date,102) AS work_date, </p><p> (c.cost_price*a.quantity) AS sale_cost,</p><p> (a.amount-c.cost_price*a.quantity)
75、AS gain</p><p> FROM pos_sale a,small_type b,goods_info c</p><p> WHERE a.goods_id=c.goods_id</p><p> AND c.small_type=b.small_type_id</p><p> SELECT work_date,
76、 sum(amount) AS sum_amount , sum(sale_cost) AS sum_sale_cost , sum( gain ) AS sum_gain</p><p> FROM #temp_table </p><p> GROUP BY work_date, ORDER BY work_date</p><p>
77、 商品審核入庫(kù)存儲(chǔ)過程</p><p> CREATE PROCEDURE P_GOODS_ENTER</p><p> @enter_dan_id int</p><p><b> AS</b></p><p> DECLARE @goods_id int</p><p> DE
78、CLARE @quantity float</p><p> DECLARE @amount money</p><p> DECLARE temp_cursor CURSOR FOR</p><p> SELECT GOODS_ID,QUANTITY,AMOUNT FROM ENTER_GOODS_DETAIL</p><p> W
79、HERE ENTER_DAN_ID=@enter_dan_id</p><p> OPEN temp_cursor</p><p> FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p><p> WHILE (@@FETCH_STATUS=0)</p><p>
80、;<b> BEGIN</b></p><p> if EXISTS(SELECT * FROM STORE_DETAIL WHERE GOODS_ID = @goods_id)</p><p><b> BEGIN </b></p><p> UPDATE STORE_DETAIL</p>&
81、lt;p> SET QUANTITY=QUANTITY+@quantity , </p><p> AMOUNT=AMOUNT+@amount</p><p> WHERE GOODS_ID = @goods_id</p><p><b> END</b></p><p><b> ELSE&
82、lt;/b></p><p><b> BEGIN</b></p><p> INSERT STORE_DETAIL </p><p> VALUES(@goods_id,@quantity,@amount,getdate())</p><p><b> END</b></p&g
83、t;<p> FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p><p><b> END</b></p><p> CLOSE temp_cursor</p><p> DEALLOCATE temp_cursor</p><
84、;p> 查詢部門銷售匯總的存儲(chǔ)過程</p><p> CREATE PROCEDURE P_SEARCH_DEP_SALE</p><p><b> AS</b></p><p> CREATE TABLE #temp_table</p><p><b> (</b></p
85、><p> large_type_id int,</p><p> dep_name char(10),</p><p> quantity float,</p><p> amount float,</p><p> work_date char(12),</p><p> sale
86、_cost float,</p><p> gain float</p><p><b> )</b></p><p> INSERT INTO #temp_table</p><p> SELECT </p><p> b.large_type_id,b.name AS
87、 dep_name,</p><p> a.quantity,a.amount,convert(char(12),a.work_date,102) AS work_date, </p><p> (c.cost_price*a.quantity) AS sale_cost,</p><p> (a.amount-c.cost_price*a.qu
88、antity) AS gain</p><p> FORM pos_sale a,large_type b,goods_info c</p><p> WHERE a.goods_id=c.goods_id</p><p> AND c.large_type=b.large_type_id</p><p> SELECT wor
89、k_date, large_type_id ,dep_name,</p><p> sum( quantity) AS sum_quantity , sum(amount) AS sum_amount , sum(sale_cost) AS sum_sale_cost , sum( gain ) AS sum_gain</p><p> FROM #temp_tab
90、le </p><p> GROUP BY work_date, large_type_id ,dep_name ORDER BY work_date</p><p> 查詢商品分類匯總的存儲(chǔ)過程</p><p> CREATE PROCEDURE P_SEARCH_KIND_SALE</p><p><b> AS&l
91、t;/b></p><p> CREATE TABLE #temp_table</p><p><b> (</b></p><p> small_type_id int,</p><p> kind_name char(10),</p><p> quantity float,&
92、lt;/p><p> amount float,</p><p> work_date char(12),</p><p> sale_cost float,</p><p> gain float</p><p><b> )</b></p><p> INS
93、ERT INTO #temp_table</p><p> SELECT </p><p> b.small_type_id,b.name AS kind_name,</p><p> a.quantity,a.amount,convert(char(12),a.word_date,102) AS work_date, </p&g
94、t;<p> (c.cost_price*a.quantity) AS sale_cost,</p><p> (a.amount-c.cost_price*a.quantity) AS gain</p><p> FROM pos_sale a,small_type b,goods_info c</p><p> WHERE a.g
95、oods_id=c.goods_id</p><p> AND c.small_type=b.small_type_id</p><p> SELECT work_date, small_type_id ,kind_name,</p><p> sum( quantity) AS sum_quantity , sum(amount) AS sum
96、_amount , sum(sale_cost) AS sum_sale_cost , sum( gain ) AS sum_gain</p><p> FROM #temp_table </p><p> GROUP BY work_date, small_type_id ,kind_name ORDER BY work_date</p><p>
97、 查詢商品銷售的存儲(chǔ)過程:</p><p> CREATE PROCEDURE P_SEARCH_GOODS_SALE</p><p><b> AS</b></p><p> CREATE TABLE #temp_table</p><p><b> (</b></p>
98、<p> goods_id int,</p><p> bar_id int,</p><p> goods_name char(20),</p><p> guige char(4),</p><p> quantity float,</p><p> amount float,</p
99、><p> work_date char(12),</p><p> sale_cost float,</p><p> gain float,</p><p> gain_rate float</p><p><b> )</b></p><p> INSERT
100、 INTO #temp_table</p><p> SELECT </p><p> a.goods_id,a.bar_id,a.name AS goods_name,</p><p> a.guige,a.quantity,a.amount,convert(char(12),a.word_date,102) AS work_date,
101、 </p><p> (c.cost_price*a.quantity) AS sale_cost,</p><p> (a.amount-c.cost_price*a.quantity) AS gain,</p><p> ((a.amount-c.cost_price*a.quantity)/(c.cost_price*a.quantity))
102、 AS gain_rate</p><p> FORM pos_sale a,large_type b,goods_info c</p><p> WHERE a.goods_id=c.goods_id</p><p> AND c.large_type=b.large_type_id</p><p> SELECT wor
103、k_date, goods_id , bar_id, goods_name , guige ,</p><p> sum( quantity) AS sum_quantity , sum(amount) AS sum_amount , sum(sale_cost) AS sum_sale_cose , sum( gain ) AS sum_gain,gain_rate*100 AS ga
104、in_rate</p><p> FORM #temp_table </p><p> GROUP BY work_date,goods_id, goods_name , guige,gain_rate,bar_id </p><p> ORDER BY work_date</p><p><b> 庫(kù)存調(diào)整存儲(chǔ)過
105、程</b></p><p> CREATE PROCEDURE P_STORE_ADJUST</p><p> @goods_id int,</p><p> @adjust_quantity float,</p><p> @adjust_readon int,</p><p> @work
106、_person int</p><p><b> AS</b></p><p> DECLARE @price money </p><p> DECLARE @quantity float</p><p> DECLARE @amount money</p><p> SELECT
107、@quantity= QUANTITY,@amount=AMOUNT FROM STORE_DETAIL WHERE GOODS_ID=@goods_id</p><p> SELECT @price=cost_price FROM GOODS_INFO WHERE GOODS_ID=@goods_id </p><p> UPDATE STORE_DETAIL</p>
108、<p><b> SET</b></p><p> QUANTITY=QUANTITY-@adjust_quantity, AMOUNT=AMOUNT-@price*@adjust_quantity</p><p> WHERE goods_id =@goods_id</p><p> INSERT STORE_ADJU
109、ST </p><p> VALUES(@goods_id,@quantity,@amount,@adjust_quantity,convert(money,@price*@adjust_quantity),@adjust_readon,@work_pe</p><p><b> 參考書錄</b></p><p> 1 Delp
110、hi6 數(shù)據(jù)庫(kù)技術(shù) 姜洪、張希編著 國(guó)防工業(yè)出版社 2005.4</p><p> 2 SQL Server高級(jí)管理與開發(fā) 飛思科技產(chǎn)品研發(fā)中心編著 電子工業(yè)出版社 2006.1</p><p> Delphi趣味程序?qū)W(xué) 楊正華 呂躍春編著 清華大學(xué)出版社 2007.8</p><p> Delphi6.0 編程技巧與實(shí)例分析 關(guān)兵、邵謙謙等著 中國(guó)水利水
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)信息管理??飘厴I(yè)論文--中小型超市管理系統(tǒng)規(guī)劃
- 中小型超市商品管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 【畢業(yè)論文】
- 畢業(yè)論文范文—— 中小型超市綜合信息管理系統(tǒng)
- 中小型超市管理系統(tǒng).pdf
- 中小型超市管理系統(tǒng)(1)
- 畢業(yè)設(shè)計(jì)---中小型商品超市管理系統(tǒng)
- 中小型制造企業(yè)物流信息系統(tǒng)規(guī)劃 【畢業(yè)論文】
- 畢業(yè)論文范文——小型超市管理系統(tǒng)
- 畢業(yè)論文范文——小型超市管理系統(tǒng)
- 中小型企業(yè)組網(wǎng)畢業(yè)論文
- 中小型企業(yè)倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 《中小型企業(yè)倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》畢業(yè)論文
- 中小型企業(yè)供應(yīng)鏈管理畢業(yè)論文
- 中小型超市進(jìn)銷存管理系統(tǒng).pdf
- 畢業(yè)論文---中小型企業(yè)綜合管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 中小型物流企業(yè)的內(nèi)部管理研究【畢業(yè)論文】
- 畢業(yè)論文---論中小型企業(yè)成本管理方法
- 中小型生產(chǎn)企業(yè)員工工作效率管理【畢業(yè)論文】
- 中小型企業(yè)網(wǎng)絡(luò)安全規(guī)劃與設(shè)計(jì)畢業(yè)論文
- 中小型超市銷售管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論