計算機信息管理??飘厴I(yè)論文--中小型超市管理系統(tǒng)規(guī)劃_第1頁
已閱讀1頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(論文)</b></p><p>  課題名稱: 中小型超市管理系統(tǒng)規(guī)劃 </p><p>  專業(yè)名稱 計算機信息管理 </p><p>  班 級 XXX </p><p>  指導(dǎo)教師 XXX </p>

2、<p>  學生姓名 XXXX </p><p>  完成時間: XXXX年 XX 月 XX 日至 XX 年 XXX 月XX 日</p><p>  初稿時間: XXXX 年 XX月 XX 日</p><p>  定稿時間: XXXX 年 XX 月 XXXXXX 日</p><p><b>  目

3、 錄</b></p><p><b>  一 需求分析1</b></p><p> ?。ㄒ唬?行業(yè)概念的理解1</p><p> ?。ǘ?業(yè)務(wù)流程說明2</p><p> ?。ㄈ﹩栴}解決方案2</p><p> ?。ㄋ模?數(shù)據(jù)流圖3</p><p&g

4、t;<b>  二 系統(tǒng)設(shè)計3</b></p><p><b>  二 系統(tǒng)設(shè)計4</b></p><p> ?。ㄒ唬┫到y(tǒng)模塊的劃分4</p><p> ?。ǘ?數(shù)據(jù)字典4</p><p>  三、程序的設(shè)計與編碼8</p><p>  (一) POS系統(tǒng)的開發(fā)

5、8</p><p>  1. 功能及實現(xiàn)方法8</p><p>  2. 問題討論:交易流水號的確定9</p><p> ?。ǘ┕芾硇畔⑾到y(tǒng)的設(shè)計9</p><p><b>  1.界面設(shè)計9</b></p><p>  2. 各個功能模塊實現(xiàn)的要點和技術(shù)10</p>&

6、lt;p>  2.1 類繼承與重載10</p><p>  2.2 windows消息機制11</p><p>  2.3 關(guān)于權(quán)限設(shè)置12</p><p>  2.4 應(yīng)用Delphi顯式事務(wù)控制13</p><p>  2.5 存儲過程的使用13</p><p><b>  參考文獻20

7、</b></p><p>  中小型超市管理系統(tǒng)規(guī)劃</p><p>  內(nèi)容摘要:《中小型超市管理信息系統(tǒng)》是一個比較復(fù)雜和全面的管理系統(tǒng),可以完成中小型超市的大部分業(yè)務(wù)。總的來說包括進貨管理,物價管理,庫存管理,銷售管理,供貨廠商管理,POS收款機子系統(tǒng)等。該系統(tǒng)界面樸素一致,但不失美觀大方;操作方便,查詢功能強大;數(shù)據(jù)全面、準確。系統(tǒng)采用了目前比較流行而技術(shù)非常成熟地客戶

8、機/服務(wù)器結(jié)構(gòu)(C/S),前臺應(yīng)用程序用Delphi開發(fā),后臺數(shù)據(jù)庫是Microsoft SQL Server 2000。</p><p>  關(guān)鍵字: 面向?qū)ο蟮某绦蛟O(shè)計,繼承,WINDOWS消息,存儲過程,事務(wù)</p><p><b>  一 需求分析</b></p><p> ?。ㄒ唬?行業(yè)概念的理解</p><p&g

9、t;  POS: Point Of Sells , 電子收款機系統(tǒng),也就是直接與顧客打交道的收銀機系統(tǒng)。</p><p>  定單狀態(tài):用來描述商品進貨方式,一般分為定單、日配、自采等。</p><p>  定單:表示該商品進貨必須先向供貨商發(fā)出定單,供貨商按定單上的商品明細發(fā)貨,超市則按定單上的商品明細收貨。</p><p>  日配:指那些每天都要進貨的商品或者

10、補貨期較短的商品,例如水果,生鮮蔬菜等。如果按定單,時間不允許而且工作重復(fù)煩瑣。</p><p>  自采:顧名思義,超市自己負責商品的進貨。</p><p>  銷售狀態(tài):用來描述某種商品當前的銷售狀態(tài),一般定義為正常、促銷、折扣等,正常表示商品處于正常的售價狀態(tài),即按正常的售價銷售。</p><p>  促銷:表示超市把某種商品讓利銷售,以此來吸引跟多的消費者。

