數(shù)據(jù)庫課程設計--超市收銀系統(tǒng)_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  設計的目標與要求</b></p><p><b>  1、課程設計目的:</b></p><p>  熟悉大型數(shù)據(jù)庫管理系統(tǒng)的結(jié)構(gòu)與組成;</p><p>  熟悉數(shù)據(jù)庫應用系統(tǒng)的設計方法和開發(fā)過程;</p><p>  掌握一種大型數(shù)據(jù)庫管理系統(tǒng)(DM5、ORACLE

2、或SQL SERVER)的應用技術(shù)和開發(fā)工具的使用;</p><p>  熟悉數(shù)據(jù)庫設計工具的使用;</p><p>  熟悉數(shù)據(jù)庫安全的相關(guān)知識和技術(shù);</p><p>  熟悉數(shù)據(jù)庫系統(tǒng)的管理和維護。</p><p><b>  2、課程設計要求:</b></p><p>  在課程設計指導老

3、師的指導下,選定一個數(shù)據(jù)庫應用系統(tǒng)的題目,完成數(shù)據(jù)庫的設計和應用系統(tǒng)設計,并提交相應文檔。</p><p>  數(shù)據(jù)庫管理系統(tǒng)僅限D(zhuǎn)M5、Oracle以及MS SQL Server;</p><p>  開發(fā)工具限PowerBuilder、Delphi、C++、 JAVA、.NET平臺或其它動態(tài)網(wǎng)頁開發(fā)工具;</p><p>  系統(tǒng)采用客戶/服務器(C/S)結(jié)構(gòu)或

4、瀏覽器/服務器(B/S)結(jié)構(gòu)實現(xiàn)。</p><p>  系統(tǒng)應嚴格遵照題目要求進行設計,可在其基礎(chǔ)上進一步細化完善,但不得違背,原則上不額外增加與要求無關(guān)的功能。</p><p>  系統(tǒng)中應適當體現(xiàn)下列技術(shù)的應用:存儲過程,觸發(fā)器,索引。</p><p>  提交系統(tǒng)的源碼及文檔。</p><p><b>  設計的應用背景<

5、;/b></p><p>  本系統(tǒng)是一個超市收銀系統(tǒng)。顧名思義,本系統(tǒng)用來管理和更新超市日常交易數(shù)據(jù),如收銀員的管理,收銀員的工作記錄,日常交易記錄,顧客信息管理,商品信息管理,等等,所有的數(shù)據(jù)存儲在達夢數(shù)據(jù)庫的system庫中。</p><p>  本系統(tǒng)實現(xiàn)的主要功能為:</p><p>  1、收銀:收銀員輸入顧客的會員卡卡號(若有卡)、所購商品的貨號

6、等信息,系統(tǒng)根據(jù)這些信息獲取相應的價格信息并計算應收取的總金額。完成收銀后,記錄交易信息,修改有關(guān)種類商品的剩余量以及該持卡顧客的消費情況。</p><p>  2、發(fā)卡:顧客可交納一定的費用(如50元)辦理一張會員卡,以后在該商場購物可憑卡享受9折優(yōu)惠。如果一個未持卡顧客一次購物滿1000元,可為其免費發(fā)放一張會員卡,每張卡的優(yōu)惠期為一年,一年內(nèi)消費達到一定金額的可繼續(xù)享受下一年的優(yōu)惠。</p>

7、<p>  3、款項盤存:收銀員下班或交接班前對本收銀臺中本班次收取的款額進行盤存,明確責任。</p><p>  4、商品信息的錄入、修改、刪除和查詢等。</p><p>  5、收銀員身份及口令管理。</p><p><b>  數(shù)據(jù)庫設計過程</b></p><p><b>  1、需求分析&l

8、t;/b></p><p><b> ?。?)、信息要求</b></p><p>  顧客信息:顧客編號(會員卡號)、顧客姓名、顧客性別、注冊時間、是否到期、消費金額。</p><p>  收銀員信息:收銀員編號、收銀員姓名、收銀員性別、登錄名,密碼。</p><p>  商品信息:商品編號、商品名稱、單價、現(xiàn)有庫

9、存。</p><p>  收銀信息:收銀員編號、收銀金額、登錄時間,注銷時間。</p><p>  交易信息:顧客編號,商品編號,交易時間,交易數(shù)量。</p><p><b> ?。?)、處理要求</b></p><p>  A、處理方式:聯(lián)機處理。</p><p>  B、處理時間要求:<

