圖書管理系統(tǒng)源碼及課程設(shè)計c語言版
《圖書管理系統(tǒng)源碼及課程設(shè)計c語言版》由會員分享,可在線閱讀,更多相關(guān)《圖書管理系統(tǒng)源碼及課程設(shè)計c語言版(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、圖書管理系統(tǒng) 題目: 圖書管理基本業(yè)務(wù)包括:對一本書的采編入庫、清除庫存、借閱、和歸還等等.試設(shè)計一個圖書管理系統(tǒng),將上述業(yè)務(wù)活動借助于計算機系統(tǒng)完成。 一、需求分析 1、每種書的登記內(nèi)容至少包括書號,書名,著者,現(xiàn)存量和總存量等五項。 2、系統(tǒng)的操作定義及其功能定義如下: ① 采編入庫:新購一種書,經(jīng)分類和確定書號之后的攻擊到圖書賬目中去,如果這種書在帳中已有,則只將總庫存量增加。 ② 清除庫存:某種書已無保留價值,將它從圖書賬目中注銷 ③ 借閱:如果將一種書的現(xiàn)存量大于零,則借出一本書登記借閱者的圖書證號和歸還期限。 ④ 歸還:注銷對借閱者的登記,改變該書的現(xiàn)
2、存量 二、概要設(shè)計 要實現(xiàn)上述需求,需用到 查找、排序的算法及定義. ADT StaticSearchTable { 數(shù)據(jù)對象D: D是具有相同特性的數(shù)據(jù)元素的集 合。每個數(shù)據(jù)元素含有類型相同的關(guān)鍵 字,可唯一標(biāo)識數(shù)據(jù)元素。 數(shù)據(jù)關(guān)系R:數(shù)據(jù)元素同屬一個集合。 基本操作 P: Create(&ST, n); Destroy(&ST); Search(ST, key); Traverse(ST, Visit()); } ADT StaticSearchTable Create(&ST, n);操作結(jié)果:構(gòu)造一個含n個數(shù)據(jù)
3、 元素的靜態(tài)查找表ST。 Destroy(&ST);初始條件:靜態(tài)查找表ST存在; 操作結(jié)果:銷毀表ST。 int Search_Seq(SSTable ST, KeyType key) { // 在順序表ST中順序查找其關(guān)鍵字等于 //key的數(shù)據(jù)元素。若找到,則函數(shù)值為 // 該元素在表中的位置,否則為0。 ST。elem[0]。key = key; // “哨兵” for(i=ST。length;ST。elem[i].key!=key; —-i); // 從后往前找 return i;
4、 // 找不到時,i為0 } // Search_Seq、 動態(tài)查找表: ADT DynamicSearchTable 數(shù)據(jù)對象D:D是具有相同特性的數(shù)據(jù)元素的集 合。每個數(shù)據(jù)元素含有類型相同的關(guān)鍵 字,可唯一標(biāo)識數(shù)據(jù)元素. 數(shù)據(jù)關(guān)系R:數(shù)據(jù)元素同屬一個集合 InitDSTable(&DT);操作結(jié)果:構(gòu)造一個空的動態(tài)查找表DT. DestroyDSTable(&DT);初始條件:態(tài)查找動表DT存在 操作結(jié)果:銷毀動態(tài)查找表DT InsertDSTable(&DT, e);初始條件:動態(tài)查找表DT存在,e 為待插入的數(shù)據(jù)元素;若DT中不存在其關(guān)鍵字 操作
5、結(jié)果:等于 e.key 的 數(shù)據(jù)元素,則插入 e 到DT. 圖書結(jié)構(gòu)體的定義: typedef struct { char number[10]; //書號 char name[20]; //書名 char author[20]; //作者 int countbook; //庫存 int shY; //剩余量 }mbook; typedef struct { int count;//書的本數(shù) mbook book[100];//最大可有100本書 }mlibrary; mlibrary library;
6、
三、詳細設(shè)計
#include
7、10]; char limit_date[8]; }BO; typedef struct reader { char reader_num[10]; char reader_name[10]; int right; BO borrow[Max]; struct reader *next; }RD; BK *h_book; RD *h_reader; void Login(); int Menu(); void Init(); void Init_book(); void Menu_select();
8、 void Insert_New_Book(); void Find_Book(); void add_reader(); void Print_reader(); void Print_book(); void Borrow_Book(); void Return_Book(); void Save(); void Save_Book(); void Save_Reader(); void Load(); void Load_Reader(); void Load_Book();
9、 int Menu() /*主菜單*/ { int dm; printf(”\n\t\t圖書管理系統(tǒng)主菜單\n”); printf("=================================================\n"); printf("〈<<〈\t0--—-退出系統(tǒng) 〉>〉〉\n"); printf("〈〈〈〈\t1——-—采編入庫 >>〉>\n"); printf(”<〈<<\t2——--登記讀者 〉>>>\n”); printf(”<〈<〈\t3-—-—借閱登記 >>
10、>〉\n"); printf(”〈〈<〈\t4———還書管理 >>〉>\n "); printf("<〈〈〈\t5———查詢圖書信息 〉〉>>\n"); printf(”<<〈<\t6——--查詢讀者信息 >>>〉\n"); printf("=================================================\n"); printf(”請選擇相應(yīng)的代碼:”); for(;;) { scanf(”%d",&dm); if(dm〈0||dm〉6) printf("\n錯誤!請重新
11、輸入:”); else break; } return dm; } void Menu_select()/*主菜單選擇函數(shù)*/ { for(;;) { switch(Menu()) /*功能選擇*/ { case 0: system(”cls"); Save(); printf("\n\n\t文件保存成功!\n”); printf("\n\n\t歡迎下次使用本系統(tǒng)!\n"); getch(); exit(0); case 1:Insert_New_Book();break; case 2:add_reade
12、r();break; case 3:Borrow_Book();break; case 4:Return_Book();break; case 5:Print_book();break; case 6:Print_reader();break; default:printf(”\n錯誤!”); exit(0);} } } void Init() /*初始化*/ { Init_book(); } void Init_book() /*初始化圖書信息*/ { BK *p0; printf("\n圖書初始化開始,請輸入圖書信息
13、。。\n包括編號.書名.數(shù)量..\n"); p0=(BK*)malloc(sizeof(BK)); h_book=p0; printf(”\n請輸入圖書信息:\n"); printf(”圖書編號:”); /*輸入圖書編號(唯一)*/ scanf("%s”,p0-〉book_num); printf(”圖書名稱:"); /*輸入圖書名稱*/ scanf(”%s",p0->book_name); printf("圖書作者:"); /*輸入圖書作者*/ scanf("%s",p0
14、-〉book_writer); printf(”圖書數(shù)量:”); /*輸入圖書數(shù)量*/ scanf(”%d”,&p0-〉book_kc); p0-〉book_xy=p0—>book_kc; /*開始時圖書現(xiàn)有量和庫存量相等*/ p0—〉next=NULL; printf(”\n圖書信息初始化完畢!按任意鍵繼續(xù)下一步操作。。\n"); getch(); system(”cls"); } void Insert_New_Book()/*新書入庫*/ { BK *p,*p0,*p1; p
15、=p1=h_book; printf("\n新書入庫模塊。.。\n"); printf("\n請輸入新書信息。.\n包括書號。書名.數(shù)量。。\n"); p0=(BK *)malloc(sizeof(BK)); printf("圖書編號:”); scanf(”%s",p0—>book_num); while(strcmp(p0-〉book_num,p1->book_num)!=0&&p1->next!=NULL) p1=p1—>next; if(strcmp(p0-〉book_num,p1—〉book_num)==0) /*此處分兩種情況,
16、若圖書編號存在,則直接進庫,只須輸入書的數(shù)量*/ { printf(”\n此編號圖書已存在!!直接入庫!\n”); printf("圖書數(shù)量:"); scanf("%d",&p0—>book_kc); p1-〉book_kc+=p0—〉book_kc; p1—〉book_xy+=p0—〉book_kc; } else/*若不存在,則需要輸入其他的信息 ,然后在進行插入操作*/ { printf("圖書名稱:"); scanf("%s”,p0-〉book_name)
17、; printf(”圖書作者:"); scanf("%s",p0—〉book_writer); printf(”圖書數(shù)量:"); scanf(”%d”,&p0->book_kc); while(p-〉next) { p=p->next; } if(h_book==NULL) h_book=p0; /*此處分兩種情況,鏈表中沒有數(shù)據(jù),head直接指向p0處*/ else p—>next=p0; /*此處分兩種情況,鏈表中有數(shù)據(jù),鏈表中最后元素的next指向p0處*/ p0—〉next=N
18、ULL; p0—〉book_xy=p0—>book_kc; } printf(”\n新書入庫完畢!按任意鍵繼續(xù)下一步操作.。\n”); getch(); system(”cls”); } void add_reader()/*添加讀者*/ { RD *p0; int i; printf("\n讀者初始化開始,請輸入讀者信息.。\n包括書證號。姓名。。\n"); p0=(RD*)malloc(sizeof(RD)); /*申請新結(jié)點存儲空間*/ h_reader=p0; printf(”\n請輸入讀者的信
19、息:\n”); printf("讀者書證號:”); scanf(”%s",p0-〉reader_num); printf(”讀者姓名:"); scanf("%s",p0->reader_name); p0—〉right=0; for(i=0;i〈Max;i++) { strcpy(p0—〉borrow[i].borrow_book_num,”0”); /*所借圖書直接置為0(即沒有借書)*/ strcpy(p0—〉borrow[i].limit_date,”0"); }
20、 p0—〉next=NULL; printf(”\n讀者信息初始化完畢!按任意鍵繼續(xù)下一步操作..\n”); getch(); system(”cls"); } void Borrow_Book() /*借書模塊*/ { BK *p0; RD *p1; char bo_num[10],rea_num[10],lim_date[8]; int i; p0=h_book; p1=h_reader; printf("\n借書模塊..。\n”); printf("\n請輸入借書的讀者書證號:"); scanf(”%s”,rea_num);
21、 while(p1—〉next!=NULL&&strcmp(rea_num,p1—〉reader_num)!=0) p1=p1—>next; if(p1—〉next==NULL&&strcmp(rea_num,p1-〉reader_num)!=0) { printf(”\n此讀者編號不存在!按任意鍵返回..\n"); goto END; } printf("\n請輸入你要借的書的編號:”); scanf("%s”,bo_num); while(strcmp(bo_num,p0—〉b
22、ook_num)!=0&&p0—>next!=NULL) p0=p0—〉next; if(p0—〉next==NULL&&strcmp(bo_num,p0—〉book_num)!=0) { printf("\n此圖書編號不存在!按任意鍵返回.。\n”); } else if(p0—>book_xy〈=0) { printf("\n抱歉,此書已借完!請等待新書的到來!!\n按任意鍵返回。..."); } else if(p1-〉right〉
23、=Max)
{
printf(”\n不好意思,借書數(shù)目已滿!不能借書!\n按任意鍵返回。..。");
}
else if(strcmp(p1—>borrow[0]。borrow_book_num,”0")!=0)
{
for(i=0;i
24、 } else if(strcmp(p1-〉borrow[i]。borrow_book_num,”0")==0) { printf(”\n請輸入你要歸還圖書的日期:"); scanf("%s",lim_date); strcpy(p1->borrow[p1—〉right++].borrow_book_num,bo_num); strcpy(p1—>borrow[p1->right—1]。limit_date,lim_date); p0—>book_xy——;
25、 printf(”\n讀者編號%s借書完畢!按任意鍵繼續(xù)下步操作.。”,p1-〉reader_num); } } } else { printf(”\n請輸入你要歸還圖書的日期:"); scanf(”%s",lim_date); strcpy(p1—>borrow[p1-〉right++].borrow_book_num,bo_num); strcpy(p1—〉borrow[p1-〉right-1]。limit_date ,lim
26、_date ); p0->book_xy——; printf("\n讀者編號%s借書完畢!按任意鍵繼續(xù)下步操作..”,p1->reader_num); } END:getch(); system("cls"); } void Return_Book() /*還書模塊*/ { BK *p; RD *q; int i,j,find=0; char return_book_num[10],return_reader_num[10]; p=h_book; q=h_reader; printf("\n還書模塊..。\n");
27、printf("\n請輸入要還書的讀者編號:"); scanf(”%s”,return_reader_num); while(q—〉next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0) q=q->next; if(q—〉next==NULL&&strcmp(return_reader_num,q-〉reader_num)!=0) { find=2; printf("\n此讀者編號不存在!按任意鍵返回..\n"); goto end; } prin
28、tf(”\n請輸入讀者還書的編號:”); scanf("%s”,return_book_num); while(p-〉next!=NULL&&strcmp(return_book_num,p->book_num)!=0) p=p—>next; if(p—〉next==NULL&&strcmp(return_book_num,p—〉book_num)!=0) { find=2; printf("\n錯誤!此圖書編號不存在!按任意鍵返回。.\n”); goto end; } for(
29、i=0;i
30、it_date); } strcpy(q—>borrow[Max—1].borrow_book_num,"0"); strcpy(q->borrow[Max—1]。limit_date,"0”); p->book_xy++; q—〉right--; printf(”\n編號%s的讀者還書完畢!按任意鍵繼續(xù)下步操作.。",return_reader_num); } if(find==0) printf(”\n錯誤!此讀者未借此書!按任意鍵
31、返回。.\n”); end: getch(); system("cls”); } void Print_book() /*查詢圖書信息*/ { BK *p; p=h_book; printf(”\n圖書信息如下:\n\n”); printf(”圖書編號\t圖書名稱\t圖書作者\t現(xiàn)有\(zhòng)t\t庫存\n"); while(p!=NULL) { printf(”%s\t\t%s\t\t%s\t\t%d\t\t%d\n”,p-〉book_num,p—>book_name,p—>book_writer,p—>book_xy,p—>book_kc);
32、 p=p->next; } printf("\n圖書信息打印完畢!按任意鍵繼續(xù)下一步操作。.”); getch(); system(”cls”); } void Print_reader() /*查詢讀者信息*/ { RD *p; int i; p=h_reader; printf("\n讀者信息如下:\n\n”); printf(”讀者書證號\t\t讀者姓名\n"); printf(”\n"); while(p!=NULL) { printf("\t%s\t\t%s”,p-〉reader_num,p->reader_name);
33、 for(i=0;i〈Max;i++) { printf("\n”); printf(”圖書編號”,i+1); printf(”\t還書日期",i+1); printf(”\n"); printf("\t%s”,p->borrow[i].borrow_book_num); printf("\t\t%s”,p->borrow[i].limit_date); } printf(”\n”); p=p-〉next; } printf(”\n讀者信息打印完畢!按任意鍵繼續(xù)下一步操作。.”); getch(); sys
34、tem("cls”); } void Save() /*保存信息*/ { Save_Reader(); Save_Book(); } void Save_Reader() /*保存讀者信息*/ { FILE *fp_reader; RD *p,*p0; p=h_reader; if((fp_reader=fopen("Reader。txt","wb"))==NULL) /*創(chuàng)建文件,進行保存*/ { printf(”\n文件保存失敗!\n請重新啟動本系統(tǒng)。。.\n"); exit(0); } while(p!=NULL) {
35、 if(fwrite(p,sizeof(RD),1,fp_reader)!=1) /*將鏈表中的信息寫入文件中*/ printf("\n寫入文件失?。n請重新啟動本系統(tǒng)!\n"); p0=p; p=p—>next; free(p0); /*釋放所有結(jié)點*/ } h_reader=NULL; fclose(fp_reader); /*關(guān)閉文件*/ } void Save_Book() /*保存圖書信息*/ { FILE *fp_book; /*創(chuàng)建文件型指針*/ BK *p,*p0; p=h_book; if((fp_b
36、ook=fopen(”Book.txt","wb"))==NULL) /*創(chuàng)建文件,進行保存*/ { printf("\n文件保存失敗!\n請重新啟動本系統(tǒng)..。\n”); exit(0); } while(p!=NULL) { if(fwrite(p,sizeof(BK),1,fp_book)!=1) /*將鏈表中的信息寫入文件中*/ printf("\n寫入文件失?。n請重新啟動本系統(tǒng)!\n"); p0=p; p=p—>next; free(p0); } h_book=NUL
37、L; fclose(fp_book); /*關(guān)閉文件*/ } void Load() /*加載信息*/ { Load_Reader(); Load_Book(); } void Load_Reader() /*加載讀者信息*/ { RD *p1,*p2,*p3; FILE *fp; /*創(chuàng)建文件型指針*/ fp=fopen(”book。txt”,”rb”); /*打開文件*/ p1=(RD *)malloc(sizeof(RD)); fread(p1,sizeof(RD),1,fp); h
38、_reader=p3=p2=p1; while(! feof(fp)) /*讀出信息,重新鏈入鏈表*/ { p1=(RD *)malloc(sizeof(RD)); fread(p1,sizeof(RD),1,fp); p2->next=p1; p3=p2; p2=p1; } p3—〉next=NULL; free(p1); fclose(fp); /*關(guān)閉文件*/ } void Load_Book() /*加載圖書信息*/ { BK *p1,*p2,*p3; FILE *fp;
39、 /*創(chuàng)建文件型指針*/ fp=fopen("Book。txt",”rb"); /*打開文件*/ p1=(BK *)malloc(sizeof(BK)); fread(p1,sizeof(BK),1,fp); h_book=p3=p2=p1; while(! feof(fp)) /*讀出信息,重新鏈入鏈表*/ { p1=(BK *)malloc(sizeof(BK)); fread(p1,sizeof(BK),1,fp); p2-〉next=p1; p3=p2; p2=p1;
40、 } p3—〉next=NULL; free(p1); fclose(fp); /*關(guān)閉文件*/ } void main() { FILE *fp_book,*fp_reader; /*創(chuàng)建文件型指針*/ printf("************************************************\n”); printf(” 圖書管理系統(tǒng)演示 \n"); printf("*******************************************
41、*****\n"); if((fp_book=fopen("Book.txt","rb"))==NULL||(fp_reader=fopen(”Reader。txt”,"rb”))==NULL) { Init(); } else Load(); Menu_select(); /*調(diào)用主菜單*/ } 四、調(diào)試分析 1、設(shè)計程序中出現(xiàn)的問題不一一列舉,主要是由于知識掌握不 清,但是最后慢慢了解,多方學(xué)習(xí),解決。 2、在定義圖書的時候忘了一項 書號 結(jié)果最后無法輸入。粗心可以彌補 3、為了更好的使用循環(huán),設(shè)計了for語句,結(jié)果不能執(zhí)行,最后無奈只
42、能使用函數(shù)系統(tǒng) 另加函數(shù),在主函數(shù)里調(diào)用。
4、在打開文件的時候 fp 寫錯,經(jīng)過很多的調(diào)試沒成功,這也是個粗心錯誤,下次避免。
5、少加“;"的問題就不列舉了
五、用戶手冊
1、本程序運行前先新建一個文件夾,并且在文件夾里面新建一個名字叫l(wèi)ibrary。txt的文件,便于存放數(shù)據(jù)。
2、其余相應(yīng)的 沿用以前程序,需要輸入的時候有提醒。便于操作 詳細見圖
六、測試結(jié)果
廢話不說。有圖有真相!?。。?!
附錄:
1、本程序中含有文件操作,需先建文件再執(zhí)行程序。
2、
#include
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北師大版數(shù)學(xué)二年級下冊《買洗衣機》課件PPT版
- 小學(xué)生文明禮儀班會課件
- 質(zhì)量管理軟件質(zhì)量管理與質(zhì)量保證
- 勞務(wù)派遣與專業(yè)外包用工風(fēng)險防范
- 動物個體發(fā)育與演化課件
- 課外練習(xí)2_長方形和正方形的面積
- 合同法基本原理( 44頁)
- 醫(yī)師電子化注冊系統(tǒng)培訓(xùn)(2018醫(yī)師個人版)(PPT40頁)
- 百度汽車營銷
- 斗破蒼穹人物介紹PPT課件
- 養(yǎng)老地產(chǎn)解析
- 字詞句運用 (3)(精品)
- 大型財稅講座產(chǎn)說會流程
- 涂料銷售渠道開發(fā)
- 房地產(chǎn)業(yè)務(wù)流程管理_