11、一般低于正常售價甚至成本價。</p><p>  折扣:表示某種商品銷售情況不好,或者商品有瑕疵,或者保質(zhì)期快到等情況發(fā)生時,使盡快商品銷售出去的一種手段。</p><p>  庫存調(diào)整:當非因正常銷售發(fā)生而實物數(shù)量變動時,通過調(diào)整庫存使其帳面數(shù)量與實物數(shù)量相符。</p><p>  日處理:當一天的銷售結(jié)束后,開始做日處理。把當天的銷售數(shù)據(jù)匯總,調(diào)整商品庫存。&l

12、t;/p><p>  損益:商品出現(xiàn)損壞,變質(zhì),被盜等情況發(fā)生時,商品發(fā)生損益。損益通過調(diào)整庫存得到體現(xiàn)。</p><p>  商品變價:商品變價與促銷/折扣調(diào)整價格是兩個不同的概念。商品變價是指修改商品的正常售價,調(diào)整后在一定的時間內(nèi)不會在發(fā)生改變。價格可能是升高也可能是降低,一般都是由于進價變動引起的。</p><p>  促銷/折扣期: 每一種商品促銷/折扣都有一

13、定的期限,即有一定的時間限制。一種商品不可能無期限的促銷/折扣。當期限超過,商品自動恢復(fù)正常售價。</p><p>  毛利、毛利百分比: 毛利=商品售價-商品進價 毛利百分比=(商品售價-商品進價)÷商品售價</p><p>  商品進價及成本核算: 在成本核算中,商品成本價的確定一般有最后進價,移動加權(quán)平均,按商品批次定價等幾種方式,由于后兩種核算方式較復(fù)雜,本系統(tǒng)采用簡單的

14、最后進價方式。</p><p> ?。ǘ?業(yè)務(wù)流程說明</p><p>  在實際管理中,有三種信息流動,即資金流,單據(jù)流和商品實物流。系統(tǒng)圍繞實物流展開,對商品從供應(yīng)商那里進貨到商品銷售到顧客手中整個流程進行管理。簡單來說,就是商品的進銷存管理。每個環(huán)節(jié)通過相應(yīng)的單據(jù)來連接,同時資金發(fā)生流動。在商品管理方面,我們提出部門和商品分類的概念,這種分級管理方式簡潔高效。所謂部門,就是按照商品

15、的基本屬性進行分類管理。例如,超市一般可分為食品部,生鮮部,日用品部等。部門下面再分類,所謂商品分類,指按商品的具體屬性劃分,例如,食品部下面可以有糖果餅干類,飲料類等,每個部門和每個商品類別都有相應(yīng)的負責人負責?!吨行⌒统泄芾硇畔⑾到y(tǒng)》完全體現(xiàn)了這種管理思想,商品的銷售和商品庫存都可以按部門級和分類級完成查詢等其他操作。作為一個超市的管理人員,及時了解銷售情況是非常必要的,以便及時調(diào)整進貨或者安排營銷策略,把握商機。而《中小型超市管

16、理信息系統(tǒng)》正好滿足了這一要求,可以實時查詢前臺的銷售情況,并且數(shù)據(jù)準確可信。</p><p><b> ?。ㄈ﹩栴}解決方案</b></p><p>  超市系統(tǒng)在運行過程中數(shù)據(jù)流量是非常巨大的。有時候會因數(shù)據(jù)流量過大而使網(wǎng)絡(luò)發(fā)生阻塞,使POS系統(tǒng)發(fā)生斷網(wǎng),直接影響銷售活動的進行。這種情況是應(yīng)該堅決避免的,應(yīng)該盡量減少網(wǎng)絡(luò)的數(shù)據(jù)流量。這一思想在本系統(tǒng)中的直接體現(xiàn)就是

17、采用日處理和運用本地緩存技術(shù)。日處理的主要目的就是把當天的銷售數(shù)據(jù)整理匯總,更新商品庫存表,為第二天的銷售做準備。與日處理不同的另一種處理方式就是每次商品銷售完成以后就立即更新庫存。但這樣會使得服務(wù)器的負荷非常的重,經(jīng)常會使POS系統(tǒng)發(fā)生斷網(wǎng)。POS系統(tǒng)銷售商品時所取的商品信息是服務(wù)器上的數(shù)據(jù),有效的保證了數(shù)據(jù)的一致性和集中控制。雖然商品信息來自服務(wù)器,但我們使用了本地緩存。POS系統(tǒng)會把取得的數(shù)據(jù)暫時的存放在本地的內(nèi)存,當要讀取商品信

