數(shù)據(jù)庫期末作品設計報告.doc_第1頁
數(shù)據(jù)庫期末作品設計報告.doc_第2頁
數(shù)據(jù)庫期末作品設計報告.doc_第3頁
數(shù)據(jù)庫期末作品設計報告.doc_第4頁
數(shù)據(jù)庫期末作品設計報告.doc_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù) 據(jù) 庫 應 用 基 礎作 品 設 計 報 告設 計 作 品 題 目: 圖書管理系統(tǒng)的設計與實現(xiàn) 學 院 名 稱: 電子與信息工程學院 專 業(yè): 電氣工程及其自動化 班 級: 電氣101 姓 名: 李盛標 學 號 10401170105 指 導 教 師: 邱雪娜 完成日期: 2013 年 11 月 15 日 引言數(shù)據(jù)庫技術,已經(jīng)成為先進信息技術的重要組成部分,是現(xiàn)代計算機信息系統(tǒng)和計算機應用系統(tǒng)的基礎和核心。數(shù)據(jù)庫從誕生到現(xiàn)在,在不到半個世紀的世紀的時間里,形成了堅實的理論基礎、成熟的商業(yè)產(chǎn)品和廣泛的應用領域,吸引了越來越多的研究者加入。 數(shù)據(jù)庫的誕生和發(fā)展給計算機信息管理帶來了一場巨大的革命。 計算機技術不斷地應用到各行各業(yè),大量的企業(yè)把數(shù)據(jù)存放在數(shù)據(jù)庫中,并且通過T相關的代碼語句來進行快速查詢,獲取比傳統(tǒng)方式更高的效率。為了進一步加深和鞏固我們所學的專業(yè)課程PowerBuilder數(shù)據(jù)庫開發(fā)技術的基本理論知識,使我們所學的理論能夠更好的和實際的專業(yè)聯(lián)系起來,進一步培養(yǎng)學生的綜合分析問題和解決問題的能力。使學生的得到收集、處理、應用資料信息的實踐訓練,同時全面的考核學生所掌握的基本理論知識及其實際的專業(yè)能力,從而達到提高學生素質(zhì)的最終目的。學校安排了為期一個星期的實訓課程,在這一個星期的時間里,希望學生能夠利用所學到的知識創(chuàng)建一個圖書館的數(shù)據(jù)系統(tǒng),來達到圖書管理的需要。 2011年5月28日目錄1 數(shù)據(jù)庫設計 3 1.1 需求分析 3 1.2 數(shù)據(jù)庫設計內(nèi)容 3 1.3 概念設計 4 1.4 邏輯設計 5 1.5 窗口界面設計以及控件添加 6 1.6 表的設計以及數(shù)據(jù)的添加 92 數(shù)據(jù)庫編程 10 2.1 數(shù)據(jù)庫鏈接變成 10 2.2 操作界面代碼 10 2.3 數(shù)據(jù)顯示窗口編程 12 2.4 窗口按鈕編程 16 2.5 圖書類型窗口編程 18 2.6 查找窗口編程 19 2.7 用戶窗口編程 25 2.8圖書信息窗口編程 26 2.9 記錄信息窗口編程 28 2.10 數(shù)據(jù)顯示控件編程 313 實訓心得 331 數(shù)據(jù)庫設計熟悉PowerBuilder數(shù)據(jù)庫開發(fā)技術實訓環(huán)境,熟練掌握數(shù)據(jù)庫、表、窗口界面的設計、圖形按鈕的添加、數(shù)據(jù)庫的鏈接及函數(shù)的創(chuàng)建與應用,確立數(shù)據(jù)庫創(chuàng)建的方向,對圖書管理系統(tǒng)進行分析并設計系統(tǒng)實現(xiàn)需要哪幾張表以及各表結(jié)構(gòu),確立數(shù)據(jù)庫創(chuàng)建的要求,優(yōu)化數(shù)據(jù)庫界面的設計。1.1需求分析書籍是人類不可缺少的精神食糧,對學校來說,顯得尤為重要。所以圖書館管理系統(tǒng)應該是能夠為讀者提供充足的信息和快捷的查詢手段的一種方式。但一直以來人們都是使用傳統(tǒng)的人工方式來管理圖書,這就給圖書館的管理和圖書信息的查閱帶來了很大的不便,使得圖書管理的效率低下、保密性差,時間一長,還容易造成文件和數(shù)據(jù)的丟失,給查找、更新和維護帶來了很大的困難。圖書管理工作繁瑣,借閱頻繁,包含大量的信息數(shù)據(jù),因此就需要一個完善的圖書管理系統(tǒng)來實現(xiàn)對這些數(shù)據(jù)的有效管理。從而達到對圖書、讀者、員工、借閱信息、查詢進行統(tǒng)一管理,滿足各類用戶的需求。隨著計算機信息技術的發(fā)展,數(shù)據(jù)庫作為信息技術的一部分也在飛速的發(fā)展著。使用數(shù)據(jù)庫對圖書資源進行管理具有著手工管理無法比擬的優(yōu)點,它檢索迅速、查找方便、可靠性高、存儲量大、成本低,所以數(shù)據(jù)庫成為了圖書館管理最主要的選擇。1.2 數(shù)據(jù)庫設計內(nèi)容利用PowerBuilder開發(fā)一個基于SQL Anywhere數(shù)據(jù)庫的小型圖書管理系統(tǒng)。該圖書管理系統(tǒng)主要具有如下五個功能:圖書類型信息的查詢和編輯,圖書信息的查詢和編輯,用戶信息的查詢和編輯,借還書記錄的生成和查詢,指定用戶借還書記錄的查詢。其中前三個功能是必須實現(xiàn)的功能,后兩個功能為選做。此外,可根據(jù)思考題(見群共享中壓縮文件PB0520)中的要求優(yōu)化圖書管理系統(tǒng)的功能,也可自行對系統(tǒng)進行功能的優(yōu)化。1.3 概念設計概念設計是在需求分析上的,用概念數(shù)據(jù)模型來表示數(shù)據(jù)以及數(shù)據(jù)之間的相互聯(lián)系,從上述的分析中規(guī)劃處圖書館管理系統(tǒng)的實體有圖書信息實體、圖書類型實體、用戶實體、借書記錄實體。用戶表性別用戶編號用戶姓名 用戶實體E-R圖類型編號圖書編號圖書信息表出版社作者圖書名稱 圖書信息實體E-R圖圖書類型表類型名稱類型編號 圖書類型實體E-R圖借書記錄表記錄編號圖書編號 歸還日期用戶編號借出日期 借書記錄實體E-R圖1.4 邏輯設計 數(shù)據(jù)庫邏輯設計是整個設計的前半段,包括所需的實體和關系,實體規(guī)范化等工作,在圖書館管理系統(tǒng)的數(shù)據(jù)庫設計中,實體與實體之間通過關系得到了很好的連接,主要體現(xiàn)在一對一的關系、一對多的關系、多對多的關系。一個1:n聯(lián)系可以轉(zhuǎn)換為一個獨立的關系模式一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨立的關系模式一個n:n聯(lián)系可以轉(zhuǎn)換為一個獨立的關系模式1.5 窗體界面設計以及控件的添加 窗口設計和控件的添加是數(shù)據(jù)庫開發(fā)必不可少的步驟之一,在圖書館管理系統(tǒng)數(shù)據(jù)庫中也是如此,圖書館管理系統(tǒng)的窗口設計采用的是普通方式和繼承方式并存的方法。如下圖所示: 圖11 登錄窗口 圖1-2 查找窗口 圖1-3 記錄窗口 圖1-4 祖先窗口(數(shù)據(jù)顯示窗口)設置好祖先窗口后,就要進行四個子孫窗口的設置分別是:圖書類型窗口、圖書信息窗口、用戶信息窗口、記錄信息窗口。在完成窗口和控件的設置之后,我們就要對控件 create datawindow的 dataobject 屬性進行設置,使其與之相關的表格進行關聯(lián)。 圖1-5操作窗口 圖1-6 系統(tǒng)樹窗口1.6 表的設計以及表中數(shù)據(jù)的添加 在數(shù)據(jù)庫中表的設計以及表中數(shù)據(jù)的添加都是至關重要的,此次實訓設計中的表格以及數(shù)據(jù)如下圖所示: 圖1-7 圖書信息表 圖1-8 借書記錄表 圖1-9 圖書類型表 圖1-10 用戶信息表2 數(shù)據(jù)庫編程無論是采用哪種開發(fā)工具開發(fā)應用程序,編寫代碼是必不可少的。編寫代碼的過程也就是平常所說的編程,在 PowerBuilde 中采用的是Powerscript語言,它簡單易學,編寫程序的格式比較自由,用Powerscript語言編程能夠更好、更快捷、更方便的創(chuàng)建數(shù)據(jù)庫,更加準確的添加數(shù)據(jù)及其實現(xiàn)數(shù)據(jù)庫一系列的功能。2.1 數(shù)據(jù)庫鏈接代碼應用對象的open事件SQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm=ConnectString=DSN=mybook;UID=caowei;PWD=7077 connect using SQLCA;if SQLCA.SQLCode0 then messagebox(連接失敗,原因:+sqlca.sqlerrtext,stopsign!)halt closeend ifopen(dljm)2.2 操作界面編程(1)界面設置代碼如下:w_main的closequery事件string wtitle=if not cb_type.enabled then wtitle=圖書類型elseif not cb_book.enabled then wtitle=圖書信息elseif not cb_user.enabled then wtitle=用戶信息elseif not cb_log.enabled then wtitle=借書記錄elseif not cb_query.enabled then wtitle=記錄查詢end ifif wtitle thenmessagebox(系統(tǒng)提示, 請先關閉【+wtitle+】窗口!,exclamation!) return -1end if(2) 窗口關閉代碼如下:cb_close的clicked事件close(parent)2.3 數(shù)據(jù)顯示窗口編程(祖先窗口代碼編輯)(1) 數(shù)據(jù)讀取代碼如下所示:dw_base的open事件this.x=w_main.x+w_main.widththis.y=w_main.ythis.tag=this.title/保存窗口的標題dw_1.settransobject(SQLCA)/連接事務對象dw_1.retrieve()/讀取數(shù)據(jù)dw_1.object.datawindow.readonly=truedw_1.setrowfocusindicator(hand!)/設置行指示標記(2) 函數(shù)設置代碼如下:1) dw_base的closequery事件string msg=部分數(shù)據(jù)被改動!是否存盤?if this.titlethis.tag thenchoosecasemessagebox(提示,msg,question!,yesnocancel!,1)case 1cb_save.event clicked()case 2 return 0case 3return 1end chooseend if2) f_checkempty自定義函數(shù)string msgdw_1.setcolumn(col_name)/設置當前列if dw_1.gettext()= thenmsg=+col_title+值不能為空!請修改.messagebox(提示,msg,exclamation!)return -1else return 1end if3) f_resetitem自定義函數(shù)string org_valueinteger i,cols/i為計數(shù)變量,col存放列總數(shù)long currow/記錄當前行currow=dw_1.getrow()/獲得當前行的行號choose case dw_1.getitemstatus(currow,0,primary!) case new!,newmodified!/new表示新插入行,還沒設任何值 dw_1.deleterow(0)/直接刪除該行case datamodified!/如果數(shù)據(jù)被修改過則進行恢復cols=integer(dw_1.object.datawindow.column.count)for i=1 to cols/采用循環(huán)方式恢復所有數(shù)據(jù)列的值if dw_1.getitemstatus(currow,i,primary!)=datamodified! then org_value=dw_1.getitemstring(currow,i,primary!,true)dw_1.setitem(currow,i,org_value) end ifnextend choose4) f_setstatus自定義函數(shù)long currow /存放當前記錄行的行號f_setstart()dw_1.object.datawindow.readonly=viewmodecb_add.enabled=viewmodecb_del.enabled=viewmodecb_find.enabled=viewmodecb_reload.enabled=viewmodecb_close.enabled=viewmodeif viewmode then /若是瀏覽狀態(tài) cb_edit.text=編輯 cb_save.text=保存 dw_1.tag=/清除數(shù)據(jù)窗口控件保存的當前記錄行的行號else cb_edit.text=取消 cb_save.text=確定 /設置數(shù)據(jù)窗口控件的初始編輯狀態(tài) currow=dw_1.getrow()/獲得當前行的行號 dw_1.tag=string(currow) dw_1.scrolltorow(currow)/滾屏,確保當前行可見 dw_1.selectrow(currow,false)/去掉加亮 dw_1.setfocus()/將輸入焦點移到數(shù)據(jù)窗口控件中 dw_1.setcolumn(1)/將第一列設為當前列 dw_1.selecttext(1,len(dw_1.gettext()end iff_setend()(5)dw_1的losefocus事件:this.accepttext()/數(shù)據(jù)窗口控件失去輸入焦點時接收懸浮數(shù)據(jù)dw_1的itemfocuschanged事件long editrow /存放當前記錄行的行號if this.tag then /若為編輯狀態(tài),見f_setstatus函數(shù)editrow=long(this.tag)/獲得當前正在編輯的記錄行號if editrowrow then/判斷是否是當前行號this.setrow(editrow)/不是則修改當前行號this.scrolltorow(editrow)/讓當前行可顯示end ifend if2.4 窗口按鈕編程(1) cb_add(添加)按鈕:long newrownewrow=dw_1.insertrow(0)/插入新行到最后dw_1.setrow(newrow)/將新行設為當前行f_setstatus(false)調(diào)用f_setstatus函數(shù)將窗口設為編輯狀態(tài)(2) cb_del(刪除)按鈕:string msg=是否刪除當前記錄?請確定.dw_1.selectrow(dw_1.getrow(),true)/加亮顯示要刪除的行if messagebox(提示,msg,Question!,YesNo!,2)=1 thendw_1.deleterow(0)/刪除當前行elsedw_1.selectrow(dw_1.getrow(),false)/取消行的加亮顯示end if(3) cb_edit(編輯)按鈕:if this.text=編輯 thenf_setstatus(false)/若文本為“編輯”設為編輯狀態(tài)elsef_setstatus(true)/若文本為“取消”設為瀏覽狀態(tài)f_resetitem()/恢復原始數(shù)據(jù)值end if(4) cb_save(保存)按鈕:integer rtnif this.text=保存 thenrtn=dw_1.update()/更新操作if rtn=1 then/更新成功 COMMIT USING SQLCA;/提交語句else/更新失敗ROLLBACK USING SQLCA;/回滾語句end ifparent.title=parent.tag/讓窗口的title恢復為原始titleend if(5) cb_close(關閉)按鈕:close(parent)(6)cb_reload(重載)按鈕:dw_1.retrieve()2.5 圖書類型窗口編程(1) w_type窗口的close事件w_main.cb_type.enabled=true(2) cb_save的clicked事件if this.text=確定 then if f_checkempty(id,編號)=-1 then returnif f_checkempty(title,名稱)=-1 then returnf_setstatus(true)/退出編輯狀態(tài)parent.title=parent.tag+(*)/用戶進行了編輯且未保存,修end if(3) 主窗口cb_type按鈕的clicked事件:open(w_type)this.enabled=false其執(zhí)行結(jié)果如下圖2-1所示2.6 查找窗口編程(1) w_find窗口的編程:定義shared variables:dw_base pwin/注意祖先窗口名(2) w_find的open事件this.width=3000this.height=1200pwin=parentwindow()choose case pwin.classname()case w_typeddlb_1.additem(“編號*id”)ddlb_1.additem(“類型 *title)case w_userddlb_1.additem(“編號*id)ddlb_1.additem(姓名*name)case w_bookddlb_1.additem(編號*id)ddlb_1.additem(類型*typeid)ddlb_1.additem(書名*title)ddlb_1.additem(作者*author)ddlb_1.additem(出版社*company)case w_logddlb_1.additem(記錄編號*id)ddlb_1.additem(圖書編號*bookid)ddlb_1.additem(用戶編號*userid)ddlb_1.additem(借出日期*borrow)ddlb_1.additem(歸還日期*return)end chooseddlb_1.selectitem(1)ddlb_2.selectitem(1)ddlb_2.enabled=false/按記錄行查找時禁止選擇查找關系cb_next.tag=1/存放查找記錄的起始行cb_next.enabled=false/開始時不能操作“下一個”按鈕sle_1.tag=string(pwin.dw_1.rowcount()/存放總的記錄行數(shù)sle_1.text=sle_1.setfocus()(3) find的deactivate事件if this.width3000 thenthis.width=3000this.height=1200end if(4) find窗口中ddlb_1控件的selectionchanged事件:if index=1 then/若指定按記錄行查找ddlb_2.selectitem(1)/查找關系默認為“=”ddlb_2.enabled=false/禁止選擇查找關系cb_next.enabled=falseelse/按其他方式查找ddlb_2.enabled=trueend ifsle_1.setfocus()(5) w_find窗口中cb_find按鈕的clicked事件:string msg=,fstr=/fstr用于存放查詢條件文本串integer nbitlong frow /存放查找到的記錄行的行號pwin.dw_1.selectrow(0,false)/取消之前所有行的加亮顯示if sle_1.text= then msg=查詢目標不能為空!請輸入.messagebox(提示,msg,exclamation!)sle_1.setfocus()returnend ifnbit=pos(ddlb_1.text,* fstr=mid(ddlb_1.text,nbit+1) choose case fstrcase row if not isnumber(sle_1.text) or sle_1.text=0 or & long(sle_1.text)long(sle_1.tag) then msg=【記錄行】的范圍是1- + sle_1.tag+ !請修改.messagebox(提示,msg,exclamation!)sle_1.setfocus()returnend if frow=long(sle_1.text)pwin.dw_1.scrolltorow(frow)pwin.dw_1.selectrow(frow,true) parent.width=300parent.height=100cb_close.setfocus()/以便按enter鍵關閉w_find窗口return/不再執(zhí)行后續(xù)代碼case borrow,return/查找日期型數(shù)據(jù)fstr=string(+fstr+,yy-mm-dd)+ddlb_2.text+sle_1.text+ fstr+=+ddlb_2.text+sle_1.text+ end choose cb_find.tag=fstr/查詢條件保存到cb_find.tagcb_next.tag=1/設置查詢起始行cb_next.event clicked()(6) cb_find窗口中cb_next按鈕的clicked事件:string fstr,msglong srow,erow,frowfstr=cb_find.tag/獲得查詢條件srow=long(cb_next.tag) erow=long(sle_1.tag) frow=pwin.dw_1.find(fstr,srow,erow)if frow=0 thenmsg=沒找到滿足條件的記錄!請重新設置條件.messagebox(提示,msg,exclamation!)cb_find.tag=/清除存放在cb_find.tag中的查找條件即fstrcb_next.tag=1/設置查詢起始行cb_next.enabled=falsesle_1.setfocus()sle_1.selecttext(1,len(sle_1.text)else/如果找到pwin.dw_1.scrolltorow(frow)/滾屏pwin.dw_1.selectrow(frow,true)cb_next.tag=string(frow+1)cb_next.enabled=true parent.width=300parent.height=100cb_close.setfocus()end if(7) w_find窗口中cb_close的clicked事件close(parent)(8) 在dw_base的查找按鈕(cb_find)的clicked事件中編寫:open(w_find)其運行結(jié)果如下圖2-2所示2.7 用戶窗口編程(1) w_user窗口的close事件w_main.cb_user.enabled=true(2) 保存按鈕cb_save的clicked事件if this.text=確定 thenif f_checkempty(id,編號)=-1 then return if f_checkempty(name,姓名)=-1 then return f_setstatus(true)parent.title=parent.tag+(*)end if(3) 在w_main中關聯(lián)w_user,cb_user按鈕的clicked事件編程:open(w_user)this.enabled=false其運行結(jié)果如下圖2-3所示2.8 圖書信息窗口編程(1) w_book窗口的close事件w_main.cb_book.enabled=true(2) 保存按鈕cb_save的clicked事件:if this.text=確定 thenif f_checkempty(id,編號)=-1 then return if f_checkempty(title,書名)=-1 then return if f_checkempty(author,作者)=-1 then return if f_checkempty(company,出版社)=-1 then return f_setstatus(true)parent.title=parent.tag+(*)end if(3) 添加按鈕cb_add的clicked事件代碼long rowstring newidrow=dw_1.getrow() /得到新增行行號newid=string(row,00000)dw_1.setitem(row,id,newid)/直接設置列值,id為列名dw_1.setcolumn(2)(4) 在w_main中關聯(lián)w_book,為cb_book的clicked事件編程:open(w_book)this.enabled=false其運行結(jié)果如下圖2-4所示2.9 記錄信息窗口編程(1) w_log窗口的close事件w_main.cb_log.enabled=true(2) 保存按鈕cb_save的clicked事件代碼string fstr,msglong rowif this.text=確定 thenrow=dw_1.getrow()choose case dw_1.getitemstatus(row,0,primary!)case new!,newmodified!if f_checkempty(bookid,圖書編號)=-1 then return if f_checkempty(userid,用戶編號)=-1 then return dw_1.setcolumn(bookid)fstr=bookid=+dw_1.gettext()+and isnull(return)if dw_1.find(fstr,row - 1,1)0 thenmsg=編號為+dw_1.gettext() + 的圖書借出!請重選. messagebox(提示,msg,exclamation!)returnend ifcase el

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論