大數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)
《大數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)》由會員分享,可在線閱讀,更多相關《大數(shù)據(jù)結構 課程設計 簡易圖書管理系統(tǒng)(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word 《數(shù)據(jù)結構》 課程設計報告 課題名稱: 簡易圖書管理系統(tǒng) 專業(yè)班級: 11軟件2班 學 號: 201103112 姓 名:___________ 指導教師: 杰 成 績:__________________ 2012年12月 一、 課題名稱 簡易圖書管理系統(tǒng) 二、主要容 圖書管理系統(tǒng)的設計主要是實現(xiàn)對圖書的管理和相關操作。根本功能如下: 〔1〕圖書信息錄入、添加功能:包括書號〔即ISBN號,不可重復〕、書名〔多書可重名〕、作者、名稱、存館數(shù)量
2、、定價等。 〔2〕圖書信息查詢功能:①按書名進展查詢。②按作者名進展查詢。③按進展查詢。 〔3〕排序:①按書號的升序進展排序;②按作者的升序進展排序,作者一樣時按書號的升序再進展排序 〔4〕圖書的修改、刪除功能:①按書號進展圖書的修改、刪除②按書名進展圖書的修改、刪除〔同樣的書名多于1本書時,再指定具體修改和刪除的書號〕。 〔5〕圖書借閱、歸還功能:如果一種書的現(xiàn)存量大于0,可以借出,借出相應數(shù)量后改存館數(shù)量;歸還時改變該書的存館數(shù)量。 三、課題設計的根本思想,原理和算法描述 這個簡易圖書管理系統(tǒng)所采用的是線性表的順序存儲結構,把線性表中的所有元素按照邏輯順序依次存儲在一塊連續(xù)的存
3、儲空間。 定義順序表時,采用數(shù)組來儲存表中的所有元素,同時還定義了一個變量來表示順序表的實際長度。首先構造一個空的線性表L,再把長度設為0;錄入圖書信息時,成功添加時將線性表的長度加1,如此可完成錄入信息。在執(zhí)行刪除圖書信息時,將所要刪除的元素之后的元素均向前移動一個位置,再將順序表的長度減1,即可實現(xiàn)刪除的功能。在實現(xiàn)排序功能這塊,采用了冒泡排序法。再如圖書的借閱和歸還功能的實現(xiàn),將存館數(shù)量作相應修改,借出時將館存減1,歸還時再將館存加1。 界面設計:本系統(tǒng)所要實現(xiàn)的功能較多,為了使主界面更加簡潔,采用了子菜單的界面設計,將局部功能放在子菜單來實現(xiàn)。這樣簡化了主界面,同時使系統(tǒng)更完善。
4、 輸入輸出設計:輸入除館存數(shù)量是int外,其他均為char型。 功能模塊設計:包含輸入、查找、刪除、修改、排序、借閱和歸還功能。 流程圖: 按 書 名 查詢 按 作者查詢 按 查詢 按 書號刪除 按 書 號修改 按 書 名 修改 按 書 名 刪除 圖書 借閱 圖書歸還 主菜單 圖 書 信 系 錄 入 圖 書 信 系 查 詢 圖 書 信 系 修 改 圖 書 信 系 刪 除 圖 書 信 系 排 序 圖 書 信 系 管 理 按書名排序 按書號排
5、序 四、運行示例與結果分析 圖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 圖書歸還 五、調(diào)試和運
6、行程序過程中產(chǎn)生的問題與采取的措施 本次課程設計遇到的問題主要有以下幾點: 〔1〕在修改、刪除函數(shù)執(zhí)行還能查找到被刪除〔或〕修改的數(shù)據(jù);經(jīng)過調(diào)試與修改發(fā)現(xiàn)問題在于函數(shù)中的形參不能傳遞,缺少取地址符。 〔2〕在采用冒泡排序法排序時,不能調(diào)換字符串位置。解決:用strcpy可以將字符串賦值。 〔3〕在主菜單與子菜單的相互調(diào)用方面存在著問題。解決:將主菜單單獨放在一個函數(shù)里面,這樣就可以實現(xiàn)簡單調(diào)用了。 六、 總結 這次課程設計做的是簡易圖書管理系統(tǒng),這個系統(tǒng)跟以前作業(yè)學生管理系統(tǒng)非常類似,只是在那個根底上多增加了一個排序和圖書的借閱歸還功能。選擇用順序表來完成這個程序,是覺得順序表
7、在理解方面要比鏈表簡單的多。嘗試過用鏈表來實現(xiàn)排序功能,但一直碰壁。 初步分析了題目后,了解到需要實現(xiàn)的功能有11個,如果全部放在主菜單里面會使得界面看起來復雜,不夠簡潔。為此采用了子菜單的模塊設計,但也為后來帶來了許多麻煩。系統(tǒng)中的不同查詢方式其實就是變量名的變化而已,再用順序表編寫時很順利的完成了。在系統(tǒng)編寫中遇到問題最多的就是排序,按圖書的書號排序,定義書號是整型的,比擬書號大小,然后交換位置。雖然思想簡單,但在實際操作中并不是這樣。其中涉與到字符串的交換,起初使用“=〞賦值來交換,后來查書才了解字符串的賦值改用strcpy來完成。同時,有不少小問題通過自己不斷調(diào)試、修改能夠完全解決。
8、 現(xiàn)在存在的不足之處主要是在菜單上會出現(xiàn)一些小Bug。比如在調(diào)用二級菜單返回主菜單后,會出現(xiàn)無法退出等情況,需要進一步完善。另外系統(tǒng)上有些不足之處就是沒有判斷輸入圖書信息是否是現(xiàn)存館已有圖書,如果是的話應該將館存數(shù)量上做相應的修改。 通過本次課程設計,我們認識到必須結實掌握好根底知識,熟悉各種算法,并在這根底之上靈活利用。我們平時應該多練習,不能只看代碼而不去做,這樣是對編程提高不了多少的。通過我們對C語言以與數(shù)據(jù)結構有了更深刻的了解,增強了程序的編寫能力,鞏固了專業(yè)知識,對程序的模塊化觀念更清楚了。在程序的運行與調(diào)試過程中出現(xiàn)了很多錯誤,通過反復地復習課本上的相關知識,不停地修改與調(diào)試,
9、我們終于完成了這段程序。在調(diào)試過程中,認識到了數(shù)據(jù)結構的靈活性與嚴謹性,同一個功能可以由不同的語句來實現(xiàn),但編寫程序時要特別注意細節(jié)方面的問題,因為一個小小的疏忽就能導致整個程序不能運行。我也認識到了自己的薄弱之處,在以后的學習中要集中精力、端正態(tài)度,爭取把知識學得更扎實、更全面。
七、參考文獻
[1] 建學等著.數(shù)據(jù)結構課程設計案例精編.清華大學,2007
[2] 唐寧九等主編.數(shù)據(jù)結構與算法〔C++版〕實驗和課程設計教程. 清華大學,2008〕
[3] 譚浩強著.C程序設計.清華大學,2010
八、 源代碼
#include 10、loc.h>
#include 11、Type data[MaxSize],data1[MaxSize];
int length;
} SqList;
void InitList(SqList *&L) //初始化線性表
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
int ListEmpty(SqList *L) //判斷線性表是否為空
{
return(L->length==0);
}
void AddBook(S 12、qList *&L) //添加圖書信息
{
int bz=0;
printf("請輸入圖書信息!\n");
printf("書號\t書名\t作者\t\t館存數(shù)量〔整型〕\t價格\n");
scanf("%s %s %s %s %d %s",L->data[L->length].isbn,L->data[L->length].name,L->data[L->length].writer,L->data[L->length].producter,&L->data[L->length].num,L->data[L->len 13、gth].price);
printf("\n");
for(int i=0;i 14、("請輸入你想要查找圖書的書號:");
char isbn[30];
scanf("%s",&isbn);
int i=0;
while(i 15、e,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
void Search_n(SqList *&L) //按書名查詢
{
printf("請輸入你想查找圖書的書名:");
char name[30];
scanf("%s",&name);
int i=0,b=0;
for(i;i 16、=0)
{
printf("圖書館沒有此圖書!\n");
}
else
{
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
for(i=0;i 17、rice);
printf("\n");
}
}
}
}
void Search_w(SqList *&L) //按作者查詢
{
printf("請輸入你想要查找圖書的 ");
char writer[30];
scanf("%s",&writer);
int i=0,b=0;
for(i;i 18、作品共有%d本,信息如下:\n",writer,b);
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
for(i=0;i 19、
}
}
void Search_p(SqList *&L) //按查詢
{
printf("請輸入你想要查找圖書的:");
char producter[30];
scanf("%s",&producter);
int i=0,c=0;
for(i;i 20、ucter,c);
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
for(i=0;i 21、 Revise_i(SqList *&L) //按書號修改圖書
{
printf("請輸入你要修改圖書的書號:");
char isbn[30];
scanf("%s",&isbn);
printf("你要修改的圖書信息如下:\n");
int i=0,v=0;
while(i 22、
printf("%s\t《%s》\t%s\t%s\t%d冊\t%s元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
printf("請輸入圖書信息!\n");
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
scanf("%s %s %s %s %d 23、 %s",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,&L->data[i].num,L->data[i].price);
for(v=0;v 24、intf("修改圖書信息成功!\n");
}
}
void Revise_n(SqList *&L) //按書名修改圖書
{
printf("請輸入你要修改圖書的書名:");
char name[30];
scanf("%s",&name);
printf("你要修改的圖書信息如下:\n");
int i=0,a=0;
for(i;i 25、
{
char isbn2[30];
printf("符合條件的圖書共有%d本,信息如下:\n",a);
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
for(int o=0;o 26、].producter,L->data[o].num,L->data[o].price);
printf("\n");
}
printf("請輸入你想要修改的書籍的書號:");
scanf("%d",&isbn2);
int t=0,e=0;
for(t;t 27、ta[e].isbn,L->data[e].name,L->data[e].writer,L->data[e].producter,L->data[e].num,L->data[e].price);
printf("\n");
printf("請輸入圖書信息!\n");
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
scanf("%s %s %s %s %d %s",L->data[e].isbn,L->data[e].name,L->data[e].writer,L->dat 28、a[e].producter,&L->data[e].num,L->data[e].price);
for(t=0;t 29、 //按書號刪除圖書
{
printf("請輸入你要刪除圖書的書號:\n");
char isbn[30];
scanf("%s",&isbn);
int i=0;
while(i 30、;j++)
L->data[j]=L->data[j+1];
L->length--;
}
}
void Delete_n(SqList *&L) //按書名刪除圖書
{
printf("請輸入你要刪除圖書的書名:\n");
char name[30];
scanf("%s",&name);
int i=0,a=0,e=0;
for(i;i 31、
char isbn2[30]; //書名一樣時按書號刪除
printf("符合條件的圖書共有%d本,信息如下:\n",a);
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
for(int o=0;o 32、,L->data[o].num,L->data[o].price);
printf("\n");
}
printf("請輸入你想要刪除的書籍的書號:");
scanf("%d",&isbn2);
int t=0;
for(t;t 33、data[j]=L->data[j+1];
L->length--;
}
}
void BorrowBook(SqList *&L) //圖書借閱
{
printf("請輸入你想要借的圖書的書號:");
char isbn[30];
scanf("%s",&isbn);
int i=0;
while(i 34、data[i].num==0)
{
printf("該圖書已經(jīng)全部借出!\n");
}
else
{
printf("圖書%s借閱成功!\n",L->data[i].name);
L->data[i].num--;
}
}
}
void BackBook(SqList *&L) //圖書歸還
{
printf("請輸入你想要歸還的圖書的書號:");
char isbn[30];
scanf("%s",&isbn);
int i=0;
while(i 35、0)
{
i++;
}
if(i>=L->length)
{
printf("這本圖書不是我們圖書館所藏!\n");
}
else
{
printf("圖書%s歸還成功!\n",L->data[i].name);
L->data[i].num++;
}
}
void Sort_i(SqList *&L) //按書號排序
{
for(int i=0;i 36、-i;j++)
{
if(strcmp(L->data[j].isbn,L->data[j+1].isbn)>0)
{
strcpy(L->data1[j].isbn,L->data[j].isbn);
strcpy(L->data[j].isbn,L->data[j+1].isbn);
strcpy(L->data[j+1].isbn,L->data1[j].isbn);
strcpy(L->data1[j].name,L->data[j].name);
strcpy(L->data[j].name,L->data[j+1].name);
strcpy(L-> 37、data[j+1].name,L->data1[j].name);
strcpy(L->data1[j].writer,L->data[j].writer);
strcpy(L->data[j].writer,L->data[j+1].writer);
strcpy(L->data[j+1].writer,L->data1[j].writer);
strcpy(L->data1[j].producter,L->data[j].producter);
strcpy(L->data[j].producter,L->data[j+1].producter);
strcpy(L 38、->data[j+1].producter,L->data1[j].producter);
L->data1[j].num=L->data[j].num;
L->data[j].num=L->data[j+1].num;
L->data[j+1].num=L->data1[j].num;
strcpy(L->data1[j].price,L->data[j].price);
strcpy(L->data[j].price,L->data[j+1].price);
strcpy(L->data[j+1].price,L->data1[j].price);
39、
}
}
}
printf("書號\t書名\t作者\t\t館存數(shù)量\t價格\n");
for (i=0;i 40、
{
for(int i=0;i 41、L->data[j].name);
strcpy(L->data[j].name,L->data[j+1].name);
strcpy(L->data[j+1].name,L->data1[j].name);
strcpy(L->data1[j].writer,L->data[j].writer);
strcpy(L->data[j].writer,L->data[j+1].writer);
strcpy(L->data[j+1].writer,L->data1[j].writer);
strcpy(L->data1[j].producter,L->data[j].producte 42、r);
strcpy(L->data[j].producter,L->data[j+1].producter);
strcpy(L->data[j+1].producter,L->data1[j].producter);
L->data1[j].num=L->data[j].num;
L->data[j].num=L->data[j+1].num;
L->data[j+1].num=L->data1[j].num;
strcpy(L->data1[j].price,L->data[j].price);
strcpy(L->data[j].price,L->data 43、[j+1].price);
strcpy(L->data[j+1].price,L->data1[j].price);
}
for(int t=0;t 44、);
strcpy(L->data[t+1].isbn,L->data1[t].isbn);
strcpy(L->data1[t].name,L->data[t].name);
strcpy(L->data[t].name,L->data[t+1].name);
strcpy(L->data[t+1].name,L->data1[t].name);
strcpy(L->data1[t].writer,L->data[t].writer);
strcpy(L->data[t].writer 45、,L->data[t+1].writer);
strcpy(L->data[t+1].writer,L->data1[t].writer);
strcpy(L->data1[t].producter,L->data[t].producter);
strcpy(L->data[t].producter,L->data[t+1].producter);
strcpy(L->data[t+1].producter,L->data1[t].producter);
L->data1[t].num=L->data[t 46、].num;
L->data[t].num=L->data[t+1].num;
L->data[t+1].num=L->data1[t].num;
strcpy(L->data1[t].price,L->data[t].price);
strcpy(L->data[t].price,L->data[t+1].price);
strcpy(L->data[t+1].price,L->data1[t].price);
}
}
}
}
}
printf("書號\t書名\t作者\t\ 47、t館存數(shù)量\t價格\n");
for (i=0;i 48、-----------\n");
printf("\t 1.按 書 名進展查詢 \n\n");
printf("\t 2.按作者名進展查詢 \n\n");
printf("\t 3.按進展查詢 \n\n");
printf("\t 0.返回主菜單 \n");
printf("\n\t----------------------------------------\n");
printf 49、("請選擇功能〔0~3〕:");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Search_n(L);system("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(" 50、輸入有誤,請重新輸入!");system("pause");system("cls");
}
menu1(L);
}
void menu2(SqList *&L)
{
printf("\n\t--------------------------------------------\n");
printf("\t 1.按書號進展圖書的修改 \n\n");
printf("\t 2.按書名進展圖書的修改 \n\n");
printf("\t 0.返回主菜單 51、 \n");
printf("\n\t--------------------------------------------\n");
printf("請選擇功能〔0~2〕:");
int choice;
scanf("%d",&choice);
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("c 52、ls");menu(L);break;
default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");
}
menu2(L);
}
void menu3(SqList *&L)
{
printf("\n\t--------------------------------------------\n");
printf("\t 1.按書號進展圖書的刪除 \n\n");
printf("\t 2.按書名進展圖書的刪除 \n\n" 53、);
printf("\t 0.返回主菜單 \n");
printf("\n\t--------------------------------------------\n");
printf("請選擇功能〔0~2〕:");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Delete_i(L);system("pause");system("cls");break;
case 2:Delete_n(L);system("pause");s 54、ystem("cls");break;
case 0:system("cls");menu(L);break;
default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");
}
menu3(L);
}
void menu4(SqList *&L)
{
printf("\n\t--------------------------------------------\n");
printf("\t 1.按書號進展圖書的排序 \n\n");
printf("\t 55、 2.按作者進展圖書的排序 \n\n");
printf("\t 0.返回主菜單 \n");
printf("\n\t--------------------------------------------\n");
printf("請選擇功能〔0~2〕:");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Sort_i(L);system("pause");system("cls");break;
case 56、2:Sort_n(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");
}
menu4(L);
}
void menu5(SqList *&L)
{
printf("\n\t---------------------------------------\n");
printf("\t 1.圖書借閱 \n\n 57、");
printf("\t 2.圖書歸還 \n\n");
printf("\t 0.返回主菜單 \n");
printf("\n\t---------------------------------------\n");
printf("請選擇功能〔0~2〕:");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:BorrowBook(L);system("pause");system( 58、"cls");break;
case 2:BackBook(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");
}
menu5(L);
}
int menu(SqList *&L)
{
printf("\n\t\t ★簡易圖書管理系統(tǒng)★ 59、 ");
printf("\n\t ――――――――――――――――\n");
printf("\t | 1.圖書信息錄入 |\n\n");
printf("\t | 2.圖書信息查詢 |\n\n");
printf("\t | 3.圖書信息排序 |\n\n");
printf("\t | 4.圖書信息修改 |\n\n");
printf("\t | 5.圖書信息刪除 |\n\n");
printf("\t 60、 | 6.圖書借閱歸還 |\n\n");
printf("\t | 0.退出. | ");
printf("\n\t ――――――――――――――――\n");
printf("請選擇功能〔0~6〕:");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:AddBook(L);system("pause");system("cls");break;
case 2:system("cls");menu1(L);break;
61、case 3:system("cls");menu4(L);break;
case 4:system("cls");menu2(L);break;
case 5:system("cls");menu3(L);break;
case 6:system("cls");menu5(L);break;
case 0:printf("您已成功退出!");return 0;break;
default:printf("輸入有誤,請重新輸入!");system("pause");system("cls");
}
return 1;
}
void main()
{
SqList *L;
InitList(L);
while(menu(L));
}
24 / 24
- 溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案