18、息時,會先在本地緩存里查找,如果成功的話,就不必訪問服務(wù)器。這樣一來就有效的減少了網(wǎng)絡(luò)的數(shù)據(jù)流量和服務(wù)器的負荷。此外,系統(tǒng)充分利用了客戶機/服務(wù)器結(jié)構(gòu)的特點,比較復(fù)雜的查詢更新等操作都用存儲過程來實現(xiàn)。存儲過程在服務(wù)器端執(zhí)行完畢僅返回執(zhí)行結(jié)果,能有效的減少網(wǎng)絡(luò)的通訊流量。</p><p><b> ?。ㄋ模?數(shù)據(jù)流圖</b></p><p>  對整個業(yè)務(wù)活動進行分析

19、歸納后,我得出如下的數(shù)據(jù)流圖:</p><p><b>  二 系統(tǒng)設(shè)計</b></p><p>  (一)系統(tǒng)模塊的劃分</p><p>  根據(jù)前面所作的需求分析,我把整個系統(tǒng)分為如下幾個模塊:</p><p><b> ?。ǘ?數(shù)據(jù)字典</b></p><p>  商

20、品入庫單明細ENTER_GOODS_DETAIL</p><p>  商品信息GOODS_INFO</p><p>  供應(yīng)商信息GYS_INFO</p><p>  部門信息LARGE_TYPE</p><p>  商品分類信息SMALL_TYPE</p><p>  人員信息PERSON_INFO</p>

21、;<p>  前臺銷售表POS_SALE</p><p>  收銀臺設(shè)置POS_SET</p><p>  商品變價記錄表PRICE_ADJUST</p><p>  庫存調(diào)整記錄表STORE_ADJUST</p><p>  日處理歷史狀態(tài)DIALY_DAN</p><p>  庫存調(diào)整原因表STOR

22、E_ADJUST_REASON</p><p>  商品庫存表STORE_DETAIL</p><p>  商品促銷/折扣記錄GOODS_PROMOTE_LOG</p><p>  權(quán)限表MENU_FLAG</p><p>  三、程序的設(shè)計與編碼</p><p>  有了前面的工作,我們選擇就進入編碼階段了。<

23、/p><p> ?。ㄒ唬?POS系統(tǒng)的開發(fā)</p><p>  1. 功能及實現(xiàn)方法</p><p>  POS系統(tǒng)是作為一個單獨的程序開發(fā)的,主要在POS機上運行,完成商品的交易任務(wù)。銷售的商品信息存儲在POS_SALE表中。我們把一次交易放在一個事務(wù)提交,保證了數(shù)據(jù)的完整性和數(shù)據(jù)的正確性。界面以灰色調(diào)為主,使得收銀員長時間工作眼睛不感到疲勞。收銀的操作也很簡單方便。

24、交易流水號自動增加。</p><p>  當某種商品處于促銷或折扣銷售狀態(tài)時,POS系統(tǒng)自動取商品的促銷或折扣售價,無需人工干預(yù),并且促銷或折扣期結(jié)束時,系統(tǒng)能自動識別恢復(fù)正常售價。這一個功能的實現(xiàn)是通過商品視圖來完成的。請看商品視圖源碼。</p><p>  前臺POS銷售時取商品信息時用到的視圖:</p><p>  CREATE VIEW V_SPXX&l

25、t;/p><p><b>  AS</b></p><p>  SELECT NAME , A.GOODS_ID,A.BAR_ID,A.GUIGE, </p><p>  BUY_PRICE= CASE </p><p>  WHEN (GETDATE()>B.END_DATE AND GETDATE()&l

26、t;B.BEGIN_DATE) OR A.FLAG='正常' THEN A.BUY_PRICE1</p><p>  WHEN (GETDATE()<B.END_DATE AND GETDATE()>B.BEGIN_DATE) AND A.FLAG='促銷' THEN A.BUY_PRICE2</p><p>  WHEN (GETDATE()&

27、lt;B.END_DATE AND GETDATE()>B.BEGIN_DATE) AND A.FLAG='折扣' THEN A.BUY_PRICE2</p><p>  ELSE A.BUY_PRICE1 </p><p><b>  END </b></p><p>  FROM GOODS_INFO A ,GOOD

