c語言課程設(shè)計(jì) 圖書管理系統(tǒng) 高校教師人事管理系統(tǒng)_第1頁
c語言課程設(shè)計(jì) 圖書管理系統(tǒng) 高校教師人事管理系統(tǒng)_第2頁
c語言課程設(shè)計(jì) 圖書管理系統(tǒng) 高校教師人事管理系統(tǒng)_第3頁
c語言課程設(shè)計(jì) 圖書管理系統(tǒng) 高校教師人事管理系統(tǒng)_第4頁
c語言課程設(shè)計(jì) 圖書管理系統(tǒng) 高校教師人事管理系統(tǒng)_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、圖書借閱管理系統(tǒng) 圖書借閱管理是圖書館一個最根本的工作,這里用C語言的知識設(shè)計(jì)開發(fā)一個簡單的圖書借閱管理系統(tǒng),系統(tǒng)主要實(shí)現(xiàn)圖書信息和學(xué)生信息的管理,圖書查詢及圖書借閱管理。 系統(tǒng)設(shè)計(jì)要求 系統(tǒng)主要實(shí)現(xiàn)以下六個功能: 用戶登錄。系統(tǒng)用戶分為管理員和學(xué)生。管理員登錄時必須輸入密碼,密碼正確才能進(jìn)入系統(tǒng);學(xué)生登錄時無需密碼,輸入學(xué)號即可。 圖書信息管理。圖書信息包括:書號、書名、作者、圖書分類、出版社、出版時間、單價、總量和庫存量。圖書信息管理包括:輸入圖書信息從鍵盤或從文件、保存圖書信息、修改圖書信息、增加圖書信息、刪除圖書信息和輸出圖書信息。 學(xué)生信息管理。學(xué)生信息包括:學(xué)號、姓名、借書卡借閱標(biāo)

2、記、書號、借閱時間。學(xué)生信息管理包括:輸入學(xué)生信息從鍵盤或從文件、保存學(xué)生信息、修改學(xué)生信息、增加學(xué)生信息、刪除學(xué)生信息和輸出學(xué)生信息。 圖書查詢功能。圖書查詢分為:按書名查詢、按作者查詢、按圖書分類查詢、按出版社查詢和按出版時間查詢。 借書功能。借書時,先判斷學(xué)生是否有空閑的借書卡,假設(shè)沒有那么應(yīng)輸出提示信息;假設(shè)有空閑的借書卡,那么要求學(xué)生輸入所借圖書的書號,假設(shè)該書庫存量不為0,那么將該書借出,同時在借書卡上記錄該書的書號和借閱時間,并修改該書的庫存量。 還書功能。還書時,先檢查學(xué)生的借書卡,假設(shè)借書卡都為空,那么不能進(jìn)行還書操作,假設(shè)有借書卡不為空,那么可以還書,此時要求學(xué)生輸入所還圖

3、書的書號,將對應(yīng)借書卡上的記錄清零,并修改該書的庫存量。 系統(tǒng)總體設(shè)計(jì) 1. 功能模塊圖用戶登錄管理模塊圖書借閱管理系統(tǒng)圖書信息管理模塊學(xué)生信息管理模塊圖書信息查詢模塊圖書借閱管理模塊系統(tǒng)功能模塊圖管理員登錄學(xué)生登錄輸入圖書信息保存圖書信息修改圖書信息增加圖書信息刪除圖書信息輸出圖書信息輸入學(xué)生信息保存學(xué)生信息修改學(xué)生信息增加學(xué)生信息刪除學(xué)生信息輸出學(xué)生信息按書名查詢按作者查詢按圖書分類查詢按出版社查詢按出版時間查詢借書管理還書管理2. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)共定義了四個結(jié)構(gòu)體類型,包括日期類型、借書卡類型、圖書類型和學(xué)生類型,其中在圖書類型中要使用日期類型,而在學(xué)生類型中要使用日期和借書卡類型,定

4、義如下:typedef struct date /日期類型 short year; /年 short month; /月 short day; /日 SDATE;typedef struct library_card /借書卡類型 Short flag; /是否借閱標(biāo)記 Char ISBN20; /所借圖書的書號 SDATE bor_time; /借閱時間SLCARD;typedef struct student /學(xué)生類型 char num15; /學(xué)號 char name20; /姓名 SLCARD card5; /借書卡規(guī)定每人最多有5張SSTUD;typedef struct book

5、 /圖書類型 char ISBN20; /書號 char bookname40; /書名 char author20; /作者 char publisher30; /出版社 char bookclass20; /圖書分類 short total_num, stock_num; /總量,庫存量 float price; /單價 SDATE publish_time; /出版時間 SBOOK;系統(tǒng)定義了兩個全局變量數(shù)組,分別存放圖書信息和學(xué)生信息,因數(shù)組大小是固定的,為使用方便在系統(tǒng)中定義兩個符號常量,具體定義如下:#define BOOKNUM 1000 / BOOKNUM為系統(tǒng)允許的最大圖書數(shù)

6、量#define STUDNUM 100 / STUDNUM為系統(tǒng)允許的最多學(xué)生人數(shù)SSTUD studentSTUDNUM=0; /學(xué)生數(shù)組,初始化為0SBOOK bookBOOKNUM=0; /圖書數(shù)組,初始化為03. 功能模塊設(shè)計(jì)(1) main函數(shù)的設(shè)計(jì):由于圖書信息和學(xué)生信息都保存在文件中,系統(tǒng)運(yùn)行的第一個工作是從文件中將圖書信息和學(xué)生信息讀入到內(nèi)存數(shù)組book和數(shù)組student中,在讀入信息的過程中同時統(tǒng)計(jì)出目前圖書的數(shù)量和學(xué)生的人數(shù),并將數(shù)據(jù)分別存放在整型變量bn和sn中,bn為圖書數(shù)量,sn為學(xué)生人數(shù)。如果bn=0或sn=0,系統(tǒng)會輸出提示信息,讓管理員輸入圖書信息和學(xué)生信息

