




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C C 語言課程設計語言課程設計 專業(yè):電子信息科學與技術 日期:2011 年 6 月 10 日 哈爾濱工業(yè)大學哈爾濱工業(yè)大學 20112011 年年 5 5 月月 圖書圖書管理系統管理系統借閱信息錄入模塊借閱信息錄入模塊 1. 引言隨著信息時代的來臨,電子信息的發(fā)展在給社會帶來沖擊的同時,也使圖書館業(yè)務受到了強烈的沖擊,圖書館傳統的管理和服務方式已不能適應讀者對日益增長的文獻信息的需求。隨著館藏量的不斷增加,圖書資料的著錄和查詢的難度也就相應增加,數據處理手工操作,工作量大,出錯率高,出錯后不易更改的手工方式,已經不能滿足要求。基于這此問題,建立一個規(guī)范化,系統化,程序化的圖書管理系統迫不急
2、待。編寫圖書館管理系統的 C 程序,可對圖書館書籍、讀者資料、借還書等信息進行高效的管理。使用該程序之后,使用者可以查詢某位讀者、某種圖書的借閱情況,還可以對當前圖書借閱情況進行一些統計,以便全面掌握圖書的流通情況。 2系統需求分析 2 2.1 .1 系統需求分析系統需求分析 功能需求: 圖書管理系統采用的開發(fā)工具是 Visucal C+6.0,主要用于對大量的圖書信息,包括書名、作者、出版社、出版日期、ISBN(書號) 、圖書定價等進行增加、刪除、查詢、保存等操作。同時還包括對用戶的管理,用戶包括管理員和普通用戶兩種權限,管理原客易完成全部操作,而普通用戶只能對圖書進行瀏覽和查詢操作。為保存
3、信息,系統利用文件將圖書信息和用戶信息存儲在文件中,每次系統啟動時,現將數據從文件讀到鏈表中,進行增、刪、改、查等操作,在系統退出前,再將單鏈表中的數據保存到文件中,有效地將數據進行保存。系統提供簡單的人機界面,使用戶可以根據提示,輸入操作項,調用系統提供的管理功能。主要功能需求描述如下: 1) 用戶登錄 首先提示用戶輸入用戶名和密碼。調用文件中存儲的用戶信息進行校驗,只有用戶名和密碼都匹配時才允許用戶使用該系統。用戶登錄到系統后能夠使用的系統功能和用戶的權限有關,管理員可以完成全部操作,而普通用戶只能進行圖書的瀏覽、查詢。權限的判定在登錄模塊中完成。 2) 系統主控平臺 不同權限的用戶登錄不
4、同的系統主控平臺,管理員可以完成全部的操作,包括圖書管理、用戶管理以及退出系統三大功能模塊。圖書管理模塊中包括新增圖書信息、瀏覽圖書信息、查詢圖書信息和保存圖書信息等操作。普通用戶只能進行瀏覽圖書信息和查詢圖書信息的操作,通過輸入相應的序號來選擇相應的操作。 3) 新增圖書信息處理 用戶根據提示輸入圖書的書名、作者、出版社、出版日期、ISBN、圖書定價以及頁數等數據。輸入完一條圖書信息,可根據提示繼續(xù)輸入下一條圖書信息或繼續(xù)其他操作,允許輸入多條圖書的信息記錄。輸入完圖書信息后,以單鏈表的形式暫時保存在單鏈表中,等待下一步操作。系統退出之前,將單鏈表中的全部圖書信息保存到文件中。 4) 瀏覽圖
5、書信息處理 在選擇了瀏覽圖書信息后,將圖書從內存中掉出來顯示,最后提示是否再次瀏覽圖書信息,如果沒有查詢到任何信息,系統會給出提示信息。 5) 查詢圖書信息處理 選擇查詢圖書信息后,進入查詢子菜單,可以分別按書名、作者、出版社、出版日期、ISBN、圖書定價、圖書數量等對單鏈表中的圖書信息進行查詢。 6) 刪除圖書信息處理 首先提示用戶輸入要刪除的圖書的 ISBN,用戶根據輸入的信息在單鏈表查找,如果該圖書存在,則首先顯示圖書的基本信息,并提示用戶是否進行刪除操作,用戶確認刪除后直接刪除;如果沒找到,系統給出提示信息。 7) 圖書借閱信息處理 借書是系統用戶才可借閱。即要借書首先查詢用戶文件,若
6、不是用戶,則提示先注冊為用戶;如果是用戶,則輸入要借閱的書名查找圖書信息,如果找到,要先判斷圖書是否全部借出,若未全部借出,則可以借閱,否則,系統提示沒有此書或已借出,本次借書失敗。 8) 還書信息處理 首先系統提示用戶輸入要還的書名,在圖書信息中查找書名相同的書,將該書借閱信息恢復。 9) 新增用戶信息處理 只有管理員可以處理這個模塊。根據提示信息輸入用戶的用戶名、密碼及權限。輸入完一個用戶的信息后直接返回到主菜單界面,進行其他操作,允許輸入多個用戶信息,但用戶名不允許重復。輸入完的圖書暫時保存在單鏈表中,等待下一步的操作,系統退出之前,將單鏈表中全部用信息保存到文件中。 10) 查找用戶信
7、息處理 首先提示用戶輸入要查找的用戶名,根據用戶輸入的用戶名從單鏈表中對用戶信息進行查詢,查詢成功后,顯示該用戶信息,如果沒有查詢到任何信息,系統將給出提示信息。 11) 刪除用戶信息 首先提示用戶輸入要刪除的用戶名,根據用戶輸入的信息完成對用戶信息的刪除操作。 12) 修改用戶信息 首先提示用戶輸入要修改的用戶名,根據用戶輸入的信息完成對用戶信息的修改操作。 13) 保存用戶信息 該模塊的功能是將單鏈表中的用戶信息保存到文件中。 14) 退出 該模塊的功能是退出系統,并且在系統退出之前,保存用戶的和圖書信息,并釋放鏈表,防止內存泄露。 3.個人系統總體設計 2.12.1 功能模塊設計功能模塊
8、設計 大模塊錄入部分分為 7 個小模塊 模塊 1: 打開文件; 模塊 2: 從文件中讀入借閱記錄; 模塊 3: 以圖書 ID 查找借閱記錄; 模塊 4: 以借閱者用戶名查找借閱記錄; 模塊 5: 創(chuàng)建借閱記錄; 模塊 6: 刪除借閱記錄; 模塊 7: 將借閱記錄寫入文件; 2.22.2 程序處理流程程序處理流程 2.32.3 開發(fā)工具開發(fā)工具 C-free 4系統詳細設計與實現 4.14.1 預處理預處理 #include #includeglobal.h #define BOOK_FILE book.txt #define CLIENT_FILE client.txt #define REC
9、ORD_FILE record.txt 4.24.2 數據結構定義數據結構定義 結構體定義: struct Date int Year; /*借閱的年*/ int Month; /*借閱的月*/ int Day; /*借閱的日*/ ; struct RecordData long Id; /*圖書的 Id 號*/ char Debit; /*借閱者用戶名*/ Date LendDate; /*借閱時間*/ ; struct Record RecordData Data; /*借閱的有關信息*/ 大模塊:錄入部分 打開文件 從文件中讀入借閱記錄 以圖書ID查找借閱記錄 以借閱者用戶名查找借閱記錄
10、 創(chuàng)建借閱記錄 刪除借閱記錄 將借閱記錄寫入文件 Record *Next; /*指向下一結點的指針*/ ; 4.2.2.主函數變量聲明 int n,i; long ID; char a20; Record *p, *q; FILE *fp; 4.34.3 函數及變量聲明函數及變量聲明 .函數聲明 void IDfile(); /*打開文件*/ int LoadRecord(); /*從文件中讀入借閱記錄,生成借閱記錄鏈表頭指針*/ Record *FindRecordById(long Id); /*以圖書 ID 查找借閱記錄,返回指定項前一項的指針(刪除用)或 NULL(未找到)*/ Re
11、cord *FindRecordByDebit(Record *Head,char Debit); /*以借閱者用戶名查找借閱記錄,返回指定項的指針(以傳遞的頭指針為基準進行查找,不要使用全局變量)*/ void NewRecord(long Id); /*創(chuàng)建借閱記錄,調用 GetCurDate */ void DeleteRecord(long Id); /*刪除借閱記錄,調用 FindRecordById */ int SaveRecord(); /*將借閱記錄寫入文件 */ .變量聲明 1)函數 IDfile()的變量聲明: FILE *fp; int i ; Record *p; 2
12、)函數 LoadRecord()的變量聲明: FILE *fp; Record *node,*pr; RecordData p; 3)函數 FindRecordById(long Id)的變量聲明: Record *pos; Record *pr; 4)函數 FindRecordByDebit(Record *Head,char Debit)的變量聲明: Record *pos; 5)函數 NewRecord(long Id)的變量聲明: Record *pos; Record *pr; 6)函數 DeleteRecord(long Id)的變量聲明: Record *pos; Record
13、*node, *pr; 7)函數 SaveRecord()的變量聲明: FILE *fp; Record *pos, *pr; 4.44.4 主函數、主要處理函數、輔助函數的設計主函數、主要處理函數、輔助函數的設計 a.主函數源代碼 main() int m, n, i, j, k, z, id, flag = 0, fleg = 0, count = 0,count1 = 0; char name20; long ID=0, l; Record *p, *q; n =LoadRecord(); if(n = 1) printf(文件調用成功n); printf(Id:t%ldt Debit:
14、t%st Year:t%dt Month:t%dt Day:t%dn,p-HIT.Id, p-HIT.Name, p-HIT.Year, p-HIT.Month, p-HIT.Day); p=p-next; count+; else printf(文件調用不成功n); p=FindRecordById(ID); if(p!=NULL) printf(請輸入要查找圖書的 ID 號: ); scanf(%ld, &id); printf(Id:t%dt Debit:t%st Year:t%dt Month:t%dt Day:t%dn, p-HIT.Id, p-HIT.Name, p-HIT
15、.Year, p-HIT.Month, p-HIT.Day); p=p-next; count+; else printf(沒找到n); else printf(FindRecordById 函數調用不成功n); q = FindRecordByDebit(fcyf); if(q!=NULL) printf(請輸入借閱人的姓名: ); scanf(%s, name); if(strcmp(p-HIT.Name,name)=0) printf(Id:t%dt Debit:t%st Year:t%dt Month:t%dt Day:t%dn,p-HIT.Id, p-HIT.Name, p-HIT.
16、Year, p-HIT.Month, p-HIT.Day); p=p-next; count+; flag = 1; if(flag = 0) printf(沒找到你所要查的借閱人n); else printf(FindRecordByDebit 函數調用不成功n); p=RecordHead; while(p!=NULL) p=p-Next; NewRecord(ID); p=RecordHead; while(p!=NULL) count1+; p = p-Next; if(count1-count!=1) printf(請輸入新紀錄中書 ID 號,借閱人姓名和日期:n); printf(
17、IdtNametYeartMonthtDay:); scanf(%ld %s %d %d %d,&HIT.Id, HIT.Name, &HIT.Year,&HIT.Month,&HIT.Day); printf(Id:t%ldt Debit:t%st Year:t%dt Month:t%dt Day:t%dn, p-HIT.Id, p-HIT.Name, p-HIT.Year, p-HIT.Month, p-HIT.Day); count+; p = p-Next; else printf(NewRecord 函數調用不成功n); p=RecordHead; w
18、hile(p!=NULL) p = p-Next; DeleteRecord(ID); while(p!=NULL) count+; p = p-Next; if(count1 - count!=1) do printf(請輸入要刪除的 ID 號); scanf(%ld,&l); while(l 6 & l != p-HIT.Id); if(l!=p-HIT.Id) printf(Id:t%ldt Debit:t%st Year:t%dt Month:t%dt Day:t%dn, p-HIT.Id, p-HIT.Name, p-HIT.Year, p-HIT.Month, p-
19、HIT.Day); count1+; p = p-Next; else printf(DeleteRecord 函數調用不成功n); m =SaveRecord(); if(m=1) printf(文件保存成功n); else printf(文件保存不成功n); return 0; b.主要處理函數源代碼 /*打開文件*/ void IDfile() FILE *fp; int i = 1; Record *p; fp = fopen(RECORD_FILE, rb); while (p!=NULL) if (fread(&(p-Data),sizeof(RecordData),1,f
20、p) printf(record%dnId:t%dnDebit:t%snYear:t%dnMonth:t%dnDay:t%dn,i,p-Data.Id,p-Data.Debit,p-Data.LendDate.Year,p-Data.LendDate.Month,p-Data.LendDate.Day); getchar(); p=p-Next; i+; fclose(fp); /*從文件中讀入借閱記錄,生成借閱記錄鏈表頭指針 */ int LoadRecord(void) FILE *fp; Record *node,*pr; RecordData p; fp = fopen(RECORD_
21、FILE, rb); if(fp = NULL) return 0; node = (Record *)malloc(sizeof(Record); if(node = NULL) return 0; if(!fread(&p, sizeof(RecordData), 1, fp) return 0; node-Data = p; RecordHead = node; while(1) pr = node; node = (Record *)malloc(sizeof(Record); if(node = NULL) return 0; if(fread(&p, sizeof(
22、RecordData), 1, fp) = 0) break; else node-Data = p; pr-Next = node; free(node); pr-Next = NULL; fclose(fp); return 1; /*以圖書 ID 查找借閱記錄,返回指定項前一項的指針(刪除用)或 NULL(未找到)*/ Record *FindRecordById(long Id) Record *pos = RecordHead; Record *pr = RecordHead; if(pos = NULL) return NULL; while(pos-Next != NULL &a
23、mp; pos-Data.Id != Id) pr=pos; pos = pos-Next; if(pos-Data.Id = Id) return pr; return NULL; 開始 打開文件 到文件尾 新建節(jié)點 將文件中的數據讀到當前節(jié)點 把上一個節(jié)點的Next指向這個節(jié)點 上一個節(jié)點后移 當前節(jié)點的Next變?yōu)?NULL 返回頭指針 結束 是 否 /*以借閱者用戶名查找借閱記錄,返回指定項的指針(以傳遞的頭指針為基準進行查找,不要使用全局變量)*/ Record *FindRecordByDebit(char Debit) Record *pos = RecordHead; if(p
24、os=NULL) return pos; while(pos-Next != NULL & strcmp(pos-Data.Debit, Debit) != 0) pos = pos-Next; if(strcmp(pos-Data.Debit, Debit) = 0) return pos; return NULL; 開始 相等或到鏈表尾 當前指針和上一個指針后移 ID 相等 返回 NULL 返回上個指針 結束 是 否 否 是 /*創(chuàng)建借閱記錄,調用 GetCurDate*/ void NewRecord(long Id) Record *pos = RecordHead; Reco
25、rd *pr; pr = (Record *)malloc(sizeof(Record); pr-Data.Id = Id; strcpy(pr-Data.Debit, CurrentClient); pr-Next = NULL; if(pos = NULL) RecordHead = pr; else while(pos-Next != NULL) pos = pos-Next; pos-Next = pr; 開始 相等或到鏈表尾 當前指針和上一個指針后移 用戶名相等 返回 NULL 返回上個指針 結束 是 否 否 是 /*刪除借閱記錄,調用 FindRecordById*/ void D
26、eleteRecord(long Id) Record *pos = RecordHead; Record *node, *pr; if(RecordHead-Data.Id = Id) RecordHead = RecordHead-Next; free(pos); else if(RecordHead-Next = NULL) free(RecordHead); pos = NULL; else 開始 指針指向鏈表最后一項 分配一塊內存單元 寫入新的借閱信息 把指針指向新分配的內存 單 元 ,Next變 為Null 結束 node = FindRecordById(Id); pr = node-Next; node-Next = pr-Next; free(pr); /*將借閱記錄寫入文件*/ int SaveRecord(void) FILE *fp; Record *pos = RecordHead, *
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)私人直升機雷達地形回避租賃與數據安全保護協議
- 新能源項目用地規(guī)劃與合規(guī)性咨詢及服務合同
- 移動應用平臺數據分析補充協議
- 學前教育機構選擇權授權管理協議
- 電子產品可靠性試驗補充合同
- 網絡店鋪所有權變更及運營交接協議
- 網紅飲品品牌區(qū)域代理及品牌形象推廣合同
- 高效出行網約車司機加盟合作協議書
- 精致服飾品牌區(qū)域代理銷售與市場拓展合作協議
- 3D電影替身演員安全保險合同
- 煤礦供電系統及供電安全講座(ppt課件)
- GB/T 4927-2008啤酒
- GB/T 15707-2017高壓交流架空輸電線路無線電干擾限值
- 醫(yī)學統計學練習題與答案
- 西班牙文化概況
- 樁側摩阻力ppt(圖文豐富共28)
- 預拌混凝土出廠合格證2
- 小學校本課程教材《鼓號隊》
- 云南省飲用水生產企業(yè)名錄534家
- 9E燃機系統培訓演3.25
- 蘇霍姆林斯基教育思想-PPT課件
評論
0/150
提交評論