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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  畢業(yè)論文</b></p><p>  論文題目 小型百貨商店管理系統(tǒng)規(guī)劃 </p><p><b>  摘 要</b></p><p>  內容摘要:《小型百貨商店管理系統(tǒng)》是一個比較復雜和全面的管理系統(tǒng),可以完成中小型超市的大部分業(yè)務??偟膩碚f包括進貨管理、物價管理、庫存管理、銷售管理

2、、供貨廠商管理、POS收款機系統(tǒng)等。該系統(tǒng)界面樸素一致,但不失美觀大方;操作方便,查詢功能強大;數(shù)據(jù)全面、準確。系統(tǒng)采用了目前比較流行而技術非常成熟地客戶機/服務器結構(C/S),前臺應用程序用Delphi軟件開發(fā),后臺數(shù)據(jù)庫是Microsoft SQL Server 2000。</p><p>  關鍵字: 面向對象的程序設計,繼承,WINDOWS消息,存儲過程,事務</p><p>&

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

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

5、(一) POS系統(tǒng)的開發(fā)8</p><p>  1. 功能及實現(xiàn)方法8</p><p>  2. 問題討論:交易流水號的確定9</p><p>  (二)管理信息系統(tǒng)的設計9</p><p><b>  1.界面設計9</b></p><p>  2. 各個功能模塊實現(xiàn)的要點和技術10

6、</p><p>  2.1 類繼承與重載10</p><p>  2.2 windows消息機制11</p><p>  2.3 關于權限設置12</p><p>  2.4 應用Delphi顯式事務控制13</p><p>  2.5 存儲過程的使用13</p><p><b

7、>  參考書錄20</b></p><p>  小型百貨商店管理系統(tǒng)規(guī)劃</p><p><b>  一 需求分析</b></p><p> ?。ㄒ唬?行業(yè)概念的理解</p><p>  POS: Point Of Sells , 電子收款機系統(tǒng),也就是直接與顧客打交道的收銀機系統(tǒng)。</p>

8、;<p>  定單狀態(tài):用來描述商品進貨方式,一般分為定單、日配、自采等。</p><p>  定單:表示該商品進貨必須先向供貨商發(fā)出定單,供貨商按定單上的商品明細發(fā)貨,超市則按定單上的商品明細收貨。</p><p>  日配:指那些每天都要進貨的商品或者補貨期較短的商品,例如水果,生鮮蔬菜等。如果按定單,時間不允許而且工作重復煩瑣。</p><p>

9、  自采:顧名思義,超市自己負責商品的進貨。</p><p>  銷售狀態(tài):用來描述某種商品當前的銷售狀態(tài),一般定義為正常、促銷、折扣等,正常表示商品處于正常的售價狀態(tài),即按正常的售價銷售。</p><p>  促銷:表示超市把某種商品讓利銷售,以此來吸引跟多的消費者。一般低于正常售價甚至成本價。</p><p>  折扣:表示某種商品銷售情況不好,或者商品有瑕疵,

10、或者保質期快到等情況發(fā)生時,使盡快商品銷售出去的一種手段。</p><p>  庫存調整:當非因正常銷售發(fā)生而實物數(shù)量變動時,通過調整庫存使其帳面數(shù)量與實物數(shù)量相符。</p><p>  日處理:當一天的銷售結束后,開始做日處理。把當天的銷售數(shù)據(jù)匯總,調整商品庫存。</p><p>  損益:商品出現(xiàn)損壞,變質,被盜等情況發(fā)生時,商品發(fā)生損益。損益通過調整庫存得到體

11、現(xiàn)。</p><p>  商品變價:商品變價與促銷/折扣調整價格是兩個不同的概念。商品變價是指修改商品的正常售價,調整后在一定的時間內不會在發(fā)生改變。價格可能是升高也可能是降低,一般都是由于進價變動引起的。</p><p>  促銷/折扣期: 每一種商品促銷/折扣都有一定的期限,即有一定的時間限制。一種商品不可能無期限的促銷/折扣。當期限超過,商品自動恢復正常售價。</p>

