圖書信息管理系統(tǒng)設(shè)計_第1頁
圖書信息管理系統(tǒng)設(shè)計_第2頁
圖書信息管理系統(tǒng)設(shè)計_第3頁
圖書信息管理系統(tǒng)設(shè)計_第4頁
圖書信息管理系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、東南大學(xué)C語言課程設(shè)計報告課程名稱: 計算機(jī)綜合課程設(shè)計學(xué) 院: 土木工程學(xué)院 設(shè)計題目: 圖書信息管理系統(tǒng)設(shè)計 級 別: A級 學(xué)生姓名: 學(xué) 號: 同組學(xué)生: 學(xué) 號: 指導(dǎo)教師: 2012年 09月05日 課程報告任務(wù)書題目圖書信息管理系統(tǒng)主要內(nèi)容圖書信息包括:登錄號,書名,作者名,分類號,出版單位,出版時間,價格等。試設(shè)計一圖書信息管理系統(tǒng),使之提供以下功能:1) 系統(tǒng)以菜單方式工作;2) 圖書信息錄入功能(圖書信息用文本文件形式保存);3) 圖書信息瀏覽功能;4) 查詢和排序功能:按書名查找;按作者名查找;5) 圖書信息刪除功能;6) 圖書信息修改功能。任務(wù)要求采用模塊化程序設(shè)計;鼓

2、勵可視化編程;源程序中應(yīng)有足夠的注釋;學(xué)生可自行增加新功能模塊(視情況可另外加分);必須上機(jī)調(diào)試通過;注重算法運用,優(yōu)化存儲效率與運算效率;需提交源程序(含有注釋)及相關(guān)文件(數(shù)據(jù)或數(shù)據(jù)庫文件);(cpp文件、txt或dat文件等)提交設(shè)計報告書成績評定評定教師摘要:隨著當(dāng)今社會發(fā)展,信息化水平逐步提高,對圖書管理有了新的要求,因此,編寫一個信息管理系統(tǒng)是十分必要的。為了滿足圖書管理的要求,通過計算機(jī)技術(shù)給圖書管理人員帶來便利。使用C語言編寫圖書管理系統(tǒng),其中主要運用了結(jié)構(gòu)化設(shè)計與鏈表結(jié)構(gòu)。本系統(tǒng)主要實現(xiàn)圖書信息管理的功能,通過此系統(tǒng)可對圖書館庫存圖書信息進(jìn)行管理和維護(hù)操作。實現(xiàn)了圖書館內(nèi)管理

3、的一般功能,包括圖書信息錄入、瀏覽、排序、刪除和修改等功能。所設(shè)計的系統(tǒng)以菜單方式工作,為用戶提供清晰的使用提示,依據(jù)用戶的選擇來進(jìn)行各種處理。圖書信息包括登錄號、書名、作者名、分類號、出版單位、出版時間、價格等。圖書信息的錄入和顯示要求有一定的規(guī)范格式,錄入的圖書信息用文件形式保存,并可以對其進(jìn)行瀏覽、查詢、刪除和修改等基本操作。關(guān)鍵字:圖書信息管理 C語言 鏈表 結(jié)構(gòu)目錄1. 設(shè)計的目的與要求-42. 分析-43. 總體設(shè)計-54. 主要功能算法-55. 完整程序及注釋-86. 調(diào)試分析-247. 總結(jié)-288. 答辯記錄-299. 教師意見-291. 設(shè)計的目的與要求設(shè)計的目的使用鏈表和

