當前位置:首頁 » 操作系統 » 資料庫課程設計圖書館管理系統

資料庫課程設計圖書館管理系統

發布時間: 2023-04-19 15:53:43

1. 圖書館借閱管理資料庫系統的設計

針對圖書館管理系統的需求,設計如下面所示的數據項和數據結構:

表1:書籍基本信住
包括的數據項有:索書號、圖書名稱、作者、出版社、出版日期、書價、ISBN、備注信息等。

 表2:讀者信息基本信息
包括的數據項有:讀者編號、學號、姓名、性別、年齡、學院、專業、籍貫、讀者類別、最大借閱數、已借閱數、可借閱數、有效日期、讀者備注等。

 表3:借書基本信息
包括的數據項有:索書號、借書日、應還日、續借次數、讀者編號等。

 表4:還書基本信息
包括的數據項有:索書號、還書日、逾期天數、逾期罰款、續借日、讀者編號等。

表4:管理員基本信息:包括的數據項有:管理ID、管理員帳號、管理密碼等。

我建議你再根據你設計的圖書館管理的需求,看下還有沒有其它欄位要添加上去,那樣就更好了。

2. (一)資料庫設計 資料庫管理系統綜合應用 -------圖書管理系統系統

你這個是要畢業設計吧。說白了
結構化系統開發,就是先自行規劃結構,流程,設計,步驟。優點就是維護方便。缺點開發周期長。

原型法就是用戶說什麼就做什麼。優點就是開發周期短。優點就是開發周期短,可供短期使用。缺點就是維護不便,用戶說什麼就改什麼。

3. 怎麼用資料庫製作圖書館管理系統

這是建立一個資料庫表.並不是一個圖書館管理系統.

4. 資料庫課程設計心得3篇

資料庫課程設計心得 範文 1: 在我看來,資料庫課程設計主要的目標是利用課程中學到的資料庫知識和技術較好的開發設計出資料庫應用系統,去解決各行各業信息化處理的要求。通過這次的課程設計,可以鞏固我們對資料庫基本原理和基礎理論的理解,掌握資料庫應用系統設計開發的基本 方法 ,進一步提高我們綜合運用所學知識的能力。

當我們這組決定做大學生就業咨詢系統時,我們並沒有著手寫程序。而是大家一起商量這個系統概述、系統目標、系統需求、業務流程分析、數據流程分析和數據詞典。當這些都准備好了之後,我們進行模塊的分工。每個人都有自己的模塊設計,而且寫出來的代碼要求可以實現相應模塊的功能,得到理想的效果。當每個人都把自己的分工做好了,最後會由一個人把這些全部組合搭建在一起。我們使用的是Html和php相互嵌套使用,當一個系統做好了之後,我會好好地把程序都看一遍,理會其中的奧秘。

我所負責的是資料庫的備份和還原還有一些界面的實現。還記得自己剛接觸html的時候,覺得很感興趣,所以有一段時間幾乎到了痴迷的程度。然而Php是我剛接觸不久的一種編程語言。不過覺得它的功能真的很強大,可以開發出很多大型的系統。但是在做備份和還原的時候,要考慮的東西還是很多的。當我遇到錯誤的時候,感到很受打擊。值得欣慰的是,在同學的幫助和大量參考書的查閱下,我把自己的模塊做好了。這就是我收獲最大的地方。而且,我明白了遇到困難永不放棄的重要性,我知道了團隊合作的重要性,我領悟了只有堅持不懈才會取得勝利。

知識的獲得是無止境的,只要你想學,只要你行動,沒有什麼會難倒我們的。回首這一個多星期的課程設計,我很欣慰。因為我有了動力,有了勇氣。謝謝老師對我們的不懈幫助,謝謝學校給了我們這一次實踐的機會,也謝謝組員們的關懷。這些美好的回憶美好的東西將永遠伴隨著我。
資料庫課程設計心得範文2:
一周的課程設計結束了,在這次的課程設計中不僅檢驗了我所學習的知識,也培養了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在設計過程中,和同學們相互探討,相互學習,相互監督。我學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世,這次課程設計對我來說受益良多。

課程設計是我們專業課程知識綜合應用的實踐訓練,著是我們邁向社會,從事職業工作前一個必不少的過程.“千里之行始於足下”,通過這次課程設計,我深深體會到這句千古 名言 的真正含義.我今天認真的進行課程設計,學會腳踏實地邁開這一步,就是為明天能穩健地在社會大潮中奔跑打下堅實的基礎。我這次設計的科目是數據結。

數據結構,是一門研究非數值計算的程序設計問題中計算機的操作對象(數據元素)以及它們之間的關系和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。作為一門獨立的課程在國外是從20XX年才開始設立的。20XX年美國唐·歐·克努特教授開創了數據結構的最初體系,他所著的《計算機程序設計技巧》第一卷《基本演算法》是第一本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作。“數據結構”在計算機科學中是一門綜合性的專業基礎課。數據結構是介於數學、計算機硬體和計算機軟體三者之間的一門核心課程。數據結構這一門課的內容不僅是一般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、 操作系統 、資料庫系統及其他系統程序的重要基礎。

通過這次模具設計,我在多方面都有所提高。

一、編譯工具VisualC++

很多程序在結構上是獨立的,但是本此設計的程序功能不是零散的,它有一個連接是的程序是一個整體,怎樣達到這種統一體呢?因為這個輸出連接是貫穿始終的。說到這,就應該說以下我所應用的調試工具,也就是運行環境VisualC++,可以充分利用Windows的支持剪貼版和英文的特點。正是在實現循環鏈表的程序中充分利用這個特點,才能製作出全漢化的初始化畫面。

二、鞏固和溫習了c語言

在界面設置中使用函數調用while。其中文本顯示顏色和背景顏色都可以任意按照自己的喜好,任意改變,但改變的時候必須採用標准英文大寫,同時在製作顯示菜單的窗口,大小根據菜單條數設計。最後採用printf輸出程序設計界面。

這次的程序軟體基本上運行成功,可以簡單的建立鏈式循環鏈表,並進行輸出,及循環語句的運用和選擇語句的控制。由於時間和知識上的限制,使得程序規模相對較小,即功能還不很全面,應用也不很普遍。原來C語言可是涉及很多知識,而不是枯燥無聊的簡單的代碼部分而已,利用C語言方面的知識,我們可以設計出更完善的軟體。

三、積累了寶貴的 經驗

