C語(yǔ)言程序設(shè)計(jì)圖書(shū)信息管理系統(tǒng)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)圖書(shū)信息管理系統(tǒng)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)圖書(shū)信息管理系統(tǒng)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)圖書(shū)信息管理系統(tǒng)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)圖書(shū)信息管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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、程序設(shè)計(jì)基礎(chǔ)(C)課程設(shè)計(jì)報(bào)告圖書(shū)信息管理系統(tǒng)學(xué) 生 姓 名: 朱斌 學(xué) 號(hào): 201211354 班 級(jí): 電力工程與管理1201班指 導(dǎo) 老 師: 鄧偉華 日 期: 蘭州交通大學(xué)新能源與動(dòng)力工程學(xué)院C語(yǔ)言課程設(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) 圖書(shū)信息包括:登錄號(hào)、書(shū)名、作者名、分類號(hào)、出版單位、出版時(shí)間、價(jià)格等。設(shè)計(jì)的圖書(shū)信息管理系統(tǒng),應(yīng)當(dāng)具備能提供以下功能:1、系統(tǒng)以菜單方式工作2、圖書(shū)信息錄入功能輸入3、圖書(shū)信息瀏覽功能輸出4、圖書(shū)信息查詢功能算法(查詢方式:1按書(shū)名查詢.2.按作者名查詢)5、圖書(shū)

2、信息的刪除與修改二、總體設(shè)計(jì)1.程序設(shè)計(jì)組成框圖圖書(shū)信息管理系統(tǒng)系統(tǒng)登錄模塊菜單選擇模塊圖書(shū)信息錄入模塊圖書(shū)信息瀏覽模塊圖書(shū)信息查詢模塊圖書(shū)信息修改模塊設(shè)計(jì):朱斌設(shè)計(jì):周勇設(shè)計(jì):閆鵬設(shè)計(jì):張旭東設(shè)計(jì):楊國(guó)崢設(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ù),然后提示用戶通過(guò)鍵盤(pán)對(duì)輸入管理員賬戶及密碼。3)函數(shù)調(diào)用關(guān)系:被主函數(shù)

3、調(diào)用。由switch()開(kāi)關(guān)結(jié)構(gòu)中進(jìn)入,并在文中無(wú)返回值的空值void函數(shù)。4)函數(shù)的出口:  當(dāng)驗(yàn)證失敗,提示重新輸入。當(dāng)驗(yàn)證成功,通過(guò)“ENTER”鍵,跳出switch()開(kāi)關(guān)函數(shù),進(jìn)入菜單功能模塊,繼續(xù)執(zhí)行選擇結(jié)構(gòu)。程序流程圖: 圖書(shū)登錄系統(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)用。并在文中無(wú)返回

4、值的空值void函數(shù)。4)函數(shù)的出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)。圖書(shū)管理系統(tǒng)添加圖書(shū)刪除圖書(shū)信息瀏覽信息查詢修改圖書(shū)創(chuàng)建圖書(shū)退出管理系統(tǒng)開(kāi)始輸入n,判斷是否06?輸入n,調(diào)用各個(gè)模塊的函數(shù)結(jié)束YN主函數(shù)的流程圖菜單界面3.修改與刪除模塊(f3()) 本函數(shù)由 王文模 設(shè)計(jì)圖書(shū)刪除1)函數(shù)功能:利用while循環(huán)和 if 語(yǔ)句和scanf getchar search change del 函數(shù),完成對(duì)圖書(shū)信息(分類名 出版單位 出版時(shí)間 價(jià)格)的修改和刪除2) 函數(shù)入口:從主函數(shù)main()中的system("cls"); /*清

5、屏命令*/menu(); /*菜單函數(shù)提示用戶怎樣選擇*/進(jìn)入函數(shù),這是直接被主函數(shù)main()調(diào)用的。3) 調(diào)用關(guān)系:void change(int x)是改變圖書(shū)信息,它里面又調(diào)用了 book_search();4) 函數(shù)出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)。程序框架圖 圖書(shū)修改該模塊實(shí)現(xiàn)按照用戶需求,將需要修改的圖書(shū)名輸入,進(jìn)行for循環(huán)查找是否有此書(shū),若無(wú),則顯示未找到,退出,若有,則顯示輸入新的圖書(shū)信息,開(kāi)始輸入修改的信息,進(jìn)行for循環(huán)開(kāi)始錄入,替換原文件信息結(jié)束顯示“修改成功” 圖書(shū)修改界面 圖書(shū)刪除界面4.圖書(shū)信息瀏覽(f4()) 本函數(shù)由 張旭東&