12、<p>  毛利、毛利百分比: 毛利=商品售價-商品進價 毛利百分比=(商品售價-商品進價)÷商品售價</p><p>  商品進價及成本核算: 在成本核算中,商品成本價的確定一般有最后進價,移動加權平均,按商品批次定價等幾種方式,由于后兩種核算方式較復雜,本系統(tǒng)采用簡單的最后進價方式。</p><p> ?。ǘ?業(yè)務流程說明</p><p>

13、  在實際管理中,有三種信息流動,即資金流,單據(jù)流和商品實物流。系統(tǒng)圍繞實物流展開,對商品從供應商那里進貨到商品銷售到顧客手中整個流程進行管理。簡單來說,就是商品的進銷存管理。每個環(huán)節(jié)通過相應的單據(jù)來連接,同時資金發(fā)生流動。在商品管理方面,我們提出部門和商品分類的概念,這種分級管理方式簡潔高效。所謂部門,就是按照商品的基本屬性進行分類管理。例如,超市一般可分為食品部,生鮮部,日用品部等。部門下面再分類,所謂商品分類,指按商品的具體屬性劃

14、分,例如,食品部下面可以有糖果餅干類,飲料類等,每個部門和每個商品類別都有相應的負責人負責?!吨行⌒统泄芾硇畔⑾到y(tǒng)》完全體現(xiàn)了這種管理思想,商品的銷售和商品庫存都可以按部門級和分類級完成查詢等其他操作。作為一個超市的管理人員,及時了解銷售情況是非常必要的,以便及時調整進貨或者安排營銷策略,把握商機。而《中小型超市管理信息系統(tǒng)》正好滿足了這一要求,可以實時查詢前臺的銷售情況,并且數(shù)據(jù)準確可信。</p><p>&

15、lt;b> ?。ㄈ﹩栴}解決方案</b></p><p>  超市系統(tǒng)在運行過程中數(shù)據(jù)流量是非常巨大的。有時候會因數(shù)據(jù)流量過大而使網絡發(fā)生阻塞,使POS系統(tǒng)發(fā)生斷網,直接影響銷售活動的進行。這種情況是應該堅決避免的,應該盡量減少網絡的數(shù)據(jù)流量。這一思想在本系統(tǒng)中的直接體現(xiàn)就是采用日處理和運用本地緩存技術。日處理的主要目的就是把當天的銷售數(shù)據(jù)整理匯總,更新商品庫存表,為第二天的銷售做準備。與日處理

16、不同的另一種處理方式就是每次商品銷售完成以后就立即更新庫存。但這樣會使得服務器的負荷非常的重,經常會使POS系統(tǒng)發(fā)生斷網。POS系統(tǒng)銷售商品時所取的商品信息是服務器上的數(shù)據(jù),有效的保證了數(shù)據(jù)的一致性和集中控制。雖然商品信息來自服務器,但我們使用了本地緩存。POS系統(tǒng)會把取得的數(shù)據(jù)暫時的存放在本地的內存,當要讀取商品信息時,會先在本地緩存里查找,如果成功的話,就不必訪問服務器。這樣一來就有效的減少了網絡的數(shù)據(jù)流量和服務器的負荷。此外,系統(tǒng)

17、充分利用了客戶機/服務器結構的特點,比較復雜的查詢更新等操作都用存儲過程來實現(xiàn)。存儲過程在服務器端執(zhí)行完畢僅返回執(zhí)行結果,能有效的減少網絡的通訊流量。</p><p><b>  (四) 數(shù)據(jù)流圖</b></p><p>  對整個業(yè)務活動進行分析歸納后,得出如下的數(shù)據(jù)流圖:</p><p><b>  二 系統(tǒng)設計</b>

18、;</p><p> ?。ㄒ唬┫到y(tǒng)模塊的劃分</p><p>  根據(jù)前面所作的需求分析,我將整個系統(tǒng)分為如下幾個模塊:</p><p><b> ?。ǘ?數(shù)據(jù)字典</b></p><p>  商品入庫單明細ENTER_GOODS_DETAIL</p><p>  商品信息GOODS_INFO&

19、lt;/p><p>  供應商信息GYS_INFO</p><p>  部門信息LARGE_TYPE</p><p>  商品分類信息SMALL_TYPE</p><p>  人員信息PERSON_INFO</p><p>  前臺銷售表POS_SALE</p><p>  收銀臺設置POS_SE