28、S_PROMOTE_LOG B</p><p>  WHERE A.GOODS_ID*=B.GOODS_ID</p><p>  交易是在一個事務(wù)里完成的,請看交易完成數(shù)據(jù)提交的代碼:</p><p>  if form_pos.Database1.InTransaction then</p><p><b>  try<

29、;/b></p><p>  form_pos.query1.ApplyUpdates;把本地緩存修改的操作提交服務(wù)器</p><p>  form_pos.Database1.Commit; 事務(wù)提交</p><p>  form_pos.query1.CommitUpdates;清空本地緩存</p><p>  if form_

30、pos.Database1.InTransaction=false then</p><p>  form_pos.Database1.StartTransaction;</p><p><b>  except</b></p><p>  form_pos.Database1.Rollback; 事務(wù)回滾</p><p

31、><b>  end;</b></p><p>  2. 問題討論:交易流水號的確定</p><p>  在實際運用中,可能十幾臺甚至幾十臺POS機同時工作,也就是存在大量的數(shù)據(jù)庫并發(fā)操作。怎樣使交易流水號唯一呢?我是這樣實現(xiàn)的,在每次事務(wù)提交之前,比較本機的流水號是否在后臺數(shù)據(jù)庫交易流水號中已經(jīng)存在,如果存在,也就是說已經(jīng)被別人占用,則重新取出最大交易流水號,

32、然后提交整個事務(wù)。事務(wù)提交成功以后還要更新本地交易流水號。這是取最大流水號select max(P_NO) as p_no from pos_sale的SQL語句。</p><p> ?。ǘ┕芾硇畔⑾到y(tǒng)的設(shè)計</p><p><b>  1.界面設(shè)計</b></p><p>  本系統(tǒng)采用了帶導(dǎo)航欄的多文檔窗體設(shè)計風格,使操作變的簡單直觀。

33、當使用某一個功能模塊時,只顯示相應(yīng)的菜單,使人不會覺得眼花繚亂。系統(tǒng)完全擯棄那種界面花哨,色彩絢麗等華而不實做法,但和傳統(tǒng)的風格有有所區(qū)別,傳統(tǒng)的風格顯得過于呆板。本系統(tǒng)的界面色調(diào)一致,簡單樸素,但不失美觀大方。窗體界面一致,操作也大同小異,絲毫沒有雜亂無章的感覺。</p><p>  我首先定義了幾個重要的窗體基類,其他的窗體基本上這幾個基類的派生類。在使用時在對窗體進行重載。所有的窗體都是在運行時動態(tài)加載的。

34、需要運行那個窗體時,程序才加載該窗體,用完后立即釋放,這樣使用戶計算機系統(tǒng)資源得以最少得占用。請看一個窗體得創(chuàng)建例子:</p><p>  enter_dan:= Tenter_dan.Create(Self); 入庫單錄入窗體得創(chuàng)建</p><p>  form_show(enter_dan,555 ,360,10,2); form_show為自定義函數(shù)</p><p

35、>  對所有子窗體顯示我自定義了一個函數(shù)form_show,減少了工作量和代碼量。</p><p>  procedure form_show(form:TForm;fwidth ,fheight,fleft,ftop :integer);</p><p><b>  begin</b></p><p>  with form do<

36、;/p><p><b>  begin</b></p><p>  height:=fheight;</p><p>  width:=fwidth;</p><p>  Left:=fleft;</p><p>  top:=ftop;</p><p><b>  

37、Show;</b></p><p><b>  end;</b></p><p><b>  end;</b></p><p>  窗體的釋放實現(xiàn),例如釋放入庫單錄入界面窗體:</p><p>  procedure Tenter_dan.FormClose(Sender: TObjec

38、t; var Action: TCloseAction);</p><p><b>  begin</b></p><p>  action:=cafree; 在內(nèi)存中釋放掉窗體</p><p><b>  end;</b></p><p>  2. 各個功能模塊實現(xiàn)的要點和技術(shù)</p>