我這次課程設計代碼中主要使用了鏈表的循環和遍歷這兩中操作。循環鏈表(CircularLinkedList)是單鏈表的另一種形式,它是一個首尾相接的鏈表。其特點是將單鏈表最後一個結點的指針域由NULL改為指向頭結點或線性表中的第一個結點,就得到了單鏈形式的循環鏈表,並稱為循環單鏈表。類似地,還有多重鏈的循環鏈表。在循環單鏈表中,表中所有結點被鏈在一個環上,多重循環鏈表則是將表中的結點鏈在多個環上。為了使某些操作實現起來方便,在循環單鏈表中也可設置一個頭結點。這樣,空循環鏈表僅由一個自成循環的頭結點表示。所謂遍歷(Traversal),是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點所做的操作依賴於具體的應用問題。

這次課程設計我選中的題目是個人資料的管理。編寫了一個可以簡易使用的個人資料管理系統,可以進行資料的輸入和管理。雖然在我的程序中有一部分是從網上搜索得來的,但我已經竭力將所獲得的信息變成自己的資源,動手上機操作,在了解和看懂的基礎上有所改變和創新,但是在的程序軟體中還有部分的不足,需要加以更新。僅管,我並沒能很好的利用所學數據結構的知識,但我也盡了自己最大的努力用我所學來完成這次的課程設計。同時,通過這次課程設計,我認識到了自己動手實踐的弱勢,特別是在編程方面,知道了計算機的實踐操作是很重要的,只有通過上機編程才能充分的了解自己的不足。

四、對以後的學習充滿了信心和期待

通過這次的課程設計,更是讓我深刻認識到自己在學習中的不足,同時也找到了克服這些不足的方法,這也是一筆很大的資源。在以後的時間中,我們應該利用更多的時間去上機實驗,加強自學的能力,多編寫程序,相信不久後我們的編程能力都會有很大的提高能設計出更多的更有創新的作品。
資料庫課程設計心得範文3:
資料庫課程設計大賽的塵囂漸漸遠去,懷著對這次大賽的些許不舍,懷著對當初課程設計開始時候的豪情萬丈的決心的留戀,懷著通過這次課程設計積累的信心與鬥志,我開始寫這篇 文章 ,為自己的足跡留下哪怕是微不足道但是對自己彌足珍貴的痕跡並期望與大家共勉。

首先,讓我的記憶追溯到大二暑假,在老大的指引下(老大勸我學asp.net),我接觸到microsoft 公司的.net產品。那個時候我已經學過vc和asp,因為windows程序設計實驗的課的關系,接觸過vb,但是沒有專門去學他,因為習慣了c++裡面的class,int,覺得vb的sub,var 看著就不是很順心。我是一個好奇心很強的人,突然看到了一個號稱“.net是用於創建下一代應用程序的理想而又現實的開發工具”,而且主推c#語言,由於對c語言的一貫好感,我幾乎是立刻對他產生了興趣。我就開始了對c#的學習,任何語言都不是孤立存在的,所以數據交互是很重要的,暑假的時候我把我們這學期的課本資料庫系統概論看了一遍。我記得以前用c語言編程的時候,數據是在內存中申請空間,譬如使用數組等等。很耗費內存空間。這個時候就是資料庫站出來的時候啦,於是我又裝上了sql server2000,以前學asp的時候用的是access,那個時候只是照著人家做,理論是什麼也不是很清楚。

通過一個暑假的學習,基本搞清楚了理論方面的東西,具體怎麼用也不是很清楚。但是這為這學期的課程設計打下了鋪墊。

來到學校後,隨著這學期的資料庫課程大賽開始了,我有一個看法就是我自己應該具備的能力不是我會多少,而是我應該具備快速學會東西的能力。遇到什麼就學什麼。我們有時候很容易被一些專業名詞說嚇著,包括什麼建模,軟體工程,數據分析,數據挖掘等等。我身邊就有很多同學被這些紙老虎所唬住,而沒有勇氣去接觸他們,總是說這個太難了之類的退堂鼓的話,他們低估了自己的潛力同時也壓抑住了他們自己的好奇心。其實都是紙老虎,又不是什麼國家科研難題,只是去用一些工具,發明工具是很難,但是用一個工具就容易多了,just do it!我記得我做這個資料庫之前,我們老師說要做好前期分析,我就在網上搜索用什麼分析工具好。最後我選擇了roseuml建模工具。在此之前,我腦袋裡面沒有軟體建模的思想,什麼uml建模對我而言就是一張空白的紙。但是真正接觸後並沒有想像的那麼難,有什麼不懂的上網去搜索,這是一個信息橫流的世界,有google,就沒有不能解決的知識難題。以及後來的資料庫分析的時候用到的powerdesigner也是一樣。

開發的時候我想過用什麼架構,c/s模式?模式有很多,怎麼選擇?我就上網搜索現在最流行的架構是什麼。結果搜到了mvc架構,就是你啦。我決定用這個架構,不會,沒關系,咱學。just do it!前期工作準備好後,那麼我就得把我暑假學的.net加以實踐。這個時候我更加深入的了解了利用ado.net操縱資料庫的知識。並且對資料庫裡面的存儲過程有了比較深入的了解。經過大概2個多星期的奮斗,我完成了我的資料庫課程設計--基於.net數據集的圖書館管理系統。並最後非常榮幸的獲得了大賽的一等獎以及以及新技術應用獎。

與其臨淵羨魚,不如退而結網。這次資料庫課程設計給我的最大的印象就是如果自己有了興趣,就動手去做,困難在你的勇氣和毅力下是抬不了頭的。從做這個資料庫開始無論遇到什麼困難,我都沒有一絲的放棄的念頭。出於對知識的渴望,出於對新技術的好奇,出於對一切未知的求知。我完成了這次資料庫課程設計,不過這只是我學習路上的驛站,未來十年.net的核心技術就是xml[至少微軟是這么宣傳的],我會繼續學習它,包括jave公司的j2ee我也很想試試,語言本來就是相通的,just do it!語言並不重要畢竟它僅僅是工具,用好一個工具並不是一件值得為外人道的事情,主要是了解學習思想。古語說的好:學無止境啊!

我很慶幸我參加了這次資料庫大賽,讓我確實打開了眼界。

5. 設計題目:2、圖書信息管理系統設計

圖書館管理信息系統的開發設計

摘要:本應用程序以普通圖書館為開發對象, 採用』 語言為開發平台, 可以完成圖書館管理系統的基本工作, 主要任務是對讀者注冊、圖書信息登記、數據維護、借閱圖書、歸還圖書、查詢信息和報表輸出進行計算機管理。
關鍵詞:圖書館,管理信息系統,開發設計