6、#160;設(shè)計(jì)1) 函數(shù)的功能: 顯示圖書(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)用。并在文中無(wú)返回值的空值void函數(shù)。4)函數(shù)的出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)??蚣軋D 圖書(shū)瀏覽流程圖圖書(shū)瀏覽5. 圖書(shū)查詢 本函數(shù)由楊國(guó)崢設(shè)計(jì)1)函數(shù)的功能: 按著書(shū)名查詢與作者名查詢,輸

7、出排序結(jié)果。 2)函數(shù)的入口: 程序從main()的while()開(kāi)關(guān)結(jié)構(gòu)中進(jìn)入,即choice的值為4時(shí)進(jìn)入該函數(shù),開(kāi)始進(jìn)入該函數(shù),進(jìn)入函數(shù)后,首先打開(kāi)文件,然后利用“printf()”選擇按書(shū)名查詢與作者名查詢,若flag=1或flag=2則有此書(shū)。若flag=0則無(wú)此書(shū),并退出查詢。3)函數(shù)調(diào)用關(guān)系:被主函數(shù)調(diào)用。由while()開(kāi)關(guān)結(jié)構(gòu)中進(jìn)入,并在文中無(wú)返回值的空值void函數(shù)。4)函數(shù)的出口: 當(dāng)輸出查詢結(jié)果用printf()標(biāo)準(zhǔn)輸出到屏幕上,然后結(jié)束該函數(shù),而執(zhí)行主函數(shù)main()中“break;”跳出while()開(kāi)關(guān)函數(shù),繼續(xù)執(zhí)行if選擇結(jié)構(gòu)。圖書(shū)信息查詢按書(shū)名查詢(1)EXI

8、T(0)按作者名查詢(2)04信息查詢輸入a,判斷a是否為02?a=0,退出回到主菜單a=1,則調(diào)用search-by-name按書(shū)名查詢輸入書(shū)名,若有此書(shū)則輸出此書(shū)信息,若沒(méi)有,則輸出file open error!沒(méi)有,則輸出file open error!a=2,則調(diào)用search-by-writer按作者名查詢輸入作者名,若有此書(shū)則輸出此書(shū)信息若沒(méi)有,則輸出file open error按圖書(shū)名查詢按作者名查詢 6.輸入模塊 本函數(shù)由 閆 鵬 設(shè)計(jì)1) 函數(shù)的功能:利用for循環(huán)語(yǔ)句和scanf、gets、getchar函數(shù)完成對(duì)結(jié)構(gòu)數(shù)組的輸入,存放圖書(shū)信息(圖書(shū)編號(hào)、圖書(shū)名、作者名、

9、出版社、類別、出版時(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)用。并在文中無(wú)返回值的空值void函數(shù)。4) 函數(shù)的出口:執(zhí)行完所有的printf()函數(shù)后自動(dòng)退出該函數(shù)。程序框架圖:錄入數(shù)據(jù)請(qǐng)輸入圖書(shū)編號(hào)請(qǐng)輸入圖書(shū)名請(qǐng)輸入作者名請(qǐng)輸入出版社請(qǐng)輸入類別請(qǐng)輸入出版時(shí)間請(qǐng)輸入價(jià)格圖書(shū)信息輸入四、調(diào)試與測(cè)試調(diào)試方法:打開(kāi)Microsoft Visual C+ 6.0,先將各個(gè)功能函數(shù)的的內(nèi)容清空,只保留

10、主函數(shù)main(),然后編譯檢驗(yàn)main()函數(shù)中是否有錯(cuò),如果沒(méi)有錯(cuò)誤,再連接、運(yùn)行。確認(rèn)main()函數(shù)一切無(wú)誤后,然后加入功能函數(shù)menu()函數(shù)與f1()函數(shù),由于menu()函數(shù)比較簡(jiǎn)單,所以與f1()函數(shù)一起進(jìn)行調(diào)試,f1()函數(shù)中主要注意讀取文件,與寫(xiě)入文件,這都是二進(jìn)制的形式。若menu()函數(shù)與f1()函數(shù)編譯、連接、運(yùn)行沒(méi)問(wèn)題,繼續(xù)加入f2()函數(shù),就這樣的方法依次檢查調(diào)試f3()函數(shù)、f4()函數(shù)。當(dāng)所有的功能函數(shù)都加上且正確無(wú)誤時(shí),就可以進(jìn)入下一個(gè)環(huán)節(jié)程序的測(cè)試。測(cè)試方法: 運(yùn)行程序,然后進(jìn)入銷(xiāo)售管理系統(tǒng)的界面,在這里需要做的就是把自己當(dāng)成一個(gè)公司的程序使用者,來(lái)對(duì)該程