39、<p>  這里我只把我在編碼過程中比較重要或者比較有代表性的技術(shù)和部分源碼闡述一下。詳情查看系統(tǒng)的源代碼。</p><p>  2.1 類繼承與重載</p><p>  在編碼過程中,我充分利用了面向?qū)ο缶幊痰奶囟āa的重用,具體實現(xiàn)起來依靠的是重載和繼承。把具有相同或相似屬性的類抽象出來作為一個基類。我定義了幾個重要的窗體基類,基類窗體包含了需要的公有控件和共有事件方

40、法。其他的窗體基本上這幾個基類的派生類。在使用時在對窗體的控件的屬性和方法進行繼承或者重載。</p><p>  關(guān)于在DELPHI方法的重載,例如:</p><p>  procedure Action7Execute(Sender: TObject); OVERRIDE;</p><p>  procedure Tenter_goods_info.Action7

41、Execute(Sender: TObject);</p><p><b>  begin</b></p><p><b>  try</b></p><p>  if (dbedit1.Text<>'') and (dbedit2.Text<>'') and (db

42、edit3.Text<>'')and (dbedit4.Text<>'')then</p><p><b>  begin</b></p><p>  query1.Post;</p><p>  addbutton.Enabled:=true;</p><p> 

43、 delbutton.Enabled:=true;</p><p>  savebutton.Enabled:=false;</p><p><b>  end</b></p><p><b>  else</b></p><p>  showmessage('你的輸入不完整!');

44、</p><p><b>  except</b></p><p>  showmessage('代碼重復(fù)!');</p><p><b>  end;</b></p><p><b>  end;</b></p><p>  2.2 w

45、indows消息機制</p><p>  當查詢窗體要返回結(jié)果時,我們用到了windows消息機制。</p><p>  首先定義一個全局的自定義消息常量。</p><p>  Const My_WM_USER=WM_USER+100; //自定義消息 </p><p>  向指定的窗體發(fā)送自定義消息,傳遞查詢結(jié)果。例如:</p&g

46、t;<p>  procedure Tgoods_info_search.searchbuttonClick(Sender: TObject);</p><p><b>  begin</b></p><p><b>  try</b></p><p>  price_adjust.Query1.Close;

47、 price_adjust.Query1.SQL.Clear;</p><p>  price_adjust.Query1.SQL:=query1.SQL;</p><p>  sendmessage(price_adjust.Handle,My_WM_USER,0,0);</p><p><b>  excep

48、t</b></p><p><b>  beep;</b></p><p><b>  end;</b></p><p><b>  close;</b></p><p><b>  end;</b></p><p> 

49、 接收消息,并且處理它,例如:</p><p><b>  定義消息響應(yīng)的方法</b></p><p>  procedure my_wm_user100(var msg:Tmessage); message My_WM_USER;</p><p><b>  處理消息:</b></p><p>

50、  procedure Tgoods_promote.my_wm_user100(var msg:Tmessage) ;</p><p><b>  begin</b></p><p>  with query1 do</p><p><b>  close;</b></p><p>  sql.c

51、lear;</p><p>  sql.add(sql語句);</p><p><b>  open;</b></p><p><b>  end;</b></p><p>  2.3 關(guān)于權(quán)限設(shè)置</p><p>  權(quán)限設(shè)置是一個管理系統(tǒng)非常重要的一部分,直接關(guān)系到公司業(yè)

52、務(wù)和財務(wù)安全性。因此,本系統(tǒng)在這方面的功能是較完善的。操作人員的權(quán)限可以定義到每級子菜單。對沒有賦權(quán)限的菜單項不予顯示。也就是說,系統(tǒng)能根據(jù)登陸人員的權(quán)限自動顯示具有權(quán)限的功能菜單。我們把人員的權(quán)限信息存放在MENU_FLAG表中,在系統(tǒng)啟動時加載相關(guān)的權(quán)限設(shè)置信息。權(quán)限設(shè)置這一功能只有高級管理人員和系統(tǒng)管理員才能使用。</p><p>  根據(jù)權(quán)限顯示菜單算法</p><p>  wit

53、h damo.query1 do //query1關(guān)聯(lián)MENU_FLAG表</p><p><b>  begin</b></p><p><b>  close;</b></p><p>  sql.Clear;</p><p>  sql.Add('select * from men