圖凳戚迅書館在正常運營中總是面對大量的讀者信息、書籍信息以及兩者相互作用產生的借書信息、還書信息。因此需要對讀者資源、書籍資源、借書信息、還書信息進行管理, 及時了解各個環節中信息的變更, 有利於提高管理效率。
目前市面上流行的圖書管理軟體不少。但是,對於企業、事業單位的圖書管理來說, 不需要太大型的資料庫系統。只需要一個操作方便、功能實用、能滿足圖書館日常管理工作需求的系統。我的目標就是在於開發一個功能實用、用戶操作方便、簡單明了的圖書館管理系統軟體。
本應用程序以普通圖書館為開發對象, 可以完成圖書館管理系統的基本工作, 主要任務是對讀者注冊、圖書信息登記、數據維護輸人記錄、修改記錄、刪除記錄、借閱圖書、歸還圖書、查詢信息和報表輸出進行計算機管理。

一、系統需求分析
1、系統目標設計。
通過一個圖書館管理信息系統, 使圖書館的信息管理工作系統化、規范化、自動化, 從而達到提高管理效率的目的。
2、開發設計思想。
本系統的開發設計思想。
系統應符合圖書館信息管理的規定, 滿足圖書館日常管理的工作需要, 並達到操作過程中的棗此直觀、方便、實用、安全等要求系統採用模塊化程序設計方法, 既便於系統功、能的各種組合和修改, 又便於未參與開發的技術維護人員補充、維護
系統應具備資料庫維護功能, 及時根據用戶需求進行數據的添加、刪除、修改、查詢等操作。
3、系統功能分析
書籍信息的輸人、修改, 包括總編號、分類號、單價、書名、作者、出版單位。
書籍信息的查詢, 包括按編號查、按書名查、按作者查, 應當選擇一種方式之後即可顯示出所查圖書的詳細信息總編號、分類號、單價、書名、作者、出版單位。
讀者信息的輸入、修改, 包括借書證號、姓名、性別、職稱、單位、地址
讀者信息的查詢, 包括按借書證號查、按讀者姓名查, 當選擇一種方式之後即可顯示出所查讀者的詳細信息姓名、性別、借書證號、單位、職稱、地址。
借書信息的輸人包括借書證號、總編號、借書日期當前系統日期、應還日期限期為巧天。歸還圖書, 把讀者借書信息借閱記錄從借閱資料庫表中刪除。
報表輸出、包含圖書、讀者、借閱三個報表, 可以完成預覽和列印輸出所有圖書、讀者和借閱記錄的功能。

二、系統總體結構設計
(1)系統功能模塊圖
(2)資料庫設計
資料庫需求分析
在仔細分析調查有關圖書館管理信息需求的基礎上, 得到如圖所示的本系統所處理的數據流程。
針對一般圖書館管理信息系統的需求, 通過對圖書館管理工作過程的內容和數據流程分析, 設計如下面所示的數據項和數據結構。
圖書信息包括的數據項有總編號、分類號、單價、書名、作者、出版單位等。
讀者信息, 包括的數據項有借書證號、姓名、性別、職稱、單位、地址等。
借閱信息, 包括的數據項有借書證號、總編號、借書日期、應還日期等。
(2)資料庫概念結構設計
根據上面的設計規劃出的實體有圖書實體、讀
者實體、借閱實體。
(3)資料庫邏輯結構設計
圖書館管理信息系統資料庫中的各個表格的設
計結果如下面表格所示。每個表格表示在資料庫中
的一個數據表。
圖書表
列名 數據類型 長度
總編號 字元型 6
分類號 字元型 6
單價 數值型 6(含2個小數位)
書名 字元型 40
作者 字元型 40
出版單位 字元型 40
(4)資料庫結構的實現
實現資料庫的邏輯結構有兩種方仔答式一種是直接使用的項目管理器來實現, 一種是利用其資料庫系統中的以之工具實現的。在開發中我採用了第一種方法實現資料庫結構。首先創建項目, 然後創建項目的資料庫, 最後建立數據表。

6. VFP課程設計 圖書管理系統

可行性分析報告

我們小組的信息系統開塌物發課程設計題目是:圖書管理系統開發。系統開發的總的設計目標是實現圖書管理的系統化、規范化和自動化,實現對圖書資料的集中統一的管理。
本系統主要實現對圖書館信息的管理,主要功能為管理有關讀者,書籍,借閱和管理者的信息等。本系統結構分為讀者信息管理模塊,書籍信息管理模塊,借閱信息管理模塊,管理者信息管理模塊。讀者信息管理部分有兩方面的功能,可以瀏覽讀者的信息,可以對讀者信息進行維護。書籍信息管理可以瀏覽書籍的信息,可以對書籍信息進行維護。借閱信息管理可以顯示當前資料庫中書籍借閱情況,可以對借閱信息進行維護。管理者信息管理可以顯示資料庫中管理者的情況,可以對管理者信息進行維護。可見,本系統並不復雜,主要解決的問題是利用關鍵字對資料庫進行查詢。

背景
近年來,隨著圖書館規模的不斷擴大,圖書數量也相應的增加,有關圖書的各種信息量也成倍增加,面對著龐大的信息量,傳統的人工方式管理會導致圖書館管理上的混亂,人力與物力過多浪費,圖書館管理費用的增加,從而使圖書館的負擔過重,影響整個圖書館的運作和控制管理,因此,必須制定一套合理、有效,規范和實用的圖書管理系統,對圖書資料進行集中統一的管理。
另一方面,IT產業和Internet獲得了飛速發展,計算機應用已滲透到了各個領域,引起信息管理的革命,實現了信息的自動化處理,提高了處理的及時性和正確性。
圖書管理工作面對大量的可模塊化處理的信息,是當今信息革命的一個重要陣地。我們小組開發圖書管理信息系統就是採用現代化的信息管理方式代替手工管理方式,提高圖書管理工作效率,作到信息的規范管理,科學統計和快速查詢,讓圖書館更好的為學校,社會服務。

