c語言圖書管理系統(tǒng)課設(shè)報告_第1頁
c語言圖書管理系統(tǒng)課設(shè)報告_第2頁
c語言圖書管理系統(tǒng)課設(shè)報告_第3頁
c語言圖書管理系統(tǒng)課設(shè)報告_第4頁
c語言圖書管理系統(tǒng)課設(shè)報告_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言課程設(shè)計報告程序設(shè)計語言-C課程設(shè)計報告 題目:圖書管理系統(tǒng) 班級: 學(xué)號: 姓名:2016年5月12日第 14 頁目錄1. 程序總體功能2. 新增功能3. 函數(shù)調(diào)用關(guān)系4. 主要算法流程圖1. 排序算法流程圖2. 插入算法流程圖5. 過程難點(diǎn)及解決方法6. 附錄:源程序一:程序總體功能本圖書管理系統(tǒng)可以實現(xiàn)圖書管理的基本功能,包括圖書信息的錄入、輸出、排序、刪除、查找及批量導(dǎo)入/導(dǎo)出等。圖書屬性信息包括書號、書名、第一作者、版次、出版年信息。二:新增功能1. 數(shù)據(jù)校驗功能:即在程序運(yùn)行之前對輸入數(shù)據(jù)的有效性進(jìn)行判斷,若輸入數(shù)據(jù)不合邏輯則輸出“數(shù)據(jù)輸入有誤,請核實后再輸”不再執(zhí)行后續(xù)程序

2、,以此增加程序運(yùn)行的效率。在本課程設(shè)計的刪除記錄功能中,按照要求輸入要刪除圖書的書名后要接著輸入書號來刪除圖書,若所輸入書號不在正確書號范圍內(nèi)(書號輸入錯誤),將直接終止程序,不再執(zhí)行后續(xù)的刪除程序。三:函數(shù)調(diào)用關(guān)系函數(shù)說明:0.退出系統(tǒng)1.數(shù)據(jù)輸入函數(shù):int Input(Bookinfo books,int n)2.數(shù)據(jù)輸出函數(shù):void Display(Bookinfo books,int n)3.刪除記錄函數(shù)(1):int Delete(Bookinfo books,int n,char *book) 刪除記錄函數(shù)(2):int Delete_a_record(Bookinfo boo

3、ks,int n)4.排序函數(shù):void Sort_by_name(Bookinfo books,int n)5.有序插入函數(shù)(1):int Insert(Bookinfo books,int n, Bookinfo *s) 有序插入函數(shù)(2):int Insert_a_record(Bookinfo books,int n)6. 數(shù)據(jù)查詢函數(shù)(1):int Query(Bookinfo books,int n,char *book) 數(shù)據(jù)查詢函數(shù)(2):void Query_a_record(Bookinfo books,int n)7. 從文件導(dǎo)入數(shù)據(jù)函數(shù):int AddfromText(

4、Bookinfo books,int n)8. 記錄數(shù)據(jù)寫入文件函數(shù):void WritetoText(Bookinfo books,int n)9. 主菜單函數(shù):int menu_select()10. 主函數(shù):void main()函數(shù)調(diào)用關(guān)系:(箭頭指向被調(diào)用函數(shù))數(shù)據(jù)輸入函數(shù)11主函數(shù)10 數(shù)據(jù)輸出函數(shù)22循環(huán)調(diào)用 刪除記錄函數(shù)3(1)刪除記錄函數(shù)3(2) 3 排序函數(shù)4 4主菜單函數(shù)9有序插入函數(shù)5(1)有序插入函數(shù)5(2) 5 數(shù)據(jù)查詢函數(shù)6(1)數(shù)據(jù)查詢函數(shù)6(2) 6 從文件導(dǎo)入數(shù)據(jù)函數(shù)7 7 將記錄數(shù)據(jù)寫入文件函數(shù)8 8 退出系統(tǒng) 0 四:主要算法流程圖1. 排序算法(數(shù)組按

5、書名升序排序)已有結(jié)構(gòu)體數(shù)組Bookinfo books及數(shù)組元素個數(shù)n;定義整型量i,j,p;定義結(jié)構(gòu)體變量 l;開始 i=0; j=0;p=0;否 i<n-1是p=ij=i+1 否 j<n是strcmp(booksj.book,booksp.book)=-1是否p=j j=j+1否 pii=i+1是 l=booksp booksp=booksi booksi=l 結(jié)束2. 插入算法(輸入圖書信息,按書名有序插入)已有結(jié)構(gòu)體數(shù)組Bookinfo books及數(shù)組元素個數(shù)n;(1)輸入待插入的圖書信息,調(diào)用Insert函數(shù)開始 Bookinfo s;Bookinfo *p;int

