【正文】
begin //首字符為 1 點(diǎn)酒水 if (39。編號(hào)39。,[1,x],[locaseInsensitive]) then begin if (39。編號(hào)39。,(39。貨存編號(hào)39。).AsInteger,[locaseInsensitive]) then //查找商品 begin PJ[]:=(39。數(shù)量39。).AsInteger。 [2,X]:=(39。酒水名稱39。).AsString。 [4,x]:=(39。單位39。).AsString。 [3,x]:=(39。酒水類別39。).AsString。 [6,x]:=(39。價(jià)格39。).AsString。 [7,x]:=39。點(diǎn)單39。 [5,x]:=39。139。 [8,x]:=(39。價(jià)格39。).AsString。 sum:=sum+strtoint((39。價(jià)格39。).AsString)。 :=inttostr(sum)。 :=4。 End Else begin ShowMessage(39。對(duì)不起,已沒(méi)有庫(kù)存.39。)。 Abort。 end。49 End Else begin ShowMessage(39。沒(méi)有此編號(hào)水酒信息39。)。 Abort。 end。 end Else //首字符為其他點(diǎn)菜 begin if (39。編號(hào)39。,[1,X],[loCaseInsensitive]) then begin [2,X]:=(39。菜名39。).AsString。 [4,x]:=(39。單位39。).AsString。 [3,x]:=(39。菜系類別39。).AsString。 [6,x]:=(39。價(jià)格39。).AsString。 [7,x]:=39。點(diǎn)單39。 [5,x]:=39。139。 [8,x]:=(39。價(jià)格39。).AsString。 :=4。 End Else begin ShowMessage(39。沒(méi)有此編號(hào)菜譜信息39。)。 Abort。 end。 end。 end。 end。 if 8 then :=+1 //光標(biāo)向后移動(dòng) Else50 If 50 Then begin :=+1。 //光標(biāo)移到下一行 :=1。 end。 End Else If ( = 1) Or ( = 5) Then begin If = 5 Then begin if key=8 then key:=8 else //退格鍵 if (key39。039。) or (Key39。939。) then key:=0。 //如果輸入大于 0小于 9,則輸入空字符 if Length([2,x])=0 then begin Key:=0。 // 空字符 end。 end。 If = 1 Then if Length([2,X1])=0 then begin Key:=0。 End Else begin if key=8 then key:=8 else if (key39。039。) or (Key39。939。) then key:=0。//如果輸入大于 0小于 9,則輸入空字符 end。 End Else51 If = 7 Then //如果光標(biāo)在第 7列時(shí) begin if Length([1,x])=0 then key:=0//如果 [1,x]單元格無(wú)輸入值,輸入空字符 Else begin :=True。 //顯示點(diǎn)單贈(zèng)單列表 :=0。 //移到點(diǎn)單 。 end。 End Else if (=1) or (=2) or (=3) or (=4) or (=6) or (=7) or (=8) then Key:=0。end。 DCFY_LR的 DCGrid的 KeyUp事件procedure (Sender: TObject。 var Key: Word。 Shift: TShiftState)。begin If = 5 Then //當(dāng)光標(biāo)在第五列時(shí) begin if Length([1,X])0 then //當(dāng)光標(biāo)所在行的首單元格不為空 if Length([5,X])=0 then //當(dāng)光標(biāo)所在行的第五單元格為空 begin Exit。 //結(jié)束 End Else begin Try[8,X]:=IntToStr(Round(StrToint([5,X])*StrToFloat([6,X])))。 //計(jì)算合計(jì)金額52 Except End。 end。 end。end。第五章 數(shù)據(jù)模塊的創(chuàng)建與實(shí)現(xiàn)53由于程序較復(fù)雜,程序中窗體比較多,且大部分文件涉及到數(shù)據(jù)庫(kù)源、數(shù)據(jù)連接、數(shù)據(jù)表等組件。為合理使用資源,將這些組件放置到數(shù)據(jù)模塊窗體上,命名為 datamodule1,其他窗體使用時(shí)可以引用數(shù)據(jù)模塊組件。選擇菜單 File\new\data module,添加數(shù)據(jù)模塊窗體,命名為 datamodule1,并保存為 datemodule 單元文件。在數(shù)據(jù)模塊窗體上添加相關(guān)數(shù)據(jù)組件。(1)模塊中數(shù)據(jù)組件屬性設(shè)置類表如下表 411 所示。表 411 主要控件對(duì)象的屬性列表對(duì)象 屬性 值datebase1(database) AliasnameDatabasenameloginprompt060412079datebase1Falsecpfyxx(Table) DatabasenameTablenamedatebase1cpfyxxs(datasourxe) dataset cpfyxxcxlbxx(Table) DatabasenameTablenamedatebase1cxlbxxs(datasourxe) dataset cxlbxxthxx(Table) DatabasenameTablenamedatebase1thxxs(datasourxe) dataset thxxygxxb(Table) DatabasenameTablenamedatebase1ygxxbs(datasourxe) dataset ygxxbjzbh(Table) DatabasenameTablenamedatebase1jzbhs(datasourxe) dataset jzbhcybmb(Table) DatabasenameTablenamedatebase154cybmbs(datasourxe) dataset cybmb(1)數(shù)據(jù)模塊窗體主要功能是統(tǒng)一管理數(shù)據(jù)庫(kù)訪問(wèn)組件,數(shù)據(jù)模塊如圖 。圖 (2)在控制面板的管理工具創(chuàng)建數(shù)據(jù)源 ODBC,如圖 。圖 (3)單擊《添加》按鈕,在彈出的對(duì)話框中的“提供程序”選項(xiàng)卡中設(shè)置希望連接的數(shù)據(jù),如圖 。55圖 (4)選擇“更改默認(rèn)數(shù)據(jù)庫(kù)”選項(xiàng)卡,設(shè)置連接相關(guān)數(shù)據(jù)庫(kù)設(shè)置,如圖 所示。圖 (5)單擊【測(cè)試連接】按鈕,如果連接成功,則提示成功,單擊【確定】按鈕完成數(shù)據(jù)庫(kù)的連接。如圖 。56圖 連接屬性對(duì)話框(6)最后將 datamodel中的 Database1的 Aliasname屬性設(shè)置為創(chuàng)建的 060412079數(shù)據(jù)源后將 connected屬性設(shè)置為 true即連上數(shù)據(jù)庫(kù)。57第六章 軟件測(cè)試及調(diào)試由于在餐飲你管理系統(tǒng)的設(shè)計(jì)過(guò)程中,主要是按照分模塊的方式進(jìn)行程序的設(shè)計(jì),極大的方便了整個(gè)系統(tǒng)的測(cè)試及調(diào)試。同時(shí)由于在本軟件的設(shè)計(jì)中,程序代碼往往集中在某一按鈕或某一行為的操作之下,使得各個(gè)功能的代碼有著明顯的獨(dú)立性。使得本系統(tǒng)的代碼更加易于維護(hù)。在本次軟件的測(cè)試過(guò)程中,首先主要通過(guò)分模塊的測(cè)試方法對(duì)軟件進(jìn)行測(cè)試,在測(cè)試的過(guò)程中按照軟件的要求一步步來(lái)對(duì)軟件進(jìn)行操作。在第一次的測(cè)試中,對(duì)軟件進(jìn)行正確的操作,以確定軟件程序的設(shè)計(jì)是否符合語(yǔ)法的要求,同時(shí)是否正確的使用了相應(yīng)的組件。如果發(fā)生錯(cuò)誤即說(shuō)明程序中有語(yǔ)法的錯(cuò)誤或?qū)M件進(jìn)行了非法的操作。如果第一次測(cè)試沒(méi)有錯(cuò)誤,但程序執(zhí)行所產(chǎn)生的結(jié)果并不符合理論上的結(jié)果,那說(shuō)明此錯(cuò)誤是由于程序的編程思路的錯(cuò)誤所造成的,那么對(duì)于這樣的錯(cuò)誤,單步的跟蹤執(zhí)行并不能發(fā)現(xiàn)其中的錯(cuò)誤。此類錯(cuò)誤的調(diào)試只能通過(guò)對(duì)編程思路進(jìn)行檢查,從而來(lái)改變程序的執(zhí)行方向,使得各個(gè)變量值達(dá)到理論的要求。最終使軟件達(dá)到理論的結(jié)果。如果在正常的操作下程序達(dá)到了理論的結(jié)果或要求,那么僅僅只能說(shuō)明程序執(zhí)行正確了,此時(shí)對(duì)于程序的容錯(cuò)性能并不清楚。因而在后面的測(cè)試重點(diǎn)就應(yīng)該是對(duì)軟件的容錯(cuò)性能的測(cè)試。對(duì)于軟件的容錯(cuò)性的測(cè)試不能只是在最后的軟件測(cè)試中在來(lái)排除錯(cuò)誤;對(duì)于軟件的編程來(lái)說(shuō),錯(cuò)誤發(fā)現(xiàn)的越晚,最后進(jìn)行排錯(cuò)所花的人力和物力將越巨大。對(duì)于軟件的容錯(cuò)性能的測(cè)試在本軟件中使用的是例舉法,即對(duì)軟件進(jìn)行各個(gè)可能引發(fā)軟件異常的操作進(jìn)行執(zhí)行,從而來(lái)檢測(cè)其是否會(huì)產(chǎn)生異常,如果產(chǎn)生異常,通過(guò)調(diào)試再排除異常。當(dāng)然對(duì)軟件來(lái)說(shuō),這樣的調(diào)試并不可能發(fā)現(xiàn)程序中的所有錯(cuò)誤,只能減少程序中的錯(cuò)誤,盡量的排除其中的異常。對(duì)于一個(gè)軟件來(lái)說(shuō),只有在使用中發(fā)現(xiàn)并修改其中的錯(cuò)誤,才能使軟件達(dá)到最佳的狀態(tài)。 在對(duì)本軟件的測(cè)試中發(fā)生的錯(cuò)誤主要是對(duì)所使用的軟件的組件的不正確操作,以及添加或修改數(shù)據(jù)時(shí),沒(méi)有判斷與數(shù)據(jù)表中的數(shù)據(jù)類型是否匹配,因而在軟件調(diào)試部分主要是針對(duì)應(yīng)用軟件的正確使用和添加相應(yīng)的判斷語(yǔ)句上。對(duì)于軟件的調(diào)試將不過(guò)多的敘述。 58第七章 結(jié)論問(wèn)題一:在運(yùn)行多次后經(jīng)常出現(xiàn)此類問(wèn)題,致使程序運(yùn)行不了。解決方法:后查資料得知是因系統(tǒng)內(nèi)存不夠,在運(yùn)行是電腦將結(jié)果保存在內(nèi)存內(nèi),多次后內(nèi)存便不夠用,所以重啟 Delphi 程序即可解決問(wèn)題。問(wèn)題二:運(yùn)行時(shí)未有程序編寫錯(cuò)誤,但運(yùn)行到某個(gè)程序卻突然報(bào)錯(cuò),出現(xiàn)如下問(wèn)題。解決方法:通過(guò)單步運(yùn)行程序查到出錯(cuò)地方,發(fā)現(xiàn) Query1 的 SQL語(yǔ)句寫錯(cuò)。修改后運(yùn)行正常。 通過(guò)調(diào)試餐飲管理系統(tǒng)的基本功能基本實(shí)現(xiàn),但仔細(xì)考慮之后發(fā)現(xiàn)仍存在許多問(wèn)題,特別是考慮到如果是在實(shí)際應(yīng)用中,會(huì)存在問(wèn)題。所以在這方面應(yīng)多進(jìn)行一些市場(chǎng)調(diào)查,根據(jù)實(shí)際情況的需要做進(jìn)一步的改善。經(jīng)過(guò)一個(gè)月的設(shè)計(jì)和開(kāi)發(fā),餐飲管理系統(tǒng)基本開(kāi)發(fā)完畢。其功能基本符合任務(wù)要求,能夠完成餐飲各部門的管理和維護(hù),包括操作人員權(quán)限管理和維護(hù)、開(kāi)臺(tái)的、管理,菜譜信息的設(shè)置和點(diǎn)菜服務(wù)等。在系統(tǒng)的開(kāi)發(fā)過(guò)程中,通過(guò)對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì),極大的加強(qiáng)了對(duì)表額設(shè)計(jì)能力,作為數(shù)據(jù)庫(kù)軟件的主要支持,數(shù)據(jù)表的設(shè)計(jì)直接關(guān)系到整個(gè)系統(tǒng)的質(zhì)量,對(duì)于數(shù)據(jù)表的設(shè)計(jì)要嚴(yán)格遵守?cái)?shù)據(jù)庫(kù)三范式理論,良好的數(shù)據(jù)表的設(shè)計(jì)可以大大提高程序執(zhí)行的效率。軟件設(shè)計(jì)通過(guò) SQL Sever作為軟件的后端數(shù)據(jù)庫(kù),而59通過(guò)對(duì) SQL Sever的編程,基本熟悉掌握了對(duì)其強(qiáng)大功能的使用。SQL Sever下存儲(chǔ)過(guò)程、視圖使用不僅能夠大大的方便對(duì) Delphi的編程,同時(shí)也大大加強(qiáng)了數(shù)據(jù)表中數(shù)據(jù)的一致性,減少了數(shù)據(jù)表的數(shù)據(jù)冗余。因此對(duì)于存儲(chǔ)過(guò)程、視圖掌握,將極大的方便對(duì)程序的設(shè)計(jì)。 而通過(guò)對(duì)Delphi的編程,不但掌握了Delphi的數(shù)據(jù)庫(kù)組件的使用,而且增強(qiáng)了自身編程的嚴(yán)謹(jǐn)性。 總之,通過(guò)本次專業(yè)課程設(shè)計(jì),進(jìn)一步加深了對(duì)軟件設(shè)計(jì)的掌握,加強(qiáng)了對(duì) SQL Sever和 Delphi軟件的使用。學(xué)習(xí)到了很多理論知識(shí),加強(qiáng)了實(shí)踐的能力。但由于專業(yè)課程設(shè)計(jì)時(shí)間較短,所以該系統(tǒng)還有許多不盡如人意的地方,比如用戶界面不夠美觀,出錯(cuò)處理不夠等多方面問(wèn)題。這些都有待今后的進(jìn)一步改善。60參考文獻(xiàn)[1].劉瑞新,萬(wàn)朝陽(yáng), 程序設(shè)計(jì)教程 機(jī)械工業(yè)出版社. [2].賽奎春,鄧曉鵬,鄧齊心..Delphi 數(shù)據(jù)開(kāi)發(fā)實(shí)例解析 機(jī)械工業(yè)出版社. [3].伊文敏,劉峰,王穎..Delphi +SQL Sever數(shù)據(jù)應(yīng)用實(shí)例完全解析 人民郵電出版社 [4].苗雪蘭,劉瑞新,宋歌..Delphi 數(shù)據(jù)庫(kù)系統(tǒng)原理及應(yīng)用教程 機(jī)械工業(yè)出版社. [5].馬健兵 朱亮 應(yīng)用編程事例精解[M].北京:清華大學(xué)出版,[6]. 程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版,[7]. [M].科學(xué)大學(xué)出版,[8].張春林 馬成勇 數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)[M]. 北京:清華大學(xué)出版社,[9].劉前進(jìn), 數(shù)據(jù)庫(kù)編程技術(shù).[M]北京:人民郵電出版社,[10].何旭洪. Delphi .[M] 北京:人民郵電出版社, 2022,[11].蔣方帥. Delphi 程序設(shè)計(jì).[M] 北京: 清華大學(xué)出版社. [12].趙增敏,王慶建. SQL .[M] 北京: 電子工業(yè)工業(yè)出版社. 61