54、u_flag where id=:id ');</p><p>  ParamByName('id').AsInteger:=person_id;</p><p><b>  open;</b></p><p><b>  end;</b></p><p>  for i:=

55、1 to 42 do</p><p><b>  begin</b></p><p>  flag:=damo.query1.fields[i].AsInteger;//flag為每項菜單的權(quán)限標志</p><p>  for j:=0 to main_form.ComponentCount-1 do</p><p>&

56、lt;b>  begin</b></p><p>  if (main_form.Components[j] is TMenuItem) and ((main_form.Components[j] as TMenuItem).Tag=i-1 ) then</p><p>  if flag = 0 then</p><p>  (main

57、_form.Components[j] as TMenuItem).Visible:=false</p><p><b>  else</b></p><p>  (main_form.Components[j] as TMenuItem).Visible:=true;</p><p><b>  end;</b><

58、/p><p><b>  end;</b></p><p>  2.4 應(yīng)用Delphi顯式事務(wù)控制</p><p>  事務(wù)控制是一種能夠把數(shù)據(jù)庫的一組修改作為整體提交給數(shù)據(jù)庫以保證數(shù)據(jù)的一致性和完整性的機制。如果其中有一個操作失敗,則所有操作失敗。</p><p>  2.5 存儲過程的使用</p><

59、;p>  在程序設(shè)計中,系統(tǒng)主要的復(fù)雜的操作我都都是通過存儲過程來實現(xiàn)的。</p><p>  例如:使用庫存調(diào)整操作時,我們用P_ADJUST_STORE來完成。</p><p>  procedure Tadjust_store.okbuttonClick(Sender: TObject);</p><p><b>  begin</b&g

60、t;</p><p>  if not damo.Database1.InTransaction then</p><p>  damo.Database1.StartTransaction; 開始一個事務(wù)</p><p>  with P_ADJUST_STORE do //P_ADJUST_STORE為存儲過程</p><p>&

61、lt;b>  begin</b></p><p>  Params[1].AsInteger:=strtoint(edit_id.Text);</p><p>  Params[2].AsFloat:=strtofloat(edit_adjust.Text);</p><p>  Params[3].AsInteger:= table1.Field

62、s[0].AsInteger ;</p><p>  Params[4].AsInteger:= person_id ;// person_id為全局變量人員ID</p><p><b>  Prepare;</b></p><p><b>  execproc;</b></p><p><b

63、>  end;</b></p><p><b>  try</b></p><p>  damo.Database1.Commit; 事務(wù)提交</p><p><b>  except</b></p><p><b>  begin</b></p>

64、<p>  damo.Database1.Rollback; 事務(wù)回滾</p><p>  showmessage('數(shù)據(jù)提交失??! ');</p><p><b>  end;</b></p><p><b>  end; </b></p><p>  以下是幾種

65、典型存儲過程。</p><p><b>  日處理存儲過程:</b></p><p>  CREATE PROCEDURE P_DIALY_DO</p><p>  @dialy_date char(12),</p><p>  @person_id smallint</p><p><

66、b>  AS</b></p><p>  DECLARE @goods_id int</p><p>  DECLARE @quantity float</p><p>  DECLARE @amount money</p><p>  DECLARE temp_cursor CURSOR FOR</p>

67、<p>  SELECT A.GOODS_ID,SUM(A.QUANTITY),SUM(A.QUANTITY*B.COST_PRICE) </p><p>  FROM POS_SALE A, GOODS_INFO B</p><p>  WHERE convert(char(12),WORK_DATE,102)=@dialy_date </p><

68、;p>  AND A.GOODS_ID=B.GOODS_ID GROUP BY A.GOODS_ID </p><p>  OPEN temp_cursor</p><p>  FETCH NEXT FROM temp_cursor INTO @goods_id, @quantity, @amount</p><p>  WHILE (@@FETCH

69、_STATUS=0)</p><p><b>  BEGIN</b></p><p>  if EXISTS(SELECT * FROM STORE_DETAIL WHERE GOODS_ID = @goods_id)</p><p><b>  BEGIN </b></p><p>  UP

70、DATE STORE_DETAIL</p><p>  SET QUANTITY=QUANTITY-@quantity , AMOUNT=AMOUNT-@amount</p><p>  WHERE GOODS_ID = @goods_id</p><p><b>  END</b></p><p>  FETCH