從以前的手工管理的記錄中我們可以發現這樣的問題:
1.檢索速度慢、效率低
因為圖書館的藏書種類多、數量多,將藏書准確地分門別類,快速檢索,手工進行非常困難往往是終於查到了書的信息,館中沒有此書或已被別人借走。圖書館的規模越大,這個問題越突出。
2.借書、還書工作量大
借書、還書頻率越大,說明圖書館的作用越大,然而隨之而來的大量的借書、 還書登記、實存圖書的更新以及借出圖書超期、遺失等的處理,其工作量之大,往 往是人工操作所難以勝任的。而且經常會出現這樣那樣的差錯。
3.圖書統計工作難、藏書更新不能及時完成。
圖書館的圖書應根據科學技術的發展和教學工作的需要及時添加和更新,然而由於藏書數量及圖書種類越來越多,加上自然損耗,人為破壞,使圖書的統計工作難以及時完成,藏書的更新也就很難有針對性地進行,藏書的知識結構得不到良好地控制。

系統開發的重點與難點
系統出現了一些技術難點大致如下:
1、建立合理的表結構,避免數據冗餘
各表通過特定欄位實現不同表的數據連接,避免數據冗餘,需要設計簡潔高效的表結構。
2、建立相當的系統安全性
登錄用戶身份的驗證機制的設計、操作頁面的許可權保護。
3、建立嚴密的數據表操作機制
同一表有可能在多個模塊中被修改,所以嚴密的數據表操作機制的建立十分比較困難的,但也是必須的。除了設計時必須有相當程度的考慮,在編制時更應加強程序邏輯的可靠性和程序調試的全面性。

可行性分析
1.技術可行性
此次信息系統開發是大學專業知識的一次綜合應用與提高,我們小組可以在主教5樓機房完成系統開發。該機房計算機配置肯定能橋衫攔滿足系統開發的要求。我們小組可以選定兩三台計算機,建立系統開發環境,主要是安裝資料庫工具(MS SQL SERVER 2000),應用程序開發工具( VISUL BASIC 6.0或DELPHI),Office程序組以及網路傳輸工具。
我們小組的部分成員有計算機,配置是Pentium4 1.5G,256M以上內存,80G以上硬碟,可連網。小組成員之間可以通過QQ或電話進行即時交流,協調開發工作,解決開發工作中出現的問題。
就技術力量來說,我們小組可以完成此次開發工作。開發過程中會出現許多問題,有我敏胡們預想之中的,也有一些沒有我們預想到,但,我們有信心克服一切困難。該學期,我們小組各成員已經學習了SQL SERVER,對網路技術和操作系統也有系統的了解,有些成員熟悉計算機原理,能解決常見的硬體故障和硬體選擇。目前,圖書管理信息系統已得到了大量應用,有許多可供參考的成功系統。而且,網上有許多關於VISUL BASIC編程的資料和SQL SERVER方面的資料。 從技術角度考慮,此信息系統開發可行。
2.經濟可行性
目標系統開發需求比較低,加上具有成熟的軟硬體環境,所以在軟硬體的支出上十分有限。而且,目標系統並不是十分的復雜,開發的周期較短,人員經濟支出有限。當系統開發完實際運行後,將很大程度上提高計算機的功能,在為使用者帶來便利的同時,也為系統的進一步推廣創造了條件。這帶來的經濟回報將遠超過支出,並且最重要的一點是該軟體的開發可以給我們對系統的開發有個全面的認識。從經濟角度考慮,此信息系統開發可行。
3. 法律上可行
整個系統由於是自行開發,自行使用,所以系統本身不存在法律上的版權爭議。在伺服器軟體方面,應該使用正版軟體,因為整個系統盡管是開發給內部使用,但它畢竟很多部分還是要依靠Internet的,一旦伺服器連接到Internet上,它的操作系統可能會被Microsoft跟蹤,如果不是正版軟體,將不得不面臨民事訴訟的風險。

結論:
根據以上的可行性研究,我們小組認為開發此系統的條件已經具備,可以開始進行開發。

7. c語言程序設計課程設計 圖書管理系統 求原代碼

高級語言程序設計(2)課程設計
   
一 程序設計說明書
【設計題目】 圖書館借閱管理
【問題描述】圖書館,適合用C++面向對象的功能來描述。圖書館管理系統分為借書、還書、圖書管理和讀者服務等四個部分。設計一個讀者類Reader,記錄每個讀者基本信息;讀者庫類Rdatabase,記錄所有讀者信息;圖書類Book, 記錄每本書的基本信息;圖書庫類Bdatabase, 記錄所有圖書信息。
【基本要求】
1讀者庫類RDatabase中,其構造函數中,將read.txt文件中所有讀入讀者記錄rede[]中。處理完畢,在析構函數中將read[]中的所有未刪記錄寫入到read.txt中。
2圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。處理完畢,在析構函數中將book[]中的所有未刪記錄寫入到book.txt中。
3 利用構造函數完成讀者和圖書數據初始化,完成內存分配辯蘆皮。程序結束前,析構函數完成所申請的堆內存空間。
4 編寫主函數,對所編寫的矩陣類進行全面測試。要求用戶界面採用菜單方式。測試中需要讀者和圖書數據通過I/O流從磁碟文件讀入,同時顯示在屏幕上。得到的數據通過I/O流寫入磁碟文件保存,同時顯示在屏幕上。
5 源程序中要有充分的注釋,報告中要有詳細的流程圖和文字材料。
【類的設計】
該程序包含了四個類,如下:
1.Reader類,有讀者的基本管理功能,具有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
2.讀者庫類Rdatabase, 具有以下私有數據:
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
3.圖書庫類Book,有一本圖書的基本功能,有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
4.圖書庫類BDatabase,有以下私有數據:
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
【特殊函數的設計說明】
構造函數
1.Reader類中構造函數Reader(),初始化函數;
2.讀者庫類RDatabase中,其構造函數Rdatabase(),將read.txt文件中所有讀入讀者記錄rede[]中。
3.Book類中構造函數Book(),初始化函數;
4.圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。
 
拷貝構造函數
Reader類中的拷貝構造函數將getname()的返回值讀者姓名拷貝到setname()中,Book類中的拷貝構造函數將getname()函數的返回值圖書名拷貝到圖書名設置函數setname()中。
 
析構函數
1.讀者庫類RDatabase中,其析構函數~Rdatabase(),將read[]中的所有未刪記錄寫入到read.txt中;
2.圖書庫類BDatabase中,其析構函數~Bdatabase(),將book[]中的所有未刪記錄寫入到book.txt中。
 
運算符重載
重載了「=」,當比較讀者編號和圖書編號時,重載;重載位運算符「〈〈」和「〉〉」等。
 
【主要函數演算法流程圖】
 
