圖書管理系統(tǒng)源碼及課程設計c語言版
《圖書管理系統(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);操作結(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中順序查找其關鍵字等于 //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);操作結(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中不存在其關鍵字 操作
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、
三、詳細設計
#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(”請選擇相應的代碼:”); 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); /*關閉文件*/ } 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(); /*調(diào)用主菜單*/ } 四、調(diào)試分析 1、設計程序中出現(xiàn)的問題不一一列舉,主要是由于知識掌握不 清,但是最后慢慢了解,多方學習,解決。 2、在定義圖書的時候忘了一項 書號 結(jié)果最后無法輸入。粗心可以彌補 3、為了更好的使用循環(huán),設計了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、其余相應的 沿用以前程序,需要輸入的時候有提醒。便于操作 詳細見圖
六、測試結(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結(jié)
- 2024年小學高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學期小學語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告