20、T</p><p>  商品變價記錄表PRICE_ADJUST</p><p>  庫存調整記錄表STORE_ADJUST</p><p>  日處理歷史狀態(tài)DIALY_DAN</p><p>  庫存調整原因表STORE_ADJUST_REASON</p><p>  商品庫存表STORE_DETAIL</p&

21、gt;<p>  商品促銷/折扣記錄GOODS_PROMOTE_LOG</p><p>  權限表MENU_FLAG</p><p>  三、程序的設計與編碼</p><p>  有了前面的工作,我們選擇就進入編碼階段了。</p><p> ?。ㄒ唬?POS系統(tǒng)的開發(fā)</p><p>  1. 功能及實現(xiàn)

22、方法</p><p>  POS系統(tǒng)是作為一個單獨的程序開發(fā)的,主要在POS機上運行,完成商品的交易任務。銷售的商品信息存儲在POS_SALE表中。我們把一次交易放在一個事務提交,保證了數(shù)據(jù)的完整性和數(shù)據(jù)的正確性。界面以灰色調為主,使得收銀員長時間工作眼睛不感到疲勞。收銀的操作也很簡單方便。交易流水號自動增加。</p><p>  當某種商品處于促銷或折扣銷售狀態(tài)時,POS系統(tǒng)自動取商品的

23、促銷或折扣售價,無需人工干預,并且促銷或折扣期結束時,系統(tǒng)能自動識別恢復正常售價。這一個功能的實現(xiàn)是通過商品視圖來完成的。請看商品視圖源碼。</p><p>  前臺POS銷售時取商品信息時用到的視圖:</p><p>  CREATE VIEW V_SPXX</p><p><b>  AS</b></p><p>

24、;  SELECT NAME , A.GOODS_ID,A.BAR_ID,A.GUIGE, </p><p>  BUY_PRICE= CASE </p><p>  WHEN (GETDATE()>B.END_DATE AND GETDATE()<B.BEGIN_DATE) OR A.FLAG='正常' THEN A.BUY_PRICE1</p

25、><p>  WHEN (GETDATE()<B.END_DATE AND GETDATE()>B.BEGIN_DATE) AND A.FLAG='促銷' THEN A.BUY_PRICE2</p><p>  WHEN (GETDATE()<B.END_DATE AND GETDATE()>B.BEGIN_DATE) AND A.FLAG='折

26、扣' THEN A.BUY_PRICE2</p><p>  ELSE A.BUY_PRICE1 </p><p><b>  END </b></p><p>  FROM GOODS_INFO A ,GOODS_PROMOTE_LOG B</p><p>  WHERE A.GOODS_ID*=B.GOOD

27、S_ID</p><p>  交易是在一個事務里完成的,請看交易完成數(shù)據(jù)提交的代碼:</p><p>  if form_pos.Database1.InTransaction then</p><p><b>  try</b></p><p>  form_pos.query1.ApplyUpdates;把本地

28、緩存修改的操作提交服務器</p><p>  form_pos.Database1.Commit; 事務提交</p><p>  form_pos.query1.CommitUpdates;清空本地緩存</p><p>  if form_pos.Database1.InTransaction=false then</p><p> 

29、 form_pos.Database1.StartTransaction;</p><p><b>  except</b></p><p>  form_pos.Database1.Rollback; 事務回滾</p><p><b>  end;</b></p><p>  2. 問題討論:交易

30、流水號的確定</p><p>  在實際運用中,可能十幾臺甚至幾十臺POS機同時工作,也就是存在大量的數(shù)據(jù)庫并發(fā)操作。怎樣使交易流水號唯一呢?我是這樣實現(xiàn)的,在每次事務提交之前,比較本機的流水號是否在后臺數(shù)據(jù)庫交易流水號中已經存在,如果存在,也就是說已經被別人占用,則重新取出最大交易流水號,然后提交整個事務。事務提交成功以后還要更新本地交易流水號。這是取最大流水號select max(P_NO) as p_no

