圖書管理系統(tǒng)源碼及課程設計c語言版

上傳人:GCG1****010 文檔編號:57135561 上傳時間:2022-02-23 格式:DOC 頁數(shù):15 大?。?3KB
收藏 版權申訴 舉報 下載
圖書管理系統(tǒng)源碼及課程設計c語言版_第1頁
第1頁 / 共15頁
圖書管理系統(tǒng)源碼及課程設計c語言版_第2頁
第2頁 / 共15頁
圖書管理系統(tǒng)源碼及課程設計c語言版_第3頁
第3頁 / 共15頁

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《圖書管理系統(tǒng)源碼及課程設計c語言版》由會員分享,可在線閱讀,更多相關《圖書管理系統(tǒng)源碼及課程設計c語言版(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、圖書管理系統(tǒng) 題目: 圖書管理基本業(yè)務包括:對一本書的采編入庫、清除庫存、借閱、和歸還等等.試設計一個圖書管理系統(tǒng),將上述業(yè)務活動借助于計算機系統(tǒng)完成。 一、需求分析 1、每種書的登記內(nèi)容至少包括書號,書名,著者,現(xiàn)存量和總存量等五項。 2、系統(tǒng)的操作定義及其功能定義如下: ① 采編入庫:新購一種書,經(jīng)分類和確定書號之后的攻擊到圖書賬目中去,如果這種書在帳中已有,則只將總庫存量增加。 ② 清除庫存:某種書已無保留價值,將它從圖書賬目中注銷 ③ 借閱:如果將一種書的現(xiàn)存量大于零,則借出一本書登記借閱者的圖書證號和歸還期限。 ④ 歸還:注銷對借閱者的登記,改變該書的現(xiàn)

2、存量 二、概要設計 要實現(xiàn)上述需求,需用到 查找、排序的算法及定義. ADT StaticSearchTable { 數(shù)據(jù)對象D: D是具有相同特性的數(shù)據(jù)元素的集 合。每個數(shù)據(jù)元素含有類型相同的關鍵 字,可唯一標識數(shù)據(jù)元素。 數(shù)據(jù)關系R:數(shù)據(jù)元素同屬一個集合。 基本操作 P: Create(&ST, n); Destroy(&ST); Search(ST, key); Traverse(ST, Visit()); } ADT StaticSearchTable Create(&ST, n);操作結果:構造一個含n個數(shù)據(jù)

3、 元素的靜態(tài)查找表ST。 Destroy(&ST);初始條件:靜態(tài)查找表ST存在; 操作結果:銷毀表ST。 int Search_Seq(SSTable ST, KeyType key) { // 在順序表ST中順序查找其關鍵字等于 //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ù)元素含有類型相同的關鍵 字,可唯一標識數(shù)據(jù)元素. 數(shù)據(jù)關系R:數(shù)據(jù)元素同屬一個集合 InitDSTable(&DT);操作結果:構造一個空的動態(tài)查找表DT. DestroyDSTable(&DT);初始條件:態(tài)查找動表DT存在 操作結果:銷毀動態(tài)查找表DT InsertDSTable(&DT, e);初始條件:動態(tài)查找表DT存在,e 為待插入的數(shù)據(jù)元素;若DT中不存在其關鍵字 操作

5、結果:等于 e.key 的 數(shù)據(jù)元素,則插入 e 到DT. 圖書結構體的定義: 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、 三、詳細設計 #include #include #define Max 2 typedef struct book { char book_num[10]; char book_name[20]; char book_writer[10]; int book_xy; int book_kc; struct book *next; }BK; typedef struct borrow { char borrow_book_num[

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(”請選擇相應的代碼:”); 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)); /*申請新結點存儲空間*/ 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;iborrow[i]。borrow_book_num,bo_num)==0) { printf(”\n抱歉!同一個讀者不能同借兩本相同的書!\n”);

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;iborrow[i].borrow_book_num)==0) /*如果此讀者借了此書*/ { find=1; for(j=i;j〈Max-1;j++) { strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1]。borrow_book_num); strcpy(q->borrow[j].limit_date,q->borrow[j+1]。lim

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); /*釋放所有結點*/ } h_reader=NULL; fclose(fp_reader); /*關閉文件*/ } 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); /*關閉文件*/ } 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); /*關閉文件*/ } 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); /*關閉文件*/ } 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(); /*調用主菜單*/ } 四、調試分析 1、設計程序中出現(xiàn)的問題不一一列舉,主要是由于知識掌握不 清,但是最后慢慢了解,多方學習,解決。 2、在定義圖書的時候忘了一項 書號 結果最后無法輸入。粗心可以彌補 3、為了更好的使用循環(huán),設計了for語句,結果不能執(zhí)行,最后無奈只

42、能使用函數(shù)系統(tǒng) 另加函數(shù),在主函數(shù)里調用。 4、在打開文件的時候 fp 寫錯,經(jīng)過很多的調試沒成功,這也是個粗心錯誤,下次避免。 5、少加“;"的問題就不列舉了 五、用戶手冊 1、本程序運行前先新建一個文件夾,并且在文件夾里面新建一個名字叫l(wèi)ibrary。txt的文件,便于存放數(shù)據(jù)。 2、其余相應的 沿用以前程序,需要輸入的時候有提醒。便于操作 詳細見圖 六、測試結果 廢話不說。有圖有真相!?。。?! 附錄: 1、本程序中含有文件操作,需先建文件再執(zhí)行程序。 2、 #include c語言專用頭文件 #include 〈string。h> 字符串操作頭文件 #include 〈stdlib.h> 包含比較雜的頭函數(shù)文件 #include

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!