C語言程序設(shè)計(jì)----圖書信息管理系統(tǒng).doc_第1頁
C語言程序設(shè)計(jì)----圖書信息管理系統(tǒng).doc_第2頁
C語言程序設(shè)計(jì)----圖書信息管理系統(tǒng).doc_第3頁
C語言程序設(shè)計(jì)----圖書信息管理系統(tǒng).doc_第4頁
C語言程序設(shè)計(jì)----圖書信息管理系統(tǒng).doc_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)程序設(shè)計(jì)基礎(chǔ)(C)課程設(shè)計(jì)報(bào)告圖書信息管理系統(tǒng)學(xué) 生 姓 名: 朱斌 學(xué) 號(hào): 201211354 班 級(jí): 電力工程與管理1201班指 導(dǎo) 老 師: 鄧偉華 日 期: 2013.07.05 蘭州交通大學(xué)新能源與動(dòng)力工程學(xué)院C語言課程設(shè)計(jì)報(bào)告一、設(shè)計(jì)目標(biāo)1二、總體設(shè)計(jì)2三、詳細(xì)設(shè)計(jì)2五、分析及結(jié)論9六、參考文獻(xiàn)11七、附錄11源程序清單11一、設(shè)計(jì)目標(biāo) 圖書信息包括:登錄號(hào)、書名、作者名、分類號(hào)、出版單位、出版時(shí)間、價(jià)格等。設(shè)計(jì)的圖書信息管理系統(tǒng),應(yīng)當(dāng)具備能提供以下功能:1、系統(tǒng)以菜單方式工作2、圖書信息錄入功能輸入3、圖書信息瀏覽功能輸出4、圖書信息查詢功能算法(查詢方式:1按書名查詢.2.按作者名查詢)5、圖書信息的刪除與修改二、總體設(shè)計(jì)1.程序設(shè)計(jì)組成框圖圖書信息管理系統(tǒng)系統(tǒng)登錄模塊菜單選擇模塊圖書信息錄入模塊圖書信息瀏覽模塊圖書信息查詢模塊圖書信息修改模塊設(shè)計(jì):朱斌設(shè)計(jì):周勇設(shè)計(jì):閆鵬設(shè)計(jì):張旭東設(shè)計(jì):楊國崢設(shè)計(jì):王文模2.程序流程圖三、詳細(xì)設(shè)計(jì)1、系統(tǒng)登錄模塊(f1()) 本函數(shù)由朱 斌設(shè)計(jì)1)函數(shù)的功能:驗(yàn)證管理員信息,進(jìn)入菜單功能界面2)函數(shù)的入口:從main()的switch()結(jié)構(gòu)中進(jìn)入,即choice的值為1時(shí)進(jìn)入函數(shù),然后提示用戶通過鍵盤對(duì)輸入管理員賬戶及密碼。3)函數(shù)調(diào)用關(guān)系:被主函數(shù)調(diào)用。由switch()開關(guān)結(jié)構(gòu)中進(jìn)入,并在文中無返回值的空值void函數(shù)。4)函數(shù)的出口:當(dāng)驗(yàn)證失敗,提示重新輸入。當(dāng)驗(yàn)證成功,通過“ENTER”鍵,跳出switch()開關(guān)函數(shù),進(jìn)入菜單功能模塊,繼續(xù)執(zhí)行選擇結(jié)構(gòu)。程序流程圖: 圖書登錄系統(tǒng)界面2.菜單功能選擇模塊(f2())本函數(shù)由周 勇設(shè)計(jì) 1)函數(shù)功能:主要作用是提示用戶操作,體現(xiàn)模塊化思想,主要是顯示出菜單讓用戶選擇要進(jìn)行的任務(wù)。2)函數(shù)入口:從主函數(shù)void中的 adm_servelist()進(jìn)入函數(shù),這是直接被主函數(shù)void()調(diào)用的。3)函數(shù)調(diào)用關(guān)系:被主函數(shù)調(diào)用。并在文中無返回值的空值void函數(shù)。4)函數(shù)的出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)。圖書管理系統(tǒng)添加圖書刪除圖書信息瀏覽信息查詢修改圖書創(chuàng)建圖書退出管理系統(tǒng)開始輸入n,判斷是否06?輸入n,調(diào)用各個(gè)模塊的函數(shù)結(jié)束YN主函數(shù)的流程圖菜單界面3.修改與刪除模塊(f3()) 本函數(shù)由王文模設(shè)計(jì)圖書刪除1)函數(shù)功能:利用while循環(huán)和 if 語句和scanf getchar search change del 函數(shù),完成對(duì)圖書信息(分類名 出版單位 出版時(shí)間 價(jià)格)的修改和刪除2) 函數(shù)入口:從主函數(shù)main()中的system(cls); /*清屏命令*/menu(); /*菜單函數(shù)提示用戶怎樣選擇*/進(jìn)入函數(shù),這是直接被主函數(shù)main()調(diào)用的。3) 調(diào)用關(guān)系:void change(int x)是改變圖書信息,它里面又調(diào)用了 book_search();4) 函數(shù)出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)。程序框架圖 圖書修改該模塊實(shí)現(xiàn)按照用戶需求,將需要修改的圖書名輸入,進(jìn)行for循環(huán)查找是否有此書,若無,則顯示未找到,退出,若有,則顯示輸入新的圖書信息,開始輸入修改的信息,進(jìn)行for循環(huán)開始錄入,替換原文件信息結(jié)束顯示“修改成功” 圖書修改界面 圖書刪除界面4.圖書信息瀏覽(f4()) 本函數(shù)由張旭東設(shè)計(jì)1) 函數(shù)的功能: 顯示圖書的信息(編號(hào)價(jià)格作者出版單位出版時(shí)間類別)2)函數(shù)的入口: 從主函數(shù)main()中的system(cls); /*清屏命令*/menu(); /*菜單函數(shù)提示用戶怎樣選擇04信息瀏覽/進(jìn)入函數(shù),這是直接被主函數(shù)main()調(diào)用的。3)函數(shù)調(diào)用關(guān)系:被主函數(shù)調(diào)用。并在文中無返回值的空值void函數(shù)。4)函數(shù)的出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)??蚣軋D 圖書瀏覽流程圖圖書瀏覽5. 圖書查詢 本函數(shù)由楊國崢設(shè)計(jì)1)函數(shù)的功能: 按著書名查詢與作者名查詢,輸出排序結(jié)果。 2)函數(shù)的入口: 程序從main()的while()開關(guān)結(jié)構(gòu)中進(jìn)入,即choice的值為4時(shí)進(jìn)入該函數(shù),開始進(jìn)入該函數(shù),進(jìn)入函數(shù)后,首先打開文件,然后利用“printf()”選擇按書名查詢與作者名查詢,若flag=1或flag=2則有此書。若flag=0則無此書,并退出查詢。3)函數(shù)調(diào)用關(guān)系:被主函數(shù)調(diào)用。由while()開關(guān)結(jié)構(gòu)中進(jìn)入,并在文中無返回值的空值void函數(shù)。4)函數(shù)的出口: 當(dāng)輸出查詢結(jié)果用printf()標(biāo)準(zhǔn)輸出到屏幕上,然后結(jié)束該函數(shù),而執(zhí)行主函數(shù)main()中“break;”跳出while()開關(guān)函數(shù),繼續(xù)執(zhí)行if選擇結(jié)構(gòu)。圖書信息查詢按書名查詢(1)EXIT(0)按作者名查詢(2)04信息查詢輸入a,判斷a是否為02?a=0,退出回到主菜單a=1,則調(diào)用search-by-name按書名查詢輸入書名,若有此書則輸出此書信息,若沒有,則輸出file open error!沒有,則輸出file open error!a=2,則調(diào)用search-by-writer按作者名查詢輸入作者名,若有此書則輸出此書信息若沒有,則輸出file open error按圖書名查詢按作者名查詢 6.輸入模塊 本函數(shù)由 閆 鵬 設(shè)計(jì)1) 函數(shù)的功能:利用for循環(huán)語句和scanf、gets、getchar函數(shù)完成對(duì)結(jié)構(gòu)數(shù)組的輸入,存放圖書信息(圖書編號(hào)、圖書名、作者名、出版社、類別、出版時(shí)間、價(jià)格)。2) 函數(shù)的入口:從主函數(shù)main()中的system(cls); /*清屏命令*/menu(); /*菜單函數(shù)提示用戶怎樣選擇*/進(jìn)入函數(shù),這是直接被主函數(shù)main()調(diào)用的。3) 函數(shù)調(diào)用關(guān)系:被主函數(shù)調(diào)用。并在文中無返回值的空值void函數(shù)。4) 函數(shù)的出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)。程序框架圖:錄入數(shù)據(jù)請(qǐng)輸入圖書編號(hào)請(qǐng)輸入圖書名請(qǐng)輸入作者名請(qǐng)輸入出版社請(qǐng)輸入類別請(qǐng)輸入出版時(shí)間請(qǐng)輸入價(jià)格圖書信息輸入四、調(diào)試與測(cè)試調(diào)試方法:打開Microsoft Visual C+ 6.0,先將各個(gè)功能函數(shù)的的內(nèi)容清空,只保留主函數(shù)main(),然后編譯檢驗(yàn)main()函數(shù)中是否有錯(cuò),如果沒有錯(cuò)誤,再連接、運(yùn)行。確認(rèn)main()函數(shù)一切無誤后,然后加入功能函數(shù)menu()函數(shù)與f1()函數(shù),由于menu()函數(shù)比較簡單,所以與f1()函數(shù)一起進(jìn)行調(diào)試,f1()函數(shù)中主要注意讀取文件,與寫入文件,這都是二進(jìn)制的形式。若menu()函數(shù)與f1()函數(shù)編譯、連接、運(yùn)行沒問題,繼續(xù)加入f2()函數(shù),就這樣的方法依次檢查調(diào)試f3()函數(shù)、f4()函數(shù)。當(dāng)所有的功能函數(shù)都加上且正確無誤時(shí),就可以進(jìn)入下一個(gè)環(huán)節(jié)程序的測(cè)試。測(cè)試方法: 運(yùn)行程序,然后進(jìn)入銷售管理系統(tǒng)的界面,在這里需要做的就是把自己當(dāng)成一個(gè)公司的程序使用者,來對(duì)該程序進(jìn)行使用,看該程序有哪些方面用著不夠爽,把這些問題依次整理出來,再對(duì)源程序進(jìn)行修改,在這個(gè)過程中也需要對(duì)程序進(jìn)行調(diào)試,不過不必將各個(gè)功能函數(shù)的的內(nèi)容清空再進(jìn)行如上述的調(diào)試方法,而是,改一部份運(yùn)行一次,看是否有無。如f1()函數(shù)有誤,則先修改f1()函數(shù),一塊一塊的進(jìn)行修改,就是遵循C語言的模塊化設(shè)計(jì)原理,若所有的都改過來了,且運(yùn)行無誤,那就大功告成了。在調(diào)試中遇到的問題:在調(diào)試過程中,我們遇到諸多小問題,但都在我們共同討論后解決了。1、問題:標(biāo)點(diǎn)符號(hào)在輸入的時(shí)候,使用的是中文輸入法,這種錯(cuò)誤一般都難以發(fā)現(xiàn),讓修改的時(shí)候找不到目標(biāo)。解決方法:用“替換”。如果程序中的error很多,不管error是什么,先將標(biāo)點(diǎn)替換成英文的標(biāo)點(diǎn)。2、問題:調(diào)試時(shí),有的時(shí)候編譯后沒什么問題,就是在點(diǎn)擊連接link時(shí)出現(xiàn)了錯(cuò)誤。而且,這種錯(cuò)誤讓我們不知道怎么修改。但是我們的程序的確正確。解決方法:將源程序保存(save),然后關(guān)掉Microsoft Visual C+ 6.0,重新啟動(dòng)Microsoft Visual C+ 6.0,五、分析及結(jié)論A、在設(shè)計(jì)中我們實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)的所有內(nèi)容即:1、系統(tǒng)以菜單方式工作2、圖書信息錄入功能輸入3、圖書信息瀏覽功能輸出4、圖書信息查詢功能算法(查詢方式:1按書名查詢.2.按作者名查詢)5、圖書信息的刪除與修改B、其中遇到了以下問題:不能清晰的建立設(shè)計(jì)模塊,不會(huì)修改出現(xiàn)的錯(cuò)誤等等。解決方案:向同學(xué)尋求幫助,向他們學(xué)習(xí),最終通過自己努力建立了模塊。不可避免地程序中肯定依然存在者某些問題在應(yīng)用中不斷提高自己的能力,攻克遇到的困難。C、該程序的不足:函數(shù)較復(fù)雜,界面不美觀。D、實(shí)踐心得經(jīng)過一個(gè)多星期的編譯原理課程設(shè)計(jì),在我們一組的共同的努力下,順利完成該課程設(shè)計(jì)。通過該課程設(shè)計(jì),掌握了編譯程序工作的基本過程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程及其相關(guān)的技術(shù),對(duì)課本上的知識(shí)也有了更深的理解。老師常說,課本上的知識(shí)是機(jī)械的,表面的,要學(xué)會(huì)去運(yùn)用,要舉一反三。現(xiàn)在終于深刻的了解了這句話。經(jīng)過這次的課程設(shè)計(jì),發(fā)現(xiàn)書本上很深?yuàn)W的知識(shí)變的更為簡單,同樣,對(duì)C程序原理也了有更深的理解。知道和理解了該理論在計(jì)算機(jī)中是怎樣執(zhí)行的, 對(duì)該理論在實(shí)踐中的應(yīng)用有深刻的理解 。通過該課程設(shè)計(jì),把死板的課本知識(shí)變得生動(dòng)有趣,激發(fā)了學(xué)習(xí)的積極性。能夠把課堂上學(xué)的知識(shí)通過自己設(shè)計(jì)的程序表示出來,加深了對(duì)理論知識(shí)的理解。課程設(shè)計(jì)中程序比較復(fù)雜,在調(diào)試時(shí)應(yīng)該仔細(xì),在程序調(diào)試時(shí),注意指針,將不必要的命令去除。除了課堂外,課程設(shè)計(jì)是最能學(xué)到東西的,最考驗(yàn)人的。在做課程設(shè)計(jì)的這段時(shí)間,時(shí)刻都感到自己學(xué)的知識(shí)有多么的貧瘠。經(jīng)過這次課程設(shè)計(jì),讓我們對(duì)C+這門語言有了更深的認(rèn)識(shí),操作能力有了提高要想是寫出的代碼能運(yùn)行,需要耐心細(xì)心,毅力以及充沛的體力。只有經(jīng)過多次編輯,多次編譯,再多次運(yùn)行,才能編寫出更好的程序,有時(shí)候需要多次的更正才能達(dá)到所要的運(yùn)行結(jié)果。在編寫本程序時(shí),在網(wǎng)上尋找的參考程序起到了很大的啟發(fā)與參考作用。六、參考文獻(xiàn)1、C語言程序設(shè)計(jì).譚浩強(qiáng)版2、C語言上機(jī)指導(dǎo)3、Microsoft Visual C+ 6.0指南4、附:在編寫本程序時(shí),在網(wǎng)上尋找的參考程序起到了很大的啟發(fā)與參考作用。七、附錄 源程序清單源程序清單#include#include#includestruct book/聲明BOOK類的所有變量int num;char bname50;char wname20;char press50;char sort50;int time;float price; struct book *next;struct book *creatbook();/創(chuàng)建鏈表struct book *addbook(struct book *head);/添加圖書int yanzheng(struct book *head,int m);/驗(yàn)證新添加的圖書編碼是否已存在void deletebook(struct book *head);/刪除圖書void fprint(struct book *head);/將鏈表寫入文件struct book *load();/從文件中讀取信息并建成鏈表void print_book(struct book *head);/將鏈表信息輸出void chaxun(struct book *head);/查詢圖書信息void wname_chaxun(struct book *head);/按作者名查詢圖書void bname_chaxun(struct book *head);/按圖書名查詢圖書void xiugai(struct book *head);/修改圖書信息int main() 本代碼由 小 組設(shè)計(jì) int choice,n,x,y=1,c,c1=317;/choice 選擇進(jìn)入哪項(xiàng)功能:對(duì)圖書的增刪改查char a,d,b10,b110=317;struct book *head=NULL;/聲明一個(gè)新的book類while(y)/實(shí)現(xiàn) 登錄 退出系統(tǒng) 這兩個(gè)選項(xiàng) 在輸入口令錯(cuò)誤時(shí)產(chǎn)生的循環(huán)system(cls);/清屏printf(|=|n); printf(| 歡迎進(jìn)入 |n); printf(| 蘭州交通大學(xué)圖書管理系統(tǒng) |n);printf(|=|n); printf(| 請(qǐng)輸入選項(xiàng)(0-1) |n); printf(|=|n);printf(| 1-用戶登錄 |n);printf(| 0-退出系統(tǒng) |n);printf(|=|nn);printf( 請(qǐng)輸入您的選擇:);scanf(%d,&n);/讀取選項(xiàng) 0/1printf(n);getchar();/從stdio流中讀字符switch(n)/進(jìn)入選擇case 0:y=0;break;case 1: printf( 請(qǐng)輸入您的用戶名:); gets(b);/獲取輸入的字符 將字符賦值為b printf(n); printf( 請(qǐng)輸入您的密碼:); scanf(%d,&c); printf(n); if(strcmp(b,b1)!=0|c!=c1)/strcmp比較功能 b1 c1 之前賦值為317 317 只要?jiǎng)傒斎氲腷 與 c 存在不等于317 printf( 驗(yàn)證失敗,請(qǐng)重新輸入!n); scanf(%c,&d); getchar(); system(cls); else printf( 驗(yàn)證通過!請(qǐng)按Enter鍵進(jìn)入!n); scanf(%c,&d); getchar(); x=1; while(x) system(cls); 本代碼由朱 斌設(shè)計(jì) printf( - n); printf( 蘭州交通大學(xué)圖書信息管理系統(tǒng) n); printf( - n); printf(*n);printf(| 請(qǐng)輸入選項(xiàng)(0-6) |n); printf(*n); printf(| 1-添加圖書 2-刪除圖書 |nn); printf(| 3-信息瀏覽 4-信息查詢 |nn); printf(| 5-修改圖書 6-創(chuàng)建圖書 |nn); printf(| 0-退出系統(tǒng) |n); printf(*n); printf(請(qǐng)輸入所選擇的序號(hào):); scanf(%d,&choice); getchar(); system(cls); switch(choice)/選擇進(jìn)入哪項(xiàng)功能:對(duì)圖書的增刪改查 case 0: x=0;break; case 1: head=load();/鏈頭尾節(jié)點(diǎn)一致相同 即文件為空 if(head=NULL) printf(文件為空,請(qǐng)先錄入數(shù)據(jù)!n); getchar(); break; else head=addbook(head);/鏈表的表頭與新加入的內(nèi)容相同 即添加成功 printf(添加成功!n); printf(是否將新信息保存到文件?(y/n)n); scanf(%c,&a); getchar(); switch(a) case n: break; case y: fprint(head); printf(保存成功!n); getchar(); break; break; case 2: head=load();/鏈頭尾節(jié)點(diǎn)一致 即文件為空 if(head=NULL) printf(文件為空,請(qǐng)先錄入數(shù)據(jù)!n); getchar(); break; else deletebook(head);/執(zhí)行刪除 getchar(); break; break; case 3: head=load(); if(head=NULL)/鏈頭尾節(jié)點(diǎn)一致 即文件為空 printf(文件為空,請(qǐng)先錄入數(shù)據(jù)!n); getchar(); break; else print_book(head);/執(zhí)行瀏覽 getchar(); break; case 4: head=load(); if(head=NULL)/鏈頭尾節(jié)點(diǎn)一致 即文件為空 printf(文件為空,請(qǐng)先錄入數(shù)據(jù)!n); getchar(); break; else chaxun(head);/執(zhí)行查詢 getchar(); break; case 5: head=load(); if(head=NULL)/鏈頭尾節(jié)點(diǎn)一致 即文件為空 printf(文件為空,請(qǐng)先錄入數(shù)據(jù)!n); getchar(); break; else xiugai(head);/執(zhí)行修改 getchar(); break; break; case 6: printf(注意:輸入圖書編碼為0時(shí)結(jié)束!n); head=creatbook();/找到相同信息 詢問是否替換 printf(是否將輸入的信息保存到文件以覆蓋文件中已存在的信息?(y/n)n); getchar(); scanf(%c,&a); getchar(); switch(a) case n: break; case y: fprint(head);/將鏈表寫入文件 printf(保存成功!n); getchar(); break; break; default: printf(您的輸入有誤,請(qǐng)重新輸入!n); getchar(); break;break;default:printf( 您的輸入有誤! 請(qǐng)重新輸入!n);getchar();break; 本代碼由周 勇和王文模設(shè)計(jì) /錄入數(shù)據(jù)并形成鏈表struct book *creatbook()struct book *head,*tail,*p;/聲明數(shù)據(jù)鏈表int num,time,n;char bname50,wname20,press50,sort50;float price;int size=sizeof(struct book);head=tail=NULL;printf(請(qǐng)輸入圖書編號(hào):);scanf(%d,&num); printf(請(qǐng)輸入圖書名:); scanf(%s,bname);getchar(); printf(請(qǐng)輸入作者名:); scanf(%s,wname);getchar(); printf(請(qǐng)輸入出版社:); scanf(%s,press);getchar();printf(請(qǐng)輸入類別:); scanf(%s,sort);getchar(); printf(請(qǐng)輸入出版時(shí)間:); scanf(%d,&time);getchar(); 從鍵盤中輸入一個(gè)值 printf(請(qǐng)輸入價(jià)格:); scanf(%f,&price);getchar();while(1) p=(struct book *)malloc(size);p-num=num;strcpy(p-bname,bname);/賦值 把后者復(fù)制給前者strcpy(p-wname,wname);/賦值 把后者復(fù)制給前者strcpy(p-press,press);/賦值 把后者復(fù)制給前者strcpy(p-sort,sort);/賦值 把后者復(fù)制給前者p-time=time;p-price=price;p-next=NULL;if(head=NULL)head=p;elsetail-next=p;/賦值 將地址付給下一個(gè) 形成鏈tail=p;do printf(請(qǐng)輸入圖書編號(hào):); scanf(%d,&num);n=yanzheng(head,num);/驗(yàn)證添加的圖書編號(hào)是否已存在if(n=0)break;elseprintf(您輸入的編號(hào)已存在,請(qǐng)重新輸入!n);while(1);if(num=0)break;else printf(請(qǐng)輸入圖書名:);scanf(%s,bname);getchar();printf(請(qǐng)輸入作者名:);scanf(%s,wname);getchar();printf(請(qǐng)輸入出版社:);scanf(%s,press);getchar();printf(請(qǐng)輸入類別:);scanf(%s,sort);getchar();printf(請(qǐng)輸入出版時(shí)間:);scanf(%d,&time);getchar();printf(請(qǐng)輸入價(jià)格:);scanf(%f,&price);getchar();return head;int yanzheng(struct book *head,int m)struct book *p;p=head;while(p!=NULL)if(p-num=m)break;p=p-next;if(p=NULL)return 0;elsereturn 1;/將新鏈表寫入文件中void fprint(struct book *head)FILE *fp;char ch=1;struct book *p1;if(fp=fopen(f1.txt,w)=NULL)/字符IO流printf(File open error!n);exit(0);fputc(ch,fp);/將字符ch寫到文件指針fp所指向的文件的當(dāng)前寫指針的位置for(p1=head;p1;p1=p1-next)/依次寫入fprintf(fp,%d %s %s %s %s %d %fn,p1-num,p1-bname,p1-wname,p1-press,p1-sort,p1-time,p1-price);fclose(fp);/關(guān)閉 釋放內(nèi)存 本代碼由閆 鵬設(shè)計(jì) /從文件中讀取圖書信息struct book *load()FILE *fp;char ch;struct book *head,*tail,*p1;head=tail=NULL;/鏈表初始化if(fp=fopen(f1.txt,r)=NULL)printf(File open error!n);exit(0);ch=fgetc(fp);/意為從文件指針fp指向的文件中讀取一個(gè)字符 讀取一個(gè)字節(jié)后 光標(biāo)位置后移一個(gè)字節(jié)if(ch=1) while(!feof(fp)/檢測(cè)fp流上的文件結(jié)束符 p1=(struct book *)malloc(sizeof(struct book);fscanf(fp,%d%s%s%s%s%d%fn,&p1-num,p1-bname,p1-wname,p1-press,p1-sort,&p1-time,&p1-price); if(head=NULL) head=p1; else tail-next=p1; tail=p1; tail-next=NULL; fclose(fp); return head;elsereturn NULL;/將整個(gè)鏈表的信息輸出void print_book(struct book *head)struct book *ptr;if(head=NULL)printf(n沒有信息!n);return;printf( 圖書信息列表如下n);printf(=n);printf( 編號(hào) 圖書名 作者名 出版社 類別 出版時(shí)間 價(jià)格n);for(ptr=head;ptr;ptr=ptr-next)/依次輸出printf( %d %s %s %s %s %d %.2fn,ptr-num,ptr-bname,ptr-wname,ptr-press,ptr-sort,ptr-time,ptr-price);printf(=n); 本代碼由張旭東設(shè)計(jì) /刪除圖書信息void deletebook(struct book *head)int a;char b,ch=1;struct book *p1,*p2;FILE *fp;printf(請(qǐng)輸入要?jiǎng)h除的圖書編號(hào):);scanf(%d,&a); p1=head; if(p1-num=a&p1-next=NULL)/當(dāng)文件中只有一組數(shù)據(jù)printf(是否清空文件!(y/n)n);getchar();scanf(%c,&b);getchar();switch(b)case n:break;case y: if(fp=fopen(f1.txt,w)=NULL)/重新寫入 printf(File open error!n); exit(0); fclose(fp);printf(文件已清空!n);else while(p1-num!=a&p1-next!=NULL)/當(dāng)文件中不只有一組數(shù)據(jù) p2=p1; p1=p1-next; if(p1-next=NULL) if(p1-num=a) p2-next=NULL; printf(是否確定從文件中徹底刪除該圖書?(y/n)n); getchar(); scanf(%c,&b); switch(b) case n: break; case y: fprint(head); printf(刪除成功!n); getchar(); break; else printf(沒有找到要?jiǎng)h除的數(shù)據(jù)!n); getchar(); else if(p1=head) head=p1-next; printf(是否確定從文件中徹底刪除該圖書?(y/n)n); getchar(); scanf(%c,&b); switch(b) case n: break; case y: fprint(head); printf(刪除成功!n); getchar(); break; else p2-next=p1-next; printf(是否確定從文件中徹底刪除該圖書?(y/n)n); getchar(); scanf(%c,&b); switch(b) case n: break; case y: fprint(head); printf(刪除成功!n); getchar(); break; 本代碼由王文模設(shè)計(jì) /圖書查詢void chaxun(struct book *head)int a;printf( -n);printf( 蘭州交通大學(xué)圖書信息管理系統(tǒng)n); printf( -nn);printf(=n); printf(| 請(qǐng)輸入選項(xiàng)(0-2) |n);printf(=n);printf(| 1-按圖書名查詢 |n);printf(| 2-按作者名查詢 |n);printf(| 0-退出查詢 |n);printf(=n);printf(請(qǐng)輸入所選擇的編號(hào):);scanf(%d,&a);getchar();switch(a)case 0:break;case 1:bname_chaxun(head);/進(jìn)入按照書名查詢break;case 2:wname_chaxun(head);/進(jìn)入按照作者查詢break;default:printf(您的輸入有誤!n);break;/按圖書名查詢圖書信息void bname_chaxun(struct book *head)char a50;int flag=0;struct book *p; printf(請(qǐng)選擇您要查詢的圖書名:);gets(a);p=head;while(p!=NULL)if(strcmp(p-bname,a)=0)/比較 如果輸入的a與已有信息存在有相符的 進(jìn)入循環(huán)flag=1;break;p=p-next; if(flag=0)/如果輸入的a與已有信息沒有相符的 flag的值不改變printf(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論