31、 from pos_sale的SQL語句。</p><p> ?。ǘ┕芾硇畔⑾到y(tǒng)的設計</p><p><b>  1.界面設計</b></p><p>  本系統(tǒng)采用了帶導航欄的多文檔窗體設計風格,使操作變的簡單直觀。當使用某一個功能模塊時,只顯示相應的菜單,使人不會覺得眼花繚亂。系統(tǒng)完全擯棄那種界面花哨,色彩絢麗等華而不實做法,但和傳統(tǒng)的

32、風格有有所區(qū)別,傳統(tǒng)的風格顯得過于呆板。本系統(tǒng)的界面色調一致,簡單樸素,但不失美觀大方。窗體界面一致,操作也大同小異,絲毫沒有雜亂無章的感覺。</p><p>  我首先定義了幾個重要的窗體基類,其他的窗體基本上這幾個基類的派生類。在使用時在對窗體進行重載。所有的窗體都是在運行時動態(tài)加載的。需要運行那個窗體時,程序才加載該窗體,用完后立即釋放,這樣使用戶計算機系統(tǒng)資源得以最少得占用。請看一個窗體得創(chuàng)建例子:<

33、;/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>  對所有子窗體顯示我自定義了一個函數(shù)form_show,減少了工作量和代碼量。</p><p&

34、gt;  procedure form_show(form:TForm;fwidth ,fheight,fleft,ftop :integer);</p><p><b>  begin</b></p><p>  with form do</p><p><b>  begin</b></p><p&

35、gt;  height:=fheight;</p><p>  width:=fwidth;</p><p>  Left:=fleft;</p><p>  top:=ftop;</p><p><b>  Show;</b></p><p><b>  end;</b>&

36、lt;/p><p><b>  end;</b></p><p>  窗體的釋放實現(xiàn),例如釋放入庫單錄入界面窗體:</p><p>  procedure Tenter_dan.FormClose(Sender: TObject; var Action: TCloseAction);</p><p><b>  b

37、egin</b></p><p>  action:=cafree; 在內存中釋放掉窗體</p><p><b>  end;</b></p><p>  2. 各個功能模塊實現(xiàn)的要點和技術</p><p>  這里我只把我在編碼過程中比較重要或者比較有代表性的技術和部分源碼闡述一下。詳情查看系統(tǒng)的源代碼。&

38、lt;/p><p>  2.1 類繼承與重載</p><p>  在編碼過程中,我充分利用了面向對象編程的特定——代碼的重用,具體實現(xiàn)起來依靠的是重載和繼承。把具有相同或相似屬性的類抽象出來作為一個基類。我定義了幾個重要的窗體基類,基類窗體包含了需要的公有控件和共有事件方法。其他的窗體基本上這幾個基類的派生類。在使用時在對窗體的控件的屬性和方法進行繼承或者重載。</p><

39、p>  關于在DELPHI方法的重載,例如:</p><p>  procedure Action7Execute(Sender: TObject); OVERRIDE;</p><p>  procedure Tenter_goods_info.Action7Execute(Sender: TObject);</p><p><b>  begin

40、</b></p><p><b>  try</b></p><p>  if (dbedit1.Text<>'') and (dbedit2.Text<>'') and (dbedit3.Text<>'')and (dbedit4.Text<>'

41、9;)then</p><p><b>  begin</b></p><p>  query1.Post;</p><p>  addbutton.Enabled:=true;</p><p>  delbutton.Enabled:=true;</p><p>  savebutton.Ena

42、bled:=false;</p><p><b>  end</b></p><p><b>  else</b></p><p>  showmessage('你的輸入不完整!');</p><p><b>  except</b></p>&l

43、t;p>  showmessage('代碼重復!');</p><p><b>  end;</b></p><p><b>  end;</b></p><p>  2.2 windows消息機制</p><p>  當查詢窗體要返回結果時,我們用到了windows消息機制。

44、</p><p>  首先定義一個全局的自定義消息常量。</p><p>  Const My_WM_USER=WM_USER+100; //自定義消息 </p><p>  向指定的窗體發(fā)送自定義消息,傳遞查詢結果。例如:</p><p>  procedure Tgoods_info_search.searchbuttonClick(

45、Sender: TObject);</p><p><b>  begin</b></p><p><b>  try</b></p><p>  price_adjust.Query1.Close; price_adjust.Query1.SQL.Clear;</p>