11、序進(jìn)行使用,看該程序有哪些方面用著不夠爽,把這些問(wèn)題依次整理出來(lái),再對(duì)源程序進(jìn)行修改,在這個(gè)過(guò)程中也需要對(duì)程序進(jìn)行調(diào)試,不過(guò)不必將各個(gè)功能函數(shù)的的內(nèi)容清空再進(jìn)行如上述的調(diào)試方法,而是,改一部份運(yùn)行一次,看是否有無(wú)。如f1()函數(shù)有誤,則先修改f1()函數(shù),一塊一塊的進(jìn)行修改,就是遵循C語(yǔ)言的模塊化設(shè)計(jì)原理,若所有的都改過(guò)來(lái)了,且運(yùn)行無(wú)誤,那就大功告成了。在調(diào)試中遇到的問(wèn)題:在調(diào)試過(guò)程中,我們遇到諸多小問(wèn)題,但都在我們共同討論后解決了。1、問(wèn)題:標(biāo)點(diǎn)符號(hào)在輸入的時(shí)候,使用的是中文輸入法,這種錯(cuò)誤一般都難以發(fā)現(xiàn),讓修改的時(shí)候找不到目標(biāo)。解決方法:用“替換”。如果程序中的error很多,不管erro

12、r是什么,先將標(biāo)點(diǎn)替換成英文的標(biāo)點(diǎn)。2、問(wèn)題:調(diào)試時(shí),有的時(shí)候編譯后沒(méi)什么問(wèn)題,就是在點(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、圖書(shū)信息錄入功能輸入3、圖書(shū)信息瀏覽功能輸出4、圖書(shū)信息查詢功能算法(查詢方式:1按書(shū)名查詢.2.按作者名查詢)5、圖書(shū)信息的刪除與修改B、其中遇到了以下問(wèn)題:不能清晰的建立設(shè)計(jì)模塊,不會(huì)修改

13、出現(xiàn)的錯(cuò)誤等等。解決方案:向同學(xué)尋求幫助,向他們學(xué)習(xí),最終通過(guò)自己努力建立了模塊。不可避免地程序中肯定依然存在者某些問(wèn)題在應(yīng)用中不斷提高自己的能力,攻克遇到的困難。C、該程序的不足:函數(shù)較復(fù)雜,界面不美觀。D、實(shí)踐心得經(jīng)過(guò)一個(gè)多星期的編譯原理課程設(shè)計(jì),在我們一組的共同的努力下,順利完成該課程設(shè)計(jì)。通過(guò)該課程設(shè)計(jì),掌握了編譯程序工作的基本過(guò)程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過(guò)程及其相關(guān)的技術(shù),對(duì)課本上的知識(shí)也有了更深的理解。老師常說(shuō),課本上的知識(shí)是機(jī)械的,表面的,要學(xué)會(huì)去運(yùn)用,要舉一反三。現(xiàn)在終于深刻的了解了這句話。經(jīng)過(guò)這次的課程設(shè)計(jì),發(fā)現(xiàn)書(shū)本上很深?yuàn)W的知識(shí)變

14、的更為簡(jiǎn)單,同樣,對(duì)C程序原理也了有更深的理解。知道和理解了該理論在計(jì)算機(jī)中是怎樣執(zhí)行的, 對(duì)該理論在實(shí)踐中的應(yīng)用有深刻的理解 。通過(guò)該課程設(shè)計(jì),把死板的課本知識(shí)變得生動(dòng)有趣,激發(fā)了學(xué)習(xí)的積極性。能夠把課堂上學(xué)的知識(shí)通過(guò)自己設(shè)計(jì)的程序表示出來(lái),加深了對(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)過(guò)這次課程設(shè)計(jì),讓我們對(duì)C+這門(mén)語(yǔ)言有了更深的認(rèn)識(shí),操作能力有了提高要想是寫(xiě)出的代碼能運(yùn)行,需要耐心細(xì)心,毅力以及充沛的體力。只有經(jīng)過(guò)

