C++圖書管理系統(tǒng)
《C++圖書管理系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《C++圖書管理系統(tǒng)(42頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、成都理工大學(xué)工程技術(shù)學(xué)院畢業(yè)論文 C++圖書管理系統(tǒng) 作者姓名:江孝濤 專業(yè)名稱:計(jì)算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師:柳 軍 講師 C++圖書管理系統(tǒng) 摘要 本系統(tǒng)采用基于網(wǎng)絡(luò)的C/S模式將軟件分成客戶端(前臺(tái))和服務(wù)器端(后臺(tái))。前臺(tái)與后臺(tái)服務(wù)器進(jìn)行互動(dòng),前臺(tái)通過網(wǎng)絡(luò)向服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求,并處理服務(wù)器的回應(yīng)數(shù)據(jù),將數(shù)據(jù)直觀的顯示給用戶,前臺(tái)程序主要運(yùn)用的C++ Qt中的界面控件,后臺(tái)主要是接收用戶的請(qǐng)求,做出相應(yīng)的回應(yīng),并進(jìn)行數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)處理,后臺(tái)使用MySQL數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),需要建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫。本系統(tǒng)
2、能對(duì)圖書實(shí)行分類管理,并能按客戶端登錄用戶實(shí)行三級(jí)權(quán)限管理:讀者、圖書管理員和操作員。 本系統(tǒng)分用戶登錄、圖書查詢、借還圖書,系統(tǒng)管理和日志系統(tǒng)等五大功能模塊。其中圖書查詢功能分為模糊查詢、直接查詢、多條件查詢;系統(tǒng)管理則包括讀者管理、圖書分類管理、圖書管理、逾期未還圖書管理、管理員權(quán)限帳戶管理等。其中多條件查詢、模糊查詢,圖書分類管理,同步,實(shí)時(shí)性,多文檔視圖是本系統(tǒng)的難點(diǎn)。 關(guān)鍵詞 :多文檔視圖 Qt C++ C/S MySQL Abstract The system uses the network of based on C / S mode into the
3、 software client (front) and server-side (background). Foreground and background server interaction, reception through the network to the server to send data requests and processing server response data, the data visually displayed to the user, the foreground program main use of C++ Qt in the interf
4、ace controls, background is mainly to receive the users request make the appropriate response, and for data storage and processing, using MySQL databases to store data back-need to establish strong data consistency and integrity, data security, a good library. The system can implement classification
5、 of management books and according to a three-level client login user rights management: Readers, librarians, and operators. The system points the user login, check books, circulation, system management and logging system, the five major functional blocks. Book search function which is divided int
6、o fuzzy queries, direct query, multiple query conditions; system management include the reader management, books classification management, library management, overdue library management, account management and other administrative privileges. One more query terms, fuzzy query, library classificatio
7、n management, synchronization, real-time, multi-document view is the difficulty of this system. Keywords: Multi-document,Qt,C++,C/S,MySQ - IV - 目錄 摘要 I Abstract II 目錄 III 前言 1 1 緒論 2 1.1 系統(tǒng)開發(fā)背景 2 1.2 設(shè)計(jì)目標(biāo) 2 1.3 系統(tǒng)設(shè)計(jì)原則 3 2 系統(tǒng)開發(fā)工具及相應(yīng)技術(shù)簡(jiǎn)介 4 2.1 Qt簡(jiǎn)介 4 2.2 常用開發(fā)技術(shù)比較 4 2.2.1 ODBC 4 2.
8、2.2 DB2 5 2.2.3 MySQL 5 2.3 客戶機(jī)/服務(wù)器結(jié)構(gòu)(C/S)、多線程 6 2.3.1 C/S模式運(yùn)用 6 2.3.2 服務(wù)器多線程編程 7 2.4 使用MySQL數(shù)據(jù)庫 8 2.4.1 Qt數(shù)據(jù)庫連接類 8 2.4.2 數(shù)據(jù)庫連接 8 2.4.3 查詢記錄 9 2.5 系統(tǒng)運(yùn)行環(huán)境 9 2.5.1 服務(wù)器軟硬件要求 9 2.5.2 客戶端軟硬件要求 9 3 需求分析 10 3.1 功能需求 10 3.2 功能介紹 11 4 系統(tǒng)設(shè)計(jì) 14 4.1 系統(tǒng)總體設(shè)計(jì) 14 4.1.1 數(shù)據(jù)庫簡(jiǎn)介 14 4.1.2 數(shù)據(jù)庫技術(shù) 16 4.1
9、.3 SQL語言基礎(chǔ) 18 4.2 數(shù)據(jù)庫實(shí)現(xiàn)原理 19 4.2.1 存儲(chǔ)過程(stored procedue) 19 4.2.2 觸發(fā)器 19 4.2.3 游標(biāo) 20 4.3 定義系統(tǒng)表的結(jié)構(gòu) 21 4.4 定義所需結(jié)構(gòu)體 24 5 系統(tǒng)實(shí)現(xiàn) 28 5.1 登錄子系統(tǒng) 28 5.2 查詢子系統(tǒng) 29 5.3 借還子系統(tǒng) 29 5.3.1 借書模塊 30 5.3.2 還書模塊 30 5.4 管理子系統(tǒng) 31 5.4.1 圖書管理模塊 32 5.4.2 日志管理模塊 33 結(jié)語 35 致謝 36 參考文獻(xiàn) 37 前言 隨著揉社會(huì)的發(fā)展,揉對(duì)知識(shí)的需
10、求也不斷地增長(zhǎng)。在這種形勢(shì)下,書籍就漸漸地成為人們獲取并增長(zhǎng)知識(shí)的主要途徑,而圖書館就自然而然地在人們的生活中占據(jù)了一定的位置,如何科學(xué)地管理圖書館不但關(guān)系到讀者求知的方便程度,也關(guān)系到圖書館的發(fā)展,因此,開發(fā)一套完善的圖書館管理系統(tǒng)就成不可少了。 圖書館在正常運(yùn)營中總是面對(duì)大量的讀者信息、書籍信息以及兩者相互作用產(chǎn)生的借書信息、還書信息。因此需要對(duì)讀者資源、書籍資源、借書信息、還書信息進(jìn)行管理,及時(shí)了解各個(gè)環(huán)節(jié)中信息的變更,有利于提高管理效率。隨著社會(huì)的日益發(fā)展,尤其是科技的迅猛發(fā)展,使得我國各項(xiàng)事業(yè)得到了前所未有的突破,不僅提高了工作效率,而且也降低了勞動(dòng)強(qiáng)度,美化了工作環(huán)境。 隨著計(jì)
11、算機(jī)廣泛地應(yīng)用在科學(xué)技術(shù)領(lǐng)域的各個(gè)方面,并逐漸進(jìn)入家庭,成為人們生活中必不可少的一部分。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)產(chǎn)品庫存信息進(jìn)行管理,具有著人工管理無法比擬的優(yōu)點(diǎn),它檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等,可減少更多的人力物力,這些都能夠極大地提高貨品庫存的管理效率,也是圖書信息的管理科學(xué)化、正規(guī)化的重要條件。因此,開發(fā)一個(gè)圖書信息的管理系統(tǒng)是很有必要的,具有其特有的技術(shù)意義和管理意義,為了適應(yīng)讀者對(duì)圖書的需求,同時(shí)又大大減輕圖書館工作人員的工作量,全面提高圖書館的管理效率及服務(wù)質(zhì)量,以此為目的用C++開發(fā)了本圖書管理系統(tǒng)。 1 緒論 1.1 系統(tǒng)
12、開發(fā)背景 目前,在高校系部圖書管理中,師生查找圖書都是采用傳統(tǒng)的查詢方法,讓讀者在圖書分類架上一本本地去查找,這樣不僅很難找到自己所需要的圖書,而且費(fèi)時(shí)費(fèi)力。而圖書管理員在辦理借書登記、查詢讀者借書記錄時(shí),管理人員必須在借書記錄上一個(gè)個(gè)去查找,而要找到借書記錄并刪除該記錄是件很麻煩的事情。每當(dāng)新書入庫時(shí),圖書管理員既要填寫新書入庫卡片,又要填寫新書入庫帳目,不僅工作量大,而且,在新書入庫后要經(jīng)歷較長(zhǎng)的時(shí)間方能借出。另外,有的系部因圖書數(shù)量有限,必須對(duì)圖書實(shí)行限量借閱,因此,要實(shí)施彈性借書方法是件很困難的事。 為提高圖書查詢效率,減少系部圖書管理員的工作負(fù)擔(dān),有必要開發(fā)一個(gè)小型圖書管理軟件來
13、對(duì)系部圖書實(shí)施有效管理。該系統(tǒng)必須具備以下功能: (1) 能對(duì)各類圖書實(shí)行分類管理; (2) 提供必要的讀者信息; (3) 能進(jìn)行各種高級(jí)查詢(如未還書目的查詢,已還書目的查詢等); (4) 具有圖書檢索功能; (5) 能管理登錄系統(tǒng)的圖書管理員等這樣不僅能較好地幫助讀者在最短的時(shí)間內(nèi)找到自己所需要的圖書書目、編號(hào),而且能讓圖書管理員以最高的效率辦理借閱手續(xù); (6) 讀者能夠?qū)Ξ?dāng)前圖書館的書籍進(jìn)行實(shí)時(shí)的查詢; 1.2 設(shè)計(jì)目標(biāo) 針對(duì)以上情況,決定組建一個(gè)基于客戶機(jī)/服務(wù)器(C/S模式)結(jié)構(gòu)的圖書管理系統(tǒng),讀者用戶能夠?qū)Ξ?dāng)前圖書館書籍的情況進(jìn)行實(shí)時(shí)的查詢,對(duì)登錄后的用戶實(shí)行權(quán)限
14、管理。在系統(tǒng)啟動(dòng)后,讀者能在客戶端根據(jù)自已的需要查詢圖書,而圖書管理員能在服務(wù)器端根據(jù)讀者提供的身份信息及圖書編號(hào)辦理借書或還書手續(xù),通過自動(dòng)查詢功能判斷讀者是否還能借書。如果讀者借書數(shù)量沒有超過規(guī)定的數(shù)量,沒有逾期未還圖書情況,則可繼續(xù)辦理借書手續(xù),否則不予辦理。另外,圖書管理員能根據(jù)需要通過該系統(tǒng)的服務(wù)端自行修改圖書信息,增加或刪除圖書書目等。 該系統(tǒng)設(shè)有管理員用戶,當(dāng)管理員以此用戶級(jí)別登錄服務(wù)器時(shí),該用戶有著最大的權(quán)限,能通過管理界面設(shè)置圖書借閱期限、查詢逾期未還圖書信息和讀者信息,并能有效地管理圖書分類、讀者信息及圖書管理員的登錄帳目等。 1.3 系統(tǒng)設(shè)計(jì)原則 (1) 實(shí)用性原則
15、 適合于中小型圖書館及高校系部圖書管理,用戶界面友好,操作使用方便,具有高效的數(shù)據(jù)處理能力。 (2) 先進(jìn)性原則 采用目前先進(jìn)的計(jì)算機(jī)軟硬件技術(shù),使系統(tǒng)具有較高的技術(shù)水平和較長(zhǎng)的生命周期,便于系統(tǒng)的升級(jí)和維護(hù)。 (3) 開放性,安全性,可靠性及可擴(kuò)展性原則 (4) 兼容性原則 對(duì)于所選軟硬件系統(tǒng)及平臺(tái),能很好地適應(yīng)開發(fā)和使用的需要。 (5) 規(guī)范性原則 軟件設(shè)計(jì)過程嚴(yán)格按照“軟件工程”的規(guī)定,系統(tǒng)編碼、文檔、操作系統(tǒng)平臺(tái)以及開發(fā)方法采用相應(yīng)的國際標(biāo)準(zhǔn)、國家標(biāo)準(zhǔn)和行業(yè)標(biāo)準(zhǔn)。 2 系統(tǒng)開發(fā)工具及相應(yīng)技術(shù)簡(jiǎn)介 2.1 Qt簡(jiǎn)介 這個(gè)系統(tǒng)前臺(tái)所用的開發(fā)工具是Eclipse,
16、開發(fā)環(huán)境是Qt,Qt 是一個(gè)跨平臺(tái)的 C++ 圖形用戶界面庫,由挪威 TrollTech 公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速開發(fā)工具 Qt Designer,國際化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系統(tǒng),當(dāng)然也包括 Linux,還支持 WinNT/Win2k,Win95/98 平臺(tái)。 Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序員 就已經(jīng)開始設(shè)計(jì) Qt 了,Qt 的第一個(gè)商業(yè)版本于 1995 年推出然后 Qt 的發(fā)展就很快了。 2.2 常用開發(fā)
17、技術(shù)比較 Qt提供了許多數(shù)據(jù)庫訪問的接口,主要包括ODBC、DB2和MYSQL等等。這些技術(shù)在訪問數(shù)據(jù)庫時(shí)無論是易用程度還是運(yùn)行性能上都是各有千秋,其情況如下: 2.2.1 ODBC ODBC是為客戶應(yīng)用程序訪問關(guān)系數(shù)據(jù)庫時(shí)提供的一個(gè)標(biāo)準(zhǔn)的接口,對(duì)于不同的數(shù)據(jù),ODBC提供了統(tǒng)一的API,使應(yīng)用程序可以誚所提供的API來訪問任何提供了ODBC驅(qū)動(dòng)程序的數(shù)據(jù)庫。而且,ODBC已經(jīng)成為一種標(biāo)準(zhǔn),所以,目前幾乎所有的關(guān)系數(shù)據(jù)庫都提供了了ODBC驅(qū)動(dòng)程序,這使ODBC的應(yīng)用十分廣泛,基本上可有于所有的關(guān)系數(shù)據(jù)庫。其優(yōu)點(diǎn)是,ODBC API可能使客戶應(yīng)用程序能夠從從底層設(shè)置和控制數(shù)據(jù)庫,完成一些高
18、層數(shù)據(jù)庫技術(shù)無法完的事,但是其不足之處是要編寫大量的代碼,增加了程序的編制的難度。 2.2.2 DB2 DB2 是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS),是 Information Management 產(chǎn)品系列的一部分。DB2 被認(rèn)為是第一種使用 SQL(一種為 RDBMS 提供接口的語言)的數(shù)據(jù)庫產(chǎn)品。DB2 于 1982 年首次發(fā)布,現(xiàn)在已經(jīng)可以用在許多操作系統(tǒng)平臺(tái)上,包括 Linux、UNIX 和 Windows。 DB2 有不同的版本,可以滿足不同的需求: 1. DB2 Everyplace 為移動(dòng)用戶提供一個(gè)內(nèi)存占用小且性能出色的 DB2 版本。 2. DB2 for z
19、/OS 為主機(jī)系統(tǒng)提供 DB2 的所有特性。 3. DB2 for Linux, UNIX and Windows 提供幾種風(fēng)格。 (1) Enterprise Server Edition(ESE)是一種具有客戶機(jī)/服務(wù)器設(shè)置的完整的 RDBMS。DB2 ESE 適用于中型和大型企業(yè)。 (2) Workgroup Server Edition(WSE)主要適用于小型和中型企業(yè),它提供除大型機(jī)連接之外的所有 DB2 ESE 特性。 (3) Personal Edition 為個(gè)人計(jì)算機(jī)提供一個(gè)單用戶的部署。 (4) 數(shù)據(jù)庫可以存儲(chǔ)任何類型的信息,無論是關(guān)系數(shù)據(jù)(比如職員的姓名和地址
20、),還是二進(jìn)制數(shù)據(jù)(比如他們的身份證照片)。DB2 現(xiàn)在還支持 pureXML,可以輕松地存儲(chǔ)和檢索 XML 數(shù)據(jù)??梢允褂脤?shí)用程序裝載和維護(hù)數(shù)據(jù),還可以使用查詢檢索您感興趣的信息??梢允褂帽窘坛讨忻枋龅囊恍┕ぞ呖刂茢?shù)據(jù)的完整性。 2.2.3 MySQL MySQL名字的來歷MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQLAB公司,在2008年1月16號(hào)被Sun公司收購。MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。 MySQL
21、是最受歡迎的開源SQL數(shù)據(jù)庫管理系統(tǒng),它由MySQL AB開發(fā)、發(fā)布和支持。MySQL AB是一家基于MySQL開發(fā)人員的商業(yè)公司,它是一家使用了一種成功的商業(yè)模式來結(jié)合開源價(jià)值和方法論的第二代開源公司。MySQL是MySQL AB的注冊(cè)商標(biāo)。 MySQL是一個(gè)快速的、多線程、多用戶和健壯的SQL數(shù)據(jù)庫服務(wù)器。MySQL服務(wù)器支持關(guān)鍵任務(wù)、重負(fù)載生產(chǎn)系統(tǒng)的使用,也可以將它嵌入到一個(gè)大配置(mass-deployed)的軟件中去。 MySQL是開源的,開源意味著任何人都可以使用和修改該軟件,任何人都可以從Internet上下載和使用MySQL而不需要支付任何費(fèi)用。如果你愿意,你可以研究其源代
22、碼,并根據(jù)你的需要修改它。MySQL使用GPL(GNU General Public License,通用公共許可),在http://www.fsf.org/licenses中定義了你在不同的場(chǎng)合對(duì)軟件可以或不可以做什么。如果你覺得GPL不爽或者想把MySQL的源代碼集成到一個(gè)商業(yè)應(yīng)用中去,你可以向MySQL AB購買一個(gè)商業(yè)許可版本,MySQL服務(wù)器是一個(gè)快的、可靠的和易于使用的數(shù)據(jù)庫服務(wù)器。 2.3 客戶機(jī)/服務(wù)器結(jié)構(gòu)(C/S)、多線程 2.3.1 C/S模式運(yùn)用 二層的C/S結(jié)構(gòu)是指以單一的服務(wù)器和局域網(wǎng)為核心,能通過客戶端與用戶進(jìn)行直接對(duì)話。主要有二大功能:一是它用于檢查用戶從鍵
23、盤等輸入的數(shù)據(jù),顯示應(yīng)用輸出的數(shù)據(jù)。為使用戶能直觀地進(jìn)行操作,一般要使用圖形用戶接口(GUI),操作簡(jiǎn)單、易學(xué)易用。在變更用戶接口時(shí),只需改寫顯示控制和數(shù)據(jù)檢查程序,而不影響其他。檢查的內(nèi)容也只限于數(shù)據(jù)的形式和值的范圍,不包括有關(guān)業(yè)務(wù)本身的處理邏輯。另一個(gè)是確認(rèn)用戶對(duì)應(yīng)用和數(shù)據(jù)庫存取權(quán)限的功能以及記錄系統(tǒng)處理日志。 典型的C/S結(jié)構(gòu)有以下特點(diǎn): (1) 服務(wù)器負(fù)責(zé)數(shù)據(jù)管理及程序處理 (2) 客戶機(jī)負(fù)責(zé)界面描述和界面顯示 (3) 客戶機(jī)向服務(wù)器提出處理要求 (4) 服務(wù)器響應(yīng)將處理結(jié)果返回客戶機(jī) (5) 使網(wǎng)絡(luò)數(shù)據(jù)流量最少 近幾年,客戶機(jī)/服務(wù)器體系日益成熟而且應(yīng)用越來越廣泛,許多
24、圖書館管理系統(tǒng)都用這種結(jié)構(gòu)進(jìn)行設(shè)計(jì)。 2.3.2 服務(wù)器多線程編程 什么是多線和為什么要應(yīng)用多線程編程?進(jìn)程和線程都是操作系統(tǒng)的概念。進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例,每個(gè)進(jìn)程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,所謂私有,就是線程在有自己局部變量,進(jìn)程在運(yùn)行過程中創(chuàng)建的資源隨著進(jìn)程的終止而被銷毀,所使用的系統(tǒng)資源在進(jìn)程終止時(shí)被釋放或關(guān)閉。 線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行單元。系統(tǒng)創(chuàng)建好進(jìn)程后,實(shí)際上就啟動(dòng)執(zhí)行了該進(jìn)程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動(dòng)點(diǎn)提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進(jìn)程也就隨之終止。 每一個(gè)進(jìn)程
25、至少有一個(gè)主執(zhí)行線程,它無需由用戶去主動(dòng)創(chuàng)建,是由系統(tǒng)自動(dòng)創(chuàng)建的。用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程,多個(gè)線程并發(fā)地運(yùn)行于同一個(gè)進(jìn)程中。一個(gè)進(jìn)程中的所有線程都在該進(jìn)程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術(shù)的應(yīng)用也較為廣泛。 多線程可以實(shí)現(xiàn)并行處理,避免了某項(xiàng)任務(wù)長(zhǎng)時(shí)間占用CPU時(shí)間。要說明的一點(diǎn)是,目前大多數(shù)的計(jì)算機(jī)都是單處理器(CPU)的,為了運(yùn)行所有這些線程,操作系統(tǒng)為每個(gè)獨(dú)立線程安排一些CPU時(shí)間,操作系統(tǒng)以輪換方式向線程提供時(shí)間片,這就給人一種假象,好象這些線程都在同時(shí)運(yùn)行。由此可見,如果兩個(gè)非?;钴S的線程為了搶奪對(duì)CP
26、U的控制權(quán),在線程切換時(shí)會(huì)消耗很多的CPU資源,反而會(huì)降低系統(tǒng)的性能。這一點(diǎn)在多線程編程時(shí)應(yīng)該注意。 多線程在構(gòu)建大型系統(tǒng)的時(shí)候是需要重點(diǎn)關(guān)注的一個(gè)重要方面,特別是在效率(系統(tǒng)跑得多快?)和性能(系統(tǒng)工作正常?)之間做一個(gè)權(quán)衡的時(shí)候。恰當(dāng)?shù)氖褂枚嗑€程可以極大的提高系統(tǒng)性能,當(dāng)有多個(gè)客戶端程序同時(shí)連接到服務(wù)器端的時(shí)候,用戶不希望等待其他用戶完成操作之后才享有CPU時(shí)間,因?yàn)檫@樣的C/S模式的管理系統(tǒng)將會(huì)變得毫無意義,為了滿足每一位用戶都能夠感覺到自己是獨(dú)占服務(wù)器CPU時(shí)間的,所以在該圖書管理系統(tǒng)中有必要也必須應(yīng)用到多線程編程,正因?yàn)槎嗑€程的并發(fā)行,使其處理客戶端的請(qǐng)求能夠達(dá)到同步的效果。因?yàn)槎?/p>
27、線程共享全局變量,所以在進(jìn)行多線程編程的時(shí)候要特別注意,當(dāng)訪問全局?jǐn)?shù)據(jù)的時(shí)候要用互斥鎖鎖住該變量,當(dāng)當(dāng)前線程使用完該變量的時(shí)候應(yīng)當(dāng)將其解鎖,一邊其它線程有機(jī)會(huì)訪問該變量,以免造成死鎖的情況發(fā)生。 2.4 使用MySQL數(shù)據(jù)庫 因?yàn)楸鞠到y(tǒng)主要用到MySQL數(shù)據(jù)庫編程,所以詳細(xì)的介紹其使用方法。 2.4.1 Qt數(shù)據(jù)庫連接類 QsqlDatabase類是主要用于連接數(shù)據(jù)的類,該類封裝了連接各種數(shù)據(jù)的方法,在編譯并安裝好Qt相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)之后,只需要簡(jiǎn)單的指定數(shù)據(jù)庫名字就能夠與相應(yīng)的數(shù)據(jù)庫建立連接,而應(yīng)用程序就能夠通過該連接句柄與數(shù)據(jù)庫進(jìn)行良好的互動(dòng)。 QSqlQuery類是主要用于數(shù)據(jù)
28、庫操作,包括執(zhí)行相應(yīng)的SQL語句,獲取數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù)。 2.4.2 數(shù)據(jù)庫連接 在程序中定義QSqlDatabase db成員變量通過該變量可以獲取數(shù)據(jù)庫連接句柄,db = QSqlDatabase::addDatabase("QMYSQL");//由于我們使用的MySQL數(shù)據(jù)庫,所以這里指定的數(shù)據(jù)庫名字是QMYSQL。 db.setDatabaseName(database); db.setHostName("localhost"); db.setUserName(username); db.setPassword(password); if (!db.open())
29、{ QMessageBox::critical(0,QObject::tr("DatabaseError"), db.lastError().text()); return false; } 2.4.3 查詢記錄 查詢記錄使用QSqlQuery::exec(Qstring &)成員函數(shù)來執(zhí)行SQL語句,一旦查詢到數(shù)據(jù)庫中有相關(guān)的記錄,就可以通過QSqlQuery::isSelect() && QSqlQuery::next()來一條一條獲取查詢的結(jié)果, QSqlQuery::value(int column)獲取一行中指定列的記錄。 2.5 系統(tǒng)運(yùn)行環(huán)境 2.5.1 服務(wù)
30、器軟硬件要求 軟件: Windows XP MySQL TCP/IP協(xié)議 硬件: CPU:PⅢ 內(nèi)存:256M 硬盤:4G以上 2.5.2 客戶端軟硬件要求 軟件: Windows 95/98/ME/2000/XP/WIN7 TCP/IP協(xié)議 硬件: CPU:486/586以及更高檔的PC 內(nèi)存:最少64M 硬盤:500M以上 3 需求分析 如同任何生物一樣,軟件也有一個(gè)誕生、成長(zhǎng)、衰亡的生存過程。我們稱為軟件的生存期。根據(jù)這一思想,可以得到軟件生存期六個(gè)步驟,即制定計(jì)
31、劃、需求分析、軟件設(shè)計(jì)、程序編碼、測(cè)試及運(yùn)行維護(hù)。 軟件需求分析工作是軟件生存期中重要一步,也是決定性一步。只有通過需求分析才能把軟件功能和性能的總體要領(lǐng)描述為具體的軟件需求規(guī)程說明,從而奠定軟件開發(fā)的基礎(chǔ)。 需求分析 系統(tǒng)設(shè)計(jì) 系統(tǒng)編碼 系統(tǒng)測(cè)試 系統(tǒng)功能圖 功能分析 框架分析 系統(tǒng)功能 系統(tǒng)界面 畫出功能圖 測(cè)試系統(tǒng)的所有功能,達(dá)到預(yù)期效果 圖3.1 系統(tǒng)整體設(shè)計(jì)流程圖 3.1 功能需求 根據(jù)自己調(diào)查圖書館的業(yè)務(wù)情況,從實(shí)際應(yīng)用的角度出發(fā),確定為用戶提供和實(shí)現(xiàn)以下功能: (1) 登錄功能 (2) 讀者:主要提供直接查詢(包括模糊查詢)和多條件分類查詢功
32、能。 (3) 操作員:主要提供借書,還書,圖書管理。 (4) 管理員:主要提供圖書管理員登錄數(shù)據(jù)庫管理,圖書類管理,讀者管理逾期未還圖書的信息管理。 (5) 聯(lián)機(jī)幫助功能:能幫助用戶在最短的時(shí)間使用本系統(tǒng)。 3.2 功能介紹 圖3.2列出了這個(gè)系統(tǒng)各功能之間的關(guān)系圖書管圖系統(tǒng) 系統(tǒng)管理 數(shù)據(jù)管理 借還系統(tǒng) 幫助 用戶登錄 添加用戶 刪除用戶 用戶注銷 退出系統(tǒng) 書籍管理 用戶管理 讀者管理 日志管理 修改密碼 借出圖書 歸還圖書 續(xù)借圖書 幫助文檔 關(guān)于 查詢統(tǒng)計(jì) 查詢用戶 圖書查詢 借出記錄 借閱統(tǒng)計(jì) 逾期記錄 修改資料
33、 圖3.2 系統(tǒng)功能圖 (1) 用戶登錄 只有已注冊(cè)用戶才能登陸系統(tǒng),為了滿足不同用的需求級(jí)別,用戶包括三種權(quán)限,系統(tǒng)管理員、操作員、讀者,不同權(quán)限的用戶,其所能執(zhí)行的操作不相同,下面是用戶的相關(guān)權(quán)限。 讀者:登陸、注銷、退出、查詢與統(tǒng)計(jì)、修改密碼、幫助。 操作員:登陸、注銷、退出、書籍借出與歸還、修改密碼、幫助。 管理員:所有操作。 (2) 用戶管理 對(duì)用戶的相關(guān)操作,例如:添加新用戶、刪除用戶、查詢用戶、修改用戶資料。 添加新用戶:可以添加學(xué)生用戶、教師管理員、系統(tǒng)管理員。 查詢用戶:獲得用戶的相關(guān)資料。
34、 修改用戶:修改用戶的注冊(cè)信息及其相關(guān),需要輸入要作修改的用戶的ID及其姓名,防止誤該。 (3) 修改密碼 任何用戶都可以修改自己的登陸密碼,用戶需要輸入舊的密碼,新密碼需要輸入兩次,保證其安全性。 (4) 注銷用戶 用戶切換時(shí)必須進(jìn)行注銷,否則警告用戶已經(jīng)登錄。 (5) 正常退出系統(tǒng) (6) 添加圖書 當(dāng)有新書入庫的時(shí)候,需要將該書的相關(guān)資料加入到數(shù)據(jù)庫中,教師管理員和系統(tǒng)管理員都有執(zhí)行該操作的權(quán)限。 (7) 刪除圖書 當(dāng)學(xué)生報(bào)告書籍遺失或者很長(zhǎng)時(shí)間未被歸還,視作該書籍已經(jīng)不存在,需要?jiǎng)h除其在數(shù)據(jù)庫中的相關(guān)記錄。 (8) 更新圖書 如果發(fā)現(xiàn)書籍的相關(guān)信息有誤,需要對(duì)該
35、信息進(jìn)行修改,重新存入數(shù)據(jù)庫中,便于在書記查找的時(shí)候獲得的是該書的正確信息。 (9) 借出圖書 當(dāng)有用戶要借書的時(shí)候,需要用戶提供書籍相關(guān)信息,管理員根據(jù)用戶提供的信息,搜索相關(guān)書籍,如果該書存在,可以進(jìn)行借出操作,如果不存在,就給出相關(guān)的提示,每位用戶所能借閱的圖書同時(shí)不能超過4本,默認(rèn)借出最大天數(shù)為30天。 (10) 歸還圖書 (11) 續(xù)借圖書 用戶在規(guī)定的期限內(nèi),沒有看完書籍,需要進(jìn)行續(xù)借操作,續(xù)借的天數(shù)不能超過30,否則算作逾期。 (12) 查詢與統(tǒng)計(jì) 查詢庫存的圖書:獲取未借出的圖書記錄。 借出記錄:獲得借出的圖書記錄,及其相關(guān)信息,波形圖可以直觀的顯示一段時(shí)間內(nèi)借
36、出圖書的數(shù)量,當(dāng)鼠標(biāo)移動(dòng)到波形線上的時(shí)候,得到該段時(shí)間內(nèi)借出圖書的詳細(xì)信息,如:借閱者、書名、借出時(shí)間、是否逾期等等;表格形式則一表格的形式詳細(xì)的顯示圖書名、借閱者、借出時(shí)間、是否逾期,如果沒有預(yù)期則顯示借出的天數(shù),如果逾期需要突出的顯示出來并顯示預(yù)期作為提示。 讀者借閱統(tǒng)計(jì):獲得所有用戶現(xiàn)有的圖書數(shù)量,將鼠標(biāo)移動(dòng)到該數(shù)字上顯示所有借得的圖書的名字。 逾期借閱:獲得逾期借閱的圖書的相關(guān)信息,借閱者,具體借閱時(shí)間,超過的天數(shù)。 (13) 逾期借閱記錄 獲得借閱超時(shí)的所有書籍,顯示借閱者姓名,用戶ID,書名,超時(shí)天數(shù)。 4 系統(tǒng)設(shè)計(jì) 4.1 系統(tǒng)總體設(shè)計(jì) 系統(tǒng)設(shè)計(jì)又稱系統(tǒng)物理設(shè)
37、計(jì)。系統(tǒng)設(shè)計(jì)要根據(jù)系統(tǒng)分析報(bào)告中的系統(tǒng)邏輯模型綜合考慮各種約束,利用一切可利用的技術(shù)手段和方法進(jìn)行各種具體設(shè)計(jì),確定新系統(tǒng)的實(shí)施方案,解決“系統(tǒng)怎么做”的問題。 結(jié)構(gòu)化系統(tǒng)設(shè)計(jì)是指利用一組標(biāo)準(zhǔn)的圖表工具和準(zhǔn)則,確定系統(tǒng)有哪些模塊,用什么方法連接,如何構(gòu)成良好的系統(tǒng)結(jié)構(gòu),并進(jìn)行系統(tǒng)輸入、輸出、數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)等環(huán)節(jié)的詳細(xì)設(shè)計(jì)。這一階段的重點(diǎn)是設(shè)計(jì)好系統(tǒng)的總體結(jié)構(gòu),選擇最經(jīng)濟(jì)合理的技術(shù)手段。在軟件需求分析階段,已搞清了軟件“做什么” 的問題,并描述出了系統(tǒng)的邏輯模型。在系統(tǒng)設(shè)計(jì)階段,主要要解決軟件“怎么做”的問題,所以需要描述軟件的總的體系結(jié)構(gòu)既系統(tǒng)總體結(jié)構(gòu)。 本系統(tǒng)是一個(gè)圖書管理系統(tǒng),那么
38、它具備用戶登錄:讀者圖書查詢:管理員借還書,增加書:圖書超級(jí)管理員管理系統(tǒng)信息四大基本功能,從這個(gè)基本功能出發(fā),確定了本系統(tǒng)應(yīng)包含五個(gè)大模塊,即:登錄模塊,查詢模塊,借還書模塊,系統(tǒng)管理模塊,日志管理模塊。 4.1.1 數(shù)據(jù)庫簡(jiǎn)介 計(jì)算機(jī)的數(shù)據(jù)處理應(yīng)用,首先要把大量的信息以數(shù)據(jù)形式存放君存儲(chǔ)器中。存儲(chǔ)器的容量、存儲(chǔ)速率直接影響到數(shù)據(jù)管理技術(shù)的發(fā)展。1956年生產(chǎn)的第一臺(tái)計(jì)算機(jī)磁盤容量?jī)H為5M字節(jié),而現(xiàn)在已達(dá)10000M字節(jié)。目前光盤已經(jīng)廣泛使用,容量已達(dá)數(shù)百G字節(jié)。存儲(chǔ)器的發(fā)展,為數(shù)據(jù)庫技術(shù)提供了良好的物質(zhì)基礎(chǔ)。 使用計(jì)算機(jī)以后,數(shù)據(jù)處理的速度和規(guī)模,無論是相對(duì)于手工方式,還是機(jī)械方式,
39、都是無可比擬的在數(shù)據(jù)處理中,通常計(jì)算是比較簡(jiǎn)單的而數(shù)據(jù)的管理比較復(fù)雜。數(shù)據(jù)管理是指數(shù)據(jù)的收集、整理、組織、存儲(chǔ)、維護(hù)、檢索、傳送等操作,這部分操作是數(shù)據(jù)處理業(yè)務(wù)的基本環(huán)節(jié),而且是任何數(shù)據(jù)處理業(yè)務(wù)中必不可少的共有部分。數(shù)據(jù)管理技術(shù)的優(yōu)劣,將直接影響數(shù)據(jù)處理的效率。 數(shù)據(jù)管理技術(shù)的發(fā)展,與硬件(主要是外存)、軟件、計(jì)算機(jī)應(yīng)用的范圍有密切的聯(lián)系。數(shù)據(jù)管理技術(shù)的發(fā)展經(jīng)過三個(gè)階段:人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫階段。 從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫系統(tǒng)是信息處理領(lǐng)域的一個(gè)重大變化。在文件系統(tǒng)階段,人們關(guān)注的中心問題是系統(tǒng)功能的設(shè)計(jì),因而程序設(shè)計(jì)處于主導(dǎo)地位,數(shù)據(jù)只起著服從程序需要的作用。在數(shù)據(jù)庫方式下,
40、信息處理觀念已為新體系所取代,數(shù)據(jù)占據(jù)了中心位置。數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)成為信息系統(tǒng)首先關(guān)心的問題,而利用這些數(shù)據(jù)的應(yīng)用程序設(shè)計(jì)則退居到以既定的數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的外圍地位。 數(shù)據(jù)庫技術(shù)還在不斷的發(fā)展,并且不斷地與其它計(jì)算機(jī)技術(shù)相互滲透。數(shù)據(jù)庫技術(shù)與網(wǎng)絡(luò)通信技術(shù)相結(jié)合,產(chǎn)生了分布式數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫技術(shù)與面向?qū)ο蠹夹g(shù)相結(jié)合,產(chǎn)生了面向?qū)ο髷?shù)據(jù)庫系統(tǒng)。 在數(shù)據(jù)庫技術(shù)中有四個(gè)名詞: (1) 數(shù)據(jù)庫(database,DB):DB是統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合。DB能為各種用戶共享,具有最小冗余度,數(shù)據(jù)間聯(lián)系密切,而又有較高的數(shù)據(jù)獨(dú)立性。 (2) 數(shù)據(jù)庫管理系統(tǒng)(Database Management Sy
41、stem,DBMS):DBMS是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應(yīng)用程序提供訪問DB的方法,包括DB的建立、查詢、更新及各種數(shù)據(jù)控制。DBMS總是基于某種數(shù)據(jù)模型,可以分為層次型、網(wǎng)狀型、關(guān)系型和面向?qū)ο笮虳BMS。 (3) 數(shù)據(jù)庫系統(tǒng)(Database System,DBS):DBS是實(shí)現(xiàn)有組織地、動(dòng)態(tài)地存儲(chǔ)大量關(guān)聯(lián)數(shù)據(jù),方便多用戶訪問的計(jì)算機(jī)軟件、硬件和數(shù)據(jù)資源組成的系統(tǒng),即采用了數(shù)據(jù)庫技術(shù)的計(jì)算機(jī)系統(tǒng)。 (4) 數(shù)據(jù)庫技術(shù):這是一門研究數(shù)據(jù)庫的結(jié)構(gòu)、存儲(chǔ)、管理和使用的軟件學(xué)科。數(shù)據(jù)庫技術(shù)是操作系統(tǒng)的文件系統(tǒng)基礎(chǔ)上發(fā)展起來的。而DBMS本身要在操作系統(tǒng)的支持下才能工作
42、。數(shù)據(jù)庫不僅用到數(shù)據(jù)結(jié)構(gòu)的知識(shí),而且豐富了數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。在關(guān)系數(shù)據(jù)庫中要用到集合論、數(shù)理邏輯的理論。因此,數(shù)據(jù)庫技術(shù)是一門綜合性較強(qiáng)的學(xué)科。 4.1.2 數(shù)據(jù)庫技術(shù) 從20世紀(jì)50年代中期開始,計(jì)算機(jī)的應(yīng)用由科學(xué)研究部門逐步擴(kuò)展到企業(yè)、行政部門。至60年代,數(shù)據(jù)處理成為計(jì)算機(jī)的主要應(yīng)用。數(shù)據(jù)庫技術(shù)作為數(shù)據(jù)管理技術(shù),是計(jì)算機(jī)軟件領(lǐng)域的一個(gè)重要分支,產(chǎn)生于60年代末。現(xiàn)已形成相當(dāng)規(guī)模的理論體系和實(shí)用技術(shù)。 模型是對(duì)現(xiàn)實(shí)世界的抽象。在數(shù)據(jù)庫技術(shù)中,我們用模型的概念描述數(shù)據(jù)庫的結(jié)構(gòu)與語義,對(duì)現(xiàn)實(shí)世界進(jìn)行抽象,表示實(shí)體類型及實(shí)體間聯(lián)系的模型稱為“數(shù)據(jù)模型”。 目前廣泛作用的數(shù)據(jù)模型可分為兩種類
43、型。一種是獨(dú)立于計(jì)算機(jī)系統(tǒng)的模型,完全不涉及信息在系統(tǒng)中的表示,只是用來描述某個(gè)特定組織所關(guān)心的信息結(jié)構(gòu),這類模型稱為“概念數(shù)據(jù)模型” ,另一種數(shù)據(jù)模型是直接面向數(shù)據(jù)庫的邏輯結(jié)構(gòu),它是現(xiàn)實(shí)世界的第二層抽象。 這類模型涉及到計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng),又稱為“結(jié)構(gòu)數(shù)據(jù)模型”。 (1) 層次模型。用樹型結(jié)構(gòu)表示實(shí)體類型及實(shí)體間聯(lián)系的數(shù)據(jù)模型。樹的結(jié)點(diǎn)是記錄類型,每個(gè)非根結(jié)點(diǎn)有且只有一個(gè)父結(jié)點(diǎn)。上一層記錄類型和下一層記錄類型間聯(lián)系是1∶N聯(lián)系。 (2) 網(wǎng)狀模型。用有向圖結(jié)構(gòu)表示實(shí)體類型及實(shí)體間聯(lián)系的數(shù)據(jù)模型。 (3) 關(guān)系模型。關(guān)系模型的主要是用二維表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間聯(lián)系。
44、關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。關(guān)系模式相當(dāng)于前面提到的記錄類型,它的實(shí)例稱為關(guān)系,每個(gè)關(guān)系實(shí)際上是一張二維表格?,F(xiàn)在市場(chǎng)上典型的關(guān)系DBMS產(chǎn)品有DB2、ORACLE、SYBASE、INFORMIX和微機(jī)型產(chǎn)品Foxpro、Access等。 (4) 面向?qū)ο竽P?。面向?qū)ο竽P湍芡暾孛枋霈F(xiàn)實(shí)世界的數(shù)據(jù)結(jié)構(gòu),具有豐富的表達(dá)能力,但模型相對(duì)較復(fù)雜,涉及的知識(shí)面也廣,因此面向?qū)ο髷?shù)據(jù)庫尚未達(dá)到關(guān)系數(shù)據(jù)庫那樣的普及程度。 數(shù)據(jù)庫的體系結(jié)構(gòu)分三級(jí):內(nèi)部級(jí)(internal)、概念級(jí)(conceptual)和外部級(jí)(external)。這個(gè)三級(jí)結(jié)構(gòu)有時(shí)也稱為“三級(jí)模式結(jié)構(gòu)”,或“數(shù)據(jù)抽象的三個(gè)
45、級(jí)別”,大多數(shù)系統(tǒng)在總的體系結(jié)構(gòu)上都具有三級(jí)模式的結(jié)構(gòu)特征。 從某個(gè)角度看到的數(shù)據(jù)特性稱為“數(shù)據(jù)視圖”(data view)。 外部級(jí)最接近用戶,是單個(gè)用戶所能看到的數(shù)據(jù)特性。單個(gè)用戶使用的數(shù)據(jù)視圖的描述稱為“外模式”。 概念級(jí)涉及到所有用戶的數(shù)據(jù)定義,是全局的數(shù)據(jù)視圖。全局?jǐn)?shù)據(jù)視圖的描述稱為“概念模式”。 內(nèi)部級(jí)最接近于物理存儲(chǔ)設(shè)備,涉及到實(shí)際數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)。物理存儲(chǔ)數(shù)據(jù)視圖的描述稱為“內(nèi)模式”。 數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)是數(shù)據(jù)的三個(gè)抽象級(jí)別。它把數(shù)據(jù)的具體組織留給DBMS去做,用戶只要抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的表示和存儲(chǔ),這樣就減輕了用戶使用系統(tǒng)的負(fù)擔(dān)。 三級(jí)結(jié)構(gòu)之
46、間往往差別很大,為了實(shí)現(xiàn)這三個(gè)抽象級(jí)別的聯(lián)系和轉(zhuǎn)換,DBMS在三級(jí)結(jié)構(gòu)之間提供兩個(gè)層次的映象(mappings):外模式/模式映象,模式/內(nèi)模式映象。此處模式是概念模式的簡(jiǎn)稱。 由于數(shù)據(jù)庫系統(tǒng)采用三級(jí)模式結(jié)構(gòu),因此系統(tǒng)具有數(shù)據(jù)獨(dú)立性的特點(diǎn)。在數(shù)據(jù)庫技術(shù)中,數(shù)據(jù)獨(dú)立性是指應(yīng)用程序和數(shù)據(jù)之間相互獨(dú)立,不受影響。數(shù)據(jù)獨(dú)立性分成物理數(shù)據(jù)獨(dú)立性和邏輯數(shù)據(jù)獨(dú)立性兩級(jí)。 (1) 物理數(shù)據(jù)獨(dú)立性 如果數(shù)據(jù)庫的內(nèi)模式要進(jìn)行修改,即數(shù)據(jù)庫的存儲(chǔ)設(shè)備和存儲(chǔ)方法有所變化,那么模式/內(nèi)模式映象也要進(jìn)行相當(dāng)?shù)男薷模垢拍钅J奖M可能保持不變。也就是對(duì)內(nèi)模式的修改盡量不影響概念模式,當(dāng)然,對(duì)于外模式和應(yīng)用程序的影響更小
47、,這樣,我們稱數(shù)據(jù)庫達(dá)到了物理數(shù)據(jù)獨(dú)立性。 (2) 邏輯數(shù)據(jù)獨(dú)立性 如果數(shù)據(jù)庫的概念模式要進(jìn)行修改,譬如增加記錄類型或增加數(shù)據(jù)項(xiàng),那么外模式/模式映象也要進(jìn)行相應(yīng)的修改,使外模式盡可能保持不變。也就是對(duì)概念模式的修改盡量不影響外模式和應(yīng)用程序,這樣,我們稱數(shù)據(jù)庫達(dá)到了邏輯數(shù)據(jù)獨(dú)立性。 4.1.3 SQL語言基礎(chǔ) 用戶對(duì)數(shù)據(jù)庫的使用,是通過數(shù)據(jù)庫管理系統(tǒng)提供的語言來實(shí)現(xiàn)的。不同的數(shù)據(jù)庫管理系統(tǒng)提供不同的數(shù)據(jù)庫語言。關(guān)系數(shù)據(jù)庫管理系統(tǒng)幾乎都提供關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言——SQL。 SQL 是STRUCTURE QUERY LANGUAGE(結(jié)構(gòu)化查詢語言)的縮寫,它是操作數(shù)據(jù)庫的工業(yè)標(biāo)準(zhǔn)語言。
48、由于SQL使用方便、功能豐富、語言簡(jiǎn)潔易學(xué),很快得到推廣和應(yīng)用。例如關(guān)系數(shù)據(jù)庫產(chǎn)品DB2、ORACLE等都實(shí)現(xiàn)了SQL語言。同時(shí),其它數(shù)據(jù)庫產(chǎn)品廠家也紛紛推出各自的支持SQL的軟件或者與SQL的接口軟件。這樣SQL語言很快被整個(gè)計(jì)算機(jī)界認(rèn)可。1986年10月美國國家標(biāo)準(zhǔn)局(ANSI)頒布了SQL語言的美國標(biāo)準(zhǔn)。 SQL數(shù)據(jù)庫的體系結(jié)構(gòu),它基本上也是三級(jí)結(jié)構(gòu),但有些術(shù)語與傳統(tǒng)的關(guān)系數(shù)據(jù)庫術(shù)語不同。在SQL中,關(guān)系模式被稱為“基本表”,存儲(chǔ)模式稱為“存儲(chǔ)文件”,子模式稱為“視圖”,元組稱為“行”,屬性稱為“列”。 (1) 一個(gè)SQL數(shù)據(jù)庫是表(Table)的匯集,它用一個(gè)或若干個(gè)SQL模式義。
49、 (2) 一個(gè)SQL表由行集構(gòu)成,一行(Row)是列(Column)的序列,每列對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)。 (3) 一個(gè)表或者一個(gè)基本表(Base Table),或者是一個(gè)視圖(View)。基本表是實(shí)際存儲(chǔ)在數(shù)據(jù)庫中的表;而視圖是若干個(gè)基本表或其它視圖構(gòu)成的子集,用二個(gè)SQL的查詢語句定義,它的數(shù)據(jù)是基本基本表的數(shù)據(jù),不實(shí)際存儲(chǔ)在數(shù)據(jù)庫中因此它是個(gè)虛表。 (4) 一個(gè)基本表可以跨一個(gè)或多個(gè)存儲(chǔ)文件,而一個(gè)存儲(chǔ)文件可存放一個(gè)或多個(gè)基本表。每個(gè)存儲(chǔ)文件與外部存儲(chǔ)器上的一個(gè)物理文件對(duì)應(yīng)。 (5) 用戶可以用SQL語句對(duì)視圖和基本表進(jìn)行查詢等操作。在用戶看來,視圖和基本表是一樣的,都是關(guān)系(即表格)。
50、 (6) SQL用戶可以是應(yīng)用程序,也可以是最終用戶。 使用SQL可以對(duì)數(shù)據(jù)庫進(jìn)行各種操作,例如,可以使用SQL語句生成新的數(shù)據(jù)庫、生成或加入表格、修改數(shù)據(jù)庫等。但SQL 最常用于從數(shù)據(jù)庫中獲取數(shù)據(jù)。從數(shù)據(jù)庫中獲取數(shù)據(jù)被稱為“查詢數(shù)據(jù)庫”。 4.2 數(shù)據(jù)庫實(shí)現(xiàn)原理 4.2.1 存儲(chǔ)過程(stored procedue) 存儲(chǔ)過程是一組先編譯好的Transact-SQL語句。它可能作為一個(gè)獨(dú)立的數(shù)據(jù)庫對(duì)象也可以作為一個(gè)單元被用戶的應(yīng)用程序調(diào)用,在這個(gè)系統(tǒng)中的逾期書檢查中就在前臺(tái)調(diào)用了存儲(chǔ)過程,在記錄借書和還書時(shí),所有的數(shù)據(jù)處理都是調(diào)用存儲(chǔ)過程。 使用存儲(chǔ)過程有很多的好處: (1) 執(zhí)
51、行速度快:存儲(chǔ)過程第一次調(diào)用后就駐留內(nèi)存中,特別是重復(fù)處理大量數(shù)據(jù)時(shí),可以極大的是高運(yùn)行效率。 (2) 模塊化的程序設(shè)計(jì):存儲(chǔ)過程經(jīng)過一次修改后,可以無數(shù)次的調(diào)用。 (3) 減少網(wǎng)絡(luò)流量:所有數(shù)據(jù)處理都是在服務(wù)器進(jìn)行,所以,前臺(tái)只發(fā)送調(diào)用存儲(chǔ)過程的指令和參數(shù),這樣能大減少了網(wǎng)絡(luò)上數(shù)據(jù)的流量。 (4) 保證系統(tǒng)的安全性。 存儲(chǔ)過程的定義: CREATE PROC procedure_name [{@parameter date_type} [VARYING][=default][OUTPUT]…] AS Sql_statement[….n] 4.2.2 觸發(fā)器 觸發(fā)器是一種
52、特殊的存儲(chǔ)過程,它與表格緊密相連,可能看作是表格定義的一部分,當(dāng)用戶指定表或視圖的數(shù)據(jù)時(shí),觸發(fā)器將會(huì)自動(dòng)執(zhí)行。觸發(fā)器基于一個(gè)表創(chuàng)建,但是可以針對(duì)多個(gè)表進(jìn)行駛操作。觸發(fā)器常用來實(shí)現(xiàn)復(fù)雜的商業(yè)規(guī)則。 使用觸發(fā)器的最終目的是更好地維護(hù)企業(yè)的業(yè)務(wù)規(guī)則。在實(shí)際運(yùn)用中,主要提供了以下的功能: (1) 級(jí)聯(lián)修改數(shù)據(jù)庫中的怕有相關(guān)表。 (2) 撤消違反了完整性的操作,防止非法修改數(shù)據(jù)。 (3) 執(zhí)行比CHECK更復(fù)雜的約束操作。 (4) 查找在數(shù)據(jù)修改前后,表狀態(tài)的差別。 觸發(fā)器的定義: CREATE TRIGGER trigger_name ON table {FOR{[DELETE],[
53、INSERT],[UPDATE]}} AS Sql_statement[…] 4.2.3 游標(biāo) 數(shù)據(jù)庫中的游標(biāo)是像C語言指針一樣的語言結(jié)構(gòu)。在通常情況下,數(shù)據(jù)庫招待的大多數(shù)SQL命令都是同時(shí)處理集合內(nèi)部的所有數(shù)據(jù)。但是,有時(shí)候用戶也需要對(duì)這些數(shù)據(jù)庫集合中的每一行進(jìn)行作。在沒有游標(biāo)的情況下,這種工作不得不放到數(shù)據(jù)庫前端,有高級(jí)語言來實(shí)現(xiàn)。這將導(dǎo)致不必要的數(shù)據(jù)傳輸,面而延長(zhǎng)執(zhí)行的時(shí)間。通過使用游標(biāo),可能在服務(wù)器端有效的解決這個(gè)問題; (1) 游標(biāo)的定義 DECLARE cursor_name CURSOR FOR select_statement (2) 游標(biāo)打開 OPEN cu
54、rsor_name (3) FETCH語句 FETCH [[NEXT]|[PRIOR]|[FIRST]|[LAST]] FROM cursor_name [INTO @viriable_name[…]] (4) 游標(biāo)關(guān)閉 CLOSE cursor_name (5) 刪除游標(biāo) DEALLOCATE cursor_name 4.3 定義系統(tǒng)表的結(jié)構(gòu) 1. 定義圖書表(tbl_book),存放書籍信息,如表4.1所示: 表4.1 圖書表 字段 數(shù)據(jù)類型 長(zhǎng)度 能否為空 Name VARCHAR 45 NOT NULL author VARCHAR 45
55、NOT NULL type VARCHAR 45 NULL press VARCHAR 45 NULL pressdate DATE NULL pagenum INTEGER NULL price DOUBLE 4 NULL adddate DATE 4 NOT NULL lendtimes INTEGER 4 NULL status INTEGER 4 NOT NULL bookID VARCHAR 20 NOT NULL 2. 定義讀者表(tbl_reader),存放讀者信息,如表4.2所示: 表4.2 讀者表
56、 字段 數(shù)據(jù)類型 長(zhǎng)度 能否為空 Name VARCHAR 8 NOT NULL sex VARCHAR 10 NULL birthday VARCHAR 2 NULL carddate DATE 8 NULL cardnum VARCHAR 4 NULL type INTEGER 4 NULL status INTEGER 4 NULL school CHAR 16 NULL department CHAR 26 NULL grade CHAR 16 NOT NULL idcard VARCHAR
57、 20 NULL address VARCHAR 45 NULL post VARCHAR 10 NULL phone VARCHAR 20 NULL email VARCHAR 45 NULL readerID VARCHAR 20 NOT NULL 3. 定義借還記錄表(tbl_lend),存放借出書籍的信息,如表4.3所示: 表4.3 借出記錄表 字段 數(shù)據(jù)類型 長(zhǎng)度 能否為空 name VARCHAR 45 NOT NULL author VARCHAR 20 NOT NULL type VARCHAR 45
58、 NULL pressdate DATE NULL pagenum INTEGER 4 NULL price DOUBLE 4 NULL lenddate DATE NOT NULL lenddays INTEGER 4 NOT NULL reader VARCHAR 20 NOT NULL overdays INTEGER 4 NOT NULL timeout INTEGER 4 NOT NULL bookID VARCHAR 20 NOT NULL readerID VARCHAR 20 NOT NULL
59、 4. 定義管理員登錄表(tbl_user),存放管理人員信息,如表4.4所示: 表4.4 系統(tǒng)管理員表 字段 數(shù)據(jù)類型 長(zhǎng)度 能否為空 name VARCHAR 20 NOT NULL sex INTEGER 4 NULL birthday DATE NULL idcard VARCHAR 20 NULL phone VARCHAR 20 NULL status INTEGER 4 NOT NULL power INTEGER 4 NOT NULL password VARCHAR 20 NOT NULL onli
60、ne INTEGER 4 NOT NULL logintime DATE NOT NULL lasttime DATE NOT NULL userID VARCHAR 20 NOT NULL email VARCHAR 45 NULL 5. 書籍日志表(tbl_booklog),存放書籍日志信息,如表4.5所示: 表4.5 書籍日志表 字段 數(shù)據(jù)類型 長(zhǎng)度 能否為空 Result INTEGER 4 NOT NULL bookID VARCHAR 20 NOT NULL bookname VARCHAR 45 NOT
61、 NULL ip VARCHAR 20 NOT NULL type VARCHAR 20 NOT NULL description VARCHAR 45 NOT NULL datetime DATETIME NOT NULL operator VARCHAR 20 NOT NULL operation INTEGER 4 NOT NULL 6. 用戶日志表(tbl_booklog),存放用戶日志信息,如表4.6所示: 表4.6 用戶日志表 字段 數(shù)據(jù)類型 長(zhǎng)度 能否為空 Result INTEGER 4 NOT NULL
62、ip VARCHAR 20 NOT NULL description VARCHAR 45 NOT NULL datetime DATETIME NOT NULL operator VARCHAR 20 NOT NULL operation INTEGER 4 NOT NULL 4.4 定義所需結(jié)構(gòu)體 1. 用戶數(shù)據(jù)結(jié)構(gòu)體 typedef struct _userinfo_tag { QString sID;//保存用戶ID QString sName;//保存用戶名 u32 dwSex;//性別0:男,1:女 QString s
63、Pass;//保存用戶密碼 u32 dwPower;//保存用戶權(quán)限 QString sBirthDay;//出生日期 QString sPhone;//電話號(hào)碼 QString sIDCard;//身份證號(hào) u32 dwStatus;//狀態(tài)0:正常 1:禁用 QString sLoginTime;//注冊(cè)時(shí)間 u32 dwOnline;//登陸信息標(biāo)志0:未登錄 1:在線 QString sEmail; QString sLastTime;//最后登錄時(shí)間 }USERINFO, *PUSERINFO; 2. 書籍信息結(jié)構(gòu)體 typedef stru
64、ct _bookinfo_tag { QString sID;//書籍ID QString sName;//書籍名字 QString sAuthor;//作者 QString sType;//圖書類型 QString sPress;//出版社 QString sPressDate;//出版日期 u32 dwPageNum;//頁數(shù) double fPrice;//價(jià)格 QString sAddDate;//入庫日期 u32 dwLendTimes;//借出次數(shù) u32 dwStatus;//圖書狀態(tài)0:未借出 1:借出 2:遺失 }BOOKINF
65、O, *PBOOKINFO; 3. 借出書籍信息結(jié)構(gòu)體 typedef struct _lendinfo_tag { QString sID;//圖書ID QString sName;//圖書名字 QString sAuthor;//作者 QString sType;//圖書類型 QString sPress;//出版社 QString sPressDate;//出版日期 u32 dwPageNum;//頁數(shù) double fPrice;//圖書價(jià)格 QString sLendDate;//借出日期 u32 dwLendDays;//借出天數(shù)
66、u32 dwTimeOut;//是否逾期0:未逾期,1:逾期 u32 dwOverDays;//超期天數(shù) QString sReaderID;//讀者 QString sReader; }LENDINFO, *PLENDINFO; 4. 書籍日志信息結(jié)構(gòu)體 typedef struct bookloginfo_tag { u32 dwID;//操作ID u32 dwResult;//操作結(jié)果0:成功 1:失敗 QString sOperator;//操作員 QString sBookID;//操作圖書ID QString sBookName;//操作圖書名字 u32 dwOperation;//操作1:添加圖書,2:刪除圖書,3:更新圖 書 4:借出 5:歸還 6:續(xù)借 QString sIP;//操作員IP地址 QString sType;//書籍類型 QString sDescription;//描述 QString sDateTime;//操作時(shí)間 }BOOKLOGINFO, *PBOOKLOGINFO; 5. 讀
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年銀行業(yè)年終工作總結(jié)8篇
- 電工年度工作總結(jié)11篇
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院護(hù)士述職報(bào)告6篇
- 中專期末總結(jié)個(gè)人總結(jié)7篇
- 醫(yī)技科個(gè)人總結(jié)范文6篇
- 展望未來年終總結(jié)8篇
- 品質(zhì)年度工作總結(jié)報(bào)告4篇
- 市場(chǎng)月總結(jié)5篇
- 年終個(gè)人工作總結(jié)
- 檔案管理工作的自查報(bào)告8篇
- 護(hù)士近五年工作總結(jié)6篇
- 部門助理個(gè)人總結(jié)7篇
- 專項(xiàng)資金使用自查報(bào)告5篇
- 教師教研教學(xué)工作總結(jié)7篇
- 迎新晚會(huì)個(gè)人總結(jié)10篇