6、l; p=&s 輸入圖書信息 調(diào)用Insert函數(shù),l=Insert(books,n,p) 返回主函數(shù),輸出“現(xiàn)在共有l(wèi)本書” 結(jié)束 (2) Insert函數(shù)部分 Insert(books,n, *s) int k=n-1 否 k>=n-1 是 是 strcmp(booksk.book,(*s).book)<0 否 booksk+1=(*s) booksk+1=booksk; k=k-1 return (n+1) 五:過程難點(diǎn)及解決方法1. 結(jié)構(gòu)體定義及指向結(jié)構(gòu)體變量的指針定義是新嘗試:上機(jī)指導(dǎo)書用typedef 定義了新的結(jié)構(gòu)體類型,而這種定義方式上課時未講,需要重新學(xué)習(xí)

7、這部分知識,并嘗試使用。同時,指向結(jié)構(gòu)體變量的指針也是新學(xué)習(xí)的知識,并首次使用。2. 變量的作用域及存儲類別需嚴(yán)格區(qū)分:結(jié)構(gòu)體數(shù)組中的元素個數(shù)n(主函數(shù)中用m接收函數(shù)返回的n值)需要在程序整個運(yùn)行期間始終存在,而在一開始運(yùn)行程序期間未意識到這個問題,把n簡單地定義成int型,導(dǎo)致程序運(yùn)行始終錯誤。在多次嘗試后才意識到調(diào)用不同函數(shù)時,變量n應(yīng)該保留上次函數(shù)調(diào)用結(jié)束時的值,于是把n定義成全局變量,m定義成靜態(tài)局部變量,問題得以解決。3. 從文件批量導(dǎo)入數(shù)據(jù)多次失?。鹤约菏紫刃陆恕癉ictory”文本文檔并輸入了圖書信息,然而從文本文檔導(dǎo)入數(shù)據(jù)時卻總是得到一堆亂碼,而不是正確的圖書信息。最后經(jīng)過和

8、同學(xué)的討論才得以找到原因,原來是因為文本文檔中的數(shù)據(jù)之間有空格,而寫scanf函數(shù)時卻忽略了空格。調(diào)整之后,程序終于得以正常運(yùn)行。4. 函數(shù)之間調(diào)用關(guān)系復(fù)雜:本程序調(diào)用的函數(shù)眾多,函數(shù)中符號眾多,寫函數(shù)需要非常細(xì)心認(rèn)真。也正因如此,我的程序在編譯階段出現(xiàn)了幾十項錯誤,其中“C語言課設(shè)圖書管理系統(tǒng).cpp(174) : error C2601: 'Delete' : local function definitions are illegal”這條錯誤出現(xiàn)10多次。查閱資料后才意識到這是由我編寫的函數(shù)程序中花括號缺失造成的,排查后才得以解決。這只是眾多編寫過程中問題及難點(diǎn)的部分展

9、示,其他的問題也多是由于不細(xì)心造成的,此處不再贅述。六:附錄:源程序/圖書管理系統(tǒng) #include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>typedef structchar ISBN10; char book30;char author20;int edition;char press50;int year;Bookinfo; /定義結(jié)構(gòu)體數(shù)組Bookinfo books500; /定義含500個變量的結(jié)構(gòu)體數(shù)組存放圖書信息int menu_select();

10、/顯示主菜單int Input(Bookinfo books,int n); /1.數(shù)據(jù)輸入void Display(Bookinfo books,int n); /2.輸出數(shù)據(jù)int Delete_a_record(Bookinfo books,int n); /3.刪除記錄void Sort_by_name(Bookinfo books,int n); /4.排序int Insert_a_record(Bookinfo books,int n); /5.有序插入void Query_a_record(Bookinfo books,int n); /6.查詢數(shù)據(jù)int AddfromText