10、 2S。</p><p><b>  C、處理功能:</b></p><p>  (I)、添加新信息,修改現(xiàn)存信息,刪除無用信息,查詢信息。</p><p>  (II)、計算一次交易的金額,如果是會員,就可以享受9折優(yōu)惠,如果非會員消費金額超過1000元,免費為其發(fā)放一張為期一年的會員卡。</p><p>  (III

11、)、只有收銀員以正確的用戶名和密碼才能登錄本系統(tǒng)。</p><p> ?。?)、安全性和完整性要求</p><p>  A、安全性要求:只有收銀員以正確的用戶名和密碼才能登錄本系統(tǒng),進行相應操作。后臺服務器(達夢數(shù)據(jù)庫)會生成相應的日志文件。</p><p><b>  B、完整性要求:</b></p><p> ?。↖

12、)實體完整性:如上信息要求一欄所示,黃色背景的為primary key。</p><p> ?。↖I)參照完整性:收銀信息和交易信息中的收銀員編號,顧客編號和商品編號均為前面的參照。</p><p>  (III)用戶定義完整性:如性別只能為‘男’或‘女’,姓名不能為空,登錄名必須唯一,密碼必須六位以上,等等。</p><p><b>  2、概念設計&l

13、t;/b></p><p>  根據(jù)需求分析得到的信息抽象為E-R模型如下:</p><p><b>  3、邏輯設計</b></p><p>  根據(jù)以上分析,得到本系統(tǒng)的基本關(guān)系模式為:</p><p>  顧客(顧客編號、顧客姓名、顧客性別、注冊時間、是否到期、消費金額)。</p><p&