【程序的使用方法】
1.進入操作頁面,按提示操作;
2.首先,新增圖書和讀者信息,之後就可以對以存在的信息進行操作;
3.操作當中,可以隨時增加,更改和刪除圖書或讀者嘩乎信息;
4.當選擇攜差退出時,進行清屏。
 
二 程序上機調試報告
【語法錯誤及其排除】
1.在敲程序時,有很多拼寫錯誤,例好多處把Readdata()誤打Readdate();結束的分號,在不同的輸入法狀態下輸入,這些小錯誤剛開始很難發現,不過有了經驗,就很容易了。
2.創建新的構造函數時,使用出現了錯誤。重載構造函數要注意函數的訪問許可權,結果就不會出現錯誤。
【演算法錯誤及其排除】
1.讀者類中借書操作函數中,採用循環語句時判斷讀者已借圖書量時for(int i=0;i<Maxbor;i++)誤寫為for(int i=1;i<Maxbor;i++),使循環發生錯誤。
2.指針使用錯誤,指針b和r混淆,導致編譯錯誤得到「error C2660: 'retbook' : function does not take 1 parameters」錯誤報告。
三 程序測試結果
【收獲及體會】
除了課堂外,課程設計是最能學到東西的,最考驗人的。在做課程設計這段時間,時刻都感覺自己有好多不懂,要學的太多了!經過這次課程設計,讓我對C++這門語言有了更深的認識,操作能力有了提高。要想得到敲的代碼運行出來後的滿足感,需要耐心細心,毅力以及充沛的體力。只有經過多次編輯,多次編譯,再多次運行,才能編寫出更好的程序,有時候需要多次的更正才達到所要的運行結果。學習編程,需要多揣摩,實踐,實踐,再實踐,編程技能才能更上一層樓,此外還得多向高手請教!
【源程序代碼】
//********************
//圖書館借閱管理
//班級:
//學號:
//姓名:
//********************
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
const int Maxr=1000;//最多的讀者
const int Maxb=10000;//最多的圖書
const int Maxbor=8;//每位讀者最多借8本書
class Reader //讀者類
{
int tag;//刪除標記 1已刪;0未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
public :
Reader(){}//構造函數
char *getname(){return name;}//獲取讀者姓名
int gettag(){return tag;}//獲取刪除標記
int getno(){return no;}//獲取讀者編號
void setname(char na[])//設置讀者姓名
{
strcpy(name,na);
}
void delbook(){tag=1;}//設置刪除標記
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==0)
{
borbook[i]=bookid;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//輸出讀者信息
{
cout<<setw(5)<<no<<setw(10)<<name<<"借書編號:";
for(int i=0;i,Maxbor;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<endl;
}
};
 
class RDatabase//讀者庫類
{
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase()//構造函數,將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);
while(1)
{
file.read((char*)&s,sizeof(s));
if(!file)break;
top++;
read[top]=s;
}
file.close();
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者,檢查是否已存在
{
Reader *p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader*query(int readerid)//按編號查找
{
for(int i=0;i<=top;i++)
if(read[i].getno()==readerid&&read[i].gettag==0)
return &read[i];
return NULL;
}
void disp()//刪除讀者所有信息
{
for(int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護
~RDatabase()//析構函數,將read[]寫入reader.txt文件中
{
fstream file("reader.txt",ios::out);
for(int i=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
int choice=1;
char rname[20];
int readerid;
Reader*r;
while(choice!=0)
{
cout<<"讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"請輸入讀者編號:";
cin>>readerid;
cout<<"讀入讀者姓名:";
cin>>rname;
addreader(readerid,rname);
break;
case 2:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"讀者不存在"<<endl;
break;
}
cout<<"請輸入新讀者姓名:";
cin>>rname;
r->setname(rname);
break;
case 3:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"讀者不存在"<<endl;
break;
}
r->delbook();
break;
case 4:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"該讀者編號不存在"<<endl;
break;
}
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
 
class Book//圖書類
{
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
public:
Book(){}
char*getname(){return name;}//獲取讀者姓名
int getno(){return no;}//獲取圖書編號
int gettag(){return tag;}//獲取刪除標記
void setname(char na[])//設置書名
{
strcpy(name,na);
}
void delbook(){tag=1;}//刪除圖書
void addbook(int n,char*na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;
}
};
 
class BDatabase//圖書庫類
{
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
public:
BDatabase()//構造函數,將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while(1)
{
file.read((char*)&b,sizeof(b));
if(!file)break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char*na)//增加圖書
{
Book*p=query(n);
if(p==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
cout<<"新增成功!"<<endl;
}
Book*query(int bookid)//查找圖書
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
return NULL;
}
void bookdata();//圖書庫維護
void disp()
{
for(int i=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構函數,將book[]寫入book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
int choice;
char bname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"輸入圖書編號:";
cin>>bookid;
cout<<"輸入圖書書名:";
cin>>bname;
addbook(bookid,bname);
break;
case 2:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
cout<<"輸入新書名:";
cin>>bname;
b->setname(bname);
cout<<"更名成功!"<<endl;
break;
case 3:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在!"<<endl;
break;
}
b->delbook();
break;
case 4:
cout<<"請輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該書不存在!"<<endl;
break;
}
b->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
 
void main()
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
cout<<" 1借書      "<<endl;
cout<<" 2還書      "<<endl;
cout<<" 3圖書維護  "<<endl;
cout<<" 4讀者維護  "<<endl;
cout<<" 0離開      "<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"借書,請輸入讀者編號:";
cin>>readerid;
cout<<"圖書編號:";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"哈哈,借書成功!";
break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"不存在該書!"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"該書已借"<<endl;
break;
}
r->borrowbook(b->getno());
break;
cout<<"借書成功!"<<endl;
case 2:
cout<<"還書,請輸入讀者編號:";
cin>>readerid;
cout<<"請輸入圖書編號;";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"不存在該讀者!"<<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
cout<<"還書成功!"<<endl;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
【輸出結果】
1借書
2還書
3圖書管理
4讀者服務
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:1111
輸入圖書書名:武林外傳
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:2222
輸入圖書書名:今夜無眠
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務
0退出
4
讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
請輸入讀者編號:001
讀入讀者姓名:周強
讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務
0退出
1
借書,請輸入讀者編號:001
圖書編號:1111
哈哈,借書成功! 1借書
2還書
3圖書管理
4讀者服務
0退出
2
還書,請輸入讀者編號:001
請輸入圖書編號;1111
還書成功!
1借書
2還書
3圖書管理
4讀者服務
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
2
輸入圖書編號:2222
輸入新書名:金庸全集
更名成功!
Press any key to continue

8. 資料庫課程設計 圖書館管理系統

①建立Access資料庫
先新建一個資料庫(access):建立Microsoft Access->命名為Text->否->打開->設計(添加學生所需信息)->表保存命名為lm(information)->否
②進行ADO配置
「開始」 -> 「程序」 -> 「Borland Delphi 7」寬豎 ->「File」 ->「Open Project」 ->「Project1」 -> Ctrl+F12選擇「Main」 ,按F12後出現MainForm窗體:
1)在程序主窗體MainForm上放置一個 「ADOConnection1」在Properties里LoginPrompt的屬性設為false;ConnectionString ->Use ConnectionString 點Build」 ->「Microsoft Jet 4.0 OLE DB Provider」後點「下一步」,選擇創建的Access 2003 資料庫的路徑->「測試連接」出現成功後點「確定」->ok;Connected屬性設為True;
2)在主窗體上放一個「ADOTable1」屬性Connection->ADOConnection1,屬性TableName->lm,屬性Active->T(簡稱閥門);
3) 在主窗體上放DataSource1->DataSet->ADOTable1;4)在主窗體上放一個-DBGrid1-->DataSource->DataSource1;
①splashForm在工程文件(.dpr)中核心代碼
SplashForm := TSplashForm.Create(Application); //啟動屏創建
Application.CreateForm(TMainForm, MainForm); //創建主窗體
Application.CreateForm(TLoginForm, LoginForm); //創建用戶驗證窗體
SplashForm.Close; //關閉啟動屏窗體
SplashForm.Free; //釋放啟動屏窗體所佔的內存
②loginForm核心代碼
LoginForm.ModalResult := mrOK; //確定按鈕,可以進入主界面
LoginForm.ModalResult := mrCancel; //取消按鈕
③mainForm 核心代世巧桐碼

1) 在Onshow中的核心代碼:
LoginForm.ShowModal;
if LoginForm.ModalResult = mrCancel then
Application.Terminate //(登陸界面進入主界面的過程中只要用戶名密碼都對時,登陸界面自動消失搜坦)