46、;<p>  price_adjust.Query1.SQL:=query1.SQL;</p><p>  sendmessage(price_adjust.Handle,My_WM_USER,0,0);</p><p><b>  except</b></p><p><b>  beep;</b><

47、/p><p><b>  end;</b></p><p><b>  close;</b></p><p><b>  end;</b></p><p>  接收消息,并且處理它,例如:</p><p><b>  定義消息響應的方法</b

48、></p><p>  procedure my_wm_user100(var msg:Tmessage); message My_WM_USER;</p><p><b>  處理消息:</b></p><p>  procedure Tgoods_promote.my_wm_user100(var msg:Tmessage) ;&l

49、t;/p><p><b>  begin</b></p><p>  with query1 do</p><p><b>  close;</b></p><p>  sql.clear;</p><p>  sql.add(sql語句);</p><p&g

50、t;<b>  open;</b></p><p><b>  end;</b></p><p>  2.3 關于權限設置</p><p>  權限設置是一個管理系統(tǒng)非常重要的一部分,直接關系到公司業(yè)務和財務安全性。因此,本系統(tǒng)在這方面的功能是較完善的。操作人員的權限可以定義到每級子菜單。對沒有賦權限的菜單項不予顯示。也就

51、是說,系統(tǒng)能根據(jù)登陸人員的權限自動顯示具有權限的功能菜單。我們把人員的權限信息存放在MENU_FLAG表中,在系統(tǒng)啟動時加載相關的權限設置信息。權限設置這一功能只有高級管理人員和系統(tǒng)管理員才能使用。</p><p>  根據(jù)權限顯示菜單算法</p><p>  with damo.query1 do //query1關聯(lián)MENU_FLAG表</p><p>&l

52、t;b>  begin</b></p><p><b>  close;</b></p><p>  sql.Clear;</p><p>  sql.Add('select * from menu_flag where id=:id ');</p><p>  ParamByName(

53、'id').AsInteger:=person_id;</p><p><b>  open;</b></p><p><b>  end;</b></p><p>  for i:=1 to 42 do</p><p><b>  begin</b></

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

55、Components[j] is TMenuItem) and ((main_form.Components[j] as TMenuItem).Tag=i-1 ) then</p><p>  if flag = 0 then</p><p>  (main_form.Components[j] as TMenuItem).Visible:=false</p>&l

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

57、;  2.4 應用Delphi顯式事務控制</p><p>  事務控制是一種能夠把數(shù)據(jù)庫的一組修改作為整體提交給數(shù)據(jù)庫以保證數(shù)據(jù)的一致性和完整性的機制。如果其中有一個操作失敗,則所有操作失敗。</p><p>  2.5 存儲過程的使用</p><p>  在程序設計中,系統(tǒng)主要的復雜的操作我都都是通過存儲過程來實現(xiàn)的。</p><p> 

58、 例如:使用庫存調整操作時,我們用P_ADJUST_STORE來完成。</p><p>  procedure Tadjust_store.okbuttonClick(Sender: TObject);</p><p><b>  begin</b></p><p>  if not damo.Database1.InTransaction t

59、hen</p><p>  damo.Database1.StartTransaction; 開始一個事務</p><p>  with P_ADJUST_STORE do //P_ADJUST_STORE為存儲過程</p><p><b>  begin</b></p><p>  Params[1].AsIn

60、teger:=strtoint(edit_id.Text);</p><p>  Params[2].AsFloat:=strtofloat(edit_adjust.Text);</p><p>  Params[3].AsInteger:= table1.Fields[0].AsInteger ;</p><p>  Params[4].AsInteger:= p

61、erson_id ;// person_id為全局變量人員ID</p><p><b>  Prepare;</b></p><p><b>  execproc;</b></p><p><b>  end;</b></p><p><b>  try</b&

62、gt;</p><p>  damo.Database1.Commit; 事務提交</p><p><b>  except</b></p><p><b>  begin</b></p><p>  damo.Database1.Rollback; 事務回滾</p><p>

63、;  showmessage('數(shù)據(jù)提交失?。?');</p><p><b>  end;</b></p><p><b>  end; </b></p><p>  以下是幾種典型存儲過程。</p><p><b>  日處理存儲過程:</b></