14、gt;  create table Customer</p><p>  ( Cno char(9) primary key,</p><p>  Cname char(20),</p><p>  Csex char(2) check(Csex in('男','女')),</p><p>  Creg

15、date,</p><p>  Cactive char(2) check(Cactive in('是','否')),</p><p>  Cconsumption decimal(8,2)</p><p><b>  );</b></p><p>  收銀員(收銀員編號、收銀員姓名、收銀

16、員性別、登錄名,密碼)。</p><p>  create table Cashier</p><p>  (Cno char(9) primary key,</p><p>  Cname char(20) not null,</p><p>  Csex char(2) check(Csex in('男','女&

17、#39;)),</p><p>  Clogname char(20) unique,</p><p>  Clogpass char(20) check(Clogpass like '______%')</p><p><b>  );</b></p><p>  商品(商品編號、商品名稱、單價、現(xiàn)有

18、庫存)。</p><p>  create table Goods</p><p>  (Gno char(9) primary key,</p><p>  Gname char(20) not null,</p><p>  Gprice decimal(5,2),</p><p>  Gstorage sma

19、llint</p><p><b>  );</b></p><p>  收銀(收銀員編號、收銀金額、登錄時間,注銷時間)。</p><p>  create table Cashinfo</p><p>  (Cno char(9) not null,</p><p>  Crecv deci

20、mal(7,2),</p><p>  CtimeOn timestamp(0),</p><p>  CtimeOff timestamp(0),</p><p>  foreign key(Cno) references Cashier(Cno)</p><p><b>  );</b></p><

21、;p>  交易(顧客編號,商品編號,交易時間,交易數(shù)量)。</p><p>  create table Tradeinfo</p><p>  (Cno char(9),</p><p>  Gno char(9),</p><p>  Tquantity smallint,</p><p>  Ttime

22、timestamp(0),</p><p>  --primary key( Cno, Gno),</p><p>  foreign key(Cno) references Customer(Cno),</p><p>  foreign key(Gno) references Goods(Gno) </p><p><b> 

23、 );</b></p><p>  為了編程的方便,另外建立了幾個視圖如下:</p><p>  查詢收銀信息(收銀員編號、收銀員姓名、收銀金額、登錄時間,注銷時間)</p><p>  查詢交易信息(顧客編號,顧客姓名,商品編號,商品名稱,交易時間,交易數(shù)量)</p><p><b>  應用系統(tǒng)的設計過程</b

24、></p><p><b>  系統(tǒng)模塊結(jié)構(gòu)圖</b></p><p><b>  系統(tǒng)工作流程</b></p><p>  以收銀員的身份登錄(密碼為123456),如下圖:</p><p>  對收銀員信息,顧客信息,商品信息做相應操作,以收銀員信息為例:</p><p

25、>  添加信息,如果出現(xiàn)非法的輸入,會有提示,并會返回該界面等待重新輸入(如兩次密碼不同,編號已存在,性別是‘男’‘女’之外的其他,等等)。如圖:</p><p>  刪除信息,輸入四個參數(shù)中任意的幾個,系統(tǒng)會把滿足此參數(shù)組合的所有記錄刪除掉。如圖:</p><p>  修改信息,要輸入正確的編號。在需要修改的地方輸入新的參數(shù),不需要修改的地方保持空白。如圖:</p>

26、<p>  查詢信息,可以采用條件查詢,方法同刪除。如圖:</p><p>  進行交易。輸入商品編號和對應的數(shù)量(最多5種商品),如果是會員,輸入會員卡號,否則不輸入。以會員為例,如下圖:</p><p><b>  輸入購買信息</b></p><p><b>  判斷為會員</b></p>&

27、lt;p><b>  計算應收金額</b></p><p>  此后,系統(tǒng)會根據(jù)交易的情況,自動彈出修改相應數(shù)據(jù)(如顧客的消費金額,商品的庫存,交易信息等等)的對話框,其中,正確的修改數(shù)據(jù)已經(jīng)默認的填在了對話框中,收銀員只需點擊確定按鈕即可。</p><p>  注銷以后,會彈出重新登陸的對話框。退出直接退出本系統(tǒng)。</p><p>&l

28、t;b>  關(guān)鍵技術(shù)和算法</b></p><p>  登錄對話框增加了“記住用戶名”這一選項。實現(xiàn)算法為:將選項是否勾選的狀態(tài)用一個bool變量表示,新建一個名為“user.dat”的文件。每次登陸時,讀取文件中的內(nèi)容到“用戶名”欄中。如果選擇了“記住用戶名”,則將用戶輸入的用戶名重新寫到user.dat文件中,否則寫入空。</p><p>  系統(tǒng)中使用了很多對話框,

29、而且每個對話框都不相同。我采用了復用對話框的方式。實現(xiàn)方法為:定義狀態(tài)變量</p><p>  typedef enum stype{</p><p>  CASHIER_ADD,CASHIER_DELETE,CASHIER_EDIT,CASHIER_QUERY,</p><p>  CUSTOMER_ADD,CUSTOMER_DELETE,CUSTOMER_EDI

30、T,CUSTOMER_QUERY,</p><p>  GOODS_ADD, GOODS_DELETE, GOODS_EDIT, GOODS_QUERY,</p><p>  CASHINFO_ADD,CASHINFO_QUERY,</p><p>  TRADE_ADD, TRADE_QUERY</p><p><b&

31、gt;  }STYPE;</b></p><p>  在OnInitDialog()函數(shù)中,用switch-case語句來初始化不同用途的對話框。這樣,16個對話框只用1個對話框資源。</p><p>  為了能夠?qū)崟r更新系統(tǒng)中的時間(如交易時間,上班下班時間等等),create幾個觸發(fā)器用來獲得系統(tǒng)時間。</p><p>  //添加新會員的時候,自動

32、獲得系統(tǒng)時間作為注冊時間</p><p>  create trigger Insert_Customer</p><p>  before insert on Customer</p><p>  for each row</p><p><b>  begin</b></p><p>  :n

33、ew.Creg := curdate();</p><p><b>  end;</b></p><p>  //添加交易信息的時候,自動獲得系統(tǒng)時間作為交易時間</p><p>  create trigger Insert_Trade</p><p>  before insert on Tradeinfo</

34、p><p>  for each row</p><p><b>  begin</b></p><p>  :new.Ttime := current_timestamp();</p><p><b>  end;</b></p><p>  --用戶登錄系統(tǒng)時插入新記錄<

35、;/p><p>  create trigger Insert_CashinfoOn</p><p>  before insert on Cashinfo</p><p>  for each row</p><p><b>  begin</b></p><p>  :new.CtimeOn :=

36、 current_timestamp();</p><p><b>  end;</b></p><p>  --用戶更新Crecv時(logout)</p><p>  create trigger Insert_CashinfoOff</p><p>  before update on Cashinfo</p

37、><p>  for each row</p><p><b>  begin</b></p><p>  if :old.CtimeOff is null</p><p>  then :new.CtimeOff := current_timestamp();</p><p><b>  

38、end if;</b></p><p><b>  end;</b></p><p>  為了查詢的方便,創(chuàng)建了Query_Tradeinfo和Query_Cashinfo兩個視圖。</p><p>  create view Query_Cashinfo(Qcno,Qcname,Qcrecv,Qctimeon,Qctimeoff)

39、</p><p><b>  as</b></p><p>  select Cashinfo.Cno, Cname, Crecv, CtimeOn, CtimeOff</p><p>  from Cashinfo,Cashier</p><p>  where Cashinfo.Cno = Cashier.Cno;&

40、lt;/p><p>  create view </p><p>  Query_Tradeinfo(Qcno,Qcname,Qgno,Qgname,Qgprice,Qttime,Qtquantity)</p><p><b>  as</b></p><p>  select Tradeinfo.Cno, Cname,

41、Tradeinfo.Gno, Gname, Gprice, Ttime, Tquantity</p><p>  from Tradeinfo,Customer,Goods</p><p>  where Tradeinfo.Cno = Customer.Cno and Tradeinfo.Gno = Goods.Gno;</p><p>  在交易的過程中,會彈出

42、其他的對話框用來更新數(shù)據(jù)庫,采用了重載消息函數(shù)的方法,使得更新的數(shù)據(jù)能以參數(shù)的形式傳到對話框中。</p><p>  采用了動態(tài)條件修改,刪除和查詢的方式,實現(xiàn)方法是,在源程序中動態(tài)改變查詢的條件。以刪除收銀員為例:</p><p>  // m_Cashier是CCashierRecordSet(從CRecordSet繼承,與Cashier表關(guān)聯(lián))的對象</p><p

43、><b>  //如果輸入不為空</b></p><p>  if(m_strEdit1.GetLength())</p><p><b>  {</b></p><p>  if(bFirst)</p><p>  m_Cashier.m_strFilter += " and &q

44、uot;;</p><p>  strFilter.Format("Cno = '%s'",m_strEdit1);</p><p><b>  //增加對應的條件</b></p><p>  m_Cashier.m_strFilter += strFilter;</p><p>  

45、bFirst = TRUE;</p><p><b>  }</b></p><p>  if(m_strEdit2.GetLength())</p><p><b>  {</b></p><p>  if(bFirst)</p><p>  m_Cashier.m_str

46、Filter += " and ";</p><p>  strFilter.Format("Cname = '%s'",m_strEdit2);</p><p>  m_Cashier.m_strFilter += strFilter;</p><p>  bFirst = TRUE;</p>

47、<p><b>  }</b></p><p>  if(m_strEdit3.GetLength())</p><p><b>  {</b></p><p>  if(bFirst)</p><p>  m_Cashier.m_strFilter += " and "

48、;;</p><p>  strFilter.Format("Csex = '%s'",m_strEdit3);</p><p>  m_Cashier.m_strFilter += strFilter;</p><p>  bFirst = TRUE;</p><p><b>  }</b