15、多次編輯,多次編譯,再多次運(yùn)行,才能編寫(xiě)出更好的程序,有時(shí)候需要多次的更正才能達(dá)到所要的運(yùn)行結(jié)果。在編寫(xiě)本程序時(shí),在網(wǎng)上尋找的參考程序起到了很大的啟發(fā)與參考作用。六、參考文獻(xiàn)1、C語(yǔ)言程序設(shè)計(jì).譚浩強(qiáng)版2、C語(yǔ)言上機(jī)指導(dǎo)3、Microsoft Visual C+ 6.0指南4、附:在編寫(xiě)本程序時(shí),在網(wǎng)上尋找的參考程序起到了很大的啟發(fā)與參考作用。七、附錄 源程序清單源程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>struct book/聲明BOOK類的所有變量int num;char bnam

16、e50;char wname20;char press50;char sort50;int time;float price; struct book *next;struct book *creatbook();/創(chuàng)建鏈表struct book *addbook(struct book *head);/添加圖書(shū)int yanzheng(struct book *head,int m);/驗(yàn)證新添加的圖書(shū)編碼是否已存在void deletebook(struct book *head);/刪除圖書(shū)void fprint(struct book *head);/將鏈表寫(xiě)入文件struct boo

17、k *load();/從文件中讀取信息并建成鏈表void print_book(struct book *head);/將鏈表信息輸出void chaxun(struct book *head);/查詢圖書(shū)信息void wname_chaxun(struct book *head);/按作者名查詢圖書(shū)void bname_chaxun(struct book *head);/按圖書(shū)名查詢圖書(shū)void xiugai(struct book *head);/修改圖書(shū)信息int main() 本代碼由 小 組 設(shè)計(jì) int choice,n,x,y=1,c,c1=317;/choice 選

18、擇進(jìn)入哪項(xiàng)功能:對(duì)圖書(shū)的增刪改查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é)圖書(shū)管理系統(tǒng) |n");printf("|=|n"); printf("| 請(qǐng)輸入選項(xiàng)(0-1) |n&

19、quot;); 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)輸入您的用戶名:&qu

