版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上東南大學C語言課程設(shè)計報告課程名稱: 計算機綜合課程設(shè)計 學 院: 土木工程學院 設(shè)計題目: 圖書信息管理系統(tǒng)設(shè)計 級 別: A級 學生姓名: 學 號: 同組學生: 學 號: 指導教師: 2012年 09月05日 課程報告任務(wù)書題目圖書信息管理系統(tǒng)主 要 內(nèi) 容圖書信息包括:登錄號,書名,作者名,分類號,出版單位,出版時間,價格等。試設(shè)計一圖書信息管理系統(tǒng),使之提供以下功能:1) 系統(tǒng)以菜單方式工作;2) 圖書信息錄入功能(圖書信息用文本文件形式保存);3) 圖書信息瀏覽功能;4) 查詢和排序功能: 按書名查找; 按作者名查找;5) 圖書信息刪除功能;6) 圖書信息修
2、改功能。任 務(wù) 要 求采用模塊化程序設(shè)計;鼓勵可視化編程;源程序中應(yīng)有足夠的注釋;學生可自行增加新功能模塊(視情況可另外加分);必須上機調(diào)試通過;注重算法運用,優(yōu)化存儲效率與運算效率;需提交源程序(含有注釋)及相關(guān)文件(數(shù)據(jù)或數(shù)據(jù)庫文件); (cpp文件、txt或dat文件等)提交設(shè)計報告書成績評定評定 教師摘要:隨著當今社會發(fā)展,信息化水平逐步提高,對圖書管理有了新的要求,因此,編寫一個信息管理系統(tǒng)是十分必要的。為了滿足圖書管理的要求,通過計算機技術(shù)給圖書管理人員帶來便利。使用C語言編寫圖書管理系統(tǒng),其中主要運用了結(jié)構(gòu)化設(shè)計與鏈表結(jié)構(gòu)。本系統(tǒng)主要實現(xiàn)圖書信息管理的功能,通過此系統(tǒng)可對圖書館庫
3、存圖書信息進行管理和維護操作。實現(xiàn)了圖書館內(nèi)管理的一般功能,包括圖書信息錄入、瀏覽、排序、刪除和修改等功能。所設(shè)計的系統(tǒng)以菜單方式工作,為用戶提供清晰的使用提示,依據(jù)用戶的選擇來進行各種處理。圖書信息包括登錄號、書名、作者名、分類號、出版單位、出版時間、價格等。圖書信息的錄入和顯示要求有一定的規(guī)范格式,錄入的圖書信息用文件形式保存,并可以對其進行瀏覽、查詢、刪除和修改等基本操作。關(guān)鍵字:圖書信息管理 C語言 鏈表 結(jié)構(gòu)目錄1. 設(shè)計的目的與要求-42. 分析-43. 總體設(shè)計-54. 主要功能算法-55. 完整程序及注釋-86. 調(diào)試分析-247. 總結(jié)-288. 答辯記錄-299. 教師意見
4、-29 1. 設(shè)計的目的與要求 1.1設(shè)計的目的 使用鏈表和結(jié)構(gòu)等結(jié)構(gòu)數(shù)據(jù),編寫一C語言程序,實現(xiàn)圖書信 息管理的功能,通過此系統(tǒng)可對圖書館圖書信息進行管理和維護等操作,給圖書管理人員帶來便利。 1.2設(shè)計的要求 圖書信息包括:登錄號,書名,作者名,分類號,出版單位,出版時間,價格等。試設(shè)計一圖書信息管理系統(tǒng),使之提供以下功能:(1) 系統(tǒng)以菜單方式工作(2)圖書信息錄入功能(圖書信息用文本文件形式保存)(3)圖書信息瀏覽功能(4)查詢和排序功能: 按書名查找 按作者名查找(5)圖書信息刪除功能(6)圖書信息修改功能2.分析根據(jù)題目要求,應(yīng)當把圖書信息用結(jié)構(gòu)體形式輸入,再定義一個全局變量和文件
5、指針進行整個程序的運行,然后把圖書信息送到文件中,所以應(yīng)該提供一個結(jié)構(gòu)體和文件的輸入輸出等操作;在程序中需實現(xiàn)圖書信息錄入,瀏覽,查詢,排序,刪除和修改等功能的操作,所以需要建立相應(yīng)的函數(shù)模塊來實現(xiàn);另外還需提供鍵盤式選擇菜單實現(xiàn)功能,在運行時達到所要目的。3.總體設(shè)計 根據(jù)題目要求,我們經(jīng)過分析和討論后,決定將此系統(tǒng)分為十個功能模塊:(1) 菜單選擇模塊(2) 圖書信息錄入功能模塊(3) 圖書信息瀏覽功能模塊(4) 圖書信息查詢功能模塊(5) 圖書信息排序功能模塊(6) 圖書信息刪除功能模塊(7) 圖書信息修改功能模塊(8) 圖書數(shù)據(jù)保存功能模塊(9) 信息文件打開功能模塊(10) 退出系統(tǒng)
6、功能模塊4. 主要功能的算法 4.1 錄入函數(shù)算法 4.2 按書名查找算法(按作者名與此類似) 4.3 刪除圖書信息算法(修改與此類似)4.4顯示函數(shù)算法5.完整程序及注釋#include<iostream.h> /*引用庫函數(shù)*/ #include <stdio.h># include <string.h># include <conio.h># include <stdlib.h># include <windows.h>typedef struct book_info/定義圖書信息的結(jié)構(gòu)體變量并聲明新的類型名 cha
7、r AN10; /*登錄號*/ char name20; /*書名*/ char author20; /*作者名*/ char clc10; /*分類名*/ char company20; /*出版單位*/ char date20; /*出版日期*/ char price10; /*價格*/ struct book_info *next; Booklist,*Pointer;int num=0;/全局變量的定義Pointer Head=NULL;/頭指針為空FILE *fp;/指向文件的指針 /*聲明函數(shù)*/int menu_select();/*主菜單函數(shù)*/void Insert(Poin
8、ter * Head);/*錄入函數(shù)*/void Scan(Pointer Head);/*顯示函數(shù)*/void Search_name(Pointer Head);/*按書名查找函數(shù)*/void Search_author(Pointer Head);/*按作者名查找函數(shù)*/void Listbyname(Pointer *Head);/*按書名排序函數(shù)*/void Delete(Pointer * Head);/刪除函數(shù)void Update(Pointer Head);/修改函數(shù)void Save();/用文本文件形式保存函數(shù)void Read();/讀入文本文件函數(shù)void Exit(
9、);/退出函數(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); break; case 4:Search_author(Head); break; case 5:Listbyname(&Head); break; case 6:Delete(&Head); break; case 7:Update(Hea
10、d); 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 * 請按任意鍵進入系統(tǒng)菜單! * n"); getch(); system("cls"); printf("tt*MENU*n");/主菜單 printf("tt 1. 錄入圖書信息n"); prin
11、tf("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
12、 0. 退出n"); printf("tt*n"); do printf("nt請選擇您所需要的服務(wù):"); scanf("%d",&a); while (a<0|a>9); return a;void Insert(Pointer * Head) /錄入圖書信息函數(shù)char AN10 ;char c;Pointer p,q,r;printf("ntt* 請輸入圖書信息 *n");/*交互輸入*/ printf("ntt請輸入登錄號:");scanf("%
13、s",AN);p=q= * Head;/檢測登錄號是否重復while(p!=NULL)if(strcmp(p->AN,AN)=0) printf ("已經(jīng)有相同的登錄號:");return; else q=p;p=p->next;r=(Pointer)malloc(sizeof(Booklist);r->next=NULL;if(r=NULL)printf("分配空間失敗!");return;if(q=NULL)* Head=r;elseq->next=r; strcpy(r->AN,AN); printf(&qu
14、ot;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->company) ; get
15、char(); 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(
16、c='n'|c='N') return; else printf("ntt輸入錯誤,請重新輸入!");while(c!='y'&&c!='n'&&c!='Y'&&c!='N');void Scan(Pointer Head) /顯示圖書信息函數(shù)Pointer p;p=Head;if(p=NULL)printf("記錄為空");/檢測是否有圖書信息else printf("nt共有%d條記錄",
17、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->dat
18、e); printf("ntt價格: ¥%-10s",p->price); p=p->next;printf("ntt請按任意鍵回到主菜單");return;void Search_name(Pointer Head) /按書名查找函數(shù)int flag=0;/標記變量的初值char name10;Pointer p;printf ("n請輸入需要查詢的書名:");scanf("%s",name);printf("ntt* 以下是您查找的信息 *");p=Head;while(p!=N
19、ULL) if(strcmp(p->name,name)=0)/查找符合的圖書 printf("nt登錄號: %-10s",p->AN); printf("nt書名: %-20s",p->name); printf("nt作者名: %-20s",p->author); printf("nt分類號: %-10s",p->clc); printf("nt出版單位:%-20s",p->company); printf("nt出版時間:%-20s"
20、,p->date); printf("nt價格: ¥%-10s",p->price); flag=1;/找到標記變量設(shè)為1 p=p->next;/指針走到下一個節(jié)點 else p=p->next;if(flag=0)printf("ntt沒有相同書名紀錄");printf("ntt請按任意鍵返回主菜單");getchar();void Search_author(Pointer Head) /按作者名查找函數(shù)int flag=0;char author10;Pointer p;printf ("n請輸
21、入需要查詢的作者名:");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
22、("nt分類號: %-10s",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沒有相同作者名紀錄");printf("ntt請按任意鍵返回主菜單");getch(
23、);void Listbyname(Pointer *Head) /按書名排序函數(shù)Pointer p,q;int i,j;char t10;char c;if(Head=NULL)printf("ntt沒有任何資料!n");return;if(num=0)/檢查是否存在數(shù)據(jù)可供排序 printf("ntt圖書信息記錄為空!請按任意鍵返回主菜單。"); getchar(); return;p=q=*Head;for(i=0;i<num;i+)/排序 for (j=i+1;j<num;j+) q=p; p=p->next;/使指針指向下一個
24、結(jié)點 if(strcmp(q->name,p->name)>0)/檢查二者排序先后 /p指針對應(yīng)數(shù)據(jù)應(yīng)排于q指針對應(yīng)數(shù)據(jù)后,p,q進行數(shù)據(jù)交換 strcpy(t,p->AN); strcpy(p->AN,q->AN); strcpy(q->AN,t); strcpy(t,p->author); strcpy(p->author,q->author); strcpy(q->author,t); strcpy(t,p->clc); strcpy(p->clc,q->clc); strcpy(q->clc,t)
25、; 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->price,q->price); strcp
26、y(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'&a
27、mp;&c!='n'&&c!='Y'&&c!='N'); void Delete(Pointer *Head)/*刪除函數(shù)*/int flag=1;char AN10;char c,z;Pointer p,q;printf("ntt* 圖書刪除 *n");printf("t請輸入要刪除圖書的信息的登錄號:");scanf("%s",AN);p=q=*Head;/*查找符合條件的圖書*/while(p!=NULL&&flag)if(s
28、trcmp(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->company); printf("tn出版時間:%-20s",p
29、->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("圖書信息未刪除,返回主菜單。&quo
30、t;); return; else q=p;p=p->next;/*指針走到下一個節(jié)點*/ printf("tt刪除成功!n");if(flag)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') r
31、eturn;/*不刪除返回主菜單*/ 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* 圖書信息修改 *n");printf("t請輸入要修改的圖書的登錄號:");s
32、canf("%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
33、->author); getchar(); printf("ntt輸入分類號:"); scanf("%s",p->clc) ; getchar(); printf("ntt輸入出版單位:"); scanf("%s",p->company) ; getchar(); printf("ntt輸入出版日期:"); gets(p->date); printf("ntt輸入價格:"); scanf("%s",p->price); fla
34、g=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 if(c='n'|c='N') return;/不修改,返回菜單 e
35、lse 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,&qu
36、ot;w+")=NULL)/*判斷能否打開文件*/printf("不能打開文件!n");return;while(p!=NULL)fprintf(fp,"%st%st%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
37、Read()/*讀入文本文件的函數(shù)*/Pointer p,q;int m=0;char file20;printf("請輸入文件路徑及文件名:");scanf("%s",file);/*輸入文件路徑及名稱*/if(fp=fopen(file,"r+")=NULL)/檢查文件是否存在printf("不能打開文件!n");return;m=m+1;if(m=1)p=(Pointer)malloc(sizeof(Booklist);/*開辟一個新單元*/Head=p;/將p的地址賦給頭指針Headfscanf(fp,&q
38、uot;%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->
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省多校聯(lián)考2024-2025學年高二上學期12月聯(lián)考政治試題(含答案)
- 《解析工傷保險》課件
- 孕期屁股疼的健康宣教
- 孕期肚臍發(fā)黑的健康宣教
- 分泌性中耳炎的健康宣教
- 絲狀角膜病變的臨床護理
- 羊水過多的健康宣教
- 星跡步態(tài)的健康宣教
- 腺垂體功能減退癥的臨床護理
- 中耳癌的健康宣教
- 新滬教牛津版九年級上冊英語全冊教案
- 醫(yī)療器械經(jīng)營質(zhì)量管理體系文件(全套)
- GB∕T 16422.2-2022 塑料 實驗室光源暴露試驗方法 第2部分:氙弧燈
- 1-義務(wù)教育道德與法治課程標準(2022年版)
- 母排搭接要求
- 售后維修服務(wù)單模板
- HB 4-1-2020 擴口管路連接件通用規(guī)范
- 001不銹鋼水箱安裝技術(shù)交底0705
- 佛教基礎(chǔ)教義苦集滅道ppt模版課件
- 基于PLC實現(xiàn)的電氣控制畢業(yè)設(shè)計論文
- 電力系統(tǒng)光纖通信運行管理規(guī)程
評論
0/150
提交評論