4、結(jié)構(gòu)等結(jié)構(gòu)數(shù)據(jù),編寫一C語言程序,實現(xiàn)圖書信 息管理的功能,通過此系統(tǒng)可對圖書館圖書信息進(jìn)行管理和維護(hù)等操作,給圖書管理人員帶來便利。設(shè)計的要求 圖書信息包括:登錄號,書名,作者名,分類號,出版單位,出版時間,價格等。試設(shè)計一圖書信息管理系統(tǒng),使之提供以下功能:(1) 系統(tǒng)以菜單方式工作(2)圖書信息錄入功能(圖書信息用文本文件形式保存)(3)圖書信息瀏覽功能(4)查詢和排序功能: 按書名查找 按作者名查找(5)圖書信息刪除功能(6)圖書信息修改功能2.分析根據(jù)題目要求,應(yīng)當(dāng)把圖書信息用結(jié)構(gòu)體形式輸入,再定義一個全局變量和文件指針進(jìn)行整個程序的運行,然后把圖書信息送到文件中,所以應(yīng)該提供一個結(jié)

5、構(gòu)體和文件的輸入輸出等操作;在程序中需實現(xiàn)圖書信息錄入,瀏覽,查詢,排序,刪除和修改等功能的操作,所以需要建立相應(yīng)的函數(shù)模塊來實現(xiàn);另外還需提供鍵盤式選擇菜單實現(xiàn)功能,在運行時達(dá)到所要目的。3.總體設(shè)計根據(jù)題目要求,我們經(jīng)過分析和討論后,決定將此系統(tǒng)分為十個功能模塊:(1) 菜單選擇模塊(2) 圖書信息錄入功能模塊(3) 圖書信息瀏覽功能模塊(4) 圖書信息查詢功能模塊(5) 圖書信息排序功能模塊(6) 圖書信息刪除功能模塊(7) 圖書信息修改功能模塊(8) 圖書數(shù)據(jù)保存功能模塊(9) 信息文件打開功能模塊(10) 退出系統(tǒng)功能模塊4. 主要功能的算法 4.1 錄入函數(shù)算法4.2 按書名查找算

6、法(按作者名與此類似) 4.3 刪除圖書信息算法(修改與此類似)#include /*引用庫函數(shù)*/#include # include # include # include # include typedef struct book_info/定義圖書信息的結(jié)構(gòu)體變量并聲明新的類型名 char AN10; /*登錄號*/ char name20; /*書名*/ char author20; /*作者名*/ char clc10; /*分類名*/ char company20; /*出版單位*/ char date20; /*出版日期*/ char price10; /*價格*/ struc

7、t book_info *next; Booklist,*Pointer;int num=0;/全局變量的定義Pointer Head=NULL;/頭指針為空FILE *fp;/指向文件的指針/*聲明函數(shù)*/int menu_select();/*主菜單函數(shù)*/void Insert(Pointer * Head);/*錄入函數(shù)*/void Scan(Pointer Head);/*顯示函數(shù)*/void Search_name(Pointer Head);/*按書名查找函數(shù)*/void Search_author(Pointer Head);/*按作者名查找函數(shù)*/void Listbynam