20、ot;); 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(&q

21、uot;cls"); else printf(" 驗(yàn)證通過(guò)!請(qǐng)按Enter鍵進(jìn)入!n"); scanf("%c",&d); getchar(); x=1; while(x) system("cls"); 本代碼由 朱 斌 設(shè)計(jì) printf(" - n"); printf(" 蘭州交通大學(xué)圖書(shū)信息管理系統(tǒng) n"); printf(" - n"); printf("*n");printf("| 請(qǐng)輸入選項(xiàng)(0-

22、6) |n"); printf("*n"); printf("| 1-添加圖書(shū) 2-刪除圖書(shū) |nn"); printf("| 3-信息瀏覽 4-信息查詢 |nn"); printf("| 5-修改圖書(shū) 6-創(chuàng)建圖書(shū) |nn"); printf("| 0-退出系統(tǒng) |n"); printf("*n"); printf("請(qǐng)輸入所選擇的序號(hào):"); scanf("%d",&choice); getchar(); syst

23、em("cls"); switch(choice)/選擇進(jìn)入哪項(xiàng)功能:對(duì)圖書(shū)的增刪改查 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(&qu

24、ot;%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;

25、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; c

26、ase 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("注意:輸入圖書(shū)編碼為0時(shí)結(jié)束!n"); head=creatbook();/找到相同信息 詢問(wèn)是否替換 printf("是否將輸入的信息保存到文件以覆蓋文件中已存在的信息?(y/n)n"); getchar(); scanf(&

27、quot;%c",&a); getchar(); switch(a) case 'n': break; case 'y': fprint(head);/將鏈表寫(xiě)入文件 printf("保存成功!n"); getchar(); break; break; default: printf("您的輸入有誤,請(qǐng)重新輸入!n"); getchar(); break;break;default:printf(" 您的輸入有誤! 請(qǐng)重新輸入!n");getchar();break; 本代碼由

28、0;周 勇和王文模 設(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)輸入圖書(shū)編號(hào):");scanf("%d",&num); printf("請(qǐng)輸入圖書(shū)名:"); scanf("%s&qu

29、ot;,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(); 從鍵盤(pán)中

30、輸入一個(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-&g

31、t;price=price;p->next=NULL;if(head=NULL)head=p;elsetail->next=p;/賦值 將地址付給下一個(gè) 形成鏈tail=p;do printf("請(qǐng)輸入圖書(shū)編號(hào):"); scanf("%d",&num);n=yanzheng(head,num);/驗(yàn)證添加的圖書(shū)編號(hào)是否已存在if(n=0)break;elseprintf("您輸入的編號(hào)已存在,請(qǐng)重新輸入!n");while(1);if(num=0)break;else printf("請(qǐng)輸入圖書(shū)名:&qu

32、ot;);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);

33、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;/將新鏈表寫(xiě)入文件中void fprint(struct book *head)FILE *fp;char ch='1's

34、truct book *p1;if(fp=fopen("f1.txt","w")=NULL)/字符IO流printf("File open error!n");exit(0);fputc(ch,fp);/將字符ch寫(xiě)到文件指針fp所指向的文件的當(dāng)前寫(xiě)指針的位置for(p1=head;p1;p1=p1->next)/依次寫(xiě)入fprintf(fp,"%d %s %s %s %s %d %fn",p1->num,p1->bname,p1->wname,p1->press,p1->sor

35、t,p1->time,p1->price);fclose(fp);/關(guān)閉 釋放內(nèi)存 本代碼由 閆 鵬 設(shè)計(jì) /從文件中讀取圖書(shū)信息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è)字符 讀

36、取一個(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; ta

37、il=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沒(méi)有信息!n");return;printf(" 圖書(shū)信息列表如下n");printf("=n");printf(" 編號(hào) 圖書(shū)名 作者名 出版社 類別 出版時(shí)間 價(jià)格n");for(ptr=head;ptr;ptr=

38、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ì) /刪除圖書(shū)信息void deletebook(struct book *head)int a;char b,ch='1'struct book *p1,*p2;FILE *fp;

39、printf("請(qǐng)輸入要?jiǎng)h除的圖書(shū)編號(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&quo

40、t;)=NULL)/重新寫(xiě)入 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("是否確定從文件中徹底刪除該圖書(shū)?(y/n)n"); getchar();

41、 scanf("%c",&b); switch(b) case 'n': break; case 'y': fprint(head); printf("刪除成功!n"); getchar(); break; else printf("沒(méi)有找到要?jiǎng)h除的數(shù)據(jù)!n"); getchar(); else if(p1=head) head=p1->next; printf("是否確定從文件中徹底刪除該圖書(shū)?(y/n)n"); getchar(); scanf("%c&q

42、uot;,&b); switch(b) case 'n': break; case 'y': fprint(head); printf("刪除成功!n"); getchar(); break; else p2->next=p1->next; printf("是否確定從文件中徹底刪除該圖書(shū)?(y/n)n"); getchar(); scanf("%c",&b); switch(b) case 'n': break; case 'y': fprin

43、t(head); printf("刪除成功!n"); getchar(); break; 本代碼由 王文模 設(shè)計(jì) /圖書(shū)查詢void chaxun(struct book *head)int a;printf(" -n");printf(" 蘭州交通大學(xué)圖書(shū)信息管理系統(tǒng)n"); printf(" -nn");printf("=n"); printf("| 請(qǐng)輸入選項(xiàng)(0-2) |n");printf("=n");printf("

44、;| 1-按圖書(shū)名查詢 |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)入按照書(shū)名查詢break;case 2:wname_chaxun(head);/進(jìn)入按照作者查詢break;default:printf(

45、"您的輸入有誤!n");break;/按圖書(shū)名查詢圖書(shū)信息void bname_chaxun(struct book *head)char a50;int flag=0;struct book *p; printf("請(qǐng)選擇您要查詢的圖書(shū)名:");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與已有信息沒(méi)有相符的 flag的值不改變printf(&qu

46、ot;沒(méi)有找到該圖書(shū)名的圖書(shū)!n");else printf(" 你所查詢的圖書(shū)信息如下n");printf("=n");printf(" * 編號(hào) 圖書(shū)名 作者名 出版社 類別 出版時(shí)間 價(jià)格 *n"); while(p!=NULL)if(strcmp(p->bname,a)=0)printf("* %d %s %s %s %s %d %.2f*n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price); p=p->next; printf("=n&quo

溫馨提示

  • 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)論