7、。然后系統(tǒng)會顯示主菜單,用戶必須登錄后才能使用系統(tǒng)提供的各種效勞。(2) 用戶登錄管理模塊包括2個函數(shù):ManagerLogin()和StudentLogin(),該模塊由main函數(shù)調(diào)用。函數(shù)ManagerLogin()用來完成管理員登錄工作,首先要求管理員用戶輸入密碼,假設(shè)密碼錯誤,那么直接返回主菜單界面;密碼正確時將顯示管理員用戶的功能菜單,輸入數(shù)字可執(zhí)行相應(yīng)的功能。函數(shù)StudentLogin()用來完成學(xué)生登錄工作,要求學(xué)生輸入學(xué)號,假設(shè)學(xué)號錯誤那么要求學(xué)生重新輸入學(xué)號;輸入學(xué)號正確那么顯示學(xué)生用戶的功能菜單,輸入數(shù)字可執(zhí)行相應(yīng)的功能。(3) 圖書信息管理模塊包括11個函數(shù):Inpu

8、tOnebook()、LoadBooks()、SaveOnebook()、SaveAllbooks()、OriginalBook()、ModifyBook()、AddBook()、DelBook()、OutputOnebook()、OutputAllbooks()和OutputBrief ()。只有管理員用戶可以調(diào)用圖書信息管理模塊。函數(shù)InputOnebook()用來實(shí)現(xiàn)從鍵盤輸入一本圖書的全部信息。函數(shù)LoadBooks()用來實(shí)現(xiàn)從文件“book.dat中輸入全部圖書的信息,并將這些數(shù)據(jù)存放到內(nèi)存數(shù)組book中。函數(shù)SaveOnebook()用來實(shí)現(xiàn)將一本圖書的信息保存到文件“book.

9、dat中。函數(shù)SaveAllbooks()用來實(shí)現(xiàn)將全部圖書的信息保存到文件“book.dat中。函數(shù)OriginalBook()用來實(shí)現(xiàn)圖書信息的初始化,在程序第1次運(yùn)行時必須調(diào)用該函數(shù),輸入假設(shè)干本圖書的信息,并將這些信息保存在文件中。該函數(shù)是通過循環(huán)屢次調(diào)用InputOnebook()函數(shù)實(shí)現(xiàn)多本圖書信息的輸入,然后調(diào)用SaveAllbooks()函數(shù)將已輸入的所有圖書的信息保存在文件“book.dat中。函數(shù)ModifyBook()用來實(shí)現(xiàn)對圖書信息的修改,用戶首先輸入書號,書號錯誤那么輸出提示信息,要求用戶重新輸入;書號正確那么用戶可以選擇要修改的數(shù)據(jù)項(xiàng)對圖書信息進(jìn)行修改用switc

10、h結(jié)構(gòu)實(shí)現(xiàn),一本圖書的信息修改完畢后,調(diào)用SaveOnebook()函數(shù),將修改后的信息保存到文件中。然后詢問用戶是否繼續(xù)修改其他圖書的信息,用戶選擇y,那么重復(fù)上述的修改正程;用戶選擇n,那么結(jié)束函數(shù),返回到管理員菜單界面。函數(shù)AddBook()用來實(shí)現(xiàn)添加圖書信息,通過調(diào)用InputOnebook()函數(shù),從鍵盤輸入一本圖書的信息,然后將該信息寫入文件。然后詢問用戶是否繼續(xù)添加其他圖書的信息,用戶選擇y,那么重復(fù)上述過程;用戶選擇n,那么結(jié)束函數(shù),返回到管理員菜單界面。函數(shù)DelBook()用來實(shí)現(xiàn)刪除圖書信息,用戶首先輸入書號,書號錯誤那么輸出提示信息,要求用戶重新輸入;書號正確那么會先

11、輸出該書號對應(yīng)圖書的信息,然后詢問用戶是否確定要刪除該書的信息,用戶選擇y才能真正刪除該書信息。最后詢問用戶是否繼續(xù)刪除其他圖書的信息,用戶選擇y,那么重復(fù)上述過程;用戶選擇n,那么結(jié)束函數(shù),返回到管理員菜單界面。函數(shù)OutputOnebook()用來實(shí)現(xiàn)輸出一本圖書的全部信息。函數(shù)OutputAllbooks()通過屢次調(diào)用OutputOnebook()函數(shù)來實(shí)現(xiàn)輸出全部圖書的信息。函數(shù)OutputBrief()用來實(shí)現(xiàn)以列表方式輸出全部圖書的簡要信息,簡要信息包括:書號、書名、作者和總量。(4) 學(xué)生信息管理模塊包括10個函數(shù):InputOnestud()、LoadStuds()、Save

12、Onestud()、SaveAllstuds()、OriginalStud()、ModifyStud()、AddStud()、DelStud()、OutputOnestud()和OutputAllstuds()。 管理員用戶可以使用學(xué)生信息管理模塊的全部功能,學(xué)生用戶只能使用該模塊中的一個功能,即OutputOnestud()函數(shù)輸出一個學(xué)生的信息。學(xué)生信息管理模塊中函數(shù)的實(shí)現(xiàn)方法與圖書信息管理中的類似,以下僅作簡單說明。函數(shù)InputOnestud()用來實(shí)現(xiàn)從鍵盤輸入一個學(xué)生的信息。函數(shù)LoadStuds()用來實(shí)現(xiàn)從文件“stud.dat中輸入全部學(xué)生的信息,并將這些數(shù)據(jù)存放到內(nèi)存數(shù)組s