64、p><p>  CREATE PROCEDURE P_DIALY_DO</p><p>  @dialy_date char(12),</p><p>  @person_id smallint</p><p><b>  AS</b></p><p>  DECLARE @goods_id i

65、nt</p><p>  DECLARE @quantity float</p><p>  DECLARE @amount money</p><p>  DECLARE temp_cursor CURSOR FOR</p><p>  SELECT A.GOODS_ID,SUM(A.QUANTITY),SUM(A.QUANTITY*B

66、.COST_PRICE) </p><p>  FROM POS_SALE A, GOODS_INFO B</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 <

67、/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><b>  BEGIN</b></

68、p><p>  if EXISTS(SELECT * FROM STORE_DETAIL WHERE GOODS_ID = @goods_id)</p><p><b>  BEGIN </b></p><p>  UPDATE STORE_DETAIL</p><p>  SET QUANTITY=QUANTIT

69、Y-@quantity , AMOUNT=AMOUNT-@amount</p><p>  WHERE GOODS_ID = @goods_id</p><p><b>  END</b></p><p>  FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p&

70、gt;<p><b>  END</b></p><p>  INSERT DIALY_DAN</p><p>  VALUES( @dialy_date,'已做',@person_id)</p><p>  CLOSE temp_cursor</p><p>  DEALLOCATE te

71、mp_cursor</p><p>  查詢每日商品銷售匯總的存儲過程:</p><p>  CREATE PROCEDURE P_DIALY_SALE</p><p><b>  AS</b></p><p>  CREATE TABLE #temp_table</p><p><b

72、>  (</b></p><p>  amount float,</p><p>  work_date char(12),</p><p>  sale_cost float,</p><p>  gain float</p><p><b>  )</b></p&g

73、t;<p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  a.amount,convert(char(12),a.work_date,102) AS work_date, </p><p>  (c.cost_price*a.quantity) AS sa

74、le_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.goods_id=c.goods_id</p><p>  AND c.

75、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_gain</p><p>  FROM #temp_table </p><

76、p>  GROUP BY work_date, ORDER BY work_date</p><p>  商品審核入庫存儲過程</p><p>  CREATE PROCEDURE P_GOODS_ENTER</p><p>  @enter_dan_id int</p><p><b>  AS</b><

77、;/p><p>  DECLARE @goods_id int</p><p>  DECLARE @quantity float</p><p>  DECLARE @amount money</p><p>  DECLARE temp_cursor CURSOR FOR</p><p>  SELECT GOODS

78、_ID,QUANTITY,AMOUNT FROM ENTER_GOODS_DETAIL</p><p>  WHERE ENTER_DAN_ID=@enter_dan_id</p><p>  OPEN temp_cursor</p><p>  FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount

79、</p><p>  WHILE (@@FETCH_STATUS=0)</p><p><b>  BEGIN</b></p><p>  if EXISTS(SELECT * FROM STORE_DETAIL WHERE GOODS_ID = @goods_id)</p><p><b>  BEGIN

80、 </b></p><p>  UPDATE STORE_DETAIL</p><p>  SET QUANTITY=QUANTITY+@quantity , </p><p>  AMOUNT=AMOUNT+@amount</p><p>  WHERE GOODS_ID = @goods_id</p><

81、;p><b>  END</b></p><p><b>  ELSE</b></p><p><b>  BEGIN</b></p><p>  INSERT STORE_DETAIL </p><p>  VALUES(@goods_id,@quantity,@amo

82、unt,getdate())</p><p><b>  END</b></p><p>  FETCH NEXT FROM temp_cursor INTO @goods_id,@quantity,@amount</p><p><b>  END</b></p><p>  CLOSE temp

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

84、 TABLE #temp_table</p><p><b>  (</b></p><p>  large_type_id int,</p><p>  dep_name char(10),</p><p>  quantity float,</p><p>  amount float,&l

85、t;/p><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

86、>  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 work_date, </p><p>  (c.cost_price*a.quantity

87、) 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><p>  WHERE a.goods_id=c.goods_id</p><p> 

