數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)_第1頁
數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)_第2頁
數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)_第3頁
數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)_第4頁
數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結構課程設計報告 課題名稱: 簡易圖書管理系統(tǒng) 專業(yè)班級: 11軟件2班 學 號: 201103112 姓 名:_ _指導老師: 劉 杰 成 績:_ 2012年12月1、 課題名稱簡易圖書管理系統(tǒng)二、主要內(nèi)容圖書管理系統(tǒng)的設計主要是實現(xiàn)對圖書的管理和相關操作?;竟δ苋缦拢海?)圖書信息錄入、添加功能:包括書號(即ISBN號,不可重復)、書名(多書可重名)、作者、出版社名稱、存館數(shù)量、定價等。(2)圖書信息查詢功能:按書名進行查詢。按作者名進行查詢。按出版社進行查詢。(3)排序:按書號的升序進行排序;按作者的升序進行排序,作者相同時按書號的升序再進行排序(4)圖書的修改、刪除功能:按書號進

2、行圖書的修改、刪除按書名進行圖書的修改、刪除(同樣的書名多于1本書時,再指定具體修改和刪除的書號)。(5)圖書借閱、歸還功能:如果一種書的現(xiàn)存量大于0,可以借出,借出相應數(shù)量后改存館數(shù)量;歸還時改變該書的存館數(shù)量。三、課題設計的基本思想,原理和算法描述這個簡易圖書管理系統(tǒng)所采用的是線性表的順序存儲結構,把線性表中的所有元素按照邏輯順序依次存儲在一塊連續(xù)的存儲空間。定義順序表時,采用數(shù)組來儲存表中的所有元素,同時還定義了一個變量來表示順序表的實際長度。首先構造一個空的線性表L,再把長度設為0;錄入圖書信息時,成功添加時將線性表的長度加1,則可完成錄入信息。在執(zhí)行刪除圖書信息時,將所要刪除的元素之

3、后的元素均向前移動一個位置,再將順序表的長度減1,即可實現(xiàn)刪除的功能。在實現(xiàn)排序功能這塊,采用了冒泡排序法。再如圖書的借閱和歸還功能的實現(xiàn),將存館數(shù)量作相應修改,借出時將館存減1,歸還時再將館存加1。界面設計:本系統(tǒng)所要實現(xiàn)的功能較多,為了使主界面更加簡潔,采用了子菜單的界面設計,將部分功能放在子菜單來實現(xiàn)。這樣簡化了主界面,同時使系統(tǒng)更完善。輸入輸出設計:輸入除館存數(shù)量是int外,其他均為char型。功能模塊設計:包含輸入、查找、刪除、修改、排序、借閱和歸還功能。流程圖:按書名查詢按作者查詢按出版社查詢按書號刪除按書號修改按書名修改按書名刪除圖書借閱圖書歸還主菜單圖書信系錄入圖書信系查詢圖書

4、信系修改圖書信系刪除圖書信系排序圖書信系管理按書名排序按書號排序四、運行示例及結果分析圖1 圖書管理系統(tǒng)主菜單圖1.1 圖書信息輸入圖2.1 圖書信息查詢子菜單圖2.2 按書名查找圖書信息圖2.3 按作者名查詢圖書信息 圖2.4 按出版社查詢圖書信息圖3.1 按書號進行圖書排序圖3.2 按作者名進行圖書排序圖4.1 按書號進行圖書修改圖4.2 按書名進行圖書修改圖5.1 按書號進行圖書刪除圖5.2 按書名進行圖書刪除圖6.1 圖書借閱圖6.2 圖書歸還五、調試和運行程序過程中產(chǎn)生的問題及采取的措施本次課程設計遇到的問題主要有以下幾點:(1)在修改、刪除函數(shù)執(zhí)行還能查找到被刪除(或)修改的數(shù)據(jù);

5、經(jīng)過調試及修改發(fā)現(xiàn)問題在于函數(shù)中的形參不能傳遞,缺少取地址符。(2)在采用冒泡排序法排序時,不能調換字符串位置。解決:用strcpy可以將字符串賦值。(3)在主菜單與子菜單的相互調用方面存在著問題。解決:將主菜單單獨放在一個函數(shù)里面,這樣就可以實現(xiàn)簡單調用了。6、 總結這次課程設計做的是簡易圖書管理系統(tǒng),這個系統(tǒng)跟以前作業(yè)學生管理系統(tǒng)非常類似,只是在那個基礎上多增加了一個排序和圖書的借閱歸還功能。選擇用順序表來完成這個程序,是覺得順序表在理解方面要比鏈表簡單的多。嘗試過用鏈表來實現(xiàn)排序功能,但一直碰壁。初步分析了題目后,了解到需要實現(xiàn)的功能有11個,如果全部放在主菜單里面會使得界面看起來復雜,