13、tudent中。函數(shù)SaveOnestud()用來實(shí)現(xiàn)將一各學(xué)生的信息保存到文件“stud.dat中。函數(shù)SaveAllstuds()用來實(shí)現(xiàn)將全部學(xué)生的信息保存到文件“stud.dat中。函數(shù)OriginalStud()用來實(shí)現(xiàn)學(xué)生信息的初始化,在程序第1次運(yùn)行時必須調(diào)用該函數(shù)。該函數(shù)是通過循環(huán)屢次調(diào)用InputOnestud()函數(shù)實(shí)現(xiàn)多個學(xué)生信息的輸入,然后調(diào)用SaveAllstuds()函數(shù)將已輸入的所有學(xué)生的信息保存在文件“stud.dat中。函數(shù)ModifyStud()用來實(shí)現(xiàn)學(xué)生信息的修改。函數(shù)AddStud()用來實(shí)現(xiàn)添加學(xué)生信息。函數(shù)DelStud()用來實(shí)現(xiàn)刪除學(xué)生信息。函

14、數(shù)OutputOnestud()用來實(shí)現(xiàn)輸出一個學(xué)生的全部信息。函數(shù)OutputAllstuds()用來實(shí)現(xiàn)輸出全部學(xué)生的根本信息即學(xué)號和姓名。(5) 圖書信息查詢模塊包括6個函數(shù):SearchMenu()、SearcBname()、SearchAuthor()、SearchBclass()、SearchPublisher()、SearchPubtime()。管理員和學(xué)生都可以使用圖書信息查詢模塊。 函數(shù)SearchMenu()用來顯示圖書查詢效勞菜單,用戶輸入數(shù)字可執(zhí)行相應(yīng)的查詢效勞。函數(shù)SearcBname()用來實(shí)現(xiàn)按書名進(jìn)行圖書信息的查詢。用戶可以輸入完整的書名進(jìn)行精確查詢?nèi)巛斎搿癈語

15、言程序設(shè)計(jì),精確查詢是使用字符串比擬函數(shù)strcmp(),將輸入的書名與已有圖書的書名逐一進(jìn)行比擬,當(dāng)該函數(shù)的返回值等于0,表示這兩個書名完全相同,即找到要查詢的圖書。另外,用戶也可以輸入書名中的幾個字進(jìn)行模糊查詢?nèi)巛斎搿癈語言,或輸入“程序設(shè)計(jì),模糊查詢是使用求子串函數(shù)strstr(),在已有圖書的書名中尋找輸入的字符串,如果該函數(shù)的返回值不為空,那么說明該書名中包含這個字符串,那么就應(yīng)該輸出這本圖書的信息。通常,模糊查詢會列出多個查詢結(jié)果。函數(shù)SearchAuthor()用來實(shí)現(xiàn)按作者姓名進(jìn)行圖書信息的查詢。用戶可以輸入完整的姓名進(jìn)行精確查詢?nèi)巛斎搿白T浩強(qiáng),也可以只輸入姓氏進(jìn)行模糊查詢?nèi)缰?/p>

16、輸入“張,具體方法與按書名查詢類似。函數(shù)SearchBclass()用來實(shí)現(xiàn)按圖書分類進(jìn)行圖書信息的查詢??紤]到用戶可能不能輸入完全正確的圖書分類名稱,所以在該函數(shù)中只采用模糊查詢方式。函數(shù) SearchPublisher()用來實(shí)現(xiàn)按出版社名稱進(jìn)行圖書信息的查詢。用戶在輸入出版社名稱時,一般不會輸入“出版社這三個字如想查詢清華大學(xué)出版社的圖書,通常用戶會輸入“清華大學(xué),所以在該函數(shù)中也是只采用模糊查詢方式。函數(shù) SearchPubtime()用來實(shí)現(xiàn)按出版日期進(jìn)行圖書信息的查詢。使用該函數(shù)必須注意要按系統(tǒng)規(guī)定的格式輸入日期,假設(shè)想查詢2004年5月份出版的圖書,那么應(yīng)輸入“2004.5;假設(shè)

17、想查詢2004年出版的圖書,那么應(yīng)輸入“2004。假設(shè)輸入日期為“2004.5,進(jìn)行查詢時,先判斷輸入的年份與出版日期中的年份是否相等,假設(shè)不相等那么結(jié)束本次循環(huán),假設(shè)相等那么用變量k記錄其下標(biāo),然后再判斷月份是否相等,月份假設(shè)不相等那么用continue結(jié)束本次循環(huán),月份假設(shè)相等那么可輸出這本書即第k本書的信息,然后再繼續(xù)判斷下一本圖書。(6) 圖書借閱管理模塊包括2個函數(shù):BorrowBook()和ReturnBook()函數(shù)。 函數(shù)BorrowBook()用來實(shí)現(xiàn)借書管理。由學(xué)生類型定義可知,每個學(xué)生有5張借書卡,借書卡的信息包括:借閱標(biāo)記flag、所借圖書的書號ISBN和借閱時間bor

