C語(yǔ)言實(shí)訓(xùn)圖書(shū)管理鏈表結(jié)構(gòu).doc_第1頁(yè)
C語(yǔ)言實(shí)訓(xùn)圖書(shū)管理鏈表結(jié)構(gòu).doc_第2頁(yè)
C語(yǔ)言實(shí)訓(xùn)圖書(shū)管理鏈表結(jié)構(gòu).doc_第3頁(yè)
C語(yǔ)言實(shí)訓(xùn)圖書(shū)管理鏈表結(jié)構(gòu).doc_第4頁(yè)
C語(yǔ)言實(shí)訓(xùn)圖書(shū)管理鏈表結(jié)構(gòu).doc_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

. 目錄1、問(wèn)題定義22、系統(tǒng)設(shè)計(jì)221 總體設(shè)計(jì)22.2 詳細(xì)設(shè)計(jì)32.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)32.2.2 主控main()函數(shù)執(zhí)行流程32.2.3輸入記錄模塊42.2.4輸出記錄模塊42.2.5添加記錄模塊42.2.6刪除記錄模塊42.2.7查詢記錄模塊42.2.8函數(shù)功能描述43、系統(tǒng)實(shí)現(xiàn)531 編碼53.1.1 程序預(yù)處理53.1.2 主函數(shù)main()53.1.3 主菜單界面73.1.4 顯示圖書(shū)信息73.1.5增加圖書(shū)信息83.1.6刪除圖書(shū)信息83.1.7查詢圖書(shū)信息932 測(cè)試與調(diào)試103.2.1 概述103.2.2 程序測(cè)試114、系統(tǒng)維護(hù)135、歸納總結(jié)1451 開(kāi)發(fā)經(jīng)驗(yàn)1452 實(shí)訓(xùn)中遇到的問(wèn)題及解決方法1453 設(shè)計(jì)中尚存的不足之處1454 感想和心得體會(huì)14圖書(shū)管理02本題目設(shè)計(jì)目的是訓(xùn)練學(xué)生的基本編程能力,了解管理信息系統(tǒng)的開(kāi)發(fā)流程,熟悉C語(yǔ)言的文件和單鏈表的各種基本操作。本程序中涉及結(jié)構(gòu)體、單鏈表等方面的知識(shí)。通過(guò)本程序的訓(xùn)練,使學(xué)生能對(duì)C語(yǔ)言的文件操作有一個(gè)更深刻的了解,掌握利用單鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)對(duì)圖書(shū)管理的原理,為進(jìn)一步開(kāi)發(fā)出高質(zhì)量的管理信息系統(tǒng)打下堅(jiān)實(shí)的基礎(chǔ)。1、問(wèn)題定義創(chuàng)建一個(gè)圖書(shū)信息管理系統(tǒng)。假設(shè)系統(tǒng)中每本圖書(shū)信息只包括編號(hào)、書(shū)名、作者名字、單價(jià)、出版社名字。程序的運(yùn)行效果如下圖所示,選擇菜單實(shí)現(xiàn)相應(yīng)功能。2、系統(tǒng)設(shè)計(jì)21 總體設(shè)計(jì)采用模塊化的程序設(shè)計(jì)方法,即將較大的任務(wù)按照一定的原則分為一個(gè)個(gè)較小的任務(wù),然后分別設(shè)計(jì)各個(gè)小任務(wù)。需要注意的是劃分出來(lái)的模塊應(yīng)該相對(duì)獨(dú)立但又相關(guān),且容易理解??梢杂媚K化層次結(jié)構(gòu)圖(即模塊圖)來(lái)分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。圖書(shū)管理系統(tǒng)查詢圖書(shū)信息刪除圖書(shū)信息添加圖書(shū)信息顯示圖書(shū)信息建立圖書(shū)鏈表這個(gè)圖書(shū)管理系統(tǒng)要求采用單鏈表實(shí)現(xiàn),如上圖所示,它由如下五個(gè)功能模塊組成:建立圖書(shū)鏈表:完成將數(shù)據(jù)存入單鏈表的工作。顯示圖書(shū)信息:顯示所有輸入的圖書(shū)信息。添加圖書(shū)信息:增添圖書(shū)信息。刪除圖書(shū)信息:刪除圖書(shū)信息。查詢圖書(shū)信息:查詢圖書(shū)信息2.2 詳細(xì)設(shè)計(jì)2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)l 圖書(shū)信息結(jié)構(gòu)體typedef struct librarian LIB;/*使結(jié)構(gòu)體變量引用方便*/struct librarian/*圖書(shū)信息結(jié)構(gòu)體*/ long num;/*編號(hào)*/ char name15; /*書(shū)名*/ float store; /*單價(jià)*/ char auther30; /*作者*/ char publishing30; /*出版社*/ LIB *next; /*指針變量,用以實(shí)現(xiàn)鏈表結(jié)構(gòu)*/;2.2.2 主控main()函數(shù)執(zhí)行流程Switch函數(shù)功能1功能4功能3功能2功能5這個(gè)圖書(shū)管理系統(tǒng)執(zhí)行主流程如上圖所示。通過(guò)switch函數(shù)的選擇結(jié)構(gòu),實(shí)現(xiàn)多功能選擇。2.2.3輸入記錄模塊輸入記錄模塊主要實(shí)現(xiàn)將數(shù)據(jù)存入單鏈表中。2.2.4輸出記錄模塊輸出記錄模塊主要實(shí)現(xiàn)將數(shù)據(jù)打印輸出。2.2.5添加記錄模塊添加記錄模塊主要實(shí)現(xiàn)添加數(shù)據(jù)存入單鏈表中。2.2.6刪除記錄模塊刪除記錄模塊主要實(shí)現(xiàn)刪除鏈表中數(shù)據(jù)信息。2.2.7查詢記錄模塊查詢記錄模塊主要實(shí)現(xiàn)查詢鏈表中數(shù)據(jù)信息。2.2.8函數(shù)功能描述struct librarian。定義結(jié)構(gòu)體system(cls);清除屏幕內(nèi)容q=(LIB *)malloc(LEN);開(kāi)辟結(jié)構(gòu)體大小的內(nèi)存空間printf(輸入圖書(shū)編號(hào):);輸出函數(shù)scanf(%d,&q-num);輸入函數(shù)if()else()條件控制for(i=1;in;i+)??刂蒲h(huán)次數(shù)return head;函數(shù)返回值switch()case1.。case4 switch選擇結(jié)構(gòu)實(shí)現(xiàn)功能選擇void output(LIB *p)/*輸出圖書(shū)信息函數(shù)*/LIB *insert(LIB *p, LIB *o)/*插入圖書(shū)信息函數(shù)*/LIB *creat(int n)/*建立圖書(shū)鏈表函數(shù)*/LIB *del(LIB *p,char *o)/*刪除圖書(shū)信息函數(shù)*/LIB *look(LIB *p,char *o)/*查詢圖書(shū)信息函數(shù)*/3、系統(tǒng)實(shí)現(xiàn)31 編碼3.1.1 程序預(yù)處理包括加載頭文件,定義結(jié)構(gòu)體、常量和變量,并對(duì)它們進(jìn)行初始化工作。#include stdio.h /*標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)*/#include stdlib.h /*標(biāo)準(zhǔn)函數(shù)庫(kù)*/#include string.h /*字符串函數(shù)庫(kù)*/#include conio.h /*屏幕操作函數(shù)庫(kù)*/#include /*表示可以調(diào)用此宏定義下的函數(shù)*/#define LEN sizeof(LIB) /*宏定義函數(shù)方便引用結(jié)構(gòu)體*/3.1.2 主函數(shù)main()main()函數(shù)主要實(shí)現(xiàn)了對(duì)整個(gè)程序的運(yùn)行控制,以及相關(guān)功能模塊的調(diào)用。int main()/*主函數(shù)*/ LIB *p=0, *h, *q; /*定義鏈表*/ int m,a; /*保存選擇結(jié)果變量*/ char n15,num15; /*中間數(shù)組*/ do /*主界面*/printf(*n);printf(1:建立圖書(shū)鏈表;n2:顯示圖書(shū)信息;n3:添加圖書(shū)信息;n4:刪除圖書(shū)記錄;n 5 :查詢圖書(shū)記錄n 0:退出:;n); printf(*n); printf(輸入你的選擇回車進(jìn)入:); scanf(%d,&m); switch(m)/*switch選擇結(jié)構(gòu)實(shí)現(xiàn)功能選擇*/ case 1 :/*建立圖書(shū)鏈表*/ printf(請(qǐng)輸入需要錄入本數(shù):); scanf(%d,&a); h=p=creat(a); break; case 2 :/*顯示圖書(shū)信息*/ p=h; output(p); break; case 3 :/*添加圖書(shū)信息*/ p=h; q=(LIB *)malloc(LEN); printf(輸入圖書(shū)編號(hào):); scanf(%d,&q-num); printf(輸入圖書(shū)名稱:); scanf(%s,&q-name); printf(輸入圖書(shū)單價(jià):); scanf(%f,&q-store); while(getchar()!=n); printf(輸入圖書(shū)的作者:); scanf(%s,&q-auther); printf(輸入出版社名稱:); scanf(%s,&q-publishing); h=p=insert(p,q); break; case 4 :/*刪除圖書(shū)記錄*/ p=h; printf(輸出你要?jiǎng)h除書(shū)籍編號(hào):); scanf(%s,num); h=p=del(p,num);break;case 5 :/*查詢圖書(shū)記錄*/ p=h; printf(輸出你要查詢書(shū)籍編號(hào):); scanf(%s,num); h=p=look(p,num); break; default : break; while(m);3.1.3 主菜單界面用戶進(jìn)入成績(jī)管理系統(tǒng)時(shí),需要顯示主菜單,提示用戶進(jìn)行選擇,完成相應(yīng)任務(wù)。此代碼被main()函數(shù)調(diào)用。/*主界面*/printf(*n);printf(1:建立圖書(shū)鏈表;n2:顯示圖書(shū)信息;n3:添加圖書(shū)信息;n4:刪除圖書(shū)記錄;n0:退出:;n); printf(*n); printf(輸入你的選擇回車進(jìn)入:);3.1.4 顯示圖書(shū)信息 不懂怎么排列,制表就只能這樣輸出了。printf(編號(hào):%d 書(shū)名: %s t單價(jià): %.1f 作者:%s t 出版社 : %s; n,p-num,p-name,p-store,p-auther,p-publishing);3.1.5增加圖書(shū)信息LIB *insert(LIB *p, LIB *o)/*插入圖書(shū)信息函數(shù)*/ LIB *head=p,*q;/*建立結(jié)構(gòu)體指針變量,head用來(lái)保存首鏈表*/ system(cls);/*清理屏幕*/ if(p=0) /*當(dāng)鏈表為空時(shí)*/ head=o; o-next=0; else if(o-num)num) /*嵌入結(jié)構(gòu)體通過(guò)編號(hào)排序*/ head=o; o-next=p; else while(o-num)(p-num)&p-next!=0) q=p; p=p-next; if(p-next=0) p-next=o; o-next=0; else q-next=o; o-next=p; system(cls); return head;3.1.6刪除圖書(shū)信息LIB *del(LIB *p,char *o)/*刪除圖書(shū)信息函數(shù)*/ LIB *head=p,*q; if(p=0) printf(沒(méi)有這本書(shū)n); else if(strcmp(p-num,o)=0)/*當(dāng)首鏈表為要?jiǎng)h除函數(shù)時(shí)*/ head=p-next; free(p); else while(p!=0) q=p; p=p-next;/*通過(guò)鏈?zhǔn)窖h(huán)尋找目標(biāo)編號(hào)*/ if(p=0)break; if(strcmp(p-num,o)=0) q-next=p-next; free(p);/*釋放目標(biāo)結(jié)點(diǎn)空間*/ break; system(cls); return head;3.1.7查詢圖書(shū)信息和刪除函數(shù)基本一致,只是把free語(yǔ)句改成相應(yīng)的printf語(yǔ)句LIB *look(LIB *p,char *o)/*查詢圖書(shū)信息函數(shù)*/ LIB *head=p,*q; if(p=0) printf(沒(méi)有這本書(shū)n); else if(strcmp(p-num,o)=0) head=p-next; system(cls); printf(編號(hào):%s 書(shū)名: %s t單價(jià): %.1f 作者:%s t 出版社 : %s; n,p-num,p-name,p-store,p-auther,p-publishing); printf(nn按任意鍵回到主菜單!n); getch(); else while(p!=0) q=p; p=p-next; if(p=0)break; if(strcmp(p-num,o)=0) system(cls); printf(編號(hào):%s 書(shū)名: %s t單價(jià): %.1f 作者:%s t 出版社 : %s; n,p-num,p-name,p-store,p-auther,p-publishing); printf(nn按任意鍵回到主菜單!n); getch(); system(cls); return head;32 測(cè)試與調(diào)試3.2.1 概述一般情況下,為解決一個(gè)問(wèn)題所編寫的程序代碼較長(zhǎng),可能包括幾百條甚至成千上萬(wàn)條語(yǔ)句。在檢查并排除所有語(yǔ)法錯(cuò)誤后,還會(huì)有不易發(fā)現(xiàn)的邏輯錯(cuò)誤,因此要對(duì)程序進(jìn)行認(rèn)真仔細(xì)的測(cè)試與調(diào)試。測(cè)試是通過(guò)運(yùn)行程序發(fā)現(xiàn)錯(cuò)誤的過(guò)程,常見(jiàn)的錯(cuò)誤有數(shù)據(jù)溢出、數(shù)組越界、進(jìn)入死循環(huán)、語(yǔ)句順序顛倒、多加“;”或少加“”等等。調(diào)試則是確定測(cè)試中找到的錯(cuò)誤性質(zhì)并改正錯(cuò)誤的過(guò)程。測(cè)試與調(diào)試通常交替進(jìn)行,即測(cè)試調(diào)試再測(cè)試再調(diào)試。能檢查出尚未發(fā)現(xiàn)的、各種不同類型錯(cuò)誤的測(cè)試才是成功的測(cè)試。測(cè)試程序需要測(cè)試用例,測(cè)試用例可用如下公式表示:測(cè)試用例測(cè)試數(shù)據(jù)預(yù)期結(jié)果。好的測(cè)試用例應(yīng)該是用盡可能少的測(cè)試數(shù)據(jù)發(fā)現(xiàn)盡可能多的錯(cuò)誤,即發(fā)現(xiàn)錯(cuò)誤的概率要大。要選擇合適的測(cè)試數(shù)據(jù),使系統(tǒng)在運(yùn)行時(shí)盡量能執(zhí)行到每條語(yǔ)句,以測(cè)試各指令是否正確。還應(yīng)分別測(cè)試輸入合法數(shù)據(jù)與非法數(shù)據(jù)時(shí),程序的運(yùn)行情況,。對(duì)于合法數(shù)據(jù),還要考慮數(shù)據(jù)的一般性與特殊性,如求最大值的問(wèn)題,應(yīng)測(cè)試最大值在最前面、最后面、中間某一位置的情況。測(cè)試可按模塊測(cè)試、組裝測(cè)試和確認(rèn)測(cè)試的步驟進(jìn)行。(1)模塊測(cè)試就是分別對(duì)各模塊進(jìn)行測(cè)試的過(guò)程。在編寫一個(gè)模塊后應(yīng)立即對(duì)其進(jìn)行測(cè)試,因?yàn)檫@時(shí)對(duì)模塊記憶深刻,而且單個(gè)模塊相對(duì)較小,所以容易構(gòu)造測(cè)試數(shù)據(jù),能方便地檢查和改正錯(cuò)誤。(2)組裝測(cè)試就是把所有模塊(應(yīng)該是通過(guò)模塊測(cè)試的模塊)按預(yù)先制定的計(jì)劃逐步組裝和測(cè)試的過(guò)程。一般情況下,各模塊之間要相互傳遞數(shù)據(jù)和控制信息,因此組裝測(cè)試的主要任務(wù)是發(fā)現(xiàn)模塊接口中的錯(cuò)誤。(3)確認(rèn)測(cè)試是最后一個(gè)步驟,一般在將軟件交付用戶之前,應(yīng)確認(rèn)軟件是否確實(shí)滿足用戶的要求,通常使用接近實(shí)際的用例進(jìn)行測(cè)試。3.2.2 程序測(cè)試l 在主菜單中選擇1當(dāng)用戶輸入1并按回車鍵后,會(huì)出現(xiàn)”請(qǐng)輸入需要錄入本數(shù):” 根據(jù)需要輸入相應(yīng)數(shù)字即可進(jìn)入圖書(shū)信息輸入界面;輸入相應(yīng)信息:l 在主菜單中選擇2當(dāng)用戶輸入2并按回車鍵后,即可進(jìn)入顯示圖書(shū)信息界面。l 在主菜單中選擇3當(dāng)用戶輸入3并按回車鍵后,即可進(jìn)入添加圖書(shū)信息界面。輸入相應(yīng)信息:用功能選項(xiàng)2驗(yàn)證是否添加成功:l 在主菜單中選擇4當(dāng)用戶輸入4并按回車鍵后,即可進(jìn)入刪除圖書(shū)信息界面。輸入想要?jiǎng)h除圖書(shū)的編號(hào):用功能選項(xiàng)2驗(yàn)證是否刪除成功:l 在主菜單中選擇5當(dāng)用戶輸入5并按回車鍵后,即可進(jìn)入查詢圖書(shū)信息界面。添加幾本書(shū)測(cè)試查詢功能:l 在主菜單中選擇0當(dāng)用戶輸入0并按回車鍵后,即可執(zhí)行退出操作。4、系統(tǒng)維護(hù)經(jīng)測(cè)試與調(diào)試確認(rèn)軟件無(wú)錯(cuò)時(shí),開(kāi)發(fā)就告一段落,這時(shí)可以交付軟件供用戶使用,但是在軟件的使用過(guò)程中還會(huì)面臨更加漫長(zhǎng)的工作,即軟件維護(hù)。一般維護(hù)的工作有:更改使用中發(fā)現(xiàn)的錯(cuò)誤;為適應(yīng)實(shí)際環(huán)境而對(duì)程序進(jìn)行修改;為滿足新的需求而對(duì)程序作必要的改進(jìn)等等。5、歸納總結(jié)51 開(kāi)發(fā)經(jīng)驗(yàn)通過(guò)對(duì)本題目的開(kāi)發(fā),體會(huì)到要掌握以下幾點(diǎn)內(nèi)容。l 大程序的設(shè)計(jì)風(fēng)格。按“自頂向下,逐步細(xì)化,模塊化”的方法進(jìn)行程序設(shè)計(jì)。l 編寫主函數(shù),并進(jìn)行測(cè)試與調(diào)試。當(dāng)被調(diào)函數(shù)又需要調(diào)用其他函數(shù)時(shí),也要遵循逐步細(xì)化的原則。C語(yǔ)言提供豐富的庫(kù)函數(shù),編程序時(shí)要善于使用庫(kù)函數(shù),避免不必要的勞動(dòng)。l 定義函數(shù)時(shí),應(yīng)選好參數(shù)的個(gè)數(shù)和數(shù)據(jù)類型。l 學(xué)會(huì)了鏈表結(jié)構(gòu)的構(gòu)成及使用方法。52

溫馨提示

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

評(píng)論

0/150

提交評(píng)論