49、></p><p>  if(m_strEdit4.GetLength())</p><p><b>  {</b></p><p>  if(bFirst)</p><p>  m_Cashier.m_strFilter += " and ";</p><p>  st

50、rFilter.Format("Clogname = '%s'",m_strEdit4);</p><p>  m_Cashier.m_strFilter += strFilter;</p><p>  bFirst = TRUE;</p><p><b>  }</b></p><p&g

51、t;<b>  設計心得體會</b></p><p>  這次數(shù)據(jù)庫課程設計收獲頗大,首先對視圖和觸發(fā)器的認識和作用都上了一個臺階。通過這次的課程設計,我不僅拓寬了自己的知識面,還在實踐過程中鞏固和加深了自己所學的理論知識,使自己的技術(shù)素質(zhì)和實踐能力有了進一步的提高,同時我的專業(yè)水平也有了很大的進步。熟悉大型數(shù)據(jù)庫管理系統(tǒng)的結(jié)構(gòu),熟悉了數(shù)據(jù)庫系統(tǒng)開發(fā)工具的使用。</p><

52、;p>  同時,在軟件開發(fā)方面也累積了不少經(jīng)驗,對軟件工程的知識重要性的認識更深了。通過設計過程的鍛煉,自己分析問題和解決問題的能力都得到了鍛煉和提高,完善了自己的知識結(jié)構(gòu),加深了對所學知識的理解。</p><p>  這次課程設計完成后,體會頗多,在學與做的過程中,取長補短,不斷學習新的知識,吸取經(jīng)驗,達到進步的目的。在學與做的過程中自身的努力以及相關(guān)圖書資料的幫助,對ODBC編程接口的理解也從能夠使用提

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論