18、_time。借書時,首先查找學(xué)生是否有空閑的借書卡即判斷該生借書卡的借閱標(biāo)記flag是否為0,假設(shè)flag為0,那么可以借書,這時要求學(xué)生輸入要借圖書的書號,然后在圖書數(shù)組book中查找該書,假設(shè)在數(shù)組book中沒找到該書,那么提示“輸入的書號有誤,請重新輸入!;假設(shè)找到該書,那么先判斷該書的庫存量是否為0,假設(shè)庫存量為0那么提示抱歉!該書庫存量為0,無法借閱!。假設(shè)庫存量大于0,那么將該書借給學(xué)生,此時需要進(jìn)行以下6步操作:step1 將該書的庫存量減1;step2 學(xué)生借書卡的借閱標(biāo)記flag置1;step3 學(xué)生借書卡的書號填寫上該書的書號;step4 學(xué)生借書卡的借閱時間賦值為系統(tǒng)時間

19、;為了提取系統(tǒng)時間,首先定義一個結(jié)構(gòu)體變量d:struct tm d; 結(jié)構(gòu)體類型struct tm定義在文件“time.h中,具體定義如下:struct tm int tm_sec; / seconds after the minute - 0,59 int tm_min; / minutes after the hour - 0,59 int tm_hour; / hours since midnight - 0,23 int tm_mday; / day of the month - 1,31 int tm_mon; / months since January - 0,11 int t

20、m_year; / years since 1900 int tm_wday; / days since Sunday - 0,6 int tm_yday; / days since January 1 - 0,365 int tm_isdst; / daylight savings time flag ;這里我們需要使用其中的3個成員:tm_year、tm_mon和tm_mday。通過調(diào)用函數(shù)_getsystime(&d); 可以得到系統(tǒng)時間,假設(shè)用下面語句輸出日期:printf(%d.%d.%d, d.tm_year, d.tm_mon, d.tm_mday); 假設(shè)借書日期是,那么會輸出

21、,假設(shè)借書日期為,那么會輸出,這樣的輸出結(jié)果顯然不好,為了正確輸出或,必須對成員tm_year和tm_mon進(jìn)行處理,對于tm_mon的處理比擬簡單,直接加1即可d.tm_mon+1,對于tm_year按下面方法處理:如果年份整除100等于0即年份=2000, 那么年份=2000+d.tm_year%100。step5 保存修改正的圖書信息和學(xué)生信息;step6 提示用戶借書成功。最后詢問學(xué)生是否繼續(xù)借書嗎?(y/n),假設(shè)學(xué)生輸入y,那么重復(fù)上面的借書過程;假設(shè)輸入n,那么返回到學(xué)生功能選擇菜單界面。函數(shù)ReturnBook()用來實(shí)現(xiàn)還書管理。還書時,首先統(tǒng)計(jì)該生有幾張已使用的借書卡,將數(shù)

22、據(jù)存放在變量t中,假設(shè)t為0,說明該生目前根本沒有借閱的圖書,無法進(jìn)行還書操作;假設(shè)t大于0,那么可進(jìn)行還書操作,先輸入書號,在學(xué)生的借書卡中尋找,假設(shè)沒找到該書號,那么提示輸入的書號有誤,請重新輸入??;假設(shè)找到該書號,那么通過以下6個步驟進(jìn)行還書:step1 學(xué)生借書卡的借閱標(biāo)記flag置0;step2 學(xué)生借書卡的書號置空;step3 學(xué)生借書卡的借閱時間清0;step4 變量t減1;step5 在數(shù)組book中尋找該書號,找到后其庫存量加1;step6保存修改正的圖書信息和學(xué)生信息。最后詢問學(xué)生是否繼續(xù)還書嗎?(y/n),假設(shè)學(xué)生輸入y,那么重復(fù)上面的還書過程;假設(shè)輸入n,那么返回到學(xué)生

23、功能選擇菜單界面。局部源程序代碼#include#include#include#include#include/ 結(jié)構(gòu)體類型的定義typedef struct date /日期類型 short year; /年 short month; /月 short day; /日 SDATE;typedef struct library_card /借書卡類型 short flag; /是否借閱標(biāo)記 char ISBN20; /所借圖書的書號 SDATE bor_time; /借閱時間SLCARD;typedef struct stud /學(xué)生類型 char num15; /學(xué)號 char name2

24、0; /姓名 SLCARD card5; /借書卡SSTUD;typedef struct book /圖書類型 char ISBN20; /書號 char bookname40; /書名 char author20; /作者 char publisher30; /出版社 char bookclass20; /圖書分類 short total_num, stock_num; /總量,庫存量 float price; /單價 SDATE publish_time; /出版時間SBOOK;#define SDATE_LEN sizeof(SDATE) /SDATE_LEN為日期類型占用存儲空間的大

25、小#define SLCARD_LEN sizeof(SLCARD) /SLCARD_LEN為借書卡類型占用存儲空間的大小#define SSTUD_LEN sizeof(SSTUD) /SSTUD_LEN為學(xué)生類型占用存儲空間的大小#define SBOOK_LEN sizeof(SBOOK) /SBOOK_LEN為圖書類型占用存儲空間的大小#define BOOKNUM 1000 /圖書總數(shù),可按需要更改其數(shù)值#define STUDNUM 100 /學(xué)生總數(shù),可按需要更改其數(shù)值SSTUD studentSTUDNUM=0; /學(xué)生數(shù)組(全局變量)SBOOK bookBOOKNUM=0;

26、/圖書數(shù)組(全局變量)/函數(shù)聲明void ManagerLogin(int *pbn, int *psn); /管理員登錄函數(shù)void StudentLogin(int bn, int sn); /學(xué)生登錄函數(shù)void InputOnebook(int i); /輸入一本圖書信息的函數(shù)int LoadBooks(void); /從文件載入全部圖書信息的函數(shù)void SaveOnebook(int i); /保存一本圖書信息的函數(shù)void SaveAllbooks(int bn); /保存全部圖書信息的函數(shù)int OriginalBook(void); /圖書信息初始化的函數(shù)void Modif

27、yBook(int bn); /修改圖書信息的函數(shù)int AddBook(int bn); /添加圖書信息的函數(shù)int DelBook(int bn); /刪除圖書信息的函數(shù)void OutputOnebook(int i); /輸出一本圖書信息的函數(shù)void OutputAllbooks(int bn); /輸出全部圖書詳細(xì)信息的函數(shù)void OutputBrief(int bn); /輸出全部圖書簡要信息的函數(shù)void InputOnestud(int i); /輸入一個學(xué)生信息的函數(shù)int LoadStuds(void); /從文件載入全部學(xué)生信息的函數(shù)void SaveOnestud(

28、int i); /保存一個學(xué)生信息的函數(shù)void SaveAllstuds(int sn); /保存全部學(xué)生信息的函數(shù)int OriginalStud(void); /學(xué)生信息初始化的函數(shù)void ModifyStud(int sn); /修改學(xué)生信息的函數(shù)int AddStud(int sn); /添加學(xué)生信息的函數(shù)int DelStud(int sn); /刪除學(xué)生信息的函數(shù)void OutputOnestud(int i); /輸出一個學(xué)生信息的函數(shù)void OutputAllstuds(int sn); /輸出全部學(xué)生信息的函數(shù)void SearchMenu(int bn); /圖書查

29、詢函數(shù)void SearcBname (int bn); /按書名查詢函數(shù)void SearchAuthor(int bn); /按作者查詢函數(shù)void SearchBclass(int bn); /按圖書分類查詢函數(shù) void SearchPublisher(int bn); /按出版社查詢函數(shù)void SearchPubtime(int bn); /按出版時間查詢函數(shù)void BorrowBook(int bn,int m); /借書函數(shù)void ReturnBook(int bn,int m); /還書函數(shù)void main(void) / main函數(shù)定義 int select, bn

30、, sn; bn=LoadBooks(); /調(diào)用LoadBooks(),返回值為圖書數(shù)量,將其賦值給bn if(bn=0) printf( 圖書信息為空!nn); sn=LoadStuds(); /調(diào)用LoadStuds(),返回值為學(xué)生人數(shù),將其賦值給sn if(sn=0) printf( 學(xué)生信息為空!nn); while(1) printf(n); printf(t-n); printf(t* *n); printf(t* 圖書借閱管理系統(tǒng) *n); printf(t* *n); printf(t-nn); printf(t 1. 管理員n); printf(t 2. 學(xué)生n); pr

31、intf(t 0. 退出系統(tǒng)nn); printf(t 請選擇用戶:); scanf(%d, & select); getchar(); /該函數(shù)用于讀取回車符,消除對以后數(shù)據(jù)輸入的影響 switch(select) case 1: ManagerLogin(&bn,&sn); break; case 2: StudentLogin(bn,sn); break; case 0: printf(n 謝謝使用!再見n); exit(1); default: printf(n 按鍵錯誤,請重新選擇!n); /end switch /end while/用戶登錄模塊的函數(shù)定義/=/ 功能:實(shí)現(xiàn)管理員登

32、錄, 顯示管理員用戶的菜單,進(jìn)行功能選擇/ 參數(shù):pbn、psn分別為main函數(shù)中變量bn、sn的地址/ 返回:無/ 主要思路:用strcmp函數(shù)實(shí)現(xiàn)密碼驗(yàn)證,用switch結(jié)構(gòu)實(shí)現(xiàn)菜單功能選擇/=/void ManagerLogin(int *pbn, int *psn) int select, flag=0; char password11; /密碼最多為10位 printf(n 請輸入密碼:); gets(password); if(strcmp(password, 123)!=0) /密碼按需要事先設(shè)置好,這里假設(shè)為“123” printf(n 密碼錯誤!n); return; /假

33、設(shè)密碼錯誤,返回主菜單 while(1) printf(n); printf( 管理員,您好!n); printf(-n); printf( 1. 圖書信息初始化 7. 學(xué)生信息初始化n); printf( 2. 修改圖書信息 8. 修改學(xué)生信息n); printf( 3. 增加圖書信息 9. 增加學(xué)生信息n); printf( 4. 刪除圖書信息 10. 刪除學(xué)生信息n); printf( 5. 輸出圖書信息 11. 輸出學(xué)生信息n); printf( 6. 圖書信息查詢 0. 返回主菜單n); printf(n 請選擇您需要的效勞(0-11):); scanf(%d, & select);

34、 getchar(); switch(select) case 1: *pbn=OriginalBook(); break; case 2: ModifyBook(*pbn); break; case 3: *pbn=AddBook(*pbn); break; case 4: *pbn=DelBook(*pbn); break; case 5: printf( 輸出詳細(xì)信息請按1, 輸出簡要信息請按2:); scanf(%d, &flag); getchar(); if(flag=1) OutputAllbooks(*pbn); if(flag=2) OutputBrief(*pbn); br

35、eak; case 6: SearchMenu(*pbn); break; case 7: *psn=OriginalStud(); break; case 8: ModifyStud(*psn); break; case 9: *psn=AddStud(*psn); break; case 10: *psn=DelStud(*psn); break; case 11: OutputAllstuds(*psn); break; case 0: return; default: printf(n 按鍵錯誤,請重新選擇!n); /end switch /end while/=/ 功能:實(shí)現(xiàn)學(xué)生登錄

36、, 顯示學(xué)生用戶菜單,進(jìn)行功能選擇/ 參數(shù):bn表示圖書數(shù)量,sn表示學(xué)生人數(shù)/ 返回:無/ 主要思路:用strcmp函數(shù)實(shí)現(xiàn)學(xué)號驗(yàn)證,用switch結(jié)構(gòu)實(shí)現(xiàn)菜單功能選擇/=/void StudentLogin(int bn, int sn) int select, j, m=-1; char snum15; /數(shù)組snum用來存放登錄學(xué)生的學(xué)號 if(sn=0) printf(n 學(xué)生信息為空,無法執(zhí)行操作!n); return; while(1) printf(n 請輸入你的學(xué)號:); gets(snum); for(j=0; jsn; j+) /在學(xué)生數(shù)組中查找輸入的學(xué)號 if(strc

37、mp(studentj.num, snum)=0) m=j; /找到該學(xué)號后記錄其下標(biāo) break; if(m0) /m小于0表示數(shù)組中沒有找到輸入的學(xué)號printf(n 學(xué)號錯誤,請重新輸入!n); else /m大于等于0,表示存在這個學(xué)生的信息while(1) printf(n); printf( 同學(xué),你好!n); printf(-n); printf( 1. 輸出個人借書信息n); printf( 2. 圖書信息查詢n); printf( 3. 借書n); printf( 4. 還書n); printf( 0. 返回主菜單n); printf(n 請選擇你需要的效勞(0-4):);

38、scanf(%d, & select); getchar(); switch(select) case 1: OutputOnestud(m); break; case 2: SearchMenu(bn); break; case 3: BorrowBook(bn, m); break; case 4: ReturnBook(bn, m); break; case 0: return; default: printf(n 按鍵錯誤,請重新選擇!n); /end switch /圖書信息管理模塊的函數(shù)定義/=/ 功能:從鍵盤輸入一本圖書的全部信息/ 參數(shù):i表示對第i本圖書進(jìn)行輸入操作/ 返回:

39、無/ 主要思路:按提示信息用scanf輸入圖書的各項(xiàng)信息,存放到數(shù)組book中 /=/void InputOnebook(int i) printf( 書號:); gets(booki.ISBN); printf( 書名:); gets(booki.bookname); printf( ); gets(booki.author); 略 /=/ 功能:從文件“book.dat中載入全部圖書的信息 / 參數(shù): 無/ 返回:返回文件中圖書的數(shù)量/ 主要思路:用while循環(huán)從文件中讀取圖書信息到數(shù)組book,同時統(tǒng)計(jì)圖書數(shù)量/=/int LoadBooks(void) FILE *fb; int b

40、n=0; /變量bn用來記錄圖書的數(shù)量 if(fb=fopen(book.dat, rb+)=NULL) /以二進(jìn)制讀、寫方式翻開文件 printf(cant open file book.datn); return(bn); /文件翻開失敗時,返回值為0 while(!feof(fb) /文件沒有結(jié)束時進(jìn)行讀數(shù)據(jù)操作 if(fread(&bookbn, SBOOK_LEN,1,fb) bn+; /從文件中每讀一本圖書,圖書數(shù)量加1 fclose(fb); /關(guān)閉文件 return(bn); /返回圖書數(shù)量,即bn的值/=/ 功能:將一本圖書的信息保存到文件“book.dat中/ 參數(shù):i表示

41、將第i本圖書的信息保存到文件中/ 返回:無/ 主要思路:先用fseek函數(shù)定位,再用fwrite函數(shù)寫入第i本圖書的信息/=/void SaveOnebook(int i) 略/=/ 功能:將全部圖書的信息保存到文件“book.dat中/ 參數(shù):bn表示圖書的數(shù)量/ 返回:無/ 主要思路:用fwrite函數(shù)將數(shù)組book中的數(shù)據(jù)一次性寫入文件/=/void SaveAllbooks(int bn) 略 /=/ 功能:實(shí)現(xiàn)圖書信息的初始化 / 參數(shù):無 / 返回:輸入圖書的數(shù)量/ 主要思路:用for循環(huán)實(shí)現(xiàn)輸入多本圖書信息,并寫入文件/=/int OriginalBook(void) int n

42、; char c=y; for(n=0; c=y|c=Y; n+) printf(n 輸入圖書%d的信息:n, n+1); InputOnebook(n); /調(diào)用函數(shù),輸入第n本圖書 printf(n 繼續(xù)輸入請按y, 停止請按n:); c=getchar(); getchar(); SaveAllbooks(n); /將輸入的n本圖書的數(shù)據(jù)保存至文件 return(n); /返回n的值,即輸入圖書的數(shù)量 /=/ 功能:修改圖書信息/ 參數(shù):bn表示圖書的數(shù)量 / 返回:無/ 主要思路:通過switch實(shí)現(xiàn)修改圖書的任意信息項(xiàng),并將修改后的信息寫入文件/=/void ModifyBook(i

43、nt bn) int select, k=-1; char isbn20, c1=y, c2; if(bn=0) printf(n 圖書信息為空,無法執(zhí)行操作!n); return; /返回到管理員功能選擇菜單while(c1=y|c1=Y) c2=y; printf(n 請輸入要修改的圖書的書號:); gets(isbn); for(int i=0; ibn; i+) if(strcmp(booki.ISBN, isbn )=0) k=i; break; if(kbookk.total_num) bookk.stock_num=bookk.total_num; break; case 8:

44、printf( 單價:); scanf(%f, &bookk.price); getchar(); break; case 9: printf( 出版時間年.月:); scanf(%d.%d, &booki.publish_time.year,&booki.publish_time.month); getchar(); break; default: printf(n 按鍵錯誤,請重新輸入!n); /end switch printf(n 還要修改此圖書的其他信息嗎?(y/n):); c2=getchar(); getchar(); /end while(c2) SaveOnebook(k);

45、 /保存修改后的圖書信息 printf(n 還需要修改其它圖書的信息嗎?(y/n):); c1=getchar(); getchar(); /end while(c1);printf(n 按任意鍵繼續(xù)!n); getch(); /=/ 功能:添加圖書信息/ 參數(shù):bn表示添加前的圖書數(shù)量/ 返回:添加后的圖書數(shù)量/ 主要思路:調(diào)用InputOnebook函數(shù)輸入要添加的圖書信息,再用fwrite將其寫入文件/=/int AddBook(int bn) char c=y; FILE *fb; if(fb=fopen(book.dat,ab)=NULL) / 以二進(jìn)制追加方式翻開文件 printf

46、(cant open file book.datn); exit(1); while(c=y|c=Y) printf(n 請輸入新增圖書的信息:n); InputOnebook(bn); /調(diào)用函數(shù),輸入第bn本圖書的信息 fwrite(&bookbn,SBOOK_LEN,1,fb); /將第bn本圖書的信息保存至文件 bn+; /圖書數(shù)量加1 printf(n 繼續(xù)輸入其它新圖書的信息嗎?(y/n):); c=getchar(); getchar(); printf(n 按任意鍵繼續(xù)!n); getch(); fclose(fb); return(bn); /返回添加圖書后的圖書數(shù)量/=/

47、功能:刪除圖書信息/ 參數(shù):bn表示刪除前的圖書數(shù)量 / 返回:刪除后的圖書數(shù)量/ 主要思路:先輸入要刪除圖書的書號,找到該書后進(jìn)行刪除操作,再調(diào)用SaveAllbooks/ 函數(shù)將刪除后的圖書信息寫入文件/=/int DelBook(int bn) int i, k=-1; char isbn20, c1=y, c2; if(bn=0) printf(n 圖書信息為空,無法執(zhí)行操作!n); return(bn); while(c1=y|c1=Y) c2=n; printf(n 請輸入要刪除的圖書的書號:); gets(isbn); for(i=0; ibn; i+) if(strcmp(bo

48、oki.ISBN, isbn)=0) k=i; break; /找到要刪除的圖書,用k記錄其下標(biāo) if(k0) /k小于0,表示沒找到輸入書號所對應(yīng)的圖書printf(n 輸入的書號有誤,請重新輸入!n);else printf(n 顯示該圖書的信息:n); OutputOnebook(k); printf(n 確定要刪除該圖書的全部信息嗎?(y/n):); c2=getchar(); getchar(); if(c2=y) /c2為y,表示確定進(jìn)行刪除操作 for(i=k; ibn; i+) booki=booki+1; /從數(shù)組中刪除第k本圖書 bn-; /圖書數(shù)量減1 printf(n

49、成功刪除!n); else /c2為n,表示不進(jìn)行刪除操作printf(n 取消刪除!n); printf(n 繼續(xù)刪除其它圖書的信息嗎?(y/n):); c1=getchar(); getchar(); /end whileSaveAllbooks(bn); /保存刪除后的全部圖書信息 printf(n 按任意鍵繼續(xù)!n); getch();return(bn); /返回刪除后的圖書數(shù)量/=/ 功能:輸出一本圖書的全部信息 / 參數(shù):i表示對第i本圖書進(jìn)行輸出操作 / 返回:無/ 主要思路:用printf函數(shù)輸出一本圖書的全部信息/=/void OutputOnebook(int i) 略

50、/=/ 功能:輸出全部圖書的詳細(xì)信息/ 參數(shù):bn表示圖書的數(shù)量 / 返回:無/ 主要思路:通過for循環(huán)屢次調(diào)用OutputOnebook函數(shù)輸出全部圖書的信息/=/void OutputAllbooks(int bn) 略/=/ 功能:以列表方式輸出全部圖書的簡要信息/ 參數(shù):bn表示圖書的數(shù)量 / 返回:無/ 主要思路:用for循環(huán)輸出全部圖書的簡要信息書號、書名、作者、庫存量/=/void OutputBrief(int bn) int i; printf(n 全部圖書的簡要信息:n);printf(n 序號 書號 書名 作者 庫存量 n);for(i=0;ibn;i+) printf

51、( %2d %-18s %-20s, i+1, booki.ISBN, booki.bookname); printf( %-8s %2dn, booki.author, booki.stock_num); printf(n 按任意鍵繼續(xù)!n); getch();/學(xué)生信息管理模塊的函數(shù)定義/=/ 功能:輸入一個學(xué)生信息/ 參數(shù):i表示對第i個學(xué)生進(jìn)行輸入操作/ 返回:無/ 主要思路:用gets函數(shù)輸入學(xué)生的學(xué)號和姓名/=/void InputOnestud(int i) 略 /=/ 功能:從文件“stud.dat中載入全部學(xué)生的信息 / 參數(shù): 無/ 返回:返回文件中學(xué)生的人數(shù)/ 主要思路:

52、用while循環(huán)從文件中讀取學(xué)生信息到數(shù)組student,同時統(tǒng)計(jì)學(xué)生人數(shù)/=/int LoadStuds(void) 參考LoadBooks函數(shù) /=/ 功能:保存一個學(xué)生信息/ 參數(shù):i表示將第i個學(xué)生的信息保存到文件中/ 返回:無/ 主要思路:先用fseek函數(shù)定位,再用fwrite函數(shù)寫入第i個學(xué)生的信息/=/void SaveOnestud(int i) FILE *fs; if(fs=fopen(stud.dat,rb+)=NULL) /以二進(jìn)制讀、寫方式翻開文件 printf(cant open file stud.datn); exit(1); fseek(fs, SSTUD_

53、LEN*i, 0); /文件指針定位到第i個學(xué)生 fwrite(&studenti, SSTUD_LEN, 1, fs); /將第i個學(xué)生的信息寫入文件 fclose(fs);/=/ 功能:將全部學(xué)生信息保存到文件“stud.dat中/ 參數(shù):sn表示學(xué)生人數(shù)/ 返回:無/ 主要思路:用fwrite函數(shù)將數(shù)組student中的數(shù)據(jù)一次性寫入文件/=/void SaveAllstuds(int sn) 略/=/ 功能:實(shí)現(xiàn)學(xué)生信息的初始化 / 參數(shù):無/ 返回:學(xué)生人數(shù)/ 主要思路:用for循環(huán)屢次調(diào)用InputOnestud函數(shù)實(shí)現(xiàn)輸入多個學(xué)生信息,并寫入文件/=/int OriginalSt

54、ud(void) int n; char c=y; for(n=0; c=y|c=Y; n+) printf(n 輸入學(xué)生%d的信息:n, n+1); InputOnestud(n); /調(diào)用函數(shù),輸入第n個學(xué)生的信息 printf(n 繼續(xù)輸入請按y; 停止請按n:); c=getchar(); getchar(); SaveAllstuds(n); /將輸入的n個學(xué)生的信息保存到文件中 return(n); /返回學(xué)生人數(shù),即n的值/=/ 功能:修改學(xué)生信息 / 參數(shù):sn表示學(xué)生人數(shù)/ 返回:無/ 主要思路:通過switch實(shí)現(xiàn)修改學(xué)生的任意信息項(xiàng),并將修改后的信息寫入文件/=/void

55、 ModifyStud(int sn) 修改方法與ModifyBook函數(shù)類似,代碼略。/=/ 功能:添加學(xué)生信息 / 參數(shù):sn表示添加前的學(xué)生人數(shù)/ 返回:添加后的學(xué)生人數(shù)/ 主要思路:調(diào)用InputOnestud函數(shù)輸入要添加的學(xué)生信息,再用fwrite將其寫入文件/=/int AddStud(int sn) 添加方法與AddBook函數(shù)類似,代碼略。/=/ 功能:刪除學(xué)生信息/ 參數(shù):sn表示刪除前的學(xué)生人數(shù)/ 返回:刪除后的學(xué)生人數(shù)/ 主要思路:先輸入要刪除學(xué)生的學(xué)號,找到該學(xué)生后進(jìn)行刪除操作,再調(diào)用SaveAllstuds/ 函數(shù)將刪除后的學(xué)生信息寫入文件/=/int DelStu

56、d(int sn) 刪除方法與DelBook函數(shù)類似,代碼略。/=/ 功能:輸出一個學(xué)生信息/ 參數(shù):i表示輸出第i個學(xué)生的信息/ 返回:無/ 主要思路:輸出一個學(xué)生信息,并輸出目前所借圖書的書號和借閱時間/=/void OutputOnestud(int i) 略/=/ 功能:輸出全部學(xué)生信息/ 參數(shù):sn表示學(xué)生人數(shù)/ 返回:無/ 主要思路:用for循環(huán)輸出全部學(xué)生的信息/=/void OutputAllstuds(int sn) int i, j, t; printf(n 全部學(xué)生的信息:n); printf(n 序號 學(xué)號 姓名 所借圖書書號 借閱時間n); for(i=0; isn;

57、 i+) printf( %2d %10s %6s , i+1, studenti.num, ); for(j=0,t=0; j5; j+) if(studenti.cardj.flag) if (t) printf(n%26c, ); /輸出空格 printf( %-20s,studenti.cardj.ISBN); printf(%d.%d.%d, studenti.cardj.bor_time.year, studenti.cardj.bor_time.month,studenti.cardj.bor_time.day); t=1; printf(nn); pr

58、intf(n 按任意鍵繼續(xù)!n); getch();/圖書查詢模塊的函數(shù)定義/=/ 功能:顯示圖書查詢菜單,實(shí)現(xiàn)功能選擇 / 參數(shù):bn表示圖書的數(shù)量/ 返回:無/ 主要思路:采用switch結(jié)構(gòu)實(shí)現(xiàn)圖書查詢功能的選擇/=/void SearchMenu(int bn) /函數(shù)功能是顯示圖書查詢菜單 int select; while(1) printf(n 歡送使用圖書查詢效勞n); printf(-n); printf( 1. 按書名查詢 2. 按作者查詢n); printf( 3. 按出版社查詢 4. 按出版時間查詢n); printf( 5. 按圖書分類查詢 0. 退出查詢效勞n);

59、printf(n 請選擇查詢方式(0-5):); scanf(%d, & select); getchar(); switch(select) case 1: SearcBname (bn); break; case 2: SearchAuthor(bn); break; case 3: SearchPublisher(bn); break; case 4: SearchPubtime(bn); break; case 5: SearchBclass(bn); break; case 0: return; default: printf(n 按鍵錯誤,請重新選擇!n); /=/ 功能:按書名進(jìn)

60、行圖書查詢/ 參數(shù):bn表示圖書的數(shù)量/ 返回:無/ 主要思路:輸入書名,先用strcmp函數(shù)進(jìn)行精確查詢,假設(shè)無查詢結(jié)果,再用strstr函數(shù)/ 進(jìn)行模糊查詢/=/void SearcBname (int bn) int i, j, k; char bname40, c=y; while(c=y|c=Y) k=-1; printf(n 請輸入書名:); gets(bname); for(i=0,j=1; ibn; i+) if(strcmp(booki.bookname, bname)=0) /精確查詢 k=i; printf(n 圖書%d的信息:n, j+); OutputOnebook(

溫馨提示

  • 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

提交評論