71、 NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p><p><b>  END</b></p><p>  INSERT DIALY_DAN</p><p>  VALUES( @dialy_date,'已做',@person_id)</p>&l

72、t;p>  CLOSE temp_cursor</p><p>  DEALLOCATE temp_cursor</p><p>  查詢每日商品銷售匯總的存儲過程:</p><p>  CREATE PROCEDURE P_DIALY_SALE</p><p><b>  AS</b></p>

73、<p>  CREATE TABLE #temp_table</p><p><b>  (</b></p><p>  amount float,</p><p>  work_date char(12),</p><p>  sale_cost float,</p><p>  

74、gain float</p><p><b>  )</b></p><p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  a.amount,convert(char(12),a.work_date,102) AS work_date

75、, </p><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&

76、gt;  WHERE a.goods_id=c.goods_id</p><p>  AND c.small_type=b.small_type_id</p><p>  SELECT work_date, sum(amount) AS sum_amount , sum(sale_cost) AS sum_sale_cost , sum( gain ) AS sum

77、_gain</p><p>  FROM #temp_table </p><p>  GROUP BY work_date, ORDER BY work_date</p><p>  商品審核入庫存儲過程</p><p>  CREATE PROCEDURE P_GOODS_ENTER</p><p>  @e

78、nter_dan_id int</p><p><b>  AS</b></p><p>  DECLARE @goods_id int</p><p>  DECLARE @quantity float</p><p>  DECLARE @amount money</p><p>  DEC

79、LARE temp_cursor CURSOR FOR</p><p>  SELECT GOODS_ID,QUANTITY,AMOUNT FROM ENTER_GOODS_DETAIL</p><p>  WHERE ENTER_DAN_ID=@enter_dan_id</p><p>  OPEN temp_cursor</p><p>

80、  FETCH NEXT 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 WH

81、ERE GOODS_ID = @goods_id)</p><p><b>  BEGIN </b></p><p>  UPDATE STORE_DETAIL</p><p>  SET QUANTITY=QUANTITY+@quantity , </p><p>  AMOUNT=AMOUNT+@amount&l

82、t;/p><p>  WHERE GOODS_ID = @goods_id</p><p><b>  END</b></p><p><b>  ELSE</b></p><p><b>  BEGIN</b></p><p>  INSERT STORE

83、_DETAIL </p><p>  VALUES(@goods_id,@quantity,@amount,getdate())</p><p><b>  END</b></p><p>  FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p><

84、p><b>  END</b></p><p>  CLOSE temp_cursor</p><p>  DEALLOCATE temp_cursor</p><p>  查詢部門銷售匯總的存儲過程</p><p>  CREATE PROCEDURE P_SEARCH_DEP_SALE</p>

85、<p><b>  AS</b></p><p>  CREATE TABLE #temp_table</p><p><b>  (</b></p><p>  large_type_id int,</p><p>  dep_name char(10),</p><

86、;p>  quantity float,</p><p>  amount float,</p><p>  work_date char(12),</p><p>  sale_cost float,</p><p>  gain float</p><p><b>  )</b>&l

87、t;/p><p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  b.large_type_id,b.name AS dep_name,</p><p>  a.quantity,a.amount,convert(char(12),a.work_date,102) AS

88、work_date, </p><p>  (c.cost_price*a.quantity) AS sale_cost,</p><p>  (a.amount-c.cost_price*a.quantity) AS gain</p><p>  FORM pos_sale a,large_type b,goods_info c</p>

89、<p>  WHERE a.goods_id=c.goods_id</p><p>  AND c.large_type=b.large_type_id</p><p>  SELECT work_date, large_type_id ,dep_name,</p><p>  sum( quantity) AS sum_quantity , su

90、m(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, large_type_id ,dep_name ORDER BY work_date<

91、;/p><p>  查詢商品分類匯總的存儲過程</p><p>  CREATE PROCEDURE P_SEARCH_KIND_SALE</p><p><b>  AS</b></p><p>  CREATE TABLE #temp_table</p><p><b>  (<

92、;/b></p><p>  small_type_id int,</p><p>  kind_name char(10),</p><p>  quantity float,</p><p>  amount float,</p><p>  work_date char(12),</p>&

93、lt;p>  sale_cost float,</p><p>  gain float</p><p><b>  )</b></p><p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  b.small_type_i

