




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、引言就一般情況而言,音像店主要經(jīng)營售碟和租碟業(yè)務(wù),日常業(yè)務(wù)中信息簡單但數(shù)量眾多,單靠人工進(jìn)行這種大量信息的處理工作,難免會(huì)造成信息統(tǒng)計(jì)及業(yè)務(wù)管理上的不便,為此,受一位音像店業(yè)主的委托,本文作者設(shè)計(jì)了這套系統(tǒng)。本系統(tǒng)由進(jìn)貨、售碟、租碟、還碟、數(shù)據(jù)維護(hù)和決策支持等六個(gè)主要子系統(tǒng)組成,可實(shí)現(xiàn)查詢、插入、刪除和修改等對數(shù)據(jù)庫的基本操作,并可完成報(bào)表打印及業(yè)務(wù)統(tǒng)計(jì)(包括財(cái)務(wù)統(tǒng)計(jì))等業(yè)務(wù)管理功能,為業(yè)主管理和決策提供方便。本系統(tǒng)用Delphi語言設(shè)計(jì)和實(shí)現(xiàn)。Delphi是著名的Borland公司開發(fā)的可視化軟件開發(fā)工具,“真正的程序員用C,聰明的程序員用Delphi”,這句話是對Delphi最經(jīng)典、最
2、實(shí)在的描述。Delphi被稱為第4代編程語言,它具有簡單、高效、功能強(qiáng)大的特點(diǎn)。和VC相比,Delphi更簡單、更易于掌握,而在功能上卻毫不遜色;和VB相比,Delphi則功能更強(qiáng)大、更實(shí)用。可以說Delphi同時(shí)兼?zhèn)淞薞C功能強(qiáng)大和VB簡單易學(xué)的特點(diǎn),所以它一直是程序員至愛的編程工具。Delphi發(fā)展至今,從Delphi 1 、Delphi 2到現(xiàn)在的Delphi 7,不斷添加和改進(jìn)各種特性,功能也越來越強(qiáng)大,這也是我選擇Delphi語言作為開發(fā)工具的重要原因。由于本文作者是第一次接觸實(shí)際項(xiàng)目,水平和經(jīng)驗(yàn)有限,在設(shè)計(jì)中難免漏洞百出,遇到許多始料不及的困難和問題,在老師、同學(xué)們和單位科技科同志
3、們的指導(dǎo)和幫助下,大部分問題都已經(jīng)解決,但不可避免地仍存在著一些不足之處。具體情況見后文詳述。二、VSMS設(shè)計(jì)2.1需求分析2.1.1 組織機(jī)構(gòu)情況該音像店規(guī)模不大,店面面積30平方米左右,其中營業(yè)區(qū)面積約占2/3,業(yè)主夫婦二人共同經(jīng)營,店內(nèi)僅有一臺(tái)計(jì)算機(jī),且近期內(nèi)無再購買計(jì)算機(jī)之計(jì)劃,故本系統(tǒng)可設(shè)計(jì)為PC版。該店經(jīng)營的音像業(yè)務(wù)主要是租碟和售碟,碟片種類包括各種VCD、DVD和CD碟片;業(yè)務(wù)對象包括當(dāng)?shù)氐碾娨暸_(tái)和電臺(tái)(贊助形式),更多的是零買零租的顧客;日常業(yè)務(wù)記錄本主要有四個(gè),分別用于進(jìn)貨、售碟、租碟和碟片編號(hào)。店內(nèi)有兩個(gè)大貨架,分別用于存放銷售用的碟片和租閱用的碟片;營業(yè)區(qū)內(nèi)有幾個(gè)大展板(
4、展臺(tái)),用于展放店內(nèi)已有的所有碟片的宣傳資料,資料上都貼有該碟片的編號(hào),方便業(yè)主和顧客的查找和存取。2.1.2 業(yè)務(wù)活動(dòng)情況平時(shí)由男業(yè)主外出進(jìn)貨,回來后先作進(jìn)貨登記,同時(shí)對新進(jìn)的店內(nèi)原來沒有的碟片進(jìn)行編號(hào)(已有碟片無需再編號(hào)),然后再分發(fā)到租碟用和售碟用的兩個(gè)大貨架上。售碟和租碟時(shí),通常是顧客說出碟片名稱,店主根據(jù)記憶或翻看編號(hào)本查出碟片的相應(yīng)編號(hào),或者顧客從展板資料上直接查出碟片編號(hào)告訴業(yè)主,業(yè)主然后根據(jù)編號(hào)從貨架相應(yīng)位置上取碟片。還碟時(shí),顧客說出租碟日期和自己的姓名,業(yè)主根據(jù)租碟業(yè)務(wù)本查找相應(yīng)記錄,辦理還碟手續(xù)。2.1.3 對新系統(tǒng)的各種要求a.進(jìn)貨登記時(shí),應(yīng)記錄所進(jìn)碟片的名稱、種類、進(jìn)價(jià)
5、、進(jìn)量、總額、進(jìn)貨日期及租售分配情況等,還可包括貨源情況(如供應(yīng)商、地址、聯(lián)系方式等)。b.售碟時(shí),應(yīng)記錄所售碟片的名稱、種類、單價(jià)、銷量、總額及出售日期等,顧客情況可記可不記。c.租碟時(shí),應(yīng)記錄所租碟片的名稱、數(shù)量、押金、客戶及出租日期等,碟片編號(hào)可記可不記。d.還碟時(shí),應(yīng)能快速查找出相應(yīng)記錄,并作已歸還標(biāo)志。e.當(dāng)發(fā)現(xiàn)登記的信息有誤或根據(jù)實(shí)際情況需要更改或刪除某些記錄信息時(shí),應(yīng)能方便、安全地進(jìn)行記錄的修改和刪除。f.應(yīng)能對業(yè)務(wù)情況有所統(tǒng)計(jì),包括銷售情況、租還情況和賬目情況(或資金流動(dòng)情況),比如說哪幾部碟片銷量最好,哪幾部碟片出租次數(shù)最多,哪些碟片尚未歸還,每天的收支情況如何等等,為以后的
6、進(jìn)貨計(jì)劃提供依據(jù)。2.1.4 確定新系統(tǒng)的邊界通過調(diào)查分析,最終確定除了存取碟片、向碟片貼編號(hào)標(biāo)簽及通過鍵盤向系統(tǒng)輸入一些必要的信息這些操作由人工來完成之外,其他功能均由系統(tǒng)來完成,通過鼠標(biāo)點(diǎn)擊即可完成決大多部分功能,比如查詢、插入、刪除和修改記錄,財(cái)務(wù)統(tǒng)計(jì),租售統(tǒng)計(jì),檢索和排序等等。整個(gè)系統(tǒng)大致可分為六個(gè)子系統(tǒng),即進(jìn)貨子系統(tǒng)、銷售子系統(tǒng)、租碟子系統(tǒng)、還碟子系統(tǒng)、數(shù)據(jù)維護(hù)子系統(tǒng)和決策支持子系統(tǒng)等。2.2 概念結(jié)構(gòu)設(shè)計(jì)2.2.1 系統(tǒng)說明書 該系統(tǒng)由以下各子系統(tǒng)組成:(見圖一)音像店管理系統(tǒng)進(jìn)貨子系統(tǒng)銷售子系統(tǒng)租碟子系統(tǒng)還碟子系統(tǒng)數(shù)據(jù)維護(hù)子系統(tǒng)決策支持子系統(tǒng)圖一、系統(tǒng)功能結(jié)構(gòu)其中各子系統(tǒng)主要功能
7、為:進(jìn)貨子系統(tǒng):除了登記進(jìn)貨信息,還要給新碟片編號(hào),建立新記錄,并確定其分別用于銷售和租閱的分配量;若已有該碟編號(hào),則只需修改其相應(yīng)可售量和可租量即可。具備查詢功能,用于查看店內(nèi)是否已有該碟記錄。另外,對財(cái)務(wù)支出進(jìn)行統(tǒng)計(jì)。銷售子系統(tǒng):登記銷售信息,并具備查詢功能,在銷售之前能先確認(rèn)店內(nèi)是否有客戶所欲購之碟片,若有,其數(shù)量能否滿足客戶之欲購量等等。交易完成之后記錄銷售收入。租碟子系統(tǒng):登記租碟信息,并能查詢是否有客戶之欲租碟供租。記錄押金收入。還碟子系統(tǒng):根據(jù)客戶提供的信息(碟名、客戶名或出租日期等)查找相應(yīng)租碟記錄,辦理還碟手續(xù),記錄租金收入和押金支出。 數(shù)據(jù)維護(hù)子系統(tǒng):根據(jù)業(yè)主需要,查找相應(yīng)
8、記錄并修改或刪除之。決策支持子系統(tǒng):主要有業(yè)務(wù)統(tǒng)計(jì)和報(bào)表打印兩大功能。業(yè)務(wù)統(tǒng)計(jì)包括進(jìn)貨統(tǒng)計(jì)、銷售統(tǒng)計(jì)、租還統(tǒng)計(jì)及最重要的財(cái)務(wù)統(tǒng)計(jì),業(yè)主根據(jù)多種統(tǒng)計(jì)和排序方式,可方便地搜集和整理出多種業(yè)務(wù)信息,供業(yè)主決策之用。另外可打印店內(nèi)各種業(yè)務(wù)報(bào)表,如進(jìn)貨、銷售、租還、庫存及財(cái)務(wù)等。 2.2.2 概念模型的建立和表示 概念模型的建立:本系統(tǒng)涉及到的實(shí)體有:碟片、進(jìn)貨表、銷售表、租還表和財(cái)務(wù)表,其中: 碟片:即店內(nèi)所有庫存碟片,屬性包括編號(hào)、名稱、種類、單價(jià)、單位、可售量、已售量、可租量、已租量、出租次數(shù)等。 進(jìn)貨表:每次進(jìn)貨后登記所進(jìn)貨物的業(yè)務(wù)表,屬性包括項(xiàng)目編號(hào)、碟片名稱、種類、進(jìn)價(jià)、單位、進(jìn)量、總額、日
9、期等。 銷售表:登記每次銷售情況的業(yè)務(wù)表,屬性包括項(xiàng)目編號(hào)、碟片編號(hào)、碟片名稱、單價(jià)、單位、銷量、總額、日期等。 租還表:登記每次租碟和還碟情況的業(yè)務(wù)表,屬性包括項(xiàng)目編號(hào)、碟片編號(hào)、碟片名稱、租量、押金、客戶、出租日期、歸還日期、受否已還標(biāo)志、租金收入等。 財(cái)務(wù)表:統(tǒng)計(jì)每日財(cái)務(wù)收支情況,屬性包括日期、銷售收入、租金收入、押金收入、進(jìn)貨支出、押金支出等。這些實(shí)體之間的聯(lián)系如下:a 一次進(jìn)貨可進(jìn)多種碟片,一種碟片可多次進(jìn)貨,因此碟片和進(jìn)貨表具有多對多的聯(lián)系(m:n)。b 一次銷售可售多種碟片,一種碟片可被多次銷售(量足的話),因此碟片和銷售表是多對多的聯(lián)系(m:n)c 一次租碟可租多種碟片,一種碟
10、片可被多次租閱,因此碟片和租還表是多對多的聯(lián)系(m:n)。d 每日財(cái)務(wù)最終統(tǒng)計(jì)為一項(xiàng)紀(jì)錄,而每日進(jìn)貨、銷售、租還業(yè)務(wù)均可多次,因此財(cái)務(wù)表和進(jìn)貨表、銷售表、租還表均為一對多的聯(lián)系(1:n)。 概念模型的表示:概念模型的表示方法很多,此處用E-R方法(Entity-Relationship Approach)表示,并用E-R圖來表示,方法為: 實(shí)體型:用矩形表示,矩形框內(nèi)寫明實(shí)體名。 屬性:用橢圓形表示,并用無向邊將其與相應(yīng)的實(shí)體連接起來。 聯(lián)系:用菱形表示,菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實(shí)體連接起來,同時(shí)在無向邊旁標(biāo)上聯(lián)系的類型(1:1,1:n或m:n )。本系統(tǒng)E-R圖為:(見下頁圖
11、二)2.3 邏輯結(jié)構(gòu)設(shè)計(jì) 2.3.1 E-R圖向關(guān)系模型的轉(zhuǎn)換 將本系統(tǒng)的E-R圖轉(zhuǎn)換為關(guān)系模型,如下所示:(關(guān)系的碼用下劃線標(biāo)出) 進(jìn)貨碟片進(jìn)貨表銷售表租還表銷售租還進(jìn)貨支出銷售收入租金押金財(cái)務(wù)表 m m m n n n nn n 1 1 1 圖二、系統(tǒng)E-R圖(因篇幅原因,各實(shí)體的屬性未列出) 碟片實(shí)體對應(yīng)的關(guān)系模式為:碟片(碟片編號(hào),碟片名稱,種類,單價(jià),單位,可售量,已售量,可租量,已租量,出租次數(shù)) 進(jìn)貨表實(shí)體對應(yīng)的關(guān)系模式為:進(jìn)貨表(項(xiàng)目編號(hào),碟片名稱,種類,進(jìn)價(jià),單位,進(jìn)量,總額,日期) 銷售表實(shí)體對應(yīng)的關(guān)系模式為:銷售表(項(xiàng)目編號(hào),碟片編號(hào),碟片名稱,單價(jià),單位,銷量,總額,日
12、期) 租還表實(shí)體對應(yīng)的關(guān)系模式為:租還表(項(xiàng)目編號(hào),碟片編號(hào),碟片名稱,租量,押金,客戶,出租日期,歸還日期,是否已還,租金收入) 財(cái)務(wù)表實(shí)體對應(yīng)的關(guān)系模式為:財(cái)務(wù)表(日期,銷售收入,租金收入,押金收入,進(jìn)貨支出,押金支出)2.3.2 數(shù)據(jù)表的設(shè)計(jì)和建立用sVcd表來代替“碟片”實(shí)體,具體設(shè)計(jì)為:屬性數(shù)據(jù)類型規(guī)格說明碟片編號(hào)長整型主鍵碟片名稱字符串20種類字符串8單價(jià)貨幣單位字符串4可售量整型已售量整型默認(rèn)值為0可租量整型已租量整型默認(rèn)值為0出租次數(shù)整型默認(rèn)值為0用stock表來代替“進(jìn)貨表”實(shí)體,具體設(shè)計(jì)為:屬性數(shù)據(jù)類型規(guī)格說明項(xiàng)目編號(hào)長整型主鍵碟片名稱字符串20種類字符串8進(jìn)價(jià)貨幣單位字符
13、串4進(jìn)量整型總額貨幣日期日期用sell表來代替“銷售表”實(shí)體,具體設(shè)計(jì)為:屬性數(shù)據(jù)類型規(guī)格說明項(xiàng)目編號(hào)長整型主鍵碟片編號(hào)長整形碟片名稱字符串20單價(jià)貨幣單位字符串4銷量整型總額貨幣日期日期用hire表來代替“租還表”實(shí)體,具體設(shè)計(jì)為:屬性數(shù)據(jù)類型規(guī)格說明項(xiàng)目編號(hào)長整型主鍵碟片編號(hào)長整型碟片名稱字符串20租量整型押金貨幣客戶字符串10出租日期日期是否已還字符串2若已還,設(shè)為“是”,否則為“否”歸還日期日期默認(rèn)值為空租金收入貨幣默認(rèn)值為0用finance表來代替“財(cái)務(wù)表”實(shí)體,具體設(shè)計(jì)為:屬性數(shù)據(jù)類型規(guī)格說明日期日期主鍵銷售收入貨幣默認(rèn)值為0租金收入貨幣默認(rèn)值為0押金收入貨幣默認(rèn)值為0進(jìn)貨支出貨幣
14、默認(rèn)值為0押金支出貨幣默認(rèn)值為02.4 數(shù)據(jù)庫的具體設(shè)計(jì)2.4.1 進(jìn)貨子系統(tǒng)的實(shí)現(xiàn):設(shè)計(jì)思路: 該功能模塊要記錄的信息有項(xiàng)目編號(hào)、碟片名稱、種類、進(jìn)價(jià)、單位、進(jìn)量、總額及進(jìn)貨日期,其中碟片名稱、進(jìn)價(jià)和進(jìn)量由人工輸入,其他由系統(tǒng)自動(dòng)完成: 項(xiàng)目編號(hào)由系統(tǒng)自動(dòng)無重復(fù)編號(hào),種類和單位由系統(tǒng)提供可選項(xiàng),總額由系統(tǒng)自動(dòng)計(jì)算,日期由系統(tǒng)自動(dòng)顯示.進(jìn)行碟片編號(hào)的時(shí)候,要先查詢店內(nèi)是否已有該碟編號(hào),此時(shí)可人工查詢,也可由系統(tǒng)提供模糊查詢功能,用戶只需向系統(tǒng)提供碟名關(guān)鍵字和種類這兩個(gè)條件中的一個(gè)或兩個(gè),系統(tǒng)即可完成模糊查詢,并將結(jié)果顯示于窗體界面上.若無已存記錄,則系統(tǒng)自動(dòng)為該碟片進(jìn)行編號(hào).當(dāng)將該項(xiàng)進(jìn)貨記錄插
15、入進(jìn)貨表之后,系統(tǒng)將自動(dòng)將該項(xiàng)記錄的進(jìn)貨總額統(tǒng)計(jì)進(jìn)財(cái)務(wù)表中的當(dāng)日財(cái)務(wù)記錄上.具體實(shí)現(xiàn): 項(xiàng)目自動(dòng)編號(hào)和碟片自動(dòng)編號(hào)的實(shí)現(xiàn):加入兩個(gè)Ttable組件,分別用于連接進(jìn)貨表(stock.db)和碟片表(sVcd.db),其中對進(jìn)貨表的操作為:table1.active:=true; 打開表 with table1 do if not eof then last; 找到最后一條記錄edit1.text:=inttostr(table1.fields.fields0.value+1); 最后一條記錄的編號(hào)加1,并把結(jié)果顯示出來table1.active:=false; 關(guān)閉表對碟片表的操作類似,只需將t
16、able1 換為table2, edit1 換為edit2即可. 總額計(jì)算和日期顯示:if (edit5.text=) or (edit6.text=) then 確保進(jìn)價(jià)和數(shù)量均非空 showmessage(請將進(jìn)價(jià)和數(shù)量填寫完整)else edit7.text:=inttostr(strtoint(edit5.text)*strtoint(edit6.text); 計(jì)算總額并顯示 edit9.text:=datetostr(now); 顯示日期對碟片信息的模糊查詢功能: 用一個(gè)Tedit組件輸入碟名關(guān)鍵字,用一個(gè)TComboBox組件選擇碟片種類,用一個(gè)Tquery組件實(shí)現(xiàn)SQL查詢,用一
17、個(gè)TDBGrid組件顯示查詢結(jié)果。 SQL語句的生成:if (edit1.text=) and (combobox1.text= ) then 若沒有輸入查詢條件 str:=select * from svcd 則默認(rèn)為顯示所有記錄 else if (combobox1.text=) then 若“種類”為空 str:=select * from svcd where 碟片名稱 like +%+trim(edit1.text)+%+ 則按碟名關(guān)鍵字模糊查詢 else if (edit1.text=) then 若碟名為空,則按種類搜索 str:=select * from svcd where
18、 種類=+trim(combobox1.text)+else 若兩者均非空 str:=select * from svcd where碟片名稱 like +%+trim(edit1.text)+%+ and種類=+trim(combobox1.text)+ 則按兩個(gè)條件復(fù)合查詢SQL語句的執(zhí)行: With Query1 do Begin close ; clear ; sql.text:=str ; ExecSql ; open ; end ;查詢結(jié)果的顯示: 只需將DBGrid1組件的數(shù)據(jù)源設(shè)為query1 即可。根據(jù)查詢結(jié)果建立新記錄: 如果查詢結(jié)果數(shù)為0(dbgrid1.RecordCo
19、unt=0),則為該碟片自動(dòng)生成一個(gè)新編號(hào)即可(碟片自動(dòng)編號(hào)如本模塊所示)。在進(jìn)貨表中插入記錄: table1.active:=true; 打開表 table1.InsertRecord(strtoint(edit1.text),.各個(gè)字段值,略); 插入記錄的各個(gè)字段值 table1.active:=false; 關(guān)閉表 在財(cái)務(wù)表中統(tǒng)計(jì)支出: table2.active:=true; 打開表 with table2 do if locate(日期,edit9.text,lopartialKey)=false 搜索,若無當(dāng)日財(cái)務(wù)記錄then 則插入新記錄 InsertRecord(strtod
20、ate(edit9.text),0,0,0,strtocurr(edit7.text),0) else 否則,修改當(dāng)日財(cái)務(wù)記錄 begin edit ; fields4.value:=fields4.value+strtocurr(edit7.text); post; end; table2.active:=false; 關(guān)閉表2.4.2 銷售子系統(tǒng)的實(shí)現(xiàn):設(shè)計(jì)思路:該模塊要記錄的信息有項(xiàng)目編號(hào)、碟片編號(hào)、碟片名稱、單價(jià)、單位、銷量、總額和日期等,其中項(xiàng)目編號(hào)由系統(tǒng)自動(dòng)生成,碟片編號(hào)、碟片名稱、單價(jià)和單位通過查詢由系統(tǒng)自動(dòng)顯示,銷量由人工輸入,總額由系統(tǒng)計(jì)算,日期由系統(tǒng)自動(dòng)顯示。系統(tǒng)提供模糊查
21、詢功能,用戶只需提供碟名關(guān)鍵字和種類這兩個(gè)條件中的一個(gè)或兩個(gè),便可得到該碟片的各種庫存信息,包括碟片編號(hào)、碟片名稱、種類、單價(jià)、單位、可售量和已售量等。在向銷售表插入記錄的同時(shí),將本次銷售收入統(tǒng)計(jì)入財(cái)務(wù)表中。具體實(shí)現(xiàn):除操作的表對象不同外,其余類似進(jìn)貨子系統(tǒng)。2.4.3 租碟子系統(tǒng)的實(shí)現(xiàn):設(shè)計(jì)思路:該模塊要記錄的信息有項(xiàng)目編號(hào)、碟片編號(hào)、碟片名稱、租量、押金、客戶和出租日期等,除租量和押金由人工輸入外,其他信息均由系統(tǒng)自動(dòng)提供。系統(tǒng)提供模糊查詢功能,用戶只需提供碟名關(guān)鍵字和種類這兩個(gè)條件中的一個(gè)或兩個(gè),便可得到該碟片的庫存信息,包括碟片編號(hào)、碟片名稱、種類、單位、可租量、已租量和出租次數(shù)等。將
22、本次記錄插入租還表的同時(shí),將本次押金收入統(tǒng)計(jì)進(jìn)財(cái)務(wù)表中。具體實(shí)現(xiàn):除操作的表對象不同外,其余類似進(jìn)貨子系統(tǒng)。2.4.4 還碟子系統(tǒng)的實(shí)現(xiàn):設(shè)計(jì)思路:本功能模塊要記錄的信息有項(xiàng)目編號(hào)、歸還日期、租金收入和押金支出等,無需人工輸入,全部由系統(tǒng)提供。本模塊的關(guān)鍵是找到以前相應(yīng)的租碟記錄,因此系統(tǒng)提供了模糊查詢功能,用戶只需提供碟名關(guān)鍵字和客戶名關(guān)鍵字這兩個(gè)條件中的一個(gè)或兩個(gè),便和得到相應(yīng)的一條或多條租碟記錄供用戶查詢和選擇,并顯示相應(yīng)的租碟信息,包括項(xiàng)目編號(hào)、碟片編號(hào)、碟片名稱、租量、押金、客戶和出租日期等,供用戶計(jì)算租金收入和辦理還碟手續(xù)。在租還表中記錄歸還信息并設(shè)置相應(yīng)的已還標(biāo)志后,將本次租金收
23、入和押金支出統(tǒng)計(jì)進(jìn)財(cái)務(wù)表中。具體實(shí)現(xiàn):模糊查詢的實(shí)現(xiàn):同進(jìn)貨子系統(tǒng)略微不同的是,此處用兩個(gè)Tedit組件提供查詢條件,生成SQL語句 if (edit1.text=) and (edit2.text= ) then str:=select * from hire else if (edit2.text=) then str:=select * from hire where 碟片名稱 like +%+trim(edit1.text)+% + else if (edit1.text=) then str:=select * from hire where 客戶 like +%+trim(edit
24、2.text) +%+ else str:=select * from hire where碟片名稱 like +%+trim(edit1.text) +%+ and客戶 like +%+trim(edit2.text)+%+; SQL語句的執(zhí)行同進(jìn)貨子系統(tǒng)。對租還表的操作不是插入記錄,而是修改記錄: table1.active:=true; with table1 do begin edit; fields7.value:=是; fields8.value:=strtodate(edit8.text);post; end;對財(cái)務(wù)表的操作同進(jìn)貨子系統(tǒng),也是先查詢是否有當(dāng)日財(cái)務(wù)記錄,若有,則修改
25、當(dāng)日財(cái)務(wù)記錄中的租金收入和押金支出;否則建立新記錄。2.4.5 數(shù)據(jù)維護(hù)子系統(tǒng)的實(shí)現(xiàn):設(shè)計(jì)思路:為方便管理和維護(hù),本模塊能在一個(gè)窗體內(nèi)實(shí)現(xiàn)對整個(gè)系統(tǒng)內(nèi)所有數(shù)據(jù)表的修改和刪除。本模塊要實(shí)現(xiàn)的功能是修改和刪除記錄,此處提供了兩種操作模式直接和間接模式,既可在原表上直接進(jìn)行修改和刪除,也可先將所選定的記錄的信息全部另外單獨(dú)顯示出來,在表外進(jìn)行修改和刪除,最后再將操作后的新信息返回表中。除刪除操作外,修改操作應(yīng)設(shè)置權(quán)限,不能所有信息都可修改,此處設(shè)置為各表的主碼不能修改。系統(tǒng)提供模糊查詢功能,能快速查到所要修改或刪除的記錄,因?yàn)樗膫€(gè)數(shù)據(jù)表(進(jìn)貨表、銷售表、租碟表、庫存表)都要用到此功能,為方便起見,用
26、其共有屬性“碟片名稱”作為查詢條件,用戶只需提供碟名關(guān)鍵字即可;財(cái)務(wù)表可用主碼“日期”作為查詢條件。具體實(shí)現(xiàn): 選擇數(shù)據(jù)表對象:利用一個(gè)Ttable組件和五個(gè)Tradiobutton組件,分別實(shí)現(xiàn)對整個(gè)系統(tǒng)的五個(gè)數(shù)據(jù)表的連接,并將各個(gè)表的屬性名都單獨(dú)顯示出來(因?yàn)楦鱾€(gè)表的屬性個(gè)數(shù)不同,為方便起見,按最多的十個(gè)為限,設(shè)置了10個(gè)TLabel組件和10個(gè)TEdit組件用于顯示,屬性個(gè)數(shù)少的表顯示時(shí)可將剩余的組件都隱藏起來),以便用間接模式對數(shù)據(jù)表進(jìn)行操作。五個(gè)Tradiobutton組件實(shí)現(xiàn)的功能類似,現(xiàn)以連接進(jìn)貨表(stock.db)的Radiobutton1組件為例,其所要實(shí)現(xiàn)的功能為: 表的
27、連接self.Table1.Active:=false; self.Table1.TableName:='stock.db' self.Table1.Active:=true; 顯示屬性名 label1.Caption:='項(xiàng)目編號(hào)' label2.Caption:='碟片編號(hào)' label3.Caption:='種類' label4.Caption:='進(jìn)價(jià)' label5.Caption:='單位' label6.Caption:='進(jìn)量' label7.Caption:=
28、9;總額 ' label8.Caption:='日期' label9.Caption:='' label10.Caption:='' 輸入框清空edit1.Text:='' edit2.Text:='' edit3.Text:='' edit4.Text:='' edit5.Text:='' edit6.Text:='' edit7.Visible:=true; edit7.Text:=''edit8.Visible:=true
29、; edit8.Text:='' edit9.Visible:=false; edit10.Visible:=false;直接模式(在原表上直接進(jìn)行修改或刪除)的實(shí)現(xiàn):本子系統(tǒng)用一個(gè)TDBGrid組件顯示查詢結(jié)果,在此模式下只需將TDBGrid組件的ReadOnly屬性值改為false即可。間接模式(先將所要修改或刪除的記錄信息顯示于表外,進(jìn)行修改或刪除后再返回表中)的實(shí)現(xiàn):先將TDBGrid組件的ReadOnly屬性值改為true,然后再進(jìn)行相應(yīng)操作,以進(jìn)貨表為例(即點(diǎn)擊了Radiobutton1組件),“修改記錄”操作為if radiobutton1.checked=tru
30、e thenbegin with table1 do if Locate(str2,edit1.Text,lopartialkey)=true 查找記錄then begin 設(shè)置為編輯狀態(tài)edit; 修改記錄 fields1.value:=edit2.text; fields2.value:=edit3.text;fields3.value:=strtocurr(edit4.text); fields4.value:=edit5.text;fields5.value:=strtoint(edit6.text); fields6.value:=strtocurr(edit7.text); fie
31、lds7.value:=strtodate(edit8.text); 狀態(tài)返回 post; end else showmessage('無此記錄')end;“刪除記錄”操作為:with table1 do if Locate(str2,edit1.Text,lopartialkey)=true then delete 刪除記錄 else showmessage(無此記錄);模糊查詢功能的實(shí)現(xiàn):同進(jìn)貨子系統(tǒng)類似,此處更為簡單,只有碟名關(guān)鍵字一個(gè)條件。2.4.6 決策支持子系統(tǒng)的實(shí)現(xiàn):設(shè)計(jì)思路:此模塊主要功能之一是統(tǒng)計(jì)和排序,操作對象是整個(gè)系統(tǒng)的所有五個(gè)表,可按多種方式進(jìn)行統(tǒng)計(jì)和排
32、序,比如對租還情況可按“已還”和“未還”兩種情況統(tǒng)計(jì),對庫存情況可按“可售量”、“已售量”、“可租量”、“已租量”等幾種情況進(jìn)行排序等等,排序方式可選“升序”和“降序”兩種。此模塊另一功能是報(bào)表打印,可將所有的業(yè)務(wù)登記表打印出來供業(yè)主參考決策和存儲(chǔ)備份。具體實(shí)現(xiàn):統(tǒng)計(jì)和排序功能的實(shí)現(xiàn):此處用了多個(gè)TRadioButton組件、一個(gè)TQuery組件和一個(gè)TDBGrid組件,分別用于選擇方式、生成和執(zhí)行SQL語句、顯示結(jié)果。SQL語句比較簡單,統(tǒng)計(jì)功能用的基本語句是select * from xxx where yyy=zzz ,排序功能用的基本語句是select * from xxx order
33、 by yyy desc (asc),在具體的統(tǒng)計(jì)和排序操作中只需將表名和屬性名更改一下即可。報(bào)表打印功能的實(shí)現(xiàn):此處用一個(gè)TTable組件、一個(gè)TQuickRep組件、多個(gè)TQRLabel組件和TQRExpr組件共同來實(shí)現(xiàn),在打印具體的業(yè)務(wù)表時(shí),只需修改一下TTable組件和TQRExpr組件的數(shù)據(jù)表連接和TQRLabel組件的屬性名顯示即可。2.5 系統(tǒng)的調(diào)試和試運(yùn)行在系統(tǒng)的設(shè)計(jì)、調(diào)試和試運(yùn)行過程中,遇到許多意想不到的問題,現(xiàn)總結(jié)如下:數(shù)據(jù)庫的連接和操作問題:數(shù)據(jù)庫連接問題:本系統(tǒng)建的數(shù)據(jù)表類型都是Delphi自帶的默認(rèn)的Paradox類型,在建立數(shù)據(jù)庫時(shí),最初是直接利用Delphi自帶的
34、DBDEMOS數(shù)據(jù)庫,把所建的表都直接放在其中,在程序中各組件的“數(shù)據(jù)源”、“數(shù)據(jù)集”屬性都直接設(shè)為DBDEMOS數(shù)據(jù)庫,對各數(shù)據(jù)表的訪問和操作也都很方便。但是當(dāng)把該系統(tǒng)移植到其他計(jì)算機(jī)上時(shí),若主機(jī)未裝有Delphi軟件工具,則該程序無法運(yùn)行。解決方法:把數(shù)據(jù)表和系統(tǒng)源程序放在同一個(gè)文件夾里,利用開放式數(shù)據(jù)庫連接驅(qū)動(dòng)引擎ODBC建立一個(gè)驅(qū)動(dòng)程序?yàn)椤癉river to Microsoft Paradox(*.db)”的數(shù)據(jù)源My database ,并選擇其目錄,將其指向該文件夾,然后把源程序里各組件的“數(shù)據(jù)源”、“數(shù)據(jù)集”屬性都改為My database 。數(shù)據(jù)庫操作問題:在設(shè)計(jì)過程中,對數(shù)據(jù)
35、庫進(jìn)行插入、修改、刪除操作時(shí),經(jīng)常遇到“cannot operate on a closed dataset”的提示信息,經(jīng)分析,原因是對各個(gè)TTable組件的Active屬性值設(shè)置不一,有的為true,有的為false,造成操作時(shí)不知其Active值到底為何值而導(dǎo)致錯(cuò)誤。解決方法:將各個(gè)TTable組件的Active屬性初始值均設(shè)為false,每次具體操作時(shí)都先設(shè)為true,操作完畢再恢復(fù)為false。SQL語句的生成和執(zhí)行問題:SQL語句的生成問題:問題之一,在好多模塊的SQL語句中均需要單引號(hào),剛開始時(shí)在源程序中我一直用雙引號(hào)以便能在最終的SQL語句中生成單引號(hào),結(jié)果以失敗告終。解決方法
36、:在源程序中用四個(gè)連續(xù)的單引號(hào),可在最終的SQL語句中生成單引號(hào)。問題之二:在好多模塊中都是把對多個(gè)數(shù)據(jù)表的操作集中放在一起,比如數(shù)據(jù)維護(hù)子系統(tǒng)中的修改和刪除操作、決策支持子系統(tǒng)中的統(tǒng)計(jì)和排序操作等等,這時(shí)通常是用一個(gè)TQuery組件來生成和執(zhí)行所有的SQL語句,作者在設(shè)計(jì)系統(tǒng)的時(shí)候,開始時(shí)是以SQL語句一次性完整生成為目標(biāo),結(jié)果因?yàn)榕袛嗾Z句的多重嵌套使用,造成系統(tǒng)工作量的增加和運(yùn)行效率的降低。解決方法:因?yàn)樵谶@些模塊的操作中SQL語句的基本骨架是相同的,區(qū)別僅在于表名和屬性名的不同,所以以表名和屬性名為界,將一個(gè)SQL語句分為幾部分,將相同的部分設(shè)為字符串常量,將表名和屬性名設(shè)為字符串變量,
37、在選擇數(shù)據(jù)表的時(shí)候就給這兩個(gè)變量賦值,最后到生成SQL語句的時(shí)候只需將這些字符串常量和變量聯(lián)接在一起即可。SQL語句的執(zhí)行問題:經(jīng)常遇到的問題是類型不匹配。例如,在還碟子系統(tǒng)中,在為查找相應(yīng)租碟記錄而實(shí)現(xiàn)模糊查詢功能的時(shí)候,原本設(shè)想是提供碟名關(guān)鍵字、客戶名關(guān)鍵字和出租日期三個(gè)條件中的一個(gè)或多個(gè)來實(shí)現(xiàn)模糊查詢,結(jié)果運(yùn)行的時(shí)候,是只要牽涉到日期,就會(huì)出現(xiàn)“Type mismatch in expression”的提示信息,當(dāng)時(shí)的實(shí)際過程為:租還表(hire.db)中屬性“出租日期”、“歸還日期”的類型均定義為日期類型,在該模塊中查詢條件“出租日期”由TDateTimePicker組件提供(設(shè)當(dāng)前日期為20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2025年中國機(jī)床零配件行業(yè)市場調(diào)查研究及投資戰(zhàn)略咨詢報(bào)告
- 年產(chǎn)80萬立方商品混凝土遷址新建項(xiàng)目節(jié)能評估報(bào)告
- 郴州造價(jià)工程師課件視頻
- 2025年中國超細(xì)微電子線材行業(yè)發(fā)展趨勢及投資前景預(yù)測報(bào)告
- 電冰箱蓄冷系統(tǒng)生產(chǎn)建設(shè)項(xiàng)目節(jié)能評估報(bào)告(節(jié)能專)
- (完整版)文化體育館建設(shè)項(xiàng)目可行性研究報(bào)告(完整版)
- 中國智能托管行業(yè)調(diào)查報(bào)告
- 中國二氧化硫脲行業(yè)調(diào)查報(bào)告
- 2024年中國四氯化鈦行業(yè)市場調(diào)查報(bào)告
- 硅酸鹽復(fù)合水泥行業(yè)深度研究分析報(bào)告(2024-2030版)
- 碘海醇外滲的預(yù)防與處理
- 醫(yī)療糾紛-醫(yī)療投訴登記表
- 人民醫(yī)院診斷證明書
- 燃?xì)庥邢薰咎胤N設(shè)備安全管理制度
- 2023年株洲農(nóng)村商業(yè)銀行股份有限公司招聘員工歷年試題(??键c(diǎn)甄選)含答案帶詳解-1
- 嘉峪關(guān)市招聘公辦幼兒園編制外聘用制教師考試真題2022
- 塔吊基礎(chǔ)沉降觀測記錄
- 綜合日語說課講課公開課一等獎(jiǎng)市優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件
- 茶樓服務(wù)員的禮儀培訓(xùn)資料
- GB/T 5976-2006鋼絲繩夾
- GB/T 4169.3-2006塑料注射模零件第3部分:帶頭導(dǎo)套
評論
0/150
提交評論