2) 在錄入按鈕的核心代碼:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Insert Into lm(num, name, sex,
shijian,class,zhu,link,gs,yy,jsj)');
ADOQuery1.SQL.Add('Values (:snum,:sname,:ssex,:sshijian,
:sclass,:szhu,:slink,:sgs,:syy,:sjsj)');
ADOQuery1.Parameters.ParamByName('sNum').Value := Edit1.Text;
(輸入學生的基本信息跟各科成績後,點「錄入」,便可在DBGrid1中添加所輸入的信息)。

3) 在修改按鈕的核心代碼:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(『Update lm');
ADOQuery1.SQL.Add(『set num=:snum, name=:sname sex=:ssex,shijian=:sshijian,class=:sclass,zhu=:szhu,link=:slink,gs=:sgs; yy=:syy,jsj=:sjsj');
ADOQuery1.SQL.Add(『 Where Num = :sNum2');
ADOQuery1.Parameters.ParamByName(『snum').Value := Edit11.Text;
(在「輸入要修改的學號」處輸入某學號,再重新輸入該基本信息與各科成績,點擊即可)。

4) 在刪除按鈕的核心代碼:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(『Delete From lm Where num = :snum');
ADOQuery1.Parameters.ParamByName(『snum').Value := Edit1.Text;
ADOQuery1.ExecSQL;
showmessage(『ok'); //彈出對話框,提示操作成功
(輸入學號,即可刪除該學號的全部信息)。

5) 在查詢按鈕的核心代碼:
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(『Select * From lm Where num = :snum');
ADOQuery2.Parameters.ParamByName(『snum').Value :=Edit1.Text;
ADOQuery2.Open
(通過輸入學號,點擊「查詢」按鈕後即可查詢該學號對應的信息)。

6) 刷新核心代碼:
ADOTable1.Close ;

ADOTable1.Open; //對錄入,修改,刪除,查詢的操作數據進行刷新。

9. 數據結構課程設計(基於C) 圖書管理系統

頭文件:
============
#ifndef _DATA_STRUCT_H_
#define _DATA_STRUCT_H_

/*圖書結構*/
struct Book
{
unsigned long BookID;/*圖書編號*/
char BookName[512];/*書名*/
char Writer[512];/*作者*/
int CurrentNumber;/*現存量*/

Book *pNext;/*下一個圖書信息*/
};

/*圖書索引結構*/
struct Index
{
unsigned long BookID;/*圖書編號*/
Index *pNext;/*下一個索引指針*/
};

/*借閱信息結構*/
struct Borrow
{
unsigned long BookID;/*借閱圖書編號*/
char BookName[512];/*書名*/
unsigned long StuID;/*圖書證號*/
char ReturnTime[512];/*歸還日期*/

Borrow *pNext;/*下一個借閱信息*/
};

#endif/*_DATA_STRUCT_H_*/

實現文件:
===============
// BookManage.cpp : 定義控制台應用程序的入口點。
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "DataStruct.h"

/*
數據結構課程設計(基於C) 圖書管理系統
懸賞分:100 - 離問題結束還有 14 天 23 小時
【問題描述】
圖書管理基本業務活動包括,對一本書的采編入庫、清楚庫存、借閱和歸還等等。試設計一個圖書管理系統,將上述業務活動藉助於計算機系統完成。
【基本要求】
(1) 每種書的登記至少包括書號春前好書名作者現存量總庫存量5項
(2)對書號建立索引表(線性表)以提高查找效率
(3) 系統要實現的操作及其功能定義如下:
1 采編入庫:新購入一種書,經分類和確定數好之後登記到圖書館賬目中去。如果這種書在賬戶中已有,則只將總庫存量增加。
2借閱:如果一本書的現存量悔友大於零,則借出一本,登出借閱者的圖書證扒鉛號和歸還日期
3歸還:注銷對借閱者的登記,改變該書的現存量
*/

/*獲取輸入字元串*/
void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);
/*顯示主菜單 並返回選擇*/
int ShowMainMenu();
/*圖書入庫操作,傳入參數為圖書列表頭指針的指針和索引信息的頭指針的指針,因為在此函數內部可能會改變頭指針的值*/
void PutBookInLib(Book **pHead,Index **pIndex);
/*查詢圖書館庫存,查詢不改變數據,故傳入指針即可*/
void QueryBookLib(Book *pHead);
/*借閱圖書*/
void BorrowBook(Borrow **pBorrow,Book *pHead);
/*查詢借閱*/
void QueryBorrow(Borrow *pBorrow);
/*歸還圖書*/
void ReturnBook(Borrow **pBorrow,Book *pHead);
/*釋放圖書鏈表及索引鏈表及借閱信息鏈表*/
void DeleteBookList(Book **pHead);
void DeleteIndexList(Index **pIndex);
void DeleteBorrowList(Borrow **pBorrow);

int main()
{
/*圖書列表頭指針*/
Book *pBookHead = NULL;
/*圖書索引頭指針*/
Index *pIndexHead = NULL;
/*借閱信息頭指針*/
Borrow *pBorrowHead = NULL;
/*用來保存當前用戶的輸入*/
int ChoosedNum = -1;

while ( true )
{
ChoosedNum = ShowMainMenu();
switch(ChoosedNum)
{
case 0 :/*退出*/
{
return 0;
break;
}
case 1:/*圖書入庫*/
{
PutBookInLib(&pBookHead,&pIndexHead);
break;
}
case 2:/*查詢庫存*/
{
QueryBookLib(pBookHead);
printf("按回車鍵繼續...");
fflush(stdin);
getchar();
system("cls");
break;
}
case 3:/*借閱圖書*/
{
QueryBookLib(pBookHead);
BorrowBook(&pBorrowHead,pBookHead);
break;
}
case 4:/*查詢借閱*/
{
QueryBorrow(pBorrowHead);
printf("按回車鍵繼續...");
fflush(stdin);
getchar();
system("cls");
break;
}
case 5:/*歸還圖書*/
{
QueryBorrow(pBorrowHead);
ReturnBook(&pBorrowHead,pBookHead);
break;
}
}
}

DeleteBookList(&pBookHead);
DeleteIndexList(&pIndexHead);
DeleteBorrowList(&pBorrowHead);

fflush(stdin);
getchar();
return 0;
}

/*獲取輸入字元串*/
void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber)
{
memset(pInOutStr,0x0,StrLen);

fflush(stdin);
int Count = 0;
while ( true )
{
char TmpC = 0;
fread(&TmpC,1,1,stdin);

if ( 10 == TmpC )
{
break;
}

if ( OnlyGetNumber && TmpC >= '0' && TmpC <= '9' )
{
pInOutStr[Count] = TmpC;
Count++;
}
else
{
pInOutStr[Count] = TmpC;
Count++;
}
}
}

/*顯示主菜單 並返回選擇*/
int ShowMainMenu()
{
char InPutStr[1024];

NO_INPUT:

printf("\n\n\n");
printf("******************************************************************\n");
printf("* 圖書管理系統 *\n");
printf("******************************************************************\n");
printf("\n");
printf("請選擇:\n");
printf("\t1.圖書入庫\n");
printf("\t2.查詢庫存\n");
printf("\t3.借閱圖書\n");
printf("\t4.查詢借閱\n");
printf("\t5.歸還圖書\n");
printf("\t0.退出\n");
printf("\n");
printf("\t輸入 : ");

GetInput(InPutStr,1024,true);

if ( strlen(InPutStr) < 1 )
{
system("cls");
goto NO_INPUT;
}

return atoi(InPutStr);
}

/*圖書入庫操作*/
void PutBookInLib(Book **pHead,Index **pIndex)
{
Book *pWork = *pHead;
unsigned long BookID = 1;
char InPutStr[1024];

/*先計算處當前入庫圖書的ID號*/
if ( NULL == pWork )
{
BookID = 1;
}
else
{
while ( pWork->pNext != NULL )
{
pWork = pWork->pNext;
}
BookID = pWork->BookID + 1;
}

Book *pTmpNewBook = (Book *)(malloc(sizeof(Book)));
memset(pTmpNewBook,0x0,sizeof(Book));
Index *pTmpIndex = (Index *)(malloc(sizeof(Index)));
memset(pTmpIndex,0x0,sizeof(Index));

pTmpNewBook->BookID = BookID;
pTmpIndex->BookID = BookID;

system("cls");
printf("輸入圖書名稱 : ");
GetInput(InPutStr,1024);
strcpy(pTmpNewBook->BookName,InPutStr);
system("cls");
printf("<<%s>>\n",pTmpNewBook->BookName);
printf("圖書作者 : ");
GetInput(InPutStr,1024);
strcpy(pTmpNewBook->Writer,InPutStr);
system("cls");
printf("<<%s>>\n",pTmpNewBook->BookName);
printf("作者:%s\n",pTmpNewBook->Writer);
printf("入庫數量 : ");
GetInput(InPutStr,1024,true);
pTmpNewBook->CurrentNumber = atoi(InPutStr);

if ( pTmpNewBook->CurrentNumber < 1 )
{
system("cls");
printf("入庫數量錯誤!(按回車鍵繼續...)");
fflush(stdin);
getchar();
system("cls");
return;
}

if ( NULL == *pHead )
{
*pHead = pTmpNewBook;
*pIndex = pTmpIndex;
}
else
{
Book *pWork = *pHead;
while ( pWork != NULL )
{
if ( strcmp(pWork->BookName,pTmpNewBook->BookName) == 0 && strcmp(pWork->Writer,pTmpNewBook->Writer) == 0 )
{
pWork->CurrentNumber += pTmpNewBook->CurrentNumber;
return;
}
pWork = pWork->pNext;
}

pWork = *pHead;
while ( pWork->pNext != NULL )
{
pWork = pWork->pNext;
}
pWork->pNext = pTmpNewBook;
Index *pWork2 = *pIndex;
while ( pWork2->pNext != NULL )
{
pWork2 = pWork2->pNext;
}
pWork2->pNext = pTmpIndex;
}

system("cls");
printf("圖書:<<%s>>\n作者:%s\n入庫數:%d\n\n入庫操作成功!(按回車鍵繼續...)",pTmpNewBook->BookName,pTmpNewBook->Writer,pTmpNewBook->CurrentNumber);
fflush(stdin);
getchar();
system("cls");
}

/*釋放圖書鏈表及索引鏈表*/
void DeleteBookList(Book **pHead)
{
Book *pWork = *pHead;
Book *pNext = pWork;
while ( NULL != pWork )
{
pNext = pWork->pNext;
free(pWork);
pWork = pNext;
}
}

void DeleteIndexList(Index **pIndex)
{
Index *pWork = *pIndex;
Index *pNext = pWork;
while ( NULL != pWork )
{
pNext = pWork->pNext;
free(pWork);
pWork = pNext;
}
}

void DeleteBorrowList(Borrow **pBorrow)
{
Borrow *pWork = *pBorrow;
Borrow *pNext = pWork;
while ( NULL != pWork )
{
pNext = pWork->pNext;
free(pWork);
pWork = pNext;
}
}

/*查詢圖書館庫存,查詢不改變數據,故傳入指針即可*/
void QueryBookLib(Book *pHead)
{
Book *pWork = pHead;
int TotalCount = 0;
while ( NULL != pWork )
{
TotalCount++;
pWork = pWork->pNext;
}
system("cls");
printf("當前庫存共%d種圖書,列表如下:\n=====================================================\n",TotalCount);
pWork = pHead;
while ( NULL != pWork )
{
printf("編號:[%d] 書名:<<%s>> 作者:%s 當前庫存:%d\n",pWork->BookID,pWork->BookName,pWork->Writer,pWork->CurrentNumber);
pWork = pWork->pNext;
}
printf("=====================================================\n",TotalCount);
}

/*借閱圖書*/
void BorrowBook(Borrow **pBorrow,Book *pHead)
{
char InPutStr[1024];
bool HadTheBook = false;
Borrow *pTmpBorrow = (Borrow *)(malloc(sizeof(Borrow)));
memset(pTmpBorrow,0x0,sizeof(Borrow));

printf("請輸入你想借書的編號 : ");
GetInput(InPutStr,1024,true);
pTmpBorrow->BookID = atoi(InPutStr);

Book *pWorkBook = pHead;
while ( pWorkBook != NULL )
{
if ( pWorkBook->BookID == pTmpBorrow->BookID )
{
HadTheBook = true;
break;
}
pWorkBook = pWorkBook->pNext;
}

if ( HadTheBook )
{
if ( pWorkBook->CurrentNumber < 1 )
{
system("cls");
printf("圖書<<%s>>當前無庫存,無法借閱!\n(按回車鍵繼續...)",pWorkBook->BookName);
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}
}
else
{
system("cls");
printf("圖書編號%d不存在!\n(按回車鍵繼續...)",pTmpBorrow->BookID);
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}

strcpy(pTmpBorrow->BookName,pWorkBook->BookName);
printf("請輸入借書證號 : ");
GetInput(InPutStr,1024,true);
pTmpBorrow->StuID = atoi(InPutStr);

if ( 0 == pTmpBorrow->StuID )
{
system("cls");
printf("借書證號不存在(借書證號輸入整數)!\n(按回車鍵繼續...)");
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}

time_t ltime;
struct tm *today;
time(<ime);
ltime += 60 * 60 * 24 * 30;
today = localtime(<ime);
sprintf(pTmpBorrow->ReturnTime,"%d年%d月%d日", today->tm_year+1900,
today->tm_mon+1,
today->tm_mday);

if ( *pBorrow == NULL )
{
*pBorrow = pTmpBorrow;
}
else
{
Borrow *pWork = *pBorrow;
while ( NULL != pWork->pNext )
{
pWork = pWork->pNext;
}
pWork->pNext = pTmpBorrow;
}
pWorkBook->CurrentNumber--;

system("cls");
printf("借書證號:%d\n借閱圖書:<<%s>>\n\n操作成功!(按回車鍵繼續...)",pTmpBorrow->StuID,pTmpBorrow->BookName);
fflush(stdin);
getchar();
system("cls");
}

/*查詢借閱*/
void QueryBorrow(Borrow *pBorrow)
{
Borrow *pWork = pBorrow;
int TotalCount = 0;
while ( NULL != pWork )
{
TotalCount++;
pWork = pWork->pNext;
}
system("cls");
printf("當前借閱信息共%d條,列表如下:\n=====================================================\n",TotalCount);
pWork = pBorrow;
while ( NULL != pWork )
{
printf("借數證號:[%d] 借書名:<<%s>> 圖書編號:%d 歸還日期:%s\n",pWork->StuID,pWork->BookName,pWork->BookID,pWork->ReturnTime);
pWork = pWork->pNext;
}
printf("=====================================================\n",TotalCount);
}

/*歸還圖書*/
void ReturnBook(Borrow **pBorrow,Book *pHead)
{
char InPutStr[1024];
Borrow TmpBorrow;
bool HasFindBorrwo = false;

memset(&TmpBorrow,0x0,sizeof(TmpBorrow));
printf("請輸入借書證號 : ");
GetInput(InPutStr,1024,true);
TmpBorrow.StuID = atoi(InPutStr);
printf("請輸入所還圖書編號 : ");
GetInput(InPutStr,1024,true);
TmpBorrow.BookID = atoi(InPutStr);

Borrow *pWorkBorrow = *pBorrow;
Borrow *pDeletePre = NULL;
while ( NULL != pWorkBorrow )
{
if ( pWorkBorrow->BookID == TmpBorrow.BookID && pWorkBorrow->StuID == TmpBorrow.StuID )
{
HasFindBorrwo = true;
break;
}
pDeletePre = pWorkBorrow;
pWorkBorrow = pWorkBorrow->pNext;
}

if ( ! HasFindBorrwo )
{
system("cls");
printf("你輸入的借書信息不存在!\n(按回車鍵繼續...)");
fflush(stdin);
getchar();
system("cls");
return;
}

if ( NULL == pDeletePre )
{
*pBorrow = pWorkBorrow->pNext;
}
else
{
pDeletePre->pNext = pWorkBorrow->pNext;
}

Book *pWorkBook = pHead;
while ( NULL != pWorkBook )
{
if ( pWorkBook->BookID == pWorkBorrow->BookID )
{
pWorkBook->CurrentNumber ++;
}
pWorkBook = pWorkBook->pNext;
}

system("cls");
printf("借書證號:%d\n歸還圖書:<<%s>>\n\n操作成功!(按回車鍵繼續...)",pWorkBorrow->StuID,pWorkBorrow->BookName);
fflush(stdin);
getchar();
system("cls");
free(pWorkBorrow);
}

熱點內容
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:26
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:99
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:934
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:727
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:797
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:504
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:366
ef資料庫查詢數據 發布:2025-05-18 03:29:36 瀏覽:668
百度雲下載文件夾 發布:2025-05-18 03:17:33 瀏覽:674
php雲開發 發布:2025-05-18 03:12:41 瀏覽:447