11、(Bookinfo books,int n); /7.從文件中整批輸入數(shù)據(jù)void WritetoText(Bookinfo books,int n); /8.將記錄寫到文件static int n=0;void main() /主函數(shù)static int m=0; /定義靜態(tài)局部變量for(; ;)switch(menu_select()case 1:m=Input(books,n) ;printf("現(xiàn)在共有%d本書n",m);system("pause");break;case 2:Display(books,m);system("pau

12、se");break;case 3:Delete_a_record(books,m) ;system("pause");break;case 4:Sort_by_name(books,m);system("pause");break; case 5: m=Insert_a_record(books,m); printf("現(xiàn)在共有%d本書n",m);system("pause");break;case 6:Query_a_record(books,m);system("pause");

13、break;case 7:m=AddfromText(books,m);printf("現(xiàn)在共有%d本書n",m);system("pause");break;case 8:WritetoText(books,m);system("pause");break;case 0:printf("再見!歡迎再次光臨圖書管理系統(tǒng)n");system("pause");exit(0);int menu_select() /顯示主菜單程序char c;dosystem("cls");pri

14、ntf("n");printf("n");printf("n");printf("*/歡迎光臨圖書管理系統(tǒng)V30.0+/*n");printf("*designed by lichenyang*n");printf("*Put into use in May 2016*n");printf("1. Input recordsn");printf("2. Display All Recordsn");printf("3. Del

15、ete a Recordn");printf("4. Sortn");printf("5. Insert a Recordn");printf("6. Queryn");printf("7. Add Record from a Text Filen");printf("n");printf("n");printf("n");printf("8. Write to a Text Filen");printf("0. Q

16、uitn");printf("Give your choice: n");c=getchar();while(c<'0'|c>'8');return(c-'0');int Input(Bookinfo books,int n) /1.數(shù)據(jù)輸入函數(shù) char c; int i=0; printf("please input the information of a book:n");printf("(The information of a book includes its

17、ISBN,name,author,edition,press,year)n");/版本請輸入數(shù)字for(n=0;c!='e'n+,i+)scanf("%s%s%s%d%s%d",booksi.ISBN,booksi.book,booksi.author,&booksi.edition,booksi.press,&booksi.year);printf("Now you can input 'e' to stop or coutinue to input the informationn");get

18、char();c=getchar();printf("輸入數(shù)據(jù)已終止!n"); return n;void Display(Bookinfo books,int n) /2.數(shù)據(jù)輸出函數(shù) int i;char c;c='a' /賦初值for(i=0;i<n&&c!='e'i+)printf("%st%stt%st%dt%st%dn",booksi.ISBN,booksi.book,booksi.author,booksi.edition,booksi.press,booksi.year);if(i%1

19、0=0&&i!=0)printf("press enter to continue or input 'e' to stopn"); getchar(); c=getchar();system("pause"); int Delete(Bookinfo books,int n,char *book) /3.1.刪除記錄被調(diào)用函數(shù)int i;int j=-1;/用于后續(xù)判斷s是否輸入正確char c;char s10;printf("以下是所有同名圖書n");for(i=0;i<n;i+)if(st

20、rcmp(book,booksi.book)=0)printf("%s%s%s%d%s%dn",booksi.ISBN,booksi.book,booksi.author,booksi.edition,booksi.press,booksi.year);printf("input the ISBN of the book you want to delete!n");scanf("%s",s);printf("確認(rèn)刪除嗎?(輸入“Y”執(zhí)行刪除程序或者按任意鍵退出刪除)n");getchar();c=getchar(

21、);if(c='y'|c='Y')for(i=0;i<n;i+)if(strcmp(s,booksi.ISBN)=0)j=i;break;if(j!=i)printf("數(shù)據(jù)輸入有誤,請核實后再輸n");elsefor(;j<n;j+)booksj=booksj+1;printf("刪除數(shù)據(jù)成功!n");return(n-1);else return(n);int Delete_a_record(Bookinfo books,int n) /3.2.刪除記錄char b30;char *book=b;char

22、c;int m;printf("please input the name of a book you want to delete:n"); scanf("%s",b);printf("確認(rèn)刪除嗎?(輸入“Y”執(zhí)行刪除程序或者按任意鍵退出刪除)n");getchar();c=getchar();if(c='y'|c='Y')m=Delete(books,n,book);return(m); void Sort_by_name(Bookinfo books,int n) /4.按照書名升序排列print

23、f("已按照書名升序排列,返回2查看n");int i,j,p;Bookinfo l;for(i=0;i<n-1;i+)p=i;for(j=i+1;j<n;j+)if(strcmp(booksj.book,booksp.book)=-1) p=j;if(p!=i)l=booksp;booksp=booksi;booksi=l;int Insert(Bookinfo books,int n, Bookinfo *s) /5.1.按書名序插入記錄s,返回記錄個數(shù)int k; for(k=n-1;k>=-1;k-)if(strcmp(booksk.book,(*

24、s).book)<0)booksk+1=(*s);break; booksk+1=booksk;if(k>=-1)n=n+1;return(n);int Insert_a_record(Bookinfo books,int n) /5.2.輸入待插入的圖書信息,調(diào)用Insert函數(shù)Bookinfo s;Bookinfo *p; /定義指向結(jié)構(gòu)體變量的指針p=&s;int l;printf("please input the information of a book:n"); printf("(Theinformationof a book i

25、ncludes its ISBN,name,author,edition,press,year)n");scanf("%s%s%s%d%s%d",s.ISBN,s.book,s.author,&s.edition,s.press,&s.year); l=Insert(books,n,p); /函數(shù)調(diào)用printf("插入數(shù)據(jù)成功!n");printf("可重新返回5插入數(shù)據(jù)n");return(l);int Query(Bookinfo books,int n,char *book) /6.1.查詢圖書數(shù)據(jù)的

26、被調(diào)用函數(shù)int i,j;for(i=0,j=0;i<n;i+)if(strcmp(booksi.book,book)=0)j+=1;printf("%s%s%s%d%s%dn",booksi.ISBN,booksi.book,booksi.author,booksi.edition,booksi.press,booksi.year);if(j!=0)return(j);else return(-1);void Query_a_record(Bookinfo books,int n) /6.2.輸入待查找書名,調(diào)用Query函數(shù)查找記錄char *book;char

27、a30;int m;char c='q' /賦初值book=a;for(;c!='e')printf("please input the name of a book you want to queryn"); scanf("%s",a); m=Query(books,n,book); /結(jié)構(gòu)體數(shù)組名作函數(shù)參數(shù) if(m!=-1)printf("查詢成功!n"); elseprintf("查詢失敗!n");printf("Now you can input 'e' to stop or press any key to cout

溫馨提示

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

最新文檔

評論

0/150

提交評論