8、e(Pointer *Head);/*按書名排序函數(shù)*/void Delete(Pointer * Head);/刪除函數(shù)void Update(Pointer Head);/修改函數(shù)void Save();/用文本文件形式保存函數(shù)void Read();/讀入文本文件函數(shù)void Exit();/退出函數(shù)void main()/主函數(shù) system(cls);/*運行前清屏*/ for(;) switch(menu_select() case 1:Insert(& Head); break; case 2:Scan(Head); break; case 3:Search_name(Head)

9、; break; case 4:Search_author(Head); break; case 5:Listbyname(&Head); break; case 6:Delete(&Head); break; case 7:Update(Head); break; case 8:Save(); break; case 9:Read(); break; case 0:Exit(); default: putchar(a); menu_select()/主菜單函數(shù) int a; printf(nttt歡迎使用圖書信息管理系統(tǒng)nnnnntt * 請按任意鍵進(jìn)入系統(tǒng)菜單! * n); getch()

10、; system(cls); printf(tt*MENU*n);/主菜單 printf(tt 1. 錄入圖書信息n); printf(tt 2. 瀏覽圖書信息n); printf(tt 3. 按書名查詢圖書信息n); printf(tt 4. 按作者名查詢圖書信息n); printf(tt 5. 圖書信息排序n); printf(tt 6. 刪除圖書信息n); printf(tt 7. 修改圖書信息n); printf(tt 8. 圖書數(shù)據(jù)保存n); printf(tt 9. 圖書信息文件打開n); printf(tt 0. 退出n); printf(tt*n); do printf(nt請

11、選擇您所需要的服務(wù):); scanf(%d,&a); while (a9); return a;void Insert(Pointer * Head) /錄入圖書信息函數(shù)char AN10 ;char c;Pointer p,q,r;printf(ntt* 請輸入圖書信息 *n);/*交互輸入*/ printf(ntt請輸入登錄號:);scanf(%s,AN);p=q= * Head;/檢測登錄號是否重復(fù)while(p!=NULL)if(strcmp(p-AN,AN)=0) printf (已經(jīng)有相同的登錄號:);return; else q=p;p=p-next;r=(Pointer)mal

12、loc(sizeof(Booklist);r-next=NULL;if(r=NULL)printf(分配空間失敗!);return;if(q=NULL)* Head=r;elseq-next=r; strcpy(r-AN,AN); printf(ntt輸入書名:); /錄入圖書信息 scanf(%s,r-name); getchar(); printf(ntt輸入作者名:); scanf(%s,r-author); getchar(); printf(ntt輸入分類號:); scanf(%s,r-clc) ; getchar(); printf(ntt輸入出版單位:); scanf(%s,r-

13、company) ; getchar(); printf(ntt輸入出版日期:); gets(r-date) ; printf(ntt輸入價格:); scanf(%s,r-price); doprintf(ntt錄入成功!);num+;printf(選擇是否繼續(xù)錄入(Y/N)?:); /*連續(xù)錄入圖書信息*/getchar();scanf(%c,&c);if(c=y|c=Y)Insert(Head);else if(c=n|c=N) return; else printf(ntt輸入錯誤,請重新輸入!);while(c!=y&c!=n&c!=Y&c!=N);void Scan(Pointer

14、Head) /顯示圖書信息函數(shù)Pointer p;p=Head;if(p=NULL)printf(記錄為空);/檢測是否有圖書信息else printf(nt共有%d條記錄,num);while(p!=NULL) printf(nntt登錄號:%-10s,p-AN);/顯示圖書信息 printf(ntt書名: %-20s,p-name); printf(ntt作者名: %-20s,p-author); printf(ntt分類號: %-10s,p-clc); printf(ntt出版單位:%-20s,p-company); printf(ntt出版時間:%-20s,p-date); print

15、f(ntt價格: ¥%-10s,p-price); p=p-next;printf(ntt請按任意鍵回到主菜單);return;void Search_name(Pointer Head) /按書名查找函數(shù)int flag=0;/標(biāo)記變量的初值char name10;Pointer p;printf (n請輸入需要查詢的書名:);scanf(%s,name);printf(ntt* 以下是您查找的信息 *);p=Head;while(p!=NULL) if(strcmp(p-name,name)=0)/查找符合的圖書 printf(nt登錄號: %-10s,p-AN); printf(nt書名

16、: %-20s,p-name); printf(nt作者名: %-20s,p-author); printf(nt分類號: %-10s,p-clc); printf(nt出版單位:%-20s,p-company); printf(nt出版時間:%-20s,p-date); printf(nt價格: ¥%-10s,p-price); flag=1;/找到標(biāo)記變量設(shè)為1 p=p-next;/指針走到下一個節(jié)點 else p=p-next;if(flag=0)printf(ntt沒有相同書名紀(jì)錄);printf(ntt請按任意鍵返回主菜單);getchar();void Search_author(

17、Pointer Head) /按作者名查找函數(shù)int flag=0;char author10;Pointer p;printf (n請輸入需要查詢的作者名:);scanf(%s,author);printf(ntt* 以下是您查找的信息 *);p=Head;while(p!=NULL)/查找符合的圖書 if(strcmp(p-author,author)=0)/*找到圖書顯示信息*/ printf(nt登錄號: %-10s,p-AN); printf(nt書名: %-20s,p-name); printf(nt作者名: %-20s,p-author); printf(nt分類號: %-10s

18、,p-clc); printf(nt出版單位:%-20s,p-company); printf(nt出版時間:%-20s,p-date); printf(nt價格: ¥%-10s,p-price); flag=1; p=p-next; else p=p-next;if(flag=0)printf(ntt沒有相同作者名紀(jì)錄);printf(ntt請按任意鍵返回主菜單);getch();void Listbyname(Pointer *Head) /按書名排序函數(shù)Pointer p,q;int i,j;char t10;char c;if(Head=NULL)printf(ntt沒有任何資料!n)

19、;return;if(num=0)/檢查是否存在數(shù)據(jù)可供排序 printf(ntt圖書信息記錄為空!請按任意鍵返回主菜單。); getchar(); return;p=q=*Head;for(i=0;inum;i+)/排序 for (j=i+1;jnext;/使指針指向下一個結(jié)點 if(strcmp(q-name,p-name)0)/檢查二者排序先后 /p指針對應(yīng)數(shù)據(jù)應(yīng)排于q指針對應(yīng)數(shù)據(jù)后,p,q進(jìn)行數(shù)據(jù)交換 strcpy(t,p-AN); strcpy(p-AN,q-AN); strcpy(q-AN,t); strcpy(t,p-author); strcpy(p-author,q-auth

20、or); strcpy(q-author,t); strcpy(t,p-clc); strcpy(p-clc,q-clc); strcpy(q-clc,t); strcpy(t,p-company); strcpy(p-company,q-company); strcpy(q-company,t); strcpy(t,p-date); strcpy(p-date,q-date); strcpy(q-date,t); strcpy(t,p-name); strcpy(p-name,q-name); strcpy(q-name,t); strcpy(t,p-price); strcpy(p-pri

21、ce,q-price); strcpy(q-price,t); q=*Head;p=*Head;doprintf(nt排序完成,是否顯示(Y/N)?:); /*詢問是否顯示排序結(jié)果*/getchar();scanf(%c,&c);if(c=y|c=Y)Scan(*Head);/顯示排序結(jié)果else if(c=n|c=N) return;/返回主菜單 else printf(ntt輸入錯誤,請重新輸入!);/錯誤則繼續(xù)詢問while(c!=y&c!=n&c!=Y&c!=N); void Delete(Pointer *Head)/*刪除函數(shù)*/int flag=1;char AN10;char

22、c,z;Pointer p,q;printf(ntt* 圖書刪除 *n);printf(t請輸入要刪除圖書的信息的登錄號:);scanf(%s,AN);p=q=*Head;/*查找符合條件的圖書*/while(p!=NULL&flag)if(strcmp(p-AN,AN)=0)/*找到該圖書*/ printf(tn登錄號:%-10s,p-AN);/顯示即將要刪除的圖書的信息 printf(tn書名:%-20s,p-name); printf(tn作者名:%-20s,p-author); printf(tn分類號:%-10s,p-clc); printf(tn出版單位:%-20s,p-compa

23、ny); printf(tn出版時間:%-20s,p-date); printf(tn價格:¥%-10sn,p-price); printf(確定刪除?確定請輸Y,其它則不刪除);/詢問是否刪除getchar();scanf(%c,&z); if(z=Y|z=y) if(p=*Head)*Head=p-next;free(p);/*刪除圖書信息*/ elseq-next=p-next;free(p);flag=0; else printf(圖書信息未刪除,返回主菜單。); return; else q=p;p=p-next;/*指針走到下一個節(jié)點*/ printf(tt刪除成功!n);if(f

24、lag)printf(t沒有找到可以刪除的數(shù)據(jù)!);doprintf(選擇是否繼續(xù)刪除(Y/N)?:); /*連續(xù)刪除圖書信息*/getchar();scanf(%c,&c);if(c=y|c=Y)Delete(Head);/*繼續(xù)刪除*/else if(c=n|c=N) return;/*不刪除返回主菜單*/ else printf(ntt輸入錯誤,請重新輸入!);while(c!=y&c!=n&c!=Y&c!=N);void Update(Pointer Head)/*圖書信息修改函數(shù)*/int flag=1;char AN10;char c;Pointer p;printf(ntt* 圖

25、書信息修改 *n);printf(t請輸入要修改的圖書的登錄號:);scanf(%s,AN);/*查找符合條件的圖書*/p=Head;while(p!=NULL&flag)if(strcmp(p-AN,AN)=0) printf(ntt請輸入登錄號:);/*修改圖書信息*/ scanf(%s,p-AN); printf(ntt輸入書名:); scanf(%s,p-name); getchar(); printf(ntt輸入作者名:); scanf(%s,p-author); getchar(); printf(ntt輸入分類號:); scanf(%s,p-clc) ; getchar(); p

26、rintf(ntt輸入出版單位:); scanf(%s,p-company) ; getchar(); printf(ntt輸入出版日期:); gets(p-date); printf(ntt輸入價格:); scanf(%s,p-price); flag=0;printf(修改成功!n); else p=p-next;/*指針走到下一個節(jié)點*/if(flag)printf(ntt沒有該圖書記錄!);doprintf(選擇是否繼續(xù)修改(Y/N)?:); /*連續(xù)修改圖書信息*/getchar();scanf(%c,&c);if(c=y|c=Y)Update(Head);/*繼續(xù)修改*/else

27、if(c=n|c=N) return;/不修改,返回菜單 else printf(ntt輸入錯誤,請重新輸入!);while(c!=y&c!=n&c!=Y&c!=N);/輸入錯誤則繼續(xù)詢問void Save() /*以文本文件形式保存的函數(shù)*/Pointer p;p=Head;char file20; /*用來存放文件保存路徑以及文件名*/printf(請輸入文件路徑及文件名:);scanf(%s,file);if(fp=fopen(file,w+)=NULL)/*判斷能否打開文件*/printf(不能打開文件!n);return;while(p!=NULL)fprintf(fp,%st%st

28、%st%st%st%st%sn,p-AN,p-name,p-author,p-clc,p-company,p-date,p-price);/將數(shù)據(jù)寫入文件p=p-next;/*下移一個結(jié)點*/fclose(fp);/寫入完成,關(guān)閉文件printf(文件已經(jīng)保存!n);return ;void Read()/*讀入文本文件的函數(shù)*/Pointer p,q;int m=0;char file20;printf(請輸入文件路徑及文件名:);scanf(%s,file);/*輸入文件路徑及名稱*/if(fp=fopen(file,r+)=NULL)/檢查文件是否存在printf(不能打開文件!n);r

29、eturn;m=m+1;if(m=1)p=(Pointer)malloc(sizeof(Booklist);/*開辟一個新單元*/Head=p;/將p的地址賦給頭指針Headfscanf(fp,%st%st%st%st%st%st%stn,&p-AN,&p-name,&p-author,&p-clc,&p-company,&p-date,&p-price);/*文件讀入*/donum=num+1;/記錄書籍信息量if(num=1) /區(qū)別開鏈表開頭與中間的處理方法Head-next=p;else q-next=p;q=p;p=(Pointer)malloc(sizeof(Booklist); /*開辟一個新單元*/fscanf(fp,%st%st%st%st%st%st%stn,&p-AN,&p-name,&p-author,&p-clc,&p-company,&p-date,&p-price);/讀入文件數(shù)據(jù)while(!feof(fp);/檢查文件是否結(jié)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論