6、不夠簡潔。為此采用了子菜單的模塊設計,但也為后來帶來了許多麻煩。系統(tǒng)中的不同查詢方式其實就是變量名的變化而已,再用順序表編寫時很順利的完成了。在系統(tǒng)編寫中遇到問題最多的就是排序,按圖書的書號排序,定義書號是整型的,比較書號大小,然后交換位置。雖然思想簡單,但在實際操作中并不是這樣。其中涉及到字符串的交換,起初使用“=”賦值來交換,后來查書才了解字符串的賦值改用strcpy來完成。同時,有不少小問題通過自己不斷調試、修改能夠完全解決。現(xiàn)在存在的不足之處主要是在菜單上會出現(xiàn)一些小Bug。比如在調用二級菜單返回主菜單后,會出現(xiàn)無法退出等情況,需要進一步完善。另外系統(tǒng)上有些不足之處就是沒有判斷輸入圖書

7、信息是否是現(xiàn)存館內(nèi)已有圖書,如果是的話應該將館存數(shù)量上做相應的修改。通過本次課程設計,我們認識到必須牢固掌握好基礎知識,熟悉各種算法,并在這基礎之上靈活利用。我們平時應該多練習,不能只看代碼而不去做,這樣是對編程提高不了多少的。通過我們對C語言以及數(shù)據(jù)結構有了更深刻的了解,增強了程序的編寫能力,鞏固了專業(yè)知識,對程序的模塊化觀念更清楚了。在程序的運行與調試過程中出現(xiàn)了很多錯誤,通過反復地復習課本上的相關知識,不停地修改與調試,我們終于完成了這段程序。在調試過程中,認識到了數(shù)據(jù)結構的靈活性與嚴謹性,同一個功能可以由不同的語句來實現(xiàn),但編寫程序時要特別注意細節(jié)方面的問題,因為一個小小的疏忽就能導致

8、整個程序不能運行。我也認識到了自己的薄弱之處,在以后的學習中要集中精力、端正態(tài)度,爭取把知識學得更扎實、更全面。七、參考文獻1 李建學等著.數(shù)據(jù)結構課程設計案例精編.清華大學出版社,20072 唐寧九等主編.數(shù)據(jù)結構與算法(C+版)實驗和課程設計教程. 清華大學出版社,2008)3 譚浩強著.C程序設計.清華大學出版社,20108、 源代碼#include <stdio.h>#include <malloc.h>#include <string.h>#include<stdlib.h>#define MaxSize 100typedef stru

