




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/目錄1設計內容、任務及基本要求………21.1設計內容………………………21.2設計任務………………………21.3設計基本要求…………………22總體設計思路………………………42.1系統功能………………………42.2各個模塊之間的主要關系……………………42.3總體程序框圖…………………52.4系統的總體流程圖……………53功能模塊的具體設計………………73.1main<>函數模塊………………73.2查詢所有圖書信息函數模塊……………………83.3查詢一本圖書信息函數模塊……………………83.4添加圖書信息函數模塊…………93.5刪除圖書信息函數模塊…………103.6借閱圖書模塊……………………124功能模塊的調試與測試……………134.1主菜單運行界面…………………134.2查詢所有圖書信息模塊運行界面………………134.3查找某一本圖書信息模塊運行界面……………144.4添加圖書信息模塊運行界面……………………164.5刪除圖書信息模塊運行界面……………………174.6借閱圖書模塊信息運行界面……………………795總結……………………226致謝……………………237參考文獻………………249程序清單………………251.設計內容、任務以及基本要求1.1設計內容主要利用c語言的文件操作能力設計開發一個小型的圖書管信息管理系統,至少具有如下功能:查尋所有圖書信息、通過輸入圖書編號來完成查找某一本圖書信息、添加圖書信息、刪除圖書信息以及通過學生學號實現圖書借閱功能。操作界面要符合用戶的一般習慣,界面易于讀者明白理解,圖形或文本界面都可以。2設計任務要求:明確課程設計的目的,能根據課程設計的要求,查閱相關文獻,為完成設計準備必要的知識;提高學生用高級語言進行程序設計的能力,重點提高用C語言進行文件操作和繪圖應用的編程技術水平;初步了解軟件開發的一般方法和步驟;提高撰寫技術文檔的能力。掌握模塊化編程的基本方法與步驟;鞏固和加深學生對C語言課程基本知識的理解與掌握,培養學生利用C語言進行軟件操作的能力和技巧。1.3基本要求<1>通過提示菜單選擇可以進行的操作。<2>將圖書的信息存入文件中,并命名為BookInfo.txt。<3>將圖書借閱情況信息存入文件中,并命名為SendInfo.txt。<4>在本系統中可以進行管理系統包含的基本操作,其中包括a>查看所有圖書的信息。b>輸入一本圖書的圖書編號,從當前圖書中進行查找,如果找到則顯示該圖書的相關信息,如果沒有找到則給出提示信息。c>添加一本圖書的基本信息,通過輸入圖書編號,首先查找是否存在該圖書編號的圖書,如果存在則提示重新輸入,否則將該圖書按照順序插入到相應位置。d>刪除一本圖書的基本信息,通過輸入圖書編號,首先查找是否存在該圖書編號的圖書,如果存在則將該圖書刪除,否則給出提示信息,提示該圖書不存在。e>借閱一本圖書,需要給出學號和圖書編號,如果圖書編號不存在則重新輸入,直到輸入正確為止,并將學號和相應的圖書編號存入SendInfo.txt文件中。<5>圖書基本信息包括圖書編號、書名、作者、出版社和價錢這些簡單信息。<6>圖書信息文件中每一行存放一本圖書的信息。<7>借閱信息文件中每一行存放一本書的借閱情況。2 總體設計思路2.1系統功能圖書管理在生活中運用非常廣泛,因此需要用許多的程序來對它們進行管理。此程序包含了圖書信息的錄入、圖書信息的瀏覽、圖書的查詢和排序、圖書信息的刪除與修改,借書,還書,統計等。通過編譯一個C語言函數,其中包含一個主函數,多個子函數,主函數調用其余的子函數實現人們能夠簡易、快捷的了解并找到自己所學要的信息的功能。1、查詢所有圖書信息:將所有圖書信息包括編號、書名、出版社、作者、價格等顯示在屏幕上。2、查找一本圖書的信息:通過輸入圖書編號完成圖書信息的查找,并在屏幕上顯示。3、修改圖書信息:通過輸入編號,判斷此圖書是否存在,若不存在則提示用戶重新輸入圖書編號。4、刪除圖書信息:通過輸入編號,判斷此圖書是否存在,若存在,則提示用戶是否顯示刪除后的信息,若不存在則提示用戶重新輸入圖書編號。5、借書:通過輸入圖書編號,判斷此圖書是否存在,若不存在則提示用戶重新輸入圖書編號,若圖書已借出則提示用戶是否繼續借書,若沒借出則將此圖書的編號和學生的學號存入圖書借閱文件中。6、退出系統:返回主頁面。2.2各個模塊之間的主要關系圖書信息管理系統可劃分為5個模塊:查詢所有圖書模塊、查找一本圖書信息模塊、修改圖書信息模塊、刪除圖書信息模塊、借閱圖書模塊。各模塊之間均有著或多或少的聯系,比如:查找一本圖書信息模塊、修改信息模塊、刪除信息模塊、借閱圖書模塊都需要先判斷該圖書是否存在,然后再進行其它操作。理解了各模塊之間的主要關系有利于程序的設計與完成,使程序的層次結構清晰,便于程序的編寫、閱讀和調試。2.3總體程序框圖圖書館信息管理系統圖書館信息管理系統查詢所有圖書信息查找一本圖書的信息借閱圖書刪除圖書信息添加圖書信息退出系統圖2.1系統總框架圖2.4系統的總體流程圖開始開始編譯運行編譯運行mainmain打開文件打開文件數據讀入結構體中數據讀入結構體中執行執行選擇選擇調用不同函數調用不同函數圖2.2系統總流程圖3功能模塊的具體設計3.1main<>函數模塊根據圖書館信息管理系統的要求,可設計一個主函數,及定義多個用戶自定義函數。在主函數中定義全局變量,即是在函數外部定義的變量,其不屬于某一個函數,而屬于一個源程序文件,在整個程序內可以多次被引用。通過將switch語句與break語句聯合使用來實現多分支選擇結構程序的設計。運用fscanf語句在主函數中將文件中的內容賦給結構體變量,便于在自定義函數中對結構體的調用。具體如下:在主函數中定義一個存放圖書信息的結構體structlist{charnum[20];/*圖書編號*/charname[40];/*書名*/charauthor[40];/*作者*/charpublish[40];/*出版社*/doubleprice; /*價格*/};以及各函數的申明voidsearch_allinformation<structlistb[]>;/*查看全部圖書信息*/voidcheck_bookinformation<structlistb[]>;/*查找圖書信息*/voidadd_bookinformation<structlistb[]>;/*添加圖書信息*/voiddelete_bookinformation<structlistb[]>;/*刪除圖書信息*/voidborrow_book<structlistb[]>;/*借閱圖書*/ 通過將switch語句與break語句聯合使用來實現多分支選擇結構程序的設計。switch<choice1>{case1:search_allinformation<b>;break;case2:check_bookinformation<b>;break;case3:add_bookinformation<b>;break;case4:delete_bookinformation<b>;break;case5:borrow_book<b>;break;case0:break;}3.2查詢所有圖書信息函數模塊voidsearch_allinformation<structlistb[]>通過printf<>語句將所有的圖書信息包括包括編號、書名、出版社、作者、價格等信息顯示在屏幕上。運用for語句加printf<>實現圖書信息的循環輸出顯示。3.3查詢一本圖書信息函數模塊voidcheck_bookinformation<structlistb[]>用戶先輸入圖書編號后,先用strcmp<s1,s2>函數進行比較兩個字符串數組的大小,從而查找出該圖書是否存在,若不存在則提示用戶是否要繼續查找,運用switch語句,若繼續則再次調用函數本身進行第二次查找,直到找到為止,若否則結束循環,不再進行查找。通過將switch語句與break語句聯合使用來實現多分支選擇結構程序的設計。運用fscanf語句在主函數中將文件中的內容賦給結構體。其主要流程圖如下:輸入圖書編號輸入圖書編號查找編號是否存在存在顯示該圖書信息不存在在提示是否繼續查找是開始關鍵代碼:strcmp<比較字符串>case….break<判斷>printf〔輸出信息switch<實現選擇功能分支>3.4添加圖書信息函數模塊voidadd_bookinformation<structlistb[]>輸入圖書的基本信息包括編號、書名、出版社、作者、價格,由于原有的圖書信息是按照編號的大小順序排列的,所以只需運用for循環和strcmp函數找出輸入的圖書應該插入的位置,再將所添加的圖書信息插入即可。其主要流程圖如下:輸入圖書相關信息輸入圖書相關信息提示是否顯示添加后的信息是打開文件,重新寫入圖書信息否結束開始關鍵代碼:printf<輸出信息>scanf<輸入信息>switch〔實現多分支結構程序設計case-break〔實現功能的選擇3.5刪除圖書信息函數模塊voiddelete_bookinformation<structlistb[]>用戶輸入所要刪除的圖書編號,先查找該圖書編號是否存在,若存在,這提示用戶是否要顯示刪除后的信息,若不存在則提示重新輸入。輸入編號打開文件,查找存在在文件中輸入新的信息輸入編號打開文件,查找存在在文件中輸入新的信息不存在給出相應的提示結束開始switch〔實現多分支結構程序設計if〔條件選擇3.6借閱圖書模塊voidborrow_book<structlistb[]>用戶先輸入所借圖書的編號,調用函數查找該圖書有沒有借出,若已借出,則提示用戶該圖書已借出,并提示用戶是否繼續借閱其他書籍。若繼續,則繼續進行新的查找。輸入圖書編號輸入圖書編號在文件中查找是否存在存在提示輸入學號將學號、編號存入新的文件中不存在提示是否繼續借閱是否結束開始關鍵代碼:if-else〔實現分支選擇getchar〔從鍵盤上輸入一個字符goto〔使程序的執行流程直接轉接到標號對應的那條語句strcmp〔比較兩個字符串的大小4功能模塊的調試及測試 4.1主菜單運行界面圖4.1主菜單運行界面圖4.2查詢所有圖書信息模塊運行界面按1操作查詢所有圖書信息,<1>打開源程序,編譯程序,單擊Compile按鈕,出現錯誤,如圖:<2>錯誤均指向55行,經檢查發現調用函數時調用的是整個結構體,而非某一個,所以應該為search_allinformation<b>.<3>改正后重新運行,即的如下所示的界面如下:圖4.2查詢所有圖書信息模塊界面4.3查找某一本圖書信息模塊運行界面按2選擇按書名查詢某一本圖書信息,若圖書編號存在則界面如下:圖4.3按編號查詢圖書信息界面若圖書編號不存在,<1>輸入y,沒有進行繼續查找的操作<2>調試程序,可查出輸入的y對程序無影響,由于輸入的是一個字符,而"\0”本身也是一個字符,則可將scanf<"%s",&a>改為getchar<>即可。該后圖4.4圖書編號查詢圖書界面4.4添加圖書信息模塊運行界面按3選擇,輸入編號,界面如下:圖4.5按圖書編號添加圖書界面4.5刪除圖書信息模塊運行界面按4選擇,輸入編號,如果編號不存在,界面如下:圖4.6按圖書編號刪除圖書界面如果編號存在,界面如下:圖4.7按圖書編號刪除圖書界面4.6借閱圖書模塊信息運行界面按5選擇,輸入編號,出現如下界面:圖4.8借閱圖書界面〔有錯誤調試后找出錯誤為文件SendInfo.txt擴展名是隱藏的,應將文件名改為SendInfo,得到如下正確界面:圖4.9借閱圖書界面如果編號不存在,界面如下:圖4.10借閱圖書界面總結通過這次課程設計,使我對C語言有了更進一步的認識和了解,要想學好它要重在實踐,要通過不斷的上機操作才能更好地學習它,我也發現我的好多不足之處,通過學習也有所改進;再有對C語言的一些標準庫函數不太了解,還有對函數調用的正確使用不夠熟悉,還有對C語言中經常出現的錯誤也不了解,所以后在學習過程中,我會更加注視實踐操作。在課程設計過程中,收獲知識,提高能力的同時,我也懂得怎么樣去制定、實現計劃,課程設計是培養學生綜合運用所學知識發現提出分析和解決實際問題鍛煉實踐能力的重要環節是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新月異,自從拿到題目到完成整個編程,從理論到實踐,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我們懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,在設計的過程中發現了自己的不足之處,對一些前面學過的知識理解得不夠深刻,掌握得不夠牢固,在設計中我們遇到了很多編程問題,最后在各位老師的辛勤指導下,我們慢慢的進入狀態,我做的是一個圖書館信息管理系統的設計,內容包括很多。運用的函數也是非常的復雜,所以設計程序一定要仔細,不容一點的馬虎。當然也有大問題,關于文件的操作,是我們最大的問題。要有模塊化思維能力,化思維就是編程任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,致謝非常感謝向毅、周力等四位老師的指導,在設計中我們遇到了很多編程問題,最后在各位老師的辛勤指導下,我們慢慢的進入狀態,順利的完成了編程題目。每天我們在機房編寫程序,老師們也寸步不離,幫助我們解決問題,由于編程是在英文狀態下進行的,很多單詞不知道意思,導致不懂提示的錯誤源頭的意思,從而無法找出錯誤的根本原因。在這方面老師們給了我們提供了很大的幫助。在程序出現錯誤的時候,老師耐心的幫我們調試,查找錯誤。在此我對各位辛勤工作的老師致以最誠摯的感謝。參考文獻[1]宋鐵橋、陳彥.《C語言開發實例教程》.北京:電子工業出版社,2008[2]譚浩強、張基溫.《C語言程序設計教程》.北京:高等教育出版社,2006程序qingdan:#include<stdio.h>#include<string.h>#include<stdlib.h>structlist{charnum[20];/*圖書編號*/ charname[40];/*書名*/ charauthor[40];/*作者*/ charpublish[40];/*出版社*/ doubleprice;/*價格*/};structlistb[40];intw=0;/*定義一個全局變量,用來記錄bookinfo.txt文件中的數據個數*/voidsearch_allinformation<structlistb[]>;/*查看全部圖書信息*/voidcheck_bookinformation<structlistb[]>;/*查找圖書信息*/voidadd_bookinformation<structlistb[]>;/*添加圖書信息*/voiddelete_bookinformation<structlistb[]>;/*刪除圖書信息*/voidborrow_book<structlistb[]>;/*借閱圖書*/intmain<>{ inti=0;intchoice1;FILE*fp;printf<"********************************\n">;printf<"*歡迎進入圖書館信息管理系統*\n">;printf<"********************************\n">;fp=fopen<"e:\\BookInfo.txt","r">;if<fp==NULL>{printf<"Cannotopenthefile!\n">; exit<0>;}while<!feof<fp>>{ fscanf<fp,"%s%s%s%s%lf",/*調用函數將文件中的數據讀入結構變量中*/ b[i].num,b[i].name,b[i].author,b[i].publish,&b[i].price>; i++;}w=i-1;fclose<fp>;do{ printf<"################################################################################">; printf<"功能選項:\n">; printf<"1:查看全部圖書信息\n">; printf<"2:查找圖書信息\n">; printf<"3:添加圖書信息\n">; printf<"4:刪除圖書信息\n">; printf<"5:借閱圖書\n">; printf<"0:退出系統\n">; printf<"################################################################################">; printf<"請選擇操作:">;scanf<"%d",&choice1>;switch<choice1> { case1: search_allinformation<b>; break; case2: check_bookinformation<b>; break; case3: add_bookinformation<b>; break; case4: delete_bookinformation<b>; break; case5: borrow_book<b>; break; case0: break; } }while<choice1!=0>;printf<"謝謝使用!\n">;return0;}/*查看全部圖書信息*/voidsearch_allinformation<structlistb[]>{ inti;printf<"####################################\n">;printf<"#查看全部圖書信息!#\n">;printf<"####################################\n">;printf<"圖書的相關信息:編號書名作者出版社價格\n">;for<i=0;i<w;i++>{ printf<"%s%s%s%s%.2f\n",/*將數據輸出到屏幕中*/ b[i].num,b[i].name,b[i].author, b[i].publish,b[i].price>;}printf<"%d",w>;printf<"################################################################################\n">;}/*查找圖書信息*/voidcheck_bookinformation<structlistb[]>{ inti,flag=0; chars[20];printf<"輸入編號:\n">;/*提示輸入圖書編號*/scanf<"%s",s>;printf<"#####################################\n">;printf<"#查找圖書信息!#\n">;printf<"#####################################\n">;for<i=0;i<w;i++>if<strcmp<s,b[i].num>==0>{ printf<"該圖書的相關信息:編號書名作者出版社價格\n">; printf<"%s%s%s%s%.2f\n",b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price>; flag=1; break; } if<flag==0> {printf<"該圖書編號不存在!\n">; printf<"是否要繼續查找?y:是;n:否\n">; getchar<>;switch<getchar<>> { case'y': check_bookinformation<b>;/*調用函數本身繼續查找*/ case'n': break; } }printf<"################################################################################\n">;}/*添加圖書信息*/voidadd_bookinformation<structlistb[]>{inti,count=0,choice3; structlistp; FILE*fp2;printf<"#####################################\n">;printf<"#添加圖書信息!#\n">;printf<"#####################################\n">;printf<"請輸入該圖書的相關信息:\n">;printf<"編號書名作者出版社價格\n">;scanf<"%s%s%s%s%lf", p.num,,p.author,p.publish,&p.price>;printf<"添加成功!\n">;printf<"是否顯示添加后的信息?1:是;2:否\n">;printf<"請選擇:">;scanf<"%d",&choice3>;switch<choice3> {case1: { for<i=0;i<w;i++> if<strcmp<p.num,b[i].num>>0> count++; for<i=w;i>count;i--> b[i]=b[i-1];b[i]=p; w++;/*每添加一本圖書,圖書數目都會增加一個*/fp2=fopen<"e:\\BookInfo.txt","w">;if<fp2==NULL> { printf<"Cannotopenthefile!\n">; exit<0>; }for<i=0;i<w;i++> fprintf<fp2,"%s%s%s%s%.2f\n", b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price>;fclose<fp2>;for<i=0;i<w;i++> printf<"%s%s%s%s%.2f\n", b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price>; }case2: break; }printf<"################################################################################\n">;}/*刪除圖書信息*/voiddelete_bookinformation<structlistb[]>{ inti,flag=0,choice4;chars[20];printf<"#####################################\n">;printf<"#刪除圖書信息#\n">;printf<"#####################################\n">; printf<"請輸入圖書編號:">; scanf<"%s",s>;for<i=0;i<w;i++> if<strcmp<s,b[i].num>==0> { printf<"刪除成功!\n">; printf<"是否顯示刪除后的信息?1:是;2:否\n">;printf<"請選擇:">;scanf<"%d",&choice4>;switch<choice4> {case1: { printf<"刪除后的圖書信息:編號書名作者出版社價格\n">; for<i=0;i<w;i++> { if<strcmp<s,b[i].num>!=0> printf<"%s%s%s%s%.2f\n", b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price>; }case2: break; } } flag=1;break; } if<flag==0> printf<"該圖書編號不存在!\n">;printf<"################################################################################\n">;}/*借閱圖書*/voidborrow_book<structlistb[]>{inti=0,n=0,flag=0,x=0; intm;/*定義一個變量用來記錄sendinfo.txt文件中的數據個數*/ structlistq; structstudent{charname[20];charnumber[40]; }; structstudentstu[50];FILE*fp;FILE*fp4;printf<"#####################################\n">;printf<"#借閱圖書#\n">;printf<"######################
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色能源行業市場分析及發展機遇研究報告
- 藝術教育中的互動游戲設計方案
- 智慧農業領域AI倫理評估技術應用案例
- 經濟網絡抗毀能力-洞察及研究
- 品牌忠誠度培育策略-洞察及研究
- 新型環保石材研發-洞察及研究
- 博爾塔拉職業技術學院《社會科學基礎Ⅰ》2023-2024學年第一學期期末試卷
- 2025年制造業智能制造裝備市場前景分析報告
- 中國美術學院《犯罪心理學專題》2023-2024學年第一學期期末試卷
- 山東政法學院《心理測量與評價》2023-2024學年第一學期期末試卷
- 大型醫院巡查醫院自查表
- 2025山西晉城市國有資本投資運營有限公司部分子公司招聘11人筆試參考題庫附帶答案詳解析集合
- 期末專項復習:課內閱讀(附答案)-部編版四年級語文下冊
- 2024-2025 學年八年級英語下學期期末模擬卷 (揚州專用)解析卷
- 2024年天津市南開區初中學業考查模擬地理試卷
- 第四屆福建省水產技術推廣職業技能競賽-水生物病害防治員備賽題庫(含答案)
- 數字供應鏈對營運資金周轉效率的影響分析
- 輕型卒中臨床診療中國專家共識要點(2024年)解讀課件
- 2022聯合國電子政務調查報告(中文版)
- 國家開放大學《管理英語4》期末機考題庫
- DeepSeek在銀行業務場景的應用
評論
0/150
提交評論