版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、源代碼請(qǐng)聯(lián)系本人,參見(jiàn)豆丁本人信息。 文檔編號(hào):版 本 號(hào): 文檔名稱(chēng):圖書(shū)館管理系統(tǒng)開(kāi)發(fā)文檔項(xiàng)目名稱(chēng):圖書(shū)館檢索與借閱管理系統(tǒng)項(xiàng)目負(fù)責(zé)人: 編 號(hào): 2009年6月16日校 對(duì): 2009年6月16日審 核: 2009年6月16日批 準(zhǔn): 2009年6月16日開(kāi)發(fā)單位:開(kāi)發(fā)小組 1)需求規(guī)格說(shuō)明書(shū)1.1 引言圖書(shū)管理系統(tǒng)是圖書(shū)館管理工作中的不可缺少的部分;對(duì)于圖書(shū)館的管理者和使用者來(lái)說(shuō)都至關(guān)重要,所以圖書(shū)管理系統(tǒng)應(yīng)該能夠?yàn)楣芾碚呋蜃x者提供足夠的信息和快捷的信息處理手段。但一直以來(lái)人們使用傳統(tǒng)的人工的方式進(jìn)行圖書(shū)管理和借閱管理,這種管理方式存在著許多缺點(diǎn),例如,效率低,易忘性,保密性差,另外時(shí)
2、間一長(zhǎng),將產(chǎn)生大量的數(shù)據(jù)和文件,這對(duì)于查找,更新和維護(hù)大批帶來(lái)了不少的困難。隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能以經(jīng)為人們深刻認(rèn)識(shí),它已經(jīng)進(jìn)入人類(lèi)社會(huì)的各個(gè)方面并發(fā)揮著越來(lái)越重要的作用。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)圖書(shū)信息進(jìn)行管理,具有著手工管理的所無(wú)法比擬的優(yōu)點(diǎn)。例如,檢索迅速,查找方便,易修改,可靠性高,存儲(chǔ)量大,數(shù)據(jù)處理快捷,保密性好,壽命長(zhǎng),成本低等。1.2 功能需求圖書(shū)管理信息系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開(kāi)發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端應(yīng)用程序的開(kāi)發(fā)兩個(gè)方面。對(duì)于前者要求建立數(shù)據(jù)一致性和完整性強(qiáng),數(shù)據(jù)庫(kù)按前行好的庫(kù),而對(duì)于后者則要求應(yīng)用
3、程序功能完備,易使用等。系統(tǒng)功能分析是在系統(tǒng)開(kāi)發(fā)的總體任務(wù)的基礎(chǔ)上完成的,本系統(tǒng)需要完成的功能主要有6個(gè)部分。圖書(shū)基本情況管理模塊包括書(shū)籍類(lèi)別標(biāo)準(zhǔn)的制定;類(lèi)別信息的輸入包括類(lèi)別編號(hào),類(lèi)別名稱(chēng);書(shū)籍信息的輸入包括書(shū)籍編號(hào),書(shū)籍名稱(chēng),書(shū)籍類(lèi)別,作者名稱(chēng),出版社名稱(chēng),出版日期,登記日期及備注信息等。辦理圖書(shū)卡模塊,主要是為新的讀者辦理借書(shū)證。結(jié)束管理模塊包括借書(shū)信息的輸入,輸入內(nèi)容含有借書(shū)信息編號(hào),讀者編號(hào),讀者姓名,書(shū)籍編號(hào),書(shū)籍名稱(chēng),借書(shū)日期及備注信息等;而借書(shū)信息的查詢包括借書(shū)信息編號(hào),讀者編號(hào),讀者姓名,書(shū)籍編號(hào),書(shū)籍名稱(chēng),借書(shū)日期及備注信息等。還書(shū)管理模塊包括還書(shū)信息的輸入內(nèi)容。含有還書(shū)信
4、息編號(hào),讀者編號(hào),書(shū)籍編號(hào),書(shū)籍名稱(chēng),借書(shū)日期,還書(shū)日期及備注信息等;還包括還書(shū)信息的查詢和修改,包括還書(shū)信息編號(hào),讀書(shū)編號(hào),讀者姓名,書(shū)籍編號(hào),書(shū)籍名稱(chēng),借書(shū)日期,還書(shū)日期及備注信息等。對(duì)超期的情況能自動(dòng)給出提示信息。系統(tǒng)設(shè)置模塊應(yīng)該包括對(duì)用戶組的定義,權(quán)限的修改與添加,用戶管理及其他系統(tǒng)環(huán)境的設(shè)置。1.3 系統(tǒng)流程分析系統(tǒng)流程就是用戶進(jìn)入圖書(shū)館信息管理系統(tǒng)后的工作過(guò)程,本系統(tǒng)對(duì)不同的用戶設(shè)置了不同的權(quán)限,因此不同的用戶操作流程有所不同,如圖1-1所示:本系統(tǒng)的操作流程主要分為用戶登陸操作和業(yè)務(wù)操作兩個(gè)部分,用戶登陸操作和業(yè)務(wù)操作兩個(gè)部分,用戶登陸操作主要是對(duì)用戶的帳號(hào)和用戶的密碼進(jìn)行身份驗(yàn)
5、證,通過(guò)驗(yàn)證的進(jìn)入系統(tǒng)操作界面,身份驗(yàn)證失敗時(shí),則給出則給出錯(cuò)誤提示。業(yè)務(wù)操作根據(jù)帳號(hào)的權(quán)限允許或限制用戶的行為。流程圖第一層數(shù)據(jù)流程圖如圖1-2所示:新書(shū)入庫(kù)讀者種類(lèi)D2基本信息錄入 D1基本信息錄入讀者種類(lèi)信息 書(shū)籍類(lèi)別信息D4D2基本信息錄入基本信息錄入D5書(shū)籍讀者書(shū)籍信息讀者信息借閱信息錄入書(shū)籍信息返回讀者信息返回借閱信息 圖 1-2通過(guò)上述流程圖,可以將管理部分劃分成4層模型,書(shū)籍信息查詢部分業(yè)務(wù)流程如圖1-3所示:除書(shū)籍查詢流程外,還有借書(shū),還書(shū)流程圖,它主要是根據(jù)讀者的信息,經(jīng)管理員對(duì)書(shū)籍信息數(shù)據(jù),讀者信息數(shù)據(jù)庫(kù)進(jìn)行操作和確認(rèn),流程圖如圖1-4所示:Y錯(cuò)誤信息借書(shū)證和所需數(shù)目所借
6、圖書(shū)讀者信息數(shù)據(jù)庫(kù)書(shū)籍信息數(shù)據(jù)庫(kù)圖書(shū)管理員讀者 圖 1-4 書(shū)籍信息管理模塊主要是管理員根據(jù)情況對(duì)新書(shū)進(jìn)行登記入庫(kù),舊書(shū)刪除,修改操作,并將這些信息返書(shū)籍信息數(shù)據(jù)庫(kù),它的業(yè)務(wù)流程如圖1-5:另一層為讀者信息管理模塊,它的主要功能是對(duì)新讀者的相關(guān)信息錄入到數(shù)據(jù)庫(kù)中,并實(shí)時(shí)的對(duì)讀者信息數(shù)據(jù)庫(kù)進(jìn)行更新,業(yè)務(wù)流程圖如圖1-6: 文檔編號(hào):000002 版 本 號(hào):000001 文檔名稱(chēng):圖書(shū)館管理系統(tǒng)概要設(shè)計(jì)文檔 項(xiàng)目名稱(chēng):圖書(shū)館檢索與借閱管理系統(tǒng) 項(xiàng)目負(fù)責(zé)人: 編 號(hào): 0001 2009年6月16日校 對(duì): 2009年6月16日審 核: 2009年6月16日批 準(zhǔn): 老師 2009年6月16日開(kāi)發(fā)
7、單位: 開(kāi)發(fā)小組2)概要設(shè)計(jì)說(shuō)明書(shū)項(xiàng)目開(kāi)發(fā)環(huán)境:windows xp操作系統(tǒng) SQL sever 2000Delphi 72.1 系統(tǒng)層次模塊圖在功能分析的基礎(chǔ)上,根據(jù)delphi程序編制的特點(diǎn),得到如圖1-7所示的系統(tǒng)功能模塊圖:系統(tǒng)數(shù)據(jù)結(jié)構(gòu)針對(duì)一般圖書(shū)管理信息系統(tǒng)的要求,通過(guò)對(duì)圖書(shū)管理工作過(guò)程的內(nèi)容和數(shù)據(jù)流程分析,設(shè)計(jì)如下面所述的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)。讀者種類(lèi)信息屬性:種類(lèi)編號(hào),種類(lèi)名稱(chēng),借書(shū)數(shù)量,借書(shū)期限。主碼:種類(lèi)編號(hào)。讀者信息屬性:讀者編號(hào),讀者姓名,讀者種類(lèi)編號(hào),讀者性別,證件種類(lèi),證件號(hào)碼。主碼:讀者編號(hào)。3書(shū)籍類(lèi)別信息屬性:類(lèi)別編號(hào),類(lèi)別名稱(chēng)。主碼:類(lèi)別編號(hào)。4.書(shū)籍信息屬性:書(shū)籍
8、編號(hào),書(shū)籍名稱(chēng),書(shū)籍類(lèi)別,作者姓名,出版社名稱(chēng),出版日期,備注信息,定價(jià),總數(shù)量,剩余數(shù)量。主碼:書(shū)籍編號(hào)。5.借閱信息 屬性:讀者編號(hào),書(shū)籍編號(hào),書(shū)籍名稱(chēng),借書(shū)日期,還書(shū)日期,數(shù)量。 主碼:用戶帳號(hào),圖書(shū)編號(hào)。6.用戶組信息表屬性:組號(hào),組名,最大天數(shù),最大數(shù)量。主碼:組號(hào)。數(shù)據(jù)塊邏輯結(jié)構(gòu)設(shè)計(jì)登陸用戶詞表主要是在系統(tǒng)登陸時(shí),對(duì)用戶的權(quán)限,密碼進(jìn)行驗(yàn)證,對(duì)同權(quán)限的操作員產(chǎn)生不同的用戶界面,表的結(jié)構(gòu)如表1所示: 表1 登陸用戶表借閱信息表借閱信息表包括用戶帳號(hào),圖書(shū)編號(hào),借書(shū)日期等字段,主要用在用戶借閱書(shū)籍,還書(shū)時(shí)需要用到,如圖表2: 表2 借閱信息表圖書(shū)類(lèi)別表圖書(shū)類(lèi)別表只含有兩個(gè)字段類(lèi)別和類(lèi)名
9、,此表在新書(shū)登記,書(shū)籍查詢等功能模塊中需要用到,如下表3: 圖書(shū)信息表圖書(shū)信息表包括圖書(shū)信息編號(hào),類(lèi)別,書(shū)名,作者等相關(guān)信息,在系統(tǒng)中使用比較多,在有關(guān)書(shū)的操作中都要用到,如下表4:用戶表用戶表包括用戶帳號(hào),姓名,性別等相關(guān)信息,它主要是在讀者借閱,還書(shū),讀者查詢模塊中用到,具體結(jié)構(gòu)如下表5:組用戶表包括組號(hào),組名,最大天數(shù),最大數(shù)量4個(gè)字段,主要是在讀者圖書(shū)借閱時(shí)對(duì)用戶借書(shū)總數(shù)進(jìn)行限制,而且可在還書(shū)時(shí)檢查是否超期。如下表6:數(shù)據(jù)表的創(chuàng)建通過(guò)以上的數(shù)據(jù)流程分析和數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)的設(shè)計(jì),得到數(shù)據(jù)表的基本項(xiàng),建表的SQL語(yǔ)句如下:建數(shù)據(jù)庫(kù):create database TSG建表:use TSGg
10、ocreate table yonghu(readerID nvarchar(10) PRIMARY KEY, name nvarchar(10), sex nvarchar(2), rgroup nvarchar(2), zjlx nvarchar(10), zID nvarchar(20);use TSGgocreate table lend(readerID nvarchar(10), bcode nvarchar(10), outdate datetime, deadline datetime, amount smallint, intime datetime);use TSGgocr
11、eate table yhz(znum nvarchar(2) PRIMARY KEY, zname nvarchar(10), maxdate smallint, maxnum smallint);use TSGgocreate table tsclass(class nvarchar(4), classname nvarchar(40);use TSGgocreate table book(bcode nvarchar(10) PRIMARY KEY, bclass nvarchar(4), bname nvarchar(20) UNIQUE, bauthor nvarchar(10),
12、boutdate datetime, bpress nvarchar(20), bcost smallint, bamount smallint, bsheng smallint, remark nvarchar(1000);use TSGgocreate table yhdl(num nvarchar(10) PRIMARY KEY, name nvarchar(10), password nvarchar(10), rights nvarchar(10); 文檔編號(hào):000003 版 本 號(hào):000001 文檔名稱(chēng):圖書(shū)館管理系統(tǒng)詳細(xì)設(shè)計(jì)文檔 項(xiàng)目名稱(chēng):圖書(shū)館檢索與借閱管理系統(tǒng) 項(xiàng)目負(fù)責(zé)人
13、: 編 號(hào): 2009年6月16日校 對(duì): 2009年6月16日審 核: 2009年6月16日批 準(zhǔn): 老師 2009年6月16日開(kāi)發(fā)單位:開(kāi)發(fā)小組3)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)主界面設(shè)計(jì)1.登陸窗體登陸窗體主要是通過(guò)驗(yàn)證用戶帳號(hào)給不同的用戶登陸系統(tǒng)不同的權(quán)限,從而可以對(duì)系統(tǒng)進(jìn)行一系列管理。登陸窗體中各控件的設(shè)置如下表所示:類(lèi)型對(duì)象屬性屬性值TButtonEnterCaption登陸系統(tǒng)TbuttonExitCaption取消登陸TLabelLabel1Caption帳號(hào)TLabelLabel2Caption密碼TEditMMPasswordChar*TComboBoxXMStyplecsDropDwon
14、ListTXPMenuXPMenul1ActiveTrue調(diào)整控件布局和大小,設(shè)置號(hào)相關(guān)控件屬性,最后“登陸”界面的實(shí)現(xiàn)如下圖所示:在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建數(shù)據(jù)連接,并將用戶表中的姓名放置于ComboBox中完成初始化,這些功能代碼放置于Oncreate事件中,相關(guān)代碼如下:procedure Tdenglu.FormCreate(Sender: TObject);begin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select name from yhdl); Open; while not Eof do begin YHM_CB.Item
15、s.Add(FieldValuesname); next; end; YHM_CB.ItemIndex:=0; close; end;end;完成相關(guān)控件的初始化后,“登陸”界面將用戶列出到ComboBox中。當(dāng)用戶輸入密碼完畢后,單擊登陸系統(tǒng),系統(tǒng)響應(yīng)OnClick事件,在事件代碼中判斷用戶密碼是否正確,并統(tǒng)計(jì)密碼錯(cuò)誤輸入的次數(shù),提示輸入錯(cuò)誤的次數(shù),當(dāng)超過(guò)3次時(shí),系統(tǒng)自動(dòng)關(guān)閉。代碼如下:procedure Tdenglu.EnterClick(Sender: TObject);var Password:string;begin with ADOQuery1 do begin Close; S
16、QL.Clear; SQL.Add(select password,rights from yhdl where name=:name); Parameters.ParamByName(name).Value:=YHM_CB.Text; Open; if RecordCount0 then begin Password:=FieldValuespassword; if MM_E.Text=Password then begin UserName:=YHM_CB.Text; QX:=FieldValuesrights; application.MessageBox(登陸成功,提示信息,64);
17、self.Hide; main.Show; end else begin Logintimes:= Logintimes+1; if Logintimes3 then begin messageBox(handle,pchar(密碼第+IntTostr(Logintimes)+次錯(cuò)誤,請(qǐng)重新輸入!),密碼錯(cuò)誤,MB_OK OR MB_ICONERROR); MM_E.Text:=; MM_E.SetFocus; end else begin MessageBox(handle,密碼三次錯(cuò)誤,請(qǐng)關(guān)閉!,密碼錯(cuò)誤,MB_ICONERROR); application.Terminate; end;
18、 end; end; end;end;2.主界面設(shè)計(jì)系統(tǒng)主界面包括各個(gè)功能模塊,新建窗體main是系統(tǒng)主界面,主界面的設(shè)置如下表所示:控件類(lèi)型對(duì)象屬性屬性值TcoolbarCoolBar1BandsTImageImage1AlignClientTmainMenuMainMenu1ItemsTstatusBarStatusBar1Ctl3DTrueTtimerTimer1Align1000TXPMenuXpMenu1ActiveTrue通過(guò)主界面上的MainMenu1控件來(lái)設(shè)計(jì)各功能菜單的內(nèi)容,雙擊MainMenu1控件,對(duì)菜單內(nèi)容進(jìn)行設(shè)置,如下表所示:類(lèi)型對(duì)象屬性屬性值TbuttonFile_
19、TCaption文件TbuttonClose_TCaption退出TbuttonOperator_TCaption操作TbuttonViewF_TCaption顯示文件TbuttonViewBM_TCaption顯示圖書(shū)管理TbuttonViewSM_TCaption顯示環(huán)境管理TbuttonViewH_TCaption顯示幫助TbuttonChangBG_TCaption返回登陸TbuttonBookM_TCaption圖書(shū)管理TbuttonXSRK_TCaption新書(shū)入庫(kù)TbuttonTSZL_TCaption辦借書(shū)卡TbuttonBJSK_TCaption圖書(shū)整理TbuttonTSJH
20、_TCaption圖書(shū)整理TbuttonQuery_TCaption查詢TbuttonSETM_TCaption環(huán)境管理TbuttonQXGL_TCaption權(quán)限設(shè)置TbuttonZYHGL_TCaption組用戶設(shè)置TbuttonBFHY_TCaption備份還原TbuttonHelp_TCaption幫助TButtonGY_TCaption關(guān)于通過(guò)上述步驟,調(diào)整布局大小,主界面設(shè)置完成如下圖所示:雙擊Oncreate事件,在OnCreate中的相關(guān)代碼添加如下:procedure Tmain.FormCreate(Sender: TObject);begin statusbar1.pan
21、els.items0.width:=200; statusbar1.panels.items1.width:=200; statusbar1.panels.items2.width:=200; statusbar1.panels.items3.width:=200; ViewF_T.Checked:=ViewFile; CoolBar1.Bands0.Visible:=ViewF_T.Checked; ViewF_T.Checked:=ViewBookMgr; CoolBar1.Bands1.Visible:=ViewBM_T.Checked; ViewSM_T.Checked:=ViewSe
22、ttingMgr; CoolBar1.Bands2.Visible:=ViewSM_T.Checked; ViewH_T.Checked:=ViewAbout; CoolBar1.Bands3.Visible:=ViewH_T.Checked; StatusBar1.Panels2.Text:=日期:+datetimetostr(date);end;當(dāng)系統(tǒng)主界面被調(diào)用時(shí),根據(jù)登陸用戶服務(wù)的級(jí)別可以設(shè)置用戶服務(wù)的操作權(quán)限,也就是對(duì)不同權(quán)限的用戶顯示不同窗口和控件,該過(guò)程的相關(guān)操作和設(shè)置時(shí)在form的OnShow事件中添加的,相關(guān)代碼如下:procedure Tmain.FormShow(Send
23、er: TObject);var myini:TIniFile; OldcheckDay:string; num,maxnum:integer;begin StatusBar1.Panels0.Text:=用戶名:+UserName; if QX=超級(jí)管理員 then StatusBar1.Panels1.Text:=用戶描述:超級(jí)管理員 else if QX=普通管理員 then StatusBar1.Panels1.Text:=用戶描述:普通管理員 else statusBar1.Panels1.Text:=用戶描述:讀者; if QX=讀者 then begin XSRK_T.Enabl
24、ed:=false;/讀者菜單上很多功能不能用 TSZL_T.Enabled:=false; BJSK_T.Enabled:=false; TSJH_T.Enabled:=false; QXGL_T.Enabled:=false; QTSZ_T.Enabled:=false; BFHY_T.Enabled:=false; ZYHGL_T.Enabled:=false; BJSK_SB.Enabled:=false; /讀者工具條上很多功能不能用 TSZL_SB.Enabled:=false; TSJH_SB.Enabled:=false; XSRK_SB.Enabled:=false; QXG
25、L_SB.Enabled:=false; ZYHGL_SB.Enabled:=false; BFHY_SB.Enabled:=false; exit; end else if QX=普通管理員 then begin XSRK_T.Enabled:=false;/普通管理員菜單上很多功能不能用 TSZL_T.Enabled:=false; QXGL_T.Enabled:=false; ZYHGL_T.Enabled:=false; TSZL_SB.Enabled:=false;/普通管理員工具條上很多功能不能用 XSRK_SB.Enabled:=false; QTSZ_T.Enabled:=fa
26、lse; BFHY_T.Enabled:=false; QXGL_SB.Enabled:=false; ZYHGL_SB.Enabled:=false; BFHY_SB.Enabled:=false; end; myini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+set.ini); OldCheckDay:=myini.ReadString(set,OldCheckDay,); Maxnum:=myini.ReadInteger(set,MaxCheckNum,0); if maxnum=0 then exit; if Old
27、CheckDay=DateToStr(date) then begin num:=myini.ReadInteger(set,Checked,0); if nummaxnum then begin num:=num+1; myini.WriteInteger(set,Checked,num); end; end else begin myini.WriteString(set,OldCheckDay,dateTostr(date); myini.WriteInteger(set,Checked,1); end;end;圖書(shū)管理模塊的實(shí)現(xiàn)圖書(shū)管理模塊主要是對(duì)相關(guān)書(shū)籍進(jìn)行管理,如新書(shū)的入庫(kù)登記、舊
28、書(shū)的刪除,書(shū)籍相關(guān)信息的修改、圖書(shū)類(lèi)別的編輯。下面時(shí)各功能的設(shè)計(jì)和實(shí)現(xiàn):新書(shū)入庫(kù)管理主要是將新購(gòu)進(jìn)書(shū)的相關(guān)信息,如書(shū)名、ISDN號(hào)、出版日期、作者等相關(guān)信息添加到數(shù)據(jù)庫(kù)中,方便讀者借閱時(shí)查詢。界面布局如下:添加相關(guān)控件,控件類(lèi)型,屬性及相關(guān)屬性設(shè)置和如下表所示:類(lèi)型對(duì)象屬性屬性值TgroupBoxgroupBox1Caption圖書(shū)相關(guān)信息TEditBH對(duì)應(yīng)Lable編號(hào)TeditBZ對(duì)應(yīng)Lable備注TeditCBRQ對(duì)應(yīng)Lable出版日期TeditCBS對(duì)應(yīng)Lable出版社TeditDJ對(duì)應(yīng)Lable定價(jià)TeditLBstyle類(lèi)別TconboBoxLM對(duì)應(yīng)LablecsDropListT
29、EditSL對(duì)應(yīng)Lable數(shù)量TeditSM對(duì)應(yīng)Lable書(shū)名TEditZZ對(duì)應(yīng)Lable作者在public中添加GetClassName和CheckError函數(shù),分別用于獲得書(shū)籍類(lèi)別名稱(chēng)和對(duì)輸入數(shù)據(jù)的合法性進(jìn)行檢查。這兩個(gè)函數(shù)的實(shí)現(xiàn)如下所示:function TXSRK1.IsNumber(Vaule:String):Boolean; /判斷Vaule是不是數(shù)字var i:integer; begin for i:=1 to length(Vaule) do if not (vaulei in 0.9) then begin result:=false; exit; end; result
30、:=true; end;function TXSRK1.GetClassName(ClassName:String):String;var h:String;begin h:=ClassName; with ADOQuery1 do begin try Close; SQL.Clear; SQL.Add(select class from tsclass where classname=:classname); Parameters.ParamByName(classname).Value:=h; Open; if RecordCount = 0 then Result := else Res
31、ult:=FieldValuesclass; Close; except Result := ; end; end;end;function TXSRK1.CheckError:boolean; /檢查輸入的數(shù)據(jù)是否有錯(cuò)誤begin result:=false; if (length(BH.Text)10)or (not IsNumber(BH.Text) then /圖書(shū)編號(hào)是否合法 begin MessageBox(handle,圖書(shū)編號(hào)即圖書(shū)的條形碼為10位數(shù)字!,圖書(shū)編號(hào)錯(cuò)誤,MB_OK or MB_ICONERROR); result:=true; exit; end else be
32、gin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(Select * From book Where bcode=:bcode); Parameters.ParamByName(bcode).Value:=BH.Text; Open; if RecordCount0 then begin MessageBox(handle,你輸入的圖書(shū)編號(hào)已經(jīng)存在!,編號(hào)重復(fù),MB_OK or MB_ICONERROR); result:=true; exit; end; end; end; if SM.Text= then begin MessageB
33、ox(handle,書(shū)名不能為空!,書(shū)名有誤,MB_OK or MB_ICONERROR); result:=true; exit; end; if ZZ.Text= then begin MessageBox(handle,作者不能為空!,作者有誤,MB_OK or MB_ICONERROR); result:=true; exit; end; if CBS.Text= then begin MessageBox(handle,出版社不能為空!,出版社有誤,MB_OK or MB_ICONERROR); result:=true; exit; end; if DJ.Text= then be
34、gin MessageBox(handle,定價(jià)不能為空!,定價(jià)有誤,MB_OK or MB_ICONERROR); result:=true; exit; end; try /判斷定價(jià)是否正確 StrToFloat(DJ.Text); except MessageBox(handle,定價(jià)不對(duì)!,定價(jià)錯(cuò)誤,MB_OK or MB_ICONERROR); result:=true; exit; end; try /判斷日期格式是否正確 StrToDate(CBRQ.Text); except MessageBox(handle,日期格式不對(duì),正確格式形如:2004-8-5!,日期錯(cuò)誤,MB_O
35、K or MB_ICONERROR); result:=true; exit; end; try /入庫(kù)數(shù)量必須為整數(shù) StrToInt(SL.Text); except MessageBox(handle,入庫(kù)數(shù)量必須為大于0的整數(shù)!,數(shù)量錯(cuò)誤,MB_OK or MB_ICONERROR); result:=true; exit; end;end;在窗體創(chuàng)建時(shí)需要對(duì)ComboBox類(lèi)別進(jìn)行初始化,在OnCreate中實(shí)現(xiàn),代碼如下:procedure TXSRK1.FormCreate(Sender: TObject);begin with ADOQuery1 do begin close;
36、 SQL.Clear; SQL.Add(select classname from tsclass); Open; while not Eof do begin LM.Items.Add(FieldByName(classname).AsString); Next; end; LB.Enabled:=false; LM.ItemIndex:=0; LB.Text:=GetClassName(LM.Items0); Close; end;end;為L(zhǎng)M控件添加OnChange事件代碼,它的功能主要時(shí)在用戶單擊ComboBox時(shí),將書(shū)籍的所有類(lèi)別顯示在下拉列表中,代碼如下:procedure TX
37、SRK1.LMChange(Sender: TObject);begin LB.Text:=GetClassName(LM.ItemsLM.ItemIndex);end;當(dāng)用戶單擊“入庫(kù)”按鈕時(shí),系統(tǒng)對(duì)用戶輸入的信息進(jìn)行合法性檢查,然后再將相關(guān)信息插入到數(shù)據(jù)庫(kù)中。單擊“入庫(kù)”的事件為OnClick,相關(guān)代碼如下:procedure TXSRK1.BitBtn1Click(Sender: TObject);begin if Checkerror then exit;/檢查信息合法性 with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(insert
38、into book(bcode,bclass,bname,bauthor,boutdate,bpress,bcost,bamount,bsheng,remark); SQL.Add(values(:bcode,:bclass,:bname,:bauthor,:boutdate,:bpress,:bcost,:bamount,:bsheng,:remark); Parameters.ParamByName(bcode).Value:=BH.Text; Parameters.ParamByName(bclass).Value:=LB.Text; Parameters.ParamByName(bna
39、me).Value:=SM.Text; Parameters.ParamByName(bauthor).Value:=ZZ.Text; Parameters.ParamByName(boutdate).Value:=StrToDate(CBRQ.Text); Parameters.ParamByName(bpress).Value:=CBS.Text; Parameters.ParamByName(bcost).Value:=StrToFloat(DJ.Text); Parameters.ParamByName(bamount).Value:=StrToInt(SL.Text); Parame
40、ters.ParamByName(bsheng).Value:=StrToInt(SL.Text); Parameters.ParamByName(remark).Value:=BZ.Text; ExecSQL; MessageBox(handle,此書(shū)已成功入庫(kù),入庫(kù)成功,MB_OK or MB_ICONINFORMATION); BH.Text:=; SM.Text:=; ZZ.Text:=; CBRQ.Text:=; CBS.Text:=; DJ.Text:=; SL.Text:=; BZ.Text:=; close; end;end;2.圖書(shū)維護(hù)圖書(shū)修改、刪除功能是按照?qǐng)D書(shū)的編號(hào)和操作
41、方式對(duì)圖書(shū)進(jìn)行相關(guān)操作,操作的fangshi 包括修改、刪除兩種。界面布局如下:(1)控件的初始化如下:procedure TTSZL1.FormCreate(Sender: TObject);begin with ADOQuery1 do begin close; SQL.Clear; SQL.Add(select class,classname from tsclass); Open; LBXX.Columns0.FieldName:=class; LBXX.Columns0.Title.Caption:=類(lèi)別代碼; LBXX.Columns1.FieldName:=classname;
42、LBXX.Columns1.Title.Caption:=類(lèi)別名稱(chēng); while not Eof do begin LB.Items.Add(FieldValuesclassname); Next; end; LB.ItemIndex:=0; TJLB.Checked:=true; end;end;(2)在圖書(shū)修改刪除頁(yè)面上,當(dāng)用戶輸入圖書(shū)編號(hào)并單擊“查找”按鈕時(shí),系統(tǒng)自動(dòng)搜索相關(guān)數(shù)據(jù)并顯示,如果輸入的數(shù)據(jù)有誤,則將彈出警告對(duì)話框告知錯(cuò)誤,相關(guān)代碼如下:procedure TTSZL1.CZClick(Sender: TObject);begin with ADOQuery1 do begin
43、 Close; SQL.Clear; SQL.Add(select * from book); Open; if Locate(bcode,TSBH.Text,) then begin BH.Text:=TSBH.Text; SM.Text:=FieldValuesbname; ZZ.Text:=FieldValuesbauthor; CBRQ.Text:=dateToStr(FieldValuesboutdate); CBs.Text:=FieldValuesbpress; DJ.Text:=FloatToStr(FieldValuesbcost); SL.Text:=IntToStr(Fi
44、eldValuesbamount); BZ.Text:=FieldValuesremark; with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select class from tsclass); Open; Locate(class,Fieldvaluesclass,); LB.ItemIndex:=LB.Items.IndexOf(FieldValuesclass); XG.Checked:=true; ZX.Enabled:=true; end; end else begin MessageBox(handle,記錄沒(méi)有找到,請(qǐng)檢查輸入
45、的編號(hào)是否正確!,沒(méi)有找到圖書(shū)記錄,MB_OK or MB_ICONERROR); end; end;end;用戶可對(duì)查詢出來(lái)的記錄選擇操作方式,如修改、刪除,當(dāng)用戶單擊“執(zhí)行“按鈕時(shí),系統(tǒng)響應(yīng)執(zhí)行對(duì)應(yīng)的操作,Onclick響應(yīng)函數(shù)代碼如下:procedure TTSZL1.ZXClick(Sender: TObject);var Del:integer;begin if XG.Checked then begin if TSZL1.CheckError1 then exit; with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select *
46、 from book); Open; Locate(bcode,BH.Text,); Edit; FieldValuesbclass:=LB.Text; FieldValuesbname:=SM.Text; FieldValuesbauthor:=ZZ.Text; FieldValuesboutdate:=StrToDate(CBRQ.Text); FieldValuesbpress:=CBS.Text; FieldValuesbcost:=StrToFloat(DJ.Text); FieldValuesbamount:=StrToInt(SL.Text); FieldValuesbsheng
47、:=StrToInt(SL.Text); FieldValuesremark:=BZ.Text; Post; MessageBox(handle,記錄已成功修改,修改成功,MB_OK or MB_ICONINFORMATION); end; end else begin Del:=MessageBox(handle,警告:刪除是永久不可恢復(fù)的!確認(rèn)刪除嗎?,刪除確認(rèn),MB_OKCANCEL or MB_ICONWarning); if Del=IDCancel then exit; with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(delete
48、 book where bcode =:bcode); Parameters.ParamByName(bcode).Value:=BH.Text; ExecSQL; MessageBox(handle,記錄已成功刪除,刪除成功,MB_OK or MB_ICONINFORMATION); TSBH.Text:=; BH.Text:=; SM.Text:=; ZZ.Text:=; CBRQ.Text:=; CBS.Text:=; DJ.Text:=; SL.Text:=; BZ.Text:=; LB.Text:=; LB.Enabled:=false; end; end;end;3.圖書(shū)類(lèi)別管理圖
49、書(shū)類(lèi)別管理主要是根據(jù)書(shū)籍的類(lèi)型進(jìn)行分類(lèi),方便讀者進(jìn)行查詢,提高查詢速度。圖書(shū)類(lèi)別管理分為修改和添加兩種操作,它與圖書(shū)管理在同一窗體中,只需新建一個(gè)TabSheet即可,界面布置如下所示:用戶選中DBGrid中某一列記錄,單擊“刪除”按鈕,將分類(lèi)記錄信息從數(shù)據(jù)庫(kù)中移除。在刪除前彈出警告對(duì)話框提示操作的危險(xiǎn)性,只有在用戶確認(rèn)的情況下刪除記錄,代碼如下:procedure TTSZL1.DELClick(Sender: TObject);Var Del:integer;begin Del:=MessageBox(handle,警告:刪除是永久不可恢復(fù)的!確認(rèn)刪除嗎?,刪除確認(rèn),MB_OKCANCEL
50、 or MB_ICONWarning); if Del=IDCancel then exit; LBXX.DataSource.DataSet.Delete; MessageBox(handle,記錄已成功刪除,刪除成功,MB_OK or MB_ICONINFORMATION); LBDM.Text:=; LBDM.Enabled:=true; LBMC.Text:=; TJLB.Enabled:=true;end;選中修改類(lèi)別按鈕時(shí),將DBGrid中的內(nèi)容顯示在類(lèi)別代碼和類(lèi)別名稱(chēng)編輯控件中,并使“執(zhí)行”按鈕可見(jiàn)。代碼如下:procedure TTSZL1.XGLBClick(Sender:
51、TObject);begin LBDM.Text:=LBXX.DataSource.DataSet.FieldValuesclass; LBmc.Text:=LBXX.DataSource.DataSet.FieldValuesclassname; LBZX.Enabled:=true; LBDM.Enabled:=false;End;選中添加類(lèi)別按鈕時(shí),在信息GroupBox下的兩個(gè)Edt控件中輸入相關(guān)信息,并使“執(zhí)行”可見(jiàn)。代碼如下:procedure TTSZL1.TJLBClick(Sender: TObject);begin LBDM.Text:=; LBDM.Enabled:= t
52、rue; LBMC.Text:=;end;(4)在“執(zhí)行”按鈕可見(jiàn)的情況下,用戶單擊“執(zhí)行”按鈕,系統(tǒng)根據(jù)操作方式進(jìn)行不同的響應(yīng)事件,處理代碼如下:procedure TTSZL1.LBZXClick(Sender: TObject);begin if LBDM.Text= then begin MessageBox(handle,類(lèi)別代碼不能為空!,類(lèi)別代碼錯(cuò)誤,MB_OK or MB_ICONERROR); exit; end; if LBMC.Text= then begin MessageBox(handle,類(lèi)別名稱(chēng)不能為空!,類(lèi)別名稱(chēng)錯(cuò)誤,MB_OK or MB_ICONERROR
53、); exit; end; if TJLB.Checked then begin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select class,classname from tsclass); Open; if Locate(class,LBDM.Text,) then begin MessageBox(handle,類(lèi)別代碼已經(jīng)存在!,錯(cuò)誤,MB_OK or MB_ICONERROR); LBDM.SetFocus; exit; end; if Locate(classname,Lbmc.Text,) then begin Me
54、ssageBox(handle,類(lèi)別名稱(chēng)已經(jīng)存在!,錯(cuò)誤,MB_OK or MB_ICONERROR); LBDM.SetFocus; exit; end; Append; FieldValuesclass:=LBDM.Text; FieldValuesclassname:=LBMc.Text; Post; MessageBox(handle,類(lèi)型記錄添加成功!,添加成功,MB_OK or MB_ICONINFORMATION); end; end else begin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select class
55、,classname from tsclass); Open; Locate(class,LBDM.Text,); edit; FieldValuesclassname:=LBMC.Text; Post; MessageBox(handle,類(lèi)型記錄修改成功!,修改成功,MB_OK or MB_ICONINFORMATION); end; end; end;procedure TTSZL1.LBXXCellClick(Column: TColumn);begin if XGLB.Checked then begin LBDM.Text:=ADOQuery1.Fields0.AsString;
56、LBMC.Text:=ADOQuery1.Fields1.AsString; LBDM.Enabled:=false; end else begin LBDM.Text:=; LBMC.Text:=; end;end;四、書(shū)籍借閱模塊的實(shí)現(xiàn)書(shū)籍借閱模塊主要時(shí)服務(wù)讀者的借書(shū)、還書(shū),在此基礎(chǔ)上添加相關(guān)的判斷,如在借書(shū)時(shí),檢查的是借閱人所屬群組、最大借閱書(shū)籍?dāng)?shù)、已借閱書(shū)籍?dāng)?shù)。在歸還書(shū)籍時(shí)頁(yè)需要判斷所環(huán)的書(shū)籍是否超期,并對(duì)超期書(shū)籍進(jìn)行罰金統(tǒng)計(jì),下面兩個(gè)部分的實(shí)現(xiàn)。窗體的初始化程序如下:procedure TTSJH1.JSClick(Sender: TObject);begin Label2.Capt
57、ion:=圖書(shū)編號(hào):; HS_T.TabVisible:=false; JS_T.TabVisible:=true; TSBH.Text:=;end;在用戶輸入圖標(biāo)編號(hào)后,單擊“檢查”按鈕時(shí),查檢ID是否合法,并判斷時(shí)還書(shū)還是借書(shū),并對(duì)相關(guān)信息進(jìn)行初始化,此部分是借書(shū)和還書(shū)的共有部分,具體代碼如下:procedure TTSJH1.JCClick(Sender: TObject);var s:string;begin if JS.Checked then begin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select * from
58、book where bcode=:bcode); Parameters.ParamByName(bcode).Value:=TSBH.Text; Open; if Bof and Eof then begin MessageBox(handle,輸入的圖書(shū)編號(hào)有錯(cuò)!請(qǐng)重新輸入!,錯(cuò)誤,MB_OK or MB_ICONERROR); TSBH.Text:=; JS_T.TabVisible:=false; end else begin MessageBox(handle,圖書(shū)編號(hào)存在,成功,MB_OK or MB_ICONINFORMATION); JS_T.TabVisible:=true;
59、 HS_T.TabVisible:=false; SM.Text:=FieldValuesbname; ZZ.Text:=FieldValuesbauthor; CBs.Text:=FieldValuesbpress; SYSL.Text:=IntToStr(FieldValuesbsheng); CBRQ.Text:=dateToStr(FieldValuesboutdate); s:=FieldValuesbclass; with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select * from tsclass where class=:
60、class); Parameters.ParamByName(class).Value:=s; Open; LB.Text:=FieldValuesclassname; end; end; end; end; if HS.Checked then begin with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(select * from yonghu where readerID=:readerID); Parameters.ParamByName(readerID).Value:=TSBH.Text; Open; if Bof and Eof
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版新員工試崗期職業(yè)發(fā)展規(guī)劃與實(shí)施合同3篇
- 應(yīng)急預(yù)案與突發(fā)事件類(lèi)型
- 電子行業(yè)產(chǎn)品維修培訓(xùn)總結(jié)
- 建筑與市政工程質(zhì)量安全巡查的背景
- 托育防恐防暴安全教育
- 交通運(yùn)輸行業(yè)促銷(xiāo)策略評(píng)估
- 二零二五版外貿(mào)實(shí)習(xí)實(shí)訓(xùn)基地建設(shè)合同3篇
- 二零二五年度環(huán)保設(shè)備委托托管合作協(xié)議3篇
- 《學(xué)校心理輔導(dǎo)》課件
- 二零二五年度居間服務(wù)合同范本6篇
- 選擇性必修一 期末綜合測(cè)試(二)(解析版)2021-2022學(xué)年人教版(2019)高二數(shù)學(xué)選修一
- 《論語(yǔ)》學(xué)而篇-第一課件
- 《寫(xiě)美食有方法》課件
- 學(xué)校制度改進(jìn)
- 各行業(yè)智能客服占比分析報(bào)告
- 年產(chǎn)30萬(wàn)噸高鈦渣生產(chǎn)線技改擴(kuò)建項(xiàng)目環(huán)評(píng)報(bào)告公示
- 心電監(jiān)護(hù)考核標(biāo)準(zhǔn)
- (完整word版)申論寫(xiě)作格子紙模板
- 滾筒焊縫超聲波探傷檢測(cè)報(bào)告
- 古典芭蕾:基本技巧和術(shù)語(yǔ)
- DB43-T 2612-2023林下竹蓀栽培技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論