9、ct char isbn30; /書號char name30; /書名char writer30; /作者char producter30; /出版社int num; /館存數(shù)量char price20; /價格ElemType;typedef struct ElemType dataMaxSize,data1MaxSize; int length; SqList;void InitList(SqList *&L) /初始化線性表L=(SqList *)malloc(sizeof(SqList);L->length=0;int ListEmpty(SqList *L) /判斷線性

10、表是否為空return(L->length=0);void AddBook(SqList *&L) /添加圖書信息int bz=0;printf("請輸入圖書信息!n");printf("書號t書名t作者t出版社t館存數(shù)量(整型)t價格n");scanf("%s %s %s %s %d %s",L->dataL->length.isbn,L->dataL->,L->dataL->length.writer,L->dataL->duc

11、ter,&L->dataL->length.num,L->dataL->length.price);printf("n"); for(int i=0;i<L->length;i+)if(strcmp(L->datai.isbn,L->dataL->length.isbn)=0) L->datai.num+; bz=1;break;if(bz=0)L->length+;printf("添加圖書成功!n");void Search_i(SqList *&L) /按書號查詢pri

12、ntf("請輸入你想要查找圖書的書號:");char isbn30;scanf("%s",&isbn);int i=0;while(i<L->length&&strcmp(L->datai.isbn,isbn)!=0)i+;if(i>=L->length)printf("圖書館沒有此圖書!n");elseprintf("書號t書名t作者t出版社t館存數(shù)量t價格n"); printf("%st%st%st%st%d冊t%s元",L->da

13、tai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,L->datai.price); printf("n"); void Search_n(SqList *&L) /按書名查詢printf("請輸入你想查找圖書的書名:");char name30;scanf("%s",&name);int i=0,b=0;for(i;i<L->length;i+)if(strcmp(L->datai

14、.name,name)=0)b+;if(b=0)printf("圖書館沒有此圖書!n"); else printf("書號t書名t作者t出版社t館存數(shù)量t價格n"); for(i=0;i<L->length;i+) if(strcmp(L->,name)=0) printf("%st%st%st%st%d冊t%s元",L->datai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,

15、L->datai.price); printf("n"); void Search_w(SqList *&L) /按作者查詢printf("請輸入你想要查找圖書的作者:");char writer30;scanf("%s",&writer);int i=0,b=0;for(i;i<L->length;i+)if(strcmp(L->datai.writer,writer)=0)b+;if(b=0)printf("圖書館沒有此圖書!n");elseprintf("%s

16、的作品共有%d本,信息如下:n",writer,b);printf("書號t書名t作者t出版社t館存數(shù)量t價格n");for(i=0;i<L->length;i+)if(strcmp(L->datai.writer,writer)=0)printf("%st%st%st%st%d冊t%s元",L->datai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,L->datai.price);printf(&q

17、uot;n");void Search_p(SqList *&L) /按出版社查詢printf("請輸入你想要查找圖書的出版社:");char producter30;scanf("%s",&producter);int i=0,c=0;for(i;i<L->length;i+)if(strcmp(L->ducter,producter)=0)c+;if(c=0)printf("圖書館沒有此圖書!n");elseprintf("%s出版的作品共有%d本,信息如下:

18、n",producter,c);printf("書號t書名t作者t出版社t館存數(shù)量t價格n");for(i=0;i<L->length;i+)if(strcmp(L->ducter,producter)=0)printf("%st%st%st%st%d冊t%s元",L->datai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,L->datai.price);printf("n

19、");void Revise_i(SqList *&L) /按書號修改圖書printf("請輸入你要修改圖書的書號:");char isbn30; scanf("%s",&isbn); printf("你要修改的圖書信息如下:n");int i=0,v=0; while(i<L->length&&strcmp(L->datai.isbn,isbn)!=0)i+;if(i>=L->length)printf("圖書館沒有此圖書!n");elsep

20、rintf("書號t書名t作者t出版社t館存數(shù)量t價格n"); printf("%st%st%st%st%d冊t%s元",L->datai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,L->datai.price);printf("n");printf("請輸入圖書信息!n"); printf("書號t書名t作者t出版社t館存數(shù)量t價格n"); scanf("%

21、s %s %s %s %d %s",L->datai.isbn,L->,L->datai.writer,L->ducter,&L->datai.num,L->datai.price); for(v=0;v<L->length;v+) /判斷修改后的書籍,是否有相同書籍已存在于圖書館內(nèi)if(strcmp(L->datav.isbn,L->datai.isbn)=0)L->datav.num+; L->length-; printf("n");prin

22、tf("修改圖書信息成功!n");void Revise_n(SqList *&L) /按書名修改圖書printf("請輸入你要修改圖書的書名:");char name30;scanf("%s",&name); printf("你要修改的圖書信息如下:n");int i=0,a=0; for(i;i<L->length;i+)if(strcmp(L->,name)=0)a+;if(a=0)printf("圖書館沒有此圖書!n");elsech

23、ar isbn230;printf("符合條件的圖書共有%d本,信息如下:n",a);printf("書號t書名t作者t出版社t館存數(shù)量t價格n");for(int o=0;o<L->length;o+)if(strcmp(L->,name)=0) /書名相同時按書號刪除 printf("%st%st%st%st%d冊t%s元",L->datao.isbn,L->,L->datao.writer,L->ducter,L->data

24、o.num,L->datao.price); printf("n");printf("請輸入你想要修改的書籍的書號:");scanf("%d",&isbn2);int t=0,e=0;for(t;t<L->length;t+)if(strcmp(L->datat.isbn,isbn2)=0)e=t; printf("書號t書名t作者t出版社t館存數(shù)量t價格n"); printf("%st%st%st%st%d冊t%s元",L->datae.isbn,L-&g

25、t;,L->datae.writer,L->ducter,L->datae.num,L->datae.price);printf("n");printf("請輸入圖書信息!n"); printf("書號t書名t作者t出版社t館存數(shù)量t價格n"); scanf("%s %s %s %s %d %s",L->datae.isbn,L->,L->datae.writer,L->ducter,&

26、;L->datae.num,L->datae.price);for(t=0;t<L->length;t+) /判斷修改后的書籍,是否有相同書籍已存在于圖書館內(nèi)if(strcmp(L->datat.isbn,L->datai.isbn)=0)L->datat.num+; L->length-; printf("n");printf("修改圖書信息成功!n");void Delete_i(SqList *&L) /按書號刪除圖書printf("請輸入你要刪除圖書的書號:n");cha

27、r isbn30; scanf("%s",&isbn);int i=0;while(i<L->length&&strcmp(L->datai.isbn,isbn)!=0)i+;if(i>=L->length)printf("圖書館沒有此圖書!n");elseint j;printf("isbn:%s的圖書%s已成功刪除!n",L->datai.isbn,L->);for (j=i;j<L->length-1;j+)L->dataj=

28、L->dataj+1;L->length-;void Delete_n(SqList *&L) /按書名刪除圖書printf("請輸入你要刪除圖書的書名:n");char name30;scanf("%s",&name);int i=0,a=0,e=0;for(i;i<L->length;i+)if(strcmp(L->,name)=0)a+; if(a=0)printf("圖書館沒有此圖書!n");elsechar isbn230; /書名相同時按書號刪除printf

29、("符合條件的圖書共有%d本,信息如下:n",a);printf("書號t書名t作者t出版社t館存數(shù)量t價格n");for(int o=0;o<L->length;o+)if(strcmp(L->,name)=0) printf("%st%st%st%st%d冊t%s元",L->datao.isbn,L->,L->datao.writer,L->ducter,L->datao.num,L->datao.price);prin

30、tf("n");printf("請輸入你想要刪除的書籍的書號:");scanf("%d",&isbn2);int t=0;for(t;t<L->length;t+)if(strcmp(L->datat.isbn,isbn2)=0)e=t;int j;printf("isbn:%s的圖書%s已成功刪除!n",L->datae.isbn,L->); for (j=e;j<L->length-1;j+)L->dataj=L->dataj+1

31、;L->length-;void BorrowBook(SqList *&L) /圖書借閱printf("請輸入你想要借的圖書的書號:");char isbn30;scanf("%s",&isbn);int i=0;while(i<L->length&&strcmp(L->datai.isbn,isbn)!=0)i+;if(i>=L->length)printf("圖書館內(nèi)沒有此圖書!n");elseif(L->datai.num=0)printf("

32、該圖書已經(jīng)全部借出!n");elseprintf("圖書%s借閱成功!n",L->);L->datai.num-;void BackBook(SqList *&L) /圖書歸還printf("請輸入你想要歸還的圖書的書號:");char isbn30;scanf("%s",&isbn);int i=0;while(i<L->length&&strcmp(L->datai.isbn,isbn)!=0)i+;if(i>=L->lengt

33、h)printf("這本圖書不是我們圖書館所藏!n");else printf("圖書%s歸還成功!n",L->);L->datai.num+;void Sort_i(SqList *&L) /按書號排序for(int i=0;i<L->length-1;i+) /冒泡法排序for(int j=0;j<L->length-1-i;j+)if(strcmp(L->dataj.isbn,L->dataj+1.isbn)>0) strcpy(L->data1j.isbn,L

34、->dataj.isbn); strcpy(L->dataj.isbn,L->dataj+1.isbn); strcpy(L->dataj+1.isbn,L->data1j.isbn); strcpy(L->,L->); strcpy(L->,L->dataj+1.name); strcpy(L->dataj+1.name,L->); strcpy(L->data1j.writer,L->dataj.writer); strcpy(L

35、->dataj.writer,L->dataj+1.writer); strcpy(L->dataj+1.writer,L->data1j.writer); strcpy(L->ducter,L->ducter); strcpy(L->ducter,L->dataj+1.producter); strcpy(L->dataj+1.producter,L->ducter); L->data1j.num=L->dataj.num; L->data

36、j.num=L->dataj+1.num; L->dataj+1.num=L->data1j.num; strcpy(L->data1j.price,L->dataj.price); strcpy(L->dataj.price,L->dataj+1.price); strcpy(L->dataj+1.price,L->data1j.price); printf("書號t書名t作者t出版社t館存數(shù)量t價格n");for (i=0;i<L->length;i+)printf("%st%st%st%st%

37、d冊t%s元",L->datai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,L->datai.price);printf("n"); void Sort_n(SqList *&L) /按書名排序for(int i=0;i<L->length-1;i+)for(int j=0;j<L->length-i-1;j+) if(strcmp(L->dataj.writer,L->dataj+1.writ

38、er)>0)strcpy(L->data1j.isbn,L->dataj.isbn); strcpy(L->dataj.isbn,L->dataj+1.isbn);strcpy(L->dataj+1.isbn,L->data1j.isbn);strcpy(L->,L->);strcpy(L->,L->dataj+1.name);strcpy(L->dataj+1.name,L->);strcpy(L->data1j.writer

39、,L->dataj.writer);strcpy(L->dataj.writer,L->dataj+1.writer);strcpy(L->dataj+1.writer,L->data1j.writer);strcpy(L->ducter,L->ducter);strcpy(L->ducter,L->dataj+1.producter);strcpy(L->dataj+1.producter,L->ducter);L->data1j.num=L-&

40、gt;dataj.num; L->dataj.num=L->dataj+1.num; L->dataj+1.num=L->data1j.num;strcpy(L->data1j.price,L->dataj.price);strcpy(L->dataj.price,L->dataj+1.price);strcpy(L->dataj+1.price,L->data1j.price);for(int t=0;t<L->length-1;t+)if(strcmp(L->datat.writer,L->datat+1.

41、writer)=0)if(strcmp(L->datat.isbn,L->datat+1.isbn)>0)strcpy(L->data1t.isbn,L->datat.isbn); strcpy(L->datat.isbn,L->datat+1.isbn); strcpy(L->datat+1.isbn,L->data1t.isbn); strcpy(L->,L->); strcpy(L->,L->datat+1.name); strcpy(L->d

42、atat+1.name,L->); strcpy(L->data1t.writer,L->datat.writer); strcpy(L->datat.writer,L->datat+1.writer); strcpy(L->datat+1.writer,L->data1t.writer); strcpy(L->ducter,L->ducter); strcpy(L->ducter,L->datat+1.producter); strcpy(L->

43、;datat+1.producter,L->ducter); L->data1t.num=L->datat.num; L->datat.num=L->datat+1.num; L->datat+1.num=L->data1t.num; strcpy(L->data1t.price,L->datat.price); strcpy(L->datat.price,L->datat+1.price); strcpy(L->datat+1.price,L->data1t.price); printf(&qu

44、ot;書號t書名t作者t出版社t館存數(shù)量t價格n");for (i=0;i<L->length;i+)printf("%st%st%st%st%d冊t%s元",L->datai.isbn,L->,L->datai.writer,L->ducter,L->datai.num,L->datai.price);printf("n");int menu(SqList *&L);void menu1(SqList *&L)printf("nt-

45、n");printf("t 1.按 書 名進行查詢 nn"); printf("t 2.按作者名進行查詢 nn"); printf("t 3.按出版社進行查詢 nn"); printf("t 0.返回主菜單 n");printf("nt-n");printf("請選擇功能(03):");int choice;scanf("%d",&choice);switch(choice)case 1:Search_n(L);system("

46、pause");system("cls");break;case 2:Search_w(L);system("pause");system("cls");break;case 3:Search_p(L);system("pause");system("cls");break;case 0:system("cls");menu(L);break; default:printf("輸入有誤,請重新輸入!");system("pause&qu

47、ot;);system("cls");menu1(L);void menu2(SqList *&L) printf("nt-n");printf("t 1.按書號進行圖書的修改 nn"); printf("t 2.按書名進行圖書的修改 nn");printf("t 0.返回主菜單 n"); printf("nt-n");printf("請選擇功能(02):");int choice;scanf("%d",&choice)

48、;switch(choice)case 1:Revise_i(L);system("pause");system("cls");break;case 2:Revise_n(L);system("pause");system("cls");break;case 0:system("cls");menu(L);break;default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");

49、menu2(L);void menu3(SqList *&L) printf("nt-n");printf("t 1.按書號進行圖書的刪除 nn"); printf("t 2.按書名進行圖書的刪除 nn");printf("t 0.返回主菜單 n"); printf("nt-n");printf("請選擇功能(02):");int choice;scanf("%d",&choice);switch(choice)case 1:Delete_

50、i(L);system("pause");system("cls");break;case 2:Delete_n(L);system("pause");system("cls");break;case 0:system("cls");menu(L);break;default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");menu3(L);void menu4(SqList *&

51、amp;L)printf("nt-n");printf("t 1.按書號進行圖書的排序 nn"); printf("t 2.按作者進行圖書的排序 nn");printf("t 0.返回主菜單 n"); printf("nt-n");printf("請選擇功能(02):");int choice;scanf("%d",&choice);switch(choice)case 1:Sort_i(L);system("pause");system("cls");break;case 2:Sort_n(L);system(&quo

溫馨提示

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

評論

0/150

提交評論