版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> C語言程序設計課程設計</p><p><b> 實驗報告</b></p><p> 題目:水產(chǎn)品養(yǎng)殖信息管理系統(tǒng)</p><p> 專業(yè): 計算機科學與技術 </p><p> 班級: 計科10
2、03 </p><p> 學號: </p><p> 姓名: </p><p> 成績:
3、 </p><p><b> 指導老師: </b></p><p> 完成日期: 2011年9月28日</p><p><b> 目錄</b></p><p> 系統(tǒng)概述---------------------------------
4、----------------------------------------------3</p><p> 系統(tǒng)功能模塊結構-------------------------------------------------------------------3</p><p> 數(shù)據(jù)結構設計及用法說明----------------------------------------
5、------------------4</p><p> 程序結構-------------------------------------------------------------------------------6</p><p> 各模塊功能------------------------------------------------------------------
6、----------9</p><p> 實驗結果------------------------------------------------------------------------------11</p><p> 體會-----------------------------------------------------------------------------
7、-------13</p><p> 參考文獻------------------------------------------------------------------------------13</p><p> 附錄:源代碼及頭文件------------------------------------------------------報告后</p>&l
8、t;p><b> 系統(tǒng)概述</b></p><p> 本系統(tǒng)是一個水產(chǎn)品管理系統(tǒng),用于存儲和管理水產(chǎn)品的信息,系統(tǒng)功能包括:魚塘、苗種、投苗信息的錄入、刪除、修改、查找、排序等。整個系統(tǒng)由C語言實現(xiàn),采用了Windows程序設計調(diào)用API函數(shù)的方法制作界面,信息在程序中通過十字鏈表的方式被存儲,如果使用保存功能,即存入文件根目錄下的相應.dat文件中。</p><
9、;p> 本程序中最重要的部分之一是窗體的句柄和窗體中各個控件的句柄,通過發(fā)消息給相應的句柄,才能夠在特定的位置進行數(shù)據(jù)的顯示和讀入,在對樹狀圖及列表進行操作時,也是通過特定函數(shù)將消息發(fā)給樹狀圖或其子節(jié)點和列表的句柄,并且,在對數(shù)據(jù)進行變更時,本程序是以所選中節(jié)點的句柄與鏈表的句柄進行對比,來判斷是否進行操作的。一個信息節(jié)點在樹狀圖中所對應的句柄也因此被作為魚塘(POOL_NODE)、苗種(FISH_NODE)、投苗(FEED_N
10、ODE)結構的一部分。數(shù)據(jù)結構的介紹中有界面中每個控件所對應的句柄名稱示意圖。</p><p> 本程序另一個重要部分是十字鏈表的結構,通過使用三級十字鏈表,將所有的信息系統(tǒng)的組合在一個頭節(jié)點下。為支持鏈表,每個節(jié)點都數(shù)據(jù)結構中都有一個指向下一級節(jié)點(除投苗信息FEED_NODE外)和一個指向下一個同級節(jié)點的指針。</p><p><b> 系統(tǒng)功能模塊結構</b>
11、;</p><p> 水產(chǎn)品養(yǎng)殖信息管理系統(tǒng)由六大功能組成:數(shù)據(jù)錄入模塊、數(shù)據(jù)修改模塊、數(shù)據(jù)插入模塊、數(shù)據(jù)刪除模塊、數(shù)據(jù)查詢模塊、數(shù)據(jù)統(tǒng)計排序模塊。如圖F1 所示。</p><p> 主模塊一:水產(chǎn)品數(shù)據(jù)文件處理</p><p> 該模塊包括4個子模塊,分別是:文件創(chuàng)建處理、文件導入處理、文件存盤處理、退出系統(tǒng)處理。</p><p>
12、 所有信息可被保存在三個文件:pool.dat,fish.dat,feed.dat中,pool.dat用于保存魚塘節(jié)點信息,fish.dat用于保存苗種節(jié)點信息,feed.dat用于保存投苗節(jié)點信息。在文件寫入到新建的鏈表時,每個節(jié)點都會有一個句柄,指向左側樹狀圖中節(jié)點,因為每個節(jié)點的句柄都是不同的,所以句柄用于作為該節(jié)點的唯一標識。</p><p> 主模塊二:水產(chǎn)品數(shù)據(jù)錄入處理</p><
13、;p> 該模塊包括3個子模塊,分別是:魚塘數(shù)據(jù)錄入、投苗數(shù)據(jù)錄入、苗種數(shù)據(jù)錄入。</p><p> 在插入下一級節(jié)點時,應選中樹狀圖中的上一級節(jié)點,例如:要插入苗種信息節(jié)點,應選中樹狀圖中的該苗種所對應的魚塘信息節(jié)點,否則不能成功插入。</p><p> 特別注意的是:本程序中所有的輸入輸出均采用API函數(shù),也就是說,輸入每個特定信息的文本框是特定的。</p>&
14、lt;p> 主模塊三:水產(chǎn)品數(shù)據(jù)修改處理</p><p> 該模塊包括3個子模塊,分別是:魚塘數(shù)據(jù)修改、投苗數(shù)據(jù)修改、苗種數(shù)據(jù)修改。</p><p> 在修改各模塊時,應首先選中左側樹狀圖中的相應節(jié)點,然后,單擊相應的修改按鈕。若選中的節(jié)點與要修改的節(jié)點不在同一級,則不能修改成功。</p><p> 主模塊四:水產(chǎn)品數(shù)據(jù)查詢處理</p>
15、<p> 該模塊包括1個子模塊,是:按時間查詢苗種信息。</p><p> 使用查詢操作時,應先在查詢按鈕左側的起始時間和截止時間文本框內(nèi)按格式(如:2011-01-01)輸入,然后單擊查詢按鈕,查詢結果便會顯示在右下方的列表中。如果日期的輸入格式錯誤,則不能輸出正確的查詢結果。</p><p> 5.主模塊五:水產(chǎn)品數(shù)據(jù)統(tǒng)計處理</p><p>
16、 該模塊包括3個子模塊,分別是:魚塘數(shù)據(jù)統(tǒng)計、投苗數(shù)據(jù)統(tǒng)計、苗種數(shù)據(jù)統(tǒng)計。</p><p> 當信息節(jié)點創(chuàng)建或者載入時,節(jié)點信息下方用于顯示統(tǒng)計結果的靜態(tài)文本的示數(shù)都會產(chǎn)生變化。</p><p> 6.主模塊六:水產(chǎn)品數(shù)據(jù)排序處理</p><p> 該模塊包括3個子模塊,分別是:按投苗時間、按苗種單價、按投養(yǎng)數(shù)量。</p><p>
17、當完成查詢功能后,可點擊右端的排序按鈕進行排序,單擊按鈕后,右下方列表的順序就會產(chǎn)生變化。</p><p> 7.特別功能:樹狀圖</p><p> 樹狀圖是對本系統(tǒng)起到輔助作用的控件,可對各級鏈表節(jié)點的名稱進行顯示。單擊樹狀圖上的任意一個節(jié)點,即可在右側瀏覽該節(jié)點信息。</p><p> 數(shù)據(jù)結構設計及用法說明</p><p> 窗
18、口內(nèi)各控件的句柄名稱:</p><p> 由于Windows程序設計采用法消息方式傳遞信息,所以每個窗口及窗口中的控件都唯一對應于一個句柄,通過句柄進行數(shù)據(jù)在控件間的傳輸,本程序中所采用的控件的句柄的名稱如圖所示:</p><p> 投苗節(jié)點(feed_node)結構及用法說明:</p><p> 苗種節(jié)點(fish_node)結構及用法說明:</p&g
19、t;<p> 3.魚塘節(jié)點(pool_node)結構及用法說明</p><p><b> 數(shù)據(jù)結構說明:</b></p><p> 圖1水產(chǎn)品養(yǎng)殖信息管理系統(tǒng)十字交叉鏈表</p><p><b> 程序結構</b></p><p> 本魚塘管理系統(tǒng)的核心部分是主函數(shù)WinMa
20、in函數(shù)和消息處理函數(shù)MainWndProc。</p><p> 主函數(shù)用于注冊窗口類、窗口和控件的創(chuàng)建,并通過調(diào)用消息處理函數(shù),對用戶的操作進行處理,即:調(diào)用相應的函數(shù),以實現(xiàn)相應功能。</p><p> 主程序結構(WinMain):</p><p><b> 消息處理函數(shù)結構:</b></p><p> 在
21、(Ⅰ)處對應的說明:</p><p> 1。在“幫助”菜單中選擇“關于”:wParam=ID_HELP_ABOUT</p><p> 相應事件:彈出對話框 about</p><p> 2。單擊添加魚塘按鈕:wParam= ID_BUTTON1</p><p> 相應事件:調(diào)用函數(shù):CreatChart:讀取魚塘節(jié)點信息的文本框處的信
22、息,創(chuàng)建魚塘信息節(jié)點。</p><p> 3。單擊刪除魚塘按鈕:wParam= ID_BUTTON2</p><p> 相應事件:調(diào)用函數(shù):DeleteChart:讀取當前句柄,刪除該句柄對應的節(jié)點。</p><p> 4。單擊修改魚塘按鈕:wParam= ID_BUTTON3</p><p> 相應事件:調(diào)用函數(shù):ChangeCha
23、rt:讀取當前句柄,讀取魚塘節(jié)點信息的文本框處的信息,將句柄為當前句柄的節(jié)點的信息修改為從魚塘節(jié)點信息的文本框處讀取的信息。</p><p> 單擊苗種、投苗的添加、刪除、修改按鈕,分別為調(diào)用相應的函數(shù),與上述情況類似。并且,變量wParam的值分別對應ID_BUTTON4~ ID_BUTTON9。</p><p> 6。單擊查找按鈕:wParam=ID_BUTTON10</p&
24、gt;<p> 相應事件:調(diào)用函數(shù):FeedInformer:讀取用于輸入起始和截至日期的文本框的信息,查找在該日期范圍內(nèi)的節(jié)點,并且輸出到右下方的列表框(即:hwndListView)中。</p><p> 7。單擊按投苗時間排序按鈕:wParam=ID_BUTTON11</p><p> 相應事件:調(diào)用函數(shù):FeedOrder:將列表框hwndListView中所顯
25、示的節(jié)點信息按照苗時間進行排序,并重新輸出到列表框中。</p><p> 8。單擊按苗種單價、供貨單號排序時wParam=ID_BUTTON12~ ID_BUTTON13分別調(diào)用函數(shù)FeedOrder2、FeedOrder3,并做出相應排序、輸出。</p><p> 9。單擊菜單中FileSave按鈕:wParam= ID_FILE_SAVE40002,</p><
26、p> 相應事件:調(diào)用函數(shù):SaveChart1:對各級節(jié)點信息進行保存,分別存入三個二進制文件,即:pool.dat,fish.dat,feed.dat中。</p><p> 10。單擊菜單中FileLoad按鈕:wParam= ID_FILE_LOAD</p><p> 相應事件:調(diào)用函數(shù):LoadChart:對根目錄下的pool.dat,fish.dat,feed.dat三
27、個文件進行載入,將魚塘、苗種、投苗信息分別存放在三級鏈表中。</p><p> 11。單擊菜單中FileExit按鈕:wParam= ID_FILE_LOAD</p><p> 相應事件:調(diào)用函數(shù):ExitProcess(0) ,退出程序。</p><p><b> 各模塊功能</b></p><p> 主模塊一
28、:水產(chǎn)品數(shù)據(jù)文件處理</p><p> 該模塊包括4個子模塊,分別是:文件創(chuàng)建處理、文件導入處理、文件存盤處理、退出系統(tǒng)處理。以下詳述:</p><p><b> 1.1文件保存處理</b></p><p> 通過函數(shù)void SaveChart1(void) 對鏈表中的節(jié)點進行保存,分別保存.dat三個文件,即:pool.dat、fis
29、h.dat、feed.dat。如果不存在文件,創(chuàng)建文件,如果已經(jīng)存在文件,替換原來的文件。</p><p> 原理:分三次遍歷鏈表。第一次對所有魚塘節(jié)點進行遍歷,使用函數(shù)fwrite將節(jié)點信息保存在pool.dat文件中。第二次使用兩個指針savpool,savfish,savpool對魚塘信息節(jié)點進行遍歷,savfish再對savpool指向的節(jié)點下的所有子節(jié)點進行遍歷,并將信息保存在fish.dat文件中。
30、第三次遍歷同理,將信息保存在feed.dat文件中。</p><p><b> 1.2文件載入處理</b></p><p> 通過函數(shù)POOL_NODE * LoadChart(void)對.dat文件中的數(shù)據(jù)信息進行載入。</p><p> 原理:先用文件指針對pool.dat文件進行遍歷,每指向一條新的信息則先向內(nèi)存申請一個大小為si
31、zeof(POOL_NODE)的空間,然后將信息載入,此外,特別注意要使用函數(shù)AddItemToTree</p><p> 給左側的樹狀圖增加一個節(jié)點,將AddItemToTree函數(shù)的返回值HTREEITEM類型的樹狀圖新增節(jié)點的句柄寫入節(jié)點,用以作為后續(xù)使用中,該節(jié)點的唯一標識。</p><p> 2. 主模塊二:水產(chǎn)品數(shù)據(jù)錄入處理</p><p><
32、b> 使用函數(shù):</b></p><p> POOL_NODE* CreatChart(POOL_NODE *crehead)</p><p> void CreatFish(FISH_NODE **pfish,POOL_NODE *MyPoolaa)</p><p> void CreatFeed(FEED_NODE **pfeed,FI
33、SH_NODE *MyFish)</p><p> 在這里,以苗種數(shù)據(jù)的錄入為例,對函數(shù)進行說明。使用時,先選中左側的投苗節(jié)點,然后對右側苗種信息一欄中的文本框內(nèi)容進行編輯,編輯完成后,單擊插入按鈕即可。</p><p> 原理(函數(shù)void ChangeFeed(void)):當使用者選中樹狀圖中的投苗節(jié)點時,系統(tǒng)會調(diào)用函數(shù)int FindNodeH1(POOL_NODE *fhea
34、d,HTREEITEM KeyHnode,POOL_NODE **repool,FISH_NODE **refish,FEED_NODE **refeed)(下面會有對該函數(shù)的說明)該函數(shù)通過二級指針返回指向當前選中的魚塘節(jié)點和苗種節(jié)點的指針的地址,即,POOL_NODE **repool, FISH_NODE ** refish,通過遍歷并檢查單前節(jié)點信息是否與*repool、*refish指向內(nèi)容相符,找到要插入的位置,并對該位置
35、的指針進行修改,使其current->next指向新申請的一塊空間中,并對其進行修改。</p><p> 3.主模塊三:水產(chǎn)品數(shù)據(jù)修改處理</p><p><b> 使用函數(shù):</b></p><p> void ChangeChart(void)</p><p> void ChangeFish(void
36、)</p><p> void ChangeFeed(void) </p><p> 原理如下(以修改投苗信息節(jié)點為例(函數(shù)ChangeFeed)):</p><p> 通過調(diào)用函數(shù):FindNodeH1返回指明該節(jié)點位置的三個指針,即:repool,refish,refeed。然后通過遍歷鏈表,是當前指針MyFeed指向應被修改的節(jié)點,將從文本框中讀取的相應
37、數(shù)據(jù)寫入節(jié)點相對應的數(shù)據(jù)中。</p><p> 4.主模塊四:水產(chǎn)品數(shù)據(jù)查詢處理</p><p><b> 使用函數(shù):</b></p><p> FEED_NODE * FeedInformer(void) </p><p> 原理:FeedInformer函數(shù)通過使用三重循環(huán),對苗種信息節(jié)點進行遍歷,將每個苗種
38、信息節(jié)點中的投苗時間與起始時間和截止時間進行對比,如果該時間在起始到截止時間中間,則將該節(jié)點的信息寫入一條新的鏈中,鏈頭為creorder,然后通過函數(shù)AddListViewItems對該節(jié)點的信息進行顯示。</p><p> 5.主模塊五:水產(chǎn)品數(shù)據(jù)統(tǒng)計處理</p><p><b> 使用函數(shù):</b></p><p> void sh
39、owall(void)</p><p> 原理:將需要統(tǒng)計的數(shù)據(jù)計為:n-魚塘總數(shù) m-投苗 k-苗種,通過遍歷鏈表,累加求和,得到n、m、k的值,并通過函數(shù)SendMessage將其值發(fā)消息發(fā)給靜態(tài)文本,對魚塘信息、投苗信息、苗種信息的總數(shù)進行顯示。</p><p> 6.主模塊六:水產(chǎn)品數(shù)據(jù)排序處理</p><p><b> 使用函數(shù):</
40、b></p><p> void FeedOrder(FEED_NODE **headp) 對投苗信息按時間順序排序</p><p> void FeedOrder2(FEED_NODE **headp) 對投苗信息按單價排序</p><p> void FeedOrder3(FEED_NODE **headp)對投苗信息按供貨單號排序</p&g
41、t;<p> 原理:將查詢處理后得到的鏈頭作為參數(shù)傳入,通過排序算法對鏈表的節(jié)點進行排序,將得到的新的鏈頭賦值給參數(shù)二級指針,達到修改順序的目的,使用函數(shù)ListView_DeleteAllItems將右下方列表的數(shù)據(jù)全清,再使用for循環(huán)和AddListViewItems函數(shù)對新的鏈表進行顯示。</p><p> 7.特別功能:樹狀圖</p><p><b>
42、 使用函數(shù):</b></p><p> HWND CreateTreeView(HWND hwndParent, LPSTR szWindowName)</p><p> BOOL InitTreeViewImageLists(HWND hwndTV)</p><p> BOOL InitTreeViewItems(int cat,HWND hw
43、ndTV)</p><p> HTREEITEM AddItemToTree(</p><p> HWND hwndTV, </p><p> LPSTR lpszItem, </p><p> HTREEITEM hParent, </p><p> BOOL bFolder)</p><
44、;p> 原理:先通過函數(shù)CreateTreeView,創(chuàng)建一個Tree View控件。通過設置參數(shù)修改樹狀圖的屬性。然后用函數(shù)InitTreeViewImageLists為樹狀圖設置圖標,再使用函數(shù)InitTreeViewItems為Tree View窗口增加若干個節(jié)點。而后續(xù)添加節(jié)點時,使用函數(shù)AddItemToTree,返回值HTREEITEM是一個對應于某一個節(jié)點的唯一的句柄,可用作標識。</p><p
45、> 附:函數(shù)int FindNodeH1(POOL_NODE *fhead,HTREEITEM KeyHnode,POOL_NODE **repool,FISH_NODE **refish,FEED_NODE **refeed) 的說明</p><p> 輔助該函數(shù)實現(xiàn)功能的函數(shù):</p><p> int FindNodeH2(FISH_NODE *fhead,HTREEI
46、TEM KeyHnode,FISH_NODE **refish,FEED_NODE **refeed)</p><p> int FindNodeH3(FEED_NODE *fhead,HTREEITEM KeyHnode,FEED_NODE **refeed)</p><p> 該函數(shù)的功能:傳入魚塘頭指針、要查找的位置的句柄,返回所選中節(jié)點所在的魚塘節(jié)點、投苗節(jié)點(如果有)、苗
47、種節(jié)點(如果有)。</p><p> 原理:在遍歷量表的過程中,比較函數(shù)的參數(shù)HTREEITEM KeyHnode(也就是在插入樹狀圖中生成的那個唯一的句柄)是否與當前被指向節(jié)點的MyPool0->MyTreeID相同,若相同,則當前節(jié)點為所求,跳出循環(huán),若不同,則繼續(xù)向下遍歷鏈表,直到MyPool0->MyTreeID==KeyHnode成立為止。</p><p><
48、;b> 實驗結果</b></p><p><b> 運行結果圖:</b></p><p> 在Microsoft Visual C++中的Watches中觀察到的鏈表結構:</p><p><b> 體會</b></p><p> 在這次的課程設計中,我有了許多收獲,首先
49、,通過完成課程設計,我系統(tǒng)的了解了有關API函數(shù)和Windows程序設計的知識,收獲了許多課堂上學不到的編程經(jīng)驗,其次,我還通過對鏈表的相關函數(shù)的編寫加深了對十字鏈表、排序法的認識,鞏固了課上所學到的知識。</p><p> 這一次的課設,給我留下印象最深的并不是程序的編寫過程,而是前期的準備過程,因為考慮如何做界面的布局,如何實現(xiàn)每個函數(shù)的功能花費了我一個多月的時間,其間嘗試了許多,也失敗了許多。可是真正用來
50、寫這個程序的時間卻不到十天。這讓我明白了,對一件事做一個好的正確的規(guī)劃是使之能夠順利實現(xiàn)的前提,而做規(guī)劃找方向往往比真正的做一件事更難、更有收獲。</p><p><b> 參考文獻</b></p><p> [1] 曹計昌,盧萍,李開. C語言程序設計. 北京:科學出版社.</p><p> [2] 李開,盧萍,曹計昌. C語言實驗與課
51、程設計. 北京:科學出版社.</p><p> [3] 范文慶,周彬彬,安靖. Windows API開發(fā)詳解:函數(shù)、接口、編程實例(附CD光盤1張). 北京:人民郵電出版社</p><p> [4] 孫鑫,余安萍. VC++深入詳解. 北京:電子工業(yè)出版社</p><p> 九、本頁后附有源代碼,包括源文件FishpondManager.c,及頭文件Win
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程信息管理系統(tǒng)課程設計報告
- c語言課程設計報告課程信息管理系統(tǒng)
- 學生信息管理系統(tǒng)c語言課程設計報告
- c語言課程設計報告----學生信息管理系統(tǒng)
- c語言課程設計報告---職工信息管理系統(tǒng)
- 學生信息管理系統(tǒng)c語言課程設計報告
- c語言課程設計報告---車票信息管理系統(tǒng)
- c語言課程設計報告---學生信息管理系統(tǒng)
- c語言課程設計報告---學生信息管理系統(tǒng)
- c語言課程設計報告--職工信息管理系統(tǒng)
- 教學信息管理系統(tǒng)c語言課程設計報告
- 教學信息管理系統(tǒng)c語言課程設計報告
- c語言課程設計報告--學生信息管理系統(tǒng)
- c語言課程設計-學生信息管理系統(tǒng)設計報告
- c語言課程設計-學生信息管理系統(tǒng)設計報告
- c語言課程設計報告----職工信息管理系統(tǒng)設計
- 圖書信息管理系統(tǒng)——c語言課程設計報告
- c語言圖書信息管理系統(tǒng)課程設計報告
- c語言課程設計報告—圖書信息管理系統(tǒng)
- c語言課程設計報告—圖書信息管理系統(tǒng)
評論
0/150
提交評論