88、 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 , sum(amount) AS sum_amount , sum(sale_cost) AS sum_sale_cost

89、 , 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</p><p>  查詢商品分類匯總的存儲過程</p><p>  CREATE

90、 PROCEDURE P_SEARCH_KIND_SALE</p><p><b>  AS</b></p><p>  CREATE TABLE #temp_table</p><p><b>  (</b></p><p>  small_type_id int,</p>&l

91、t;p>  kind_name char(10),</p><p>  quantity float,</p><p>  amount float,</p><p>  work_date char(12),</p><p>  sale_cost float,</p><p>  gain float&l

92、t;/p><p><b>  )</b></p><p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  b.small_type_id,b.name AS kind_name,</p><p>  a.quantity,a.am

93、ount,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.cost_price*a.quantity) AS gain</p><p>  FROM po

94、s_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, small_type_id ,kind_name,</p&g

95、t;<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_table </p><p>  GROUP BY work_dat

96、e, small_type_id ,kind_name ORDER BY work_date</p><p>  查詢商品銷售的存儲過程:</p><p>  CREATE PROCEDURE P_SEARCH_GOODS_SALE</p><p><b>  AS</b></p><p>  CREATE TABL

97、E #temp_table</p><p><b>  (</b></p><p>  goods_id int,</p><p>  bar_id int,</p><p>  goods_name char(20),</p><p>  guige char(4),</p>&l

98、t;p>  quantity float,</p><p>  amount float,</p><p>  work_date char(12),</p><p>  sale_cost float,</p><p>  gain float,</p><p>  gain_rate float</

99、p><p><b>  )</b></p><p>  INSERT INTO #temp_table</p><p>  SELECT </p><p>  a.goods_id,a.bar_id,a.name AS goods_name,</p><p>  a.guige,a.qua

100、ntity,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.cost_price*a.quantity) AS gain,</p><p&

101、gt;  ((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><p>  WHERE a.goods_id=c.goods_id</p><p>  

102、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 sum_quantity , sum(amount) AS sum_amount , sum(sale_cost)

103、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,goods_id, goods_name , guige,gain_rate,bar_id </p>&l

104、t;p>  ORDER BY work_date</p><p><b>  庫存調整存儲過程</b></p><p>  CREATE PROCEDURE P_STORE_ADJUST</p><p>  @goods_id int,</p><p>  @adjust_quantity float,<

105、;/p><p>  @adjust_readon int,</p><p>  @work_person int</p><p><b>  AS</b></p><p>  DECLARE @price money </p><p>  DECLARE @quantity float</p&

106、gt;<p>  DECLARE @amount money</p><p>  SELECT @quantity= QUANTITY,@amount=AMOUNT FROM STORE_DETAIL WHERE GOODS_ID=@goods_id</p><p>  SELECT @price=cost_price FROM GOODS_INFO WHERE GOODS_

107、ID=@goods_id </p><p>  UPDATE STORE_DETAIL</p><p><b>  SET</b></p><p>  QUANTITY=QUANTITY-@adjust_quantity, AMOUNT=AMOUNT-@price*@adjust_quantity</p><p> 

108、 WHERE goods_id =@goods_id</p><p>  INSERT STORE_ADJUST </p><p>  VALUES(@goods_id,@quantity,@amount,@adjust_quantity,convert(money,@price*@adjust_quantity),@adjust_readon,@work_pe</p>

109、;<p><b>  參考書錄</b></p><p>  1.Delphi6 數(shù)據(jù)庫技術 姜洪、張希編著 國防工業(yè)出版社 2005.4</p><p>  2.SQL Server高級管理與開發(fā) 飛思科技產品研發(fā)中心編著 電子工業(yè)出版社 2006.1</p><p>  .Delphi趣味程序導學 楊正華 呂躍春編著 清華大學出

110、版社 2007.8</p><p>  .Delphi6.0 編程技巧與實例分析 關兵、邵謙謙等著 中國水利水電出版社 2005.5</p><p>  .SQL Server7.0應用與提高 吳斌、趙有珍著 科學出版社 2000.9</p><p>  . Delphi6.0 實用編程教程(編程高手成長之路 7) 肖 帆 編寫 北京希望電子出版社 2001.11&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論