94、d,b.name AS kind_name,</p><p>  a.quantity,a.amount,convert(char(12),a.word_date,102) AS work_date, </p><p>  (c.cost_price*a.quantity) AS sale_cost,</p><p>  (a.amount-c.

95、cost_price*a.quantity) 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

96、>  SELECT work_date, small_type_id ,kind_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&g

97、t;  FROM #temp_table </p><p>  GROUP BY work_date, small_type_id ,kind_name ORDER BY work_date</p><p>  查詢商品銷售的存儲過程:</p><p>  CREATE PROCEDURE P_SEARCH_GOODS_SALE</p><

98、p><b>  AS</b></p><p>  CREATE TABLE #temp_table</p><p><b>  (</b></p><p>  goods_id int,</p><p>  bar_id int,</p><p>  goods_nam

99、e char(20),</p><p>  guige char(4),</p><p>  quantity float,</p><p>  amount float,</p><p>  work_date char(12),</p><p>  sale_cost float,</p><

100、p>  gain float,</p><p>  gain_rate float</p><p><b>  )</b></p><p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  a.goods_id,a.bar_

101、id,a.name AS goods_name,</p><p>  a.guige,a.quantity,a.amount,convert(char(12),a.word_date,102) AS work_date, </p><p>  (c.cost_price*a.quantity) AS sale_cost,</p><p>  (

102、a.amount-c.cost_price*a.quantity) AS gain,</p><p>  ((a.amount-c.cost_price*a.quantity)/(c.cost_price*a.quantity)) AS gain_rate</p><p>  FORM pos_sale a,large_type b,goods_info c</p>

103、<p>  WHERE a.goods_id=c.goods_id</p><p>  AND c.large_type=b.large_type_id</p><p>  SELECT work_date, goods_id , bar_id, goods_name , guige ,</p><p>  sum( quantity) AS

104、 sum_quantity , sum(amount) AS sum_amount , sum(sale_cost) AS sum_sale_cose , sum( gain ) AS sum_gain,gain_rate*100 AS gain_rate</p><p>  FORM #temp_table </p><p>  GROUP BY work_date,

105、goods_id, goods_name , guige,gain_rate,bar_id </p><p>  ORDER BY work_date</p><p><b>  庫存調(diào)整存儲過程</b></p><p>  CREATE PROCEDURE P_STORE_ADJUST</p><p>  @

106、goods_id int,</p><p>  @adjust_quantity float,</p><p>  @adjust_readon int,</p><p>  @work_person int</p><p><b>  AS</b></p><p>  DECLARE @pric

107、e money </p><p>  DECLARE @quantity float</p><p>  DECLARE @amount money</p><p>  SELECT @quantity= QUANTITY,@amount=AMOUNT FROM STORE_DETAIL WHERE GOODS_ID=@goods_id</p>&l

108、t;p>  SELECT @price=cost_price FROM GOODS_INFO WHERE GOODS_ID=@goods_id </p><p>  UPDATE STORE_DETAIL</p><p><b>  SET</b></p><p>  QUANTITY=QUANTITY-@adjust_quantity

109、, AMOUNT=AMOUNT-@price*@adjust_quantity</p><p>  WHERE goods_id =@goods_id</p><p>  INSERT STORE_ADJUST </p><p>  VALUES(@goods_id,@quantity,@amount,@adjust_quantity,convert(m

110、oney,@price*@adjust_quantity),@adjust_readon,@work_pe</p><p><b>  參考文獻</b></p><p>  Delphi6 數(shù)據(jù)庫技術(shù) 姜洪、張希編著 國防工業(yè)出版社 2005.4</p><p>  SQL Server高級管理與開發(fā) 飛思科技產(chǎn)品研發(fā)中心編著 電子工業(yè)出版社

111、2006.1</p><p>  Delphi趣味程序?qū)W 楊正華 呂躍春編著 清華大學出版社 2007.8</p><p>  Delphi6.0 編程技巧與實例分析 關(guān)兵、邵謙謙等著 中國水利水電出版社 2005.5</p><p>  SQL Server7.0應(yīng)用與提高 吳斌、趙有珍著 科學出版社 2000.9</p><p>  信

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論