c++圖書信息管理系統(tǒng)(附源碼).doc
《c++圖書信息管理系統(tǒng)(附源碼).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《c++圖書信息管理系統(tǒng)(附源碼).doc(40頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
學(xué)號(hào):20104303 計(jì)算機(jī)實(shí)習(xí)報(bào)告 系 別:管理系 專 業(yè):信息管理與信息系統(tǒng)專業(yè) 班 級(jí):1043班 學(xué)生姓名:李 優(yōu) 指導(dǎo)教師:徐 日 日 期:2012-09-03~2012-09-14 1需求分析 1.1 選題任務(wù) 圖書借閱管理系統(tǒng) (1) 編程工具 C++ (2) 要求 選題學(xué)生應(yīng)具有端正的學(xué)習(xí)態(tài)度、正常的交流能力,應(yīng)有積極主動(dòng)、克服困難的學(xué)習(xí)意識(shí) (3) 本題概述 以學(xué)院圖書館為例,圖書借與管理是一項(xiàng)經(jīng)常性工作,為使圖書借閱管理工作準(zhǔn)確高效,提供圖書借閱記錄的添加、修改、刪除、查詢、瀏覽、匯總等,用圖書借閱關(guān)系軟件,能有效提高工作效率,具有較強(qiáng)的實(shí)際意義。 (4) 功能描述 ① 能度日外部提供的包含圖書借閱信息的文本文件(TXT文件); ② 能在程序中錄入圖書借閱信息(可參考我院圖書館網(wǎng)上圖書借閱信息的各個(gè)項(xiàng)目),并將信息寫入文本文件(TXT文件); ③ 能對(duì)所有圖書借閱信息,按條件(按圖書名、圖書編號(hào)、借閱日期、借閱人、超期與否、超期天數(shù)等)查詢?yōu)g覽,能匯總統(tǒng)計(jì)計(jì)算出符合某條件的圖書借閱記錄的數(shù)量并瀏覽這些借閱信息,能將查詢、瀏覽、匯總的結(jié)果輸出結(jié)果文本文件(TXT文件) (5) 輔助說明 基礎(chǔ)要求:①+② 擴(kuò)展要求:①+②+③ 1.2 輸入數(shù)據(jù)和輸出數(shù)據(jù)形式: 程序中包含的圖書信息包括: char bnum[20]; //書號(hào) char bname[20]; //書名 char bauthor[10]; //作者 char rname[10]; //借閱人 char bdays[10]; //借出日期 char bchao[10]; //超期天數(shù) 為了方便,我全部設(shè)置成了char型。 而程序中包含兩種輸入方式和兩種輸出方式,對(duì)應(yīng)題目要求,分別是:?jiǎn)蝹€(gè)圖書信息的增刪查改;TXT文檔的導(dǎo)入(圖書數(shù)據(jù)庫(kù).txt);屏幕的打印;TXT文檔的導(dǎo)出(書籍信息.txt)。 1.3 測(cè)試數(shù)據(jù)及測(cè)試目的 字母測(cè)試,錯(cuò)誤數(shù)據(jù)測(cè)試,重復(fù)數(shù)據(jù)測(cè)試 目的:產(chǎn)看本程序的糾錯(cuò)能力和是否人性化。 2程序設(shè)計(jì) 2.1 關(guān)鍵數(shù)據(jù)類型定義 //********書籍結(jié)構(gòu)體,用于存放書籍基本信息******** class Book { private: char bnum[20]; //書號(hào) char bname[20]; //書名 char bauthor[10]; //作者 char rname[10]; //借閱人 char bdays[10]; //借出日期 char bchao[10]; //超期天數(shù) public: Book() //構(gòu)造函數(shù)初始化信息 void set_bnum(char *no) //設(shè)置書號(hào) char *get_bnum() //獲得書號(hào) void set_bname(char *n) //設(shè)置書名 char *get_bname() //獲得書名 void set_bauthor(char *a) //設(shè)置作者 char *get_bauthor() //獲得作者姓名 void set_bdays(char *d) //設(shè)置借出日期 char *get_bdays() //獲得借出日期 void set_bchao(char *c) //設(shè)置超出天數(shù) char *get_bchao() //獲得超出天數(shù) void set_rname(char *rn) //設(shè)置借閱人 char *get_rname() //獲得借閱人姓名 void copy(Book m) //Book結(jié)構(gòu)體copy函數(shù) };//class book //**********書籍管理結(jié)構(gòu)體,實(shí)現(xiàn)管理書籍功能********** class BookManage { private: Book books[100]; //定義Book書籍結(jié)構(gòu)體數(shù)組對(duì)象,最大容量100本 public: int length; BookManage() //構(gòu)造函數(shù),讀取磁盤文件 int add(Book book) //添加圖書資料 int bnu_search(char *bnu) //按書號(hào)查找書籍 int bna_search(char *bna) //按書名查找書籍 int bau_search(char *bau) //按作者查找書籍 int rn_search(char *rn) //按借閱人查找書籍 int bd_search(char *bd) //按借出日期查找書籍 int bc_search(char *bc) //按超期天數(shù)查找書籍 void revise(Book book,int i) //修改書籍函數(shù) void deleteBook(int index) //刪除書籍資料函數(shù) void show_bookhead() //顯示輸出列表,表頭。 void show_book(int i)//顯示書籍函數(shù) void saveFileHead() ///保存書籍文件的表頭到txt void saveFile(int i) //帶參的輸出書籍到txt void readFile() //讀取書籍文件 };// class BookManage //**********菜單結(jié)構(gòu)體,實(shí)現(xiàn)界面引導(dǎo)********** class Menu { BookManage bm; //定義書籍管理結(jié)構(gòu)體對(duì)象bm private: int choice; //菜單序號(hào)選擇 int key; //管理員密碼 public: void header() //首頁歡迎界面 void log_menu() //主界面登錄菜單 void admin_menu() //管理菜單 void absearch_menu() //查找書籍菜單 void log_admin() //密碼登陸 void rn_search() //按借閱人姓名查找函數(shù) void bnu_search() //按書號(hào)查找函數(shù) void bna_search() //按書名查找函數(shù) void bau_search() //按作者查找函數(shù) void bd_search() //按借閱日期查找函數(shù) void bc_search() //按超期天數(shù)查找函數(shù) void addBook() //添加新的書籍信息函數(shù) void reviseBook() //修改書籍函數(shù) void delBook() //刪除書籍函數(shù) int main() 2.2 主程序流程圖 開始 判斷是否進(jìn)入并輸入密碼 3:刪除已有圖書資料 4:查找已有圖書資料 5:查看所有圖書資料 6:讀取指定位置 TXT 7: 寫入指定位置TXT 8:返回系統(tǒng)登錄界面 0: 退出圖書管理系統(tǒng) 1:添加新的圖書資料 2:修改已有圖書資料 輸入書號(hào)判斷書號(hào)是否重復(fù) 輸入要修改的書號(hào)判斷存在 輸入要?jiǎng)h除的書號(hào)判斷存在 退出系統(tǒng) 按超期查找 按作者查找 按編號(hào)查找 按日期查找 按書名查找 重新輸入書號(hào) 刪除 書籍 重新輸入書號(hào) 修改數(shù)據(jù) 重新輸入新書號(hào) 添加書籍 2.3 調(diào)用關(guān)系 1.書籍信息的錄入: void set_bnum(char *no) //設(shè)置書號(hào) {strcpy(bnum,no);} //把字符串no中的字符復(fù)制到字符串bnum中 char *get_bnum() //獲得書號(hào) { return bnum;} //返回值為bnum void set_bname(char *n) //設(shè)置書名 {strcpy(bname,n);} char *get_bname() //獲得書名 {return bname;} void set_bauthor(char *a) //設(shè)置作者 {strcpy(bauthor,a);} char *get_bauthor() //獲得作者姓名 {return bauthor;} void set_bdays(char *d) //設(shè)置借出日期 {strcpy(bdays,d);} char *get_bdays() //獲得借出日期 {return bdays;} void set_bchao(char *c) //設(shè)置超出天數(shù) {strcpy(bchao,c);} char *get_bchao() //獲得超出天數(shù) {return bchao;} void set_rname(char *rn) //設(shè)置借閱人 {strcpy(rname,rn);} char *get_rname() //獲得借閱人姓名 {return rname;} 2.書籍信息的添加: int add(Book book) 判斷l(xiāng)ength是否達(dá)到最大值,如果沒有則進(jìn)行添加。 3.書籍信息的查找: 無論是按照書號(hào)、書名、作者、借閱人、借出日期、超期天數(shù)來進(jìn)行查找都是進(jìn)行挨個(gè)比較,如果遇到相同則返回書籍的i值,進(jìn)行返回輸出。 4.書籍信息的修改: 輸入想要修改的書籍編號(hào),按照查找的方法,找到i,然后進(jìn)行覆蓋。完成修改。 5.書籍的屏幕打印輸出: 分兩部分輸出,首先打印一個(gè)頭信息,相當(dāng)于列表的頭;然后利用循環(huán)語句帶參輸出(i為參數(shù),循環(huán))。 6.保存信息到txt文件: 同分為兩部分,類似屏幕打印的方法,先存入表頭,然后帶參循環(huán)存入書籍信息。帶參的意義就是,可以無限調(diào)用該語句,只要知道書的序號(hào)i。 7.從信息中讀取txt文件: struct books { char numb[10]; //書號(hào) char nameb[20]; //書名 char authorb[10]; //作者 char namer[10]; //借閱人 char daysb[10]; //借出日期 char chaob[10]; //超期天數(shù) }; 定義結(jié)構(gòu)體。利用fscanf()語句講讀取的數(shù)據(jù)按順序存入結(jié)構(gòu)體中。然后直接利用書籍添加函數(shù)直接寫入系統(tǒng)。 3調(diào)試分析 3.1主要問題及解決方案: 1.界面顏色設(shè)定: 一直拋棄黑底白字這種默認(rèn)形式,換一種顏色給人特殊的感覺,在網(wǎng)上找到相關(guān)的代碼為system("color **");語句。但是也是沒有頭緒不知道怎么調(diào)試,后來一不小心設(shè)置錯(cuò)誤,系統(tǒng)就彈出了提示界面,我就明白了界面顏色的設(shè)置方法(圖3.1): 圖3.1 2.關(guān)于書籍的cout輸出: 最開始設(shè)計(jì)輸出模塊時(shí)候,僅僅是想到了不帶參的book信息輸出,show_book()函數(shù)中自帶了一個(gè)for語句循環(huán)輸出所有書籍信息,是為顯示全部書籍設(shè)計(jì)的。但是后來發(fā)現(xiàn)如果要單顯示篩選信息就要從新寫一個(gè)帶參show_book(int i),雖然函數(shù)重載允許這樣做,但是卻無意義的增加了代碼長(zhǎng)度。我選擇刪除了不帶參的show_book(),把for語句循環(huán)寫在外面。這樣就增加了show_book(int i)函數(shù)的利用率,精簡(jiǎn)了函數(shù)的和長(zhǎng)度。 3.書籍信息的txt寫入: 綜合了屏幕打印的經(jīng)驗(yàn),鑒于fwrite和cout使用方法和顯示效果類似,我決定將txt的寫入語句也設(shè)置成帶參形式saveFile(int i),原理與show_book(int i)基本一致。完成這些就能實(shí)現(xiàn)。后來發(fā)現(xiàn)文件總是覆蓋,每次寫入都會(huì)將上一次的覆蓋,也就是只有最后一行,后來才想起了ios::app追加模式,才最終算完整實(shí)現(xiàn)。 4.讀取數(shù)據(jù)函數(shù): 這個(gè)函數(shù)是我編輯最久的,因?yàn)槭褂玫牟皇炀?,我先查找了很多資料,并且寫了一些單獨(dú)的小程序去測(cè)試效果,但是感覺都不理想。后來選擇了一個(gè)最笨的方法,利用fseek函數(shù)一格一格的挑開空格和無用信息。但是這樣做最大的缺點(diǎn)就是,我的txt導(dǎo)入文檔鼻息保持固定格式,一格空格都不能多,如果多了就會(huì)導(dǎo)致錯(cuò)位。后來與徐老師交流時(shí),老師也說這種輸入方法不可取,因?yàn)閷?shí)現(xiàn)了功能但是意義不大。規(guī)格太死,不夠人性化。于是我就退后開始,重新選擇語句。最后決定定義結(jié)構(gòu)體,把txt中信息讀取之后直接存入結(jié)構(gòu)體,隨后就把結(jié)構(gòu)體中的數(shù)據(jù)利用set_xxxx函數(shù)存入。 5.關(guān)于字母糾錯(cuò)及錯(cuò)誤輸入的處理: 字母輸入原來都是用fflush(stdin);來清空緩存來防止程序進(jìn)入死循環(huán)。但是我這次編程想到了一個(gè)更加簡(jiǎn)單有效的方法:利用char 來存儲(chǔ)選擇,隨后強(qiáng)轉(zhuǎn)為int型,其實(shí)就是講所有的字符轉(zhuǎn)為了asc2碼,因?yàn)閍cs2碼的唯一性,我就可以用switch直接跳過了字母部分,比如我要判斷i的輸入是否唯1,我就將i-48寫入switch判斷就好了。 4使用說明 4.1 主要功能介紹及操作步驟: 1.主界面: 選擇1登陸,密碼為1043,按任意鍵進(jìn)入系統(tǒng)。 2.系統(tǒng)操作界面: 直接輸入數(shù)字選擇功能。 1: 添加新的圖書資料: 2: 修改已有圖書資料: 3: 刪除已有圖書資料: 4: 查找已有圖書資料: 根據(jù)序號(hào)選擇功能: 按書名查找: 按作者查找: 按借出日期查找: 按超期天數(shù)查找: 5: 查看所有圖書資料: 6: 讀取指定位置TXT: 7: 寫入指定位置TXT: 5測(cè)試結(jié)果 5.1 測(cè)試數(shù)據(jù) 1.A 4 asdfasdf(多字母): 1000 //目的為測(cè)試重復(fù)編號(hào)的問題 2.修改時(shí)候輸入未知編號(hào): 3.查找時(shí) 5.2 測(cè)試目的 1、測(cè)試學(xué)號(hào)重復(fù) 2、測(cè)試字母和特殊字符對(duì)輸入的影響 3、測(cè)試篩選是否符合規(guī)格 5.3 測(cè)試結(jié)果 全部通過 6心得體會(huì) 經(jīng)歷了為期十天的編程實(shí)習(xí),我覺得我變得更加成熟了,我從一開始的迷茫到后來的目標(biāo)堅(jiān)定,這都是一個(gè)改變的過程。因?yàn)槭窃谑罴偾熬瓦x好了題目,而且提前也知道了題目的要求。所以我在暑假就做好的了充分的準(zhǔn)備。其實(shí)最開始想自學(xué)用VC++來編寫一個(gè)可視化的程序。但是實(shí)施起來卻沒有那么容易,因?yàn)槲覍W(xué)習(xí)的VC不系統(tǒng)不全面只是一些皮毛,改改別的還可以,但是要是真正想實(shí)現(xiàn)自己的思想就有點(diǎn)捉襟見肘。后決定還是先用比較熟悉的C++語言來編一個(gè)完整的系統(tǒng)。雖然以前有做過C++的實(shí)驗(yàn)。但是像這種完成的系統(tǒng)確實(shí)沒有經(jīng)歷過。其實(shí)這也是一個(gè)挑戰(zhàn),也是一個(gè)開始,是我們接觸完整系統(tǒng)的開始。 等快開學(xué)時(shí)候我已經(jīng)完成了大部分代碼: 但是有一些問題還是沒有解決,我開學(xué)后就開始全力去解決這些問題。偏偏事與愿違,關(guān)于文件讀取問題始終沒有找到好的解決辦法。最后還是從c++教科書上找到的靈感來解決這些問題。收獲很大。 本次學(xué)習(xí)中我有以下收獲: 1、明確了c與c++的區(qū)別,運(yùn)用了多種c++知識(shí),包括一開始就沒弄太明白的文件輸入輸出,這回事真正弄明白了。 2、復(fù)習(xí)了類和結(jié)構(gòu)體的知識(shí),但是繼承類沒有用到。以后還要多加復(fù)習(xí)。 3、第一次編寫之后,運(yùn)行之后有50多個(gè)錯(cuò)誤,大多數(shù)都是因?yàn)轳R虎造成的。以后還要多加此類的練習(xí)熟能生巧。 4、多多利用網(wǎng)絡(luò)資源,看網(wǎng)上的類似的代碼能夠開闊自己的思路,學(xué)習(xí)別人好的算法。 學(xué)習(xí)有很大幫助。 5、先寫出流程圖這樣是非常好的一種習(xí)慣,可以為后面寫程序打下好的基礎(chǔ)。 6、養(yǎng)成好習(xí)慣,一個(gè)一個(gè)模塊寫,寫好了立即執(zhí)行看是否有錯(cuò)誤,以防都寫完了,錯(cuò)誤卻沒法去改正。 10天的編程已經(jīng)接近尾聲,但是總覺得要完善我的選題仍有許多要做的工作。以后還要加強(qiáng)自己的學(xué)習(xí)。努力學(xué)習(xí)編程。感謝徐老師的指導(dǎo)。 7附錄 #include- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
0 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- c+ 圖書 信息管理 系統(tǒng) 源碼
鏈接地址:http://italysoccerbets.com/p-6585958.html