黃文碧(湖北大學圖書館,湖北武漢430062)
?
基于ASP.NET開發(fā)圖書館報紙記到系統(tǒng)*
黃文碧
(湖北大學圖書館,湖北武漢430062)
[摘要]針對國內(nèi)圖書館對報紙管理的需要,利用ASP.NET技術和SQL后臺數(shù)據(jù)庫開發(fā)一個簡單、實用、高效的圖書館報紙記到系統(tǒng)。從需求分析、結構設計、數(shù)據(jù)庫設計、頁面設計以及模塊功能的實現(xiàn)等多方面介紹了系統(tǒng)。
[關鍵詞]圖書館報紙記到系統(tǒng)ASP.NET
[分類號]G255.3
*本文系國家自然科學基金青年基金項目“跨學科研究對科研生產(chǎn)力演化的作用機制——基于高??鐚W科組織的分析”(71403104);教育部人文社會科學研究青年基金項目“跨學科研究與科研生產(chǎn)力:基于高校跨學科組織的分析”(14YJCZH005);浙江省自然科學基金青年基金項目“高校跨學科組織科研生產(chǎn)力演化機理研究”(LQ13G30016)成果。
報紙是一種內(nèi)容豐富、傳播速度快、反映動態(tài)信息的紙質(zhì)媒體,具有知識性、時效性、新聞性等特點[1]。長久以來,報紙一直都是圖書館文獻資源的重要組成部分。各圖書館在其訂閱上少則幾十種,多則上百種、上千種。每天面對大量的到館報紙記到工作,圖書管理員基本采用的是卡片手工記到、Excel電子表格等辦公軟件記到;甚至很多圖書館并無記到管理,直接上架陳列。這種處理方式往往造成館員工作量大、報紙陳列分散、零亂、無規(guī)律,后期裝訂和回溯工作操作困難,報紙缺失等現(xiàn)象。
筆者通過調(diào)查發(fā)現(xiàn),當前大多數(shù)圖書管理系統(tǒng)都側重于對圖書和期刊的管理,而并沒有報紙管理模塊。比如國內(nèi)主流的兩大圖書管理系統(tǒng):ILAS系統(tǒng)、匯文系統(tǒng)皆沒有針對報紙管理的模塊,圖書館員只能另想辦法來開展報紙的記到工作。因此開發(fā)出一個簡便、實用的報紙記到系統(tǒng)是非常必要的。它不僅能讓圖書管理員從繁瑣的工作中解脫出來,也能保證報紙到館的完整性、有序性,并對后期的下架、裝訂、回溯、查詢等工作提供有效的支持。
筆者選擇ASP.NET技術來開發(fā)B/S模式的圖書館報紙記到系統(tǒng)軟件,開發(fā)環(huán)境應用的是Vistual Studio 2005,通過IIS來進行網(wǎng)頁的發(fā)布,客戶可通過瀏覽器來對系統(tǒng)進行管理操作,以實現(xiàn)報紙記到、催缺、查詢、統(tǒng)計等多項功能。
2.1 ASP.NET技術介紹
ASP.NET作為Microsoft Visual.NET的重要組成部分之一,是Intranet和Internet開發(fā)Web應用程序的新一代開發(fā)工具。ASP.NET是建立在公共語言運行庫上的編程框架,可用于服務器上生成功能強大的Web程序,它與早期ASP版本相比擁有更多的優(yōu)勢[2]。
第一,性能更加強大。ASP.NET是在服務器上運行的編譯好的公共語言代碼,與過去不同的是,它可以利用早期綁定、實時編譯、緩存服務和本機優(yōu)化來提高其性能。第二,世界級的工具支持。ASP.NET框架下集成了開發(fā)環(huán)境中的大量工具箱和設計器供開發(fā)人員選用。第三,更簡潔、易用。ASP.NET使執(zhí)行窗口請求提交、客戶端身份驗證等常見任務變得更加容易。第四,可管理性。ASP.NET采用的是基于文本的分層系統(tǒng),由于其配置信息是以純文本形式存儲的,因此可在沒有本地管理工具的幫助下,只需通過復制必要文件到服務器即可應用新設置。第五,可擴展性強。ASP.NET是一個設計完整的機構,開發(fā)人員可以在適當?shù)牡胤讲迦氪a,也可使用自己編譯的自定義組件來進行擴展新組件和新功能。最后,安全性強。借助其內(nèi)置的Windows身份驗證以及基于每個應用程序的配置,從而達到保證應用程序安全的目的。
2.2系統(tǒng)需求分析
圖書館報紙記到系統(tǒng)其核心功能為報紙記到管理,并以此為中心衍生出相關的輔助功能,如報紙催缺、報紙查詢、報紙信息管理、工作量統(tǒng)計等。報紙記到是對每天到館的報紙進行記到操作,將其名稱、卷期、訂購號、價格等信息分別錄入信息系統(tǒng)中;報紙催缺是對于時間已到期而尚未到館的報紙,系統(tǒng)能自動輸出目錄,提示管理員該報紙缺失,并顯示報紙的詳細信息,方便與報紙供應方及時聯(lián)系,進行補缺,從而達到保持館藏報紙連續(xù)性和完整性的目的;報紙信息管理,實現(xiàn)管理員對已錄入信息系統(tǒng)中的報紙信息進行管理性操作,如錯誤更改、信息添加、信息刪除等,以便于保證報紙信息的正確性和有序性;工作量統(tǒng)計,圖書館管理員可通過此功能查詢到自己一段時間內(nèi)報紙記到工作量的統(tǒng)計數(shù)據(jù)。
2.3系統(tǒng)功能模塊結構分析
根據(jù)系統(tǒng)需求分析,可清楚確定5個功能模塊:記到模塊、催缺模塊、應到數(shù)據(jù)管理模塊、報紙信息系統(tǒng)管理模塊、工作量統(tǒng)計模塊。同時為保證系統(tǒng)的安全性,需設置管理員模塊,實現(xiàn)用戶登錄系統(tǒng)時的身份驗證,以防止其他人的誤操作。本系統(tǒng)在設計之初主要針對圖書館管理員單一用戶,暫未考慮其他權限用戶操作,在今后實際操作中如需進行新的權限劃分,可增添其他用戶模塊。
3.1數(shù)據(jù)庫技術介紹
報紙記到系統(tǒng)采用的是Microsoft SQL Server 2005。該數(shù)據(jù)庫技術十分全面,最為突出的特點有3個:商務智能(BI)、可編程性和安全性。在商務智能方面,集成數(shù)據(jù)分析、整合和報表功能,提供更好的決策支持;提供一種新的數(shù)據(jù)模型,用于簡化異源數(shù)據(jù)間的連通性問題;提供對XML/A的集成支持;提供更成熟的數(shù)據(jù)挖掘工具。在可編程性方面,SQL Server 2005能更好地實現(xiàn)與.NET的集成,它將CLR直接植入數(shù)據(jù)庫引擎,使開發(fā)人員能夠用VB、C+等多種語言直接編程,從而達到與.NET程序框架的緊密協(xié)作。在安全性方面,它默認的安全配置、固有的數(shù)據(jù)加密以及強制口令策略等功能,能有效地保證程序更可靠地運行[3]。
3.2數(shù)據(jù)庫表設計
本報紙記到系統(tǒng)數(shù)據(jù)庫名為ems,它含有newspaper、weekmod、record、duerecord、users、newsboy6個基礎數(shù)據(jù)庫表格。
①newspaper為報紙基本信息表。其作用是記錄報紙的名字、訂購號、價格、登記信息等。如表1所示。
表1 newspaper
表2 weekmod
表3 duerecord
ASP.NET結構是通常意義上的三層架構(3-tier architec?ture):表現(xiàn)層(UI)、業(yè)務邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。區(qū)分層次的目的即為了實現(xiàn)“高內(nèi)聚,低耦合”的思想?;诖嗽?,本系統(tǒng)在體系結構設計上也采用三層結構,這樣做的目的主要是使項目結構層數(shù)更清楚、可視度高、分工更明確,有利于周期系統(tǒng)維護與后期功能拓展和系統(tǒng)升級。這三層結構分別為:頁面表示層(USL)、業(yè)務邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。
①頁面表示層(USL):負責與用戶交互,接受用戶輸入和呈現(xiàn)服務器端傳來的數(shù)據(jù)給用戶。
②業(yè)務邏輯層(BLL):接收客戶端請求并將請求傳送給數(shù)據(jù)訪問層,然后將處理結果傳回客戶端。
③數(shù)據(jù)訪問層(DAL):該層功能為直接操作數(shù)據(jù)庫,針對數(shù)據(jù)的增添、刪除、修改、查找等。
5.1數(shù)據(jù)訪問層的實現(xiàn)
系統(tǒng)的數(shù)據(jù)庫配置信息寫在vitual studio工具自動生成的主配置文件web.config中。web.config文件是一個XML文本文件,它用來儲存ASP.NETWeb應用程序的配置信息(如最常用的設置ASP.NETWeb應用程序的身份驗證方式),它可以出現(xiàn)在應用程序的每一個目錄中[4]。示例代碼如下所示:
其中server指定服務器的名稱,database屬性指定數(shù)據(jù)庫的名稱。而uid和pwd分別指定鏈接數(shù)據(jù)庫時使用的用戶名和密碼。
系統(tǒng)的類文件都放在vitual studio默認的App_Code文件夾中,每一個類文件都實現(xiàn)了調(diào)用相應存儲過程實現(xiàn)相應數(shù)據(jù)庫表的操作,比如weekmod.cs實現(xiàn)了對表weekmod的增刪等操作。類文件GenericDataAccess.cs創(chuàng)建統(tǒng)一的數(shù)據(jù)庫操作接口。
指定數(shù)據(jù)庫鏈接信息后,GenericDataAccess.cs通過使用DbProviderFactories.GetFactory來創(chuàng)建一個DbCommand實例,示例代碼如下:
public static DbCommand createcommand()
{ string providename = ConfigurationManager.Con? nectionStrings["newspaper"].ProviderName;
string connectstring = ConfigurationManager. ConnectionStrings["newspaper"].ConnectionString;
//從上文的newspaper字符串中獲取數(shù)據(jù)庫配置信息
DbProviderFactory factory = DbProviderFactories. GetFactory(providename);
DbConnection conn=factory.CreateConnection();conn.ConnectionString=connectstring;
DbCommand comm=conn.CreateCommand();
comm.CommandType=CommandType.StoredProce?dure;
return comm;}
如果weekmod.cs需要實現(xiàn)一個數(shù)據(jù)庫插入操作,則可調(diào)用上面的函數(shù),從而實現(xiàn)代碼的復用。
通過在數(shù)據(jù)庫中建立存儲過程就可以實現(xiàn)數(shù)據(jù)的插入操作,示例代碼如下:
Create PROCEDURE [dbo].[insertweekmod]
@monday1 int,@tuesday1 int,@wednesday1 int,@thurs?day1 int,@friday1 int,@daturday1 int,@sunday1 int,@start?date1 datetime,@id1 nvarchar(16)
AS SET NOCOUNT ON;
select*from weekmod where id=@id1 and startdate= @startdate1
if @@rowcount>0 begin return -1 end else INSERT INTO [weekmod]([monday],[tuesday],[wednesday],
[thursday],[friday],[daturday],[sunday],[startdate],[id])VALUES(@monday1,@tuesday1,@wednesday1,@thursday1,@friday1,@daturday1,@sunday1,@startdate1,@id1)return@@error
系統(tǒng)的數(shù)據(jù)操作是通過以上流程來實現(xiàn)的,即首先通過web.config中的connectionStrings來定義數(shù)據(jù)庫的連接字符串,然后GenericDataAccess.cs中的函數(shù)creatcommand來創(chuàng)建一個統(tǒng)一的dbcommand實例,如果要實現(xiàn)對數(shù)據(jù)庫中表單的操作,只需要具體化dbcommand實例就可以了。這種寫法使得每個類文件分工明確,使用起來非常方便,并加快了開發(fā)速度。同時,對數(shù)據(jù)庫的操作也采用了存儲過程,簡化了操作過程。因此筆者認為這是一個比較優(yōu)化的方案。其他的存儲過程可以參照上面的做法。
5.2報紙記到功能
5.2.1記到功能模塊頁面設計(newrecord.aspx)
①報紙記到功能是本系統(tǒng)的重要功能,也是用的最多的功能。所以用戶界面必須方便、簡潔、友好。該頁面由兩個輸入框和一個提交按鈕組成。
②管理員操作流程如下:輸入郵發(fā)代號——〉確認檢索天數(shù)(系統(tǒng)為默認14天)——〉點擊提交。提交郵發(fā)代碼和檢索天數(shù)后,系統(tǒng)會自動計算所檢索天數(shù)(從當天開始算起以前相應天數(shù),含當天)內(nèi)該報紙應記到的報紙(按照到報周期表,這些報紙應該到),并自動生成列表,點擊生成列表項中前面的按鈕,系統(tǒng)對該日期的報紙記到,即在record表中新增了一條數(shù)據(jù)。更新newrecord.aspx頁面,方便查看記到結果和進行下一步操作。如圖1所示。
圖1 記到頁面
③在頁面中也要對輸入框進行事件處理,實現(xiàn)鼠標點擊輸入框時,自動清除以前的數(shù)據(jù)項。對“enter”鍵事件進行處理,實現(xiàn)按“enter”鍵時,能進行提交操作。從而使界面的操作更為方便和人性化。
5.2.2記到功能模塊業(yè)務邏輯流程(newrecord.aspx.cs)
①業(yè)務邏輯層函數(shù)獲取頁面?zhèn)鬟f過來的郵發(fā)代號(id)后,通過數(shù)據(jù)庫層查詢表“newspaper”來獲取該郵發(fā)代號的情況:A:查無此刊,返回錯誤信息;B:查有此刊物,轉(zhuǎn)到②。
②業(yè)務邏輯層函數(shù)結合參數(shù)“檢索天數(shù)”,用循環(huán)函數(shù)從當前日期開始對該報紙每天的記到情況進行判斷。循環(huán)函數(shù)如下:
for(int i=1;i 一般有下列情況: A:當前所查詢報紙已經(jīng)記到,即表record中已經(jīng)存在所查日期記錄,則將當前查詢?nèi)掌趶漠斕焱魄跋鄳鞌?shù),示例代碼如下: dt=DateTime.Now.AddDays(-i)//i如上文為前推天數(shù) B:當前所查詢報紙未記到,即表示數(shù)據(jù)庫表record中不存在所查日期記錄,則需要查詢當前所查日期是否為應到數(shù)據(jù)。 要查詢當前日期是否是應到數(shù)據(jù),需要對數(shù)據(jù)庫表weekmod進行操作,比如當前所查日期通過運算。例如星期二,如果在查詢weekmod中,表項Tuesday的數(shù)值為0,則為應到數(shù)據(jù);為1則是非應到數(shù)據(jù)。因為對于同一個郵發(fā)代號,在表weekmod中,可能有多項數(shù)據(jù)與之對應。同時系統(tǒng)在通過查詢表weekmod來確定被查詢?nèi)掌趯瞧趲?,是否為應到報紙時,必須先找到距離當前查詢?nèi)掌谧罱牡谝粋€,且字段startdate值要小于當前查詢?nèi)掌跀?shù)據(jù)項。然后通過查詢表weekmod來確定被查詢?nèi)掌诘膶瞧谑欠駷閼綀蠹垺?/p> 如果返回結果表明該日期不在應到周期內(nèi),則將上文for循環(huán)中的參數(shù)i加1,進入下個循環(huán);如果在應到周期內(nèi),則自動生成一個單選項,并顯示到頁面上。 以上為頁面邏輯設計,下一步需要實現(xiàn)記到功能,即單擊生成的單選項,觸發(fā)按鈕事件,實現(xiàn)記到,到此整個記到模塊完成。需要說明的是,每記到一次,頁面都需要重新刷新,以生成新的狀態(tài)。 5.3應到數(shù)據(jù)管理模塊 5.3.1應到數(shù)據(jù)管理模塊功能實現(xiàn) 應到數(shù)據(jù)管理模塊是管理按照到報周期每一年應該到的刊物的相關數(shù)據(jù)。這些數(shù)據(jù)由表duerecord來存儲,它是實現(xiàn)報紙催缺功能的基礎。比如《人民日報》按照到報周期是每天,那么duerecord這個表中應該詳細存儲其每天的到館信息。本系統(tǒng)中這些信息都是通過自動生成代碼來生成的。 5.3.2應到數(shù)據(jù)管理模塊頁面設計 這個模塊包含3個頁面,分別為編輯應到報紙信息(du?erecord.aspx),單個生成應到報紙數(shù)據(jù)(singlegeneriteduere?cord.aspx),批量生成應到報紙數(shù)據(jù)(batchgener iteduerecord. aspx)。編輯應到報紙信息功能只是簡單的對表duerecord的管理,實現(xiàn)更新和刪除操作。單個生成應到報紙是實現(xiàn)某份報紙某年的應到數(shù)據(jù),一般用在當報紙周期變更時,需要單個生成。批量生成應到數(shù)據(jù)某年份所有報紙的應到數(shù)據(jù),一般在開學年初時生成該數(shù)據(jù)。 ①單個生成報紙數(shù)據(jù)功能的頁面實現(xiàn)(singlegeneritedu?erecord.aspx) 這里需要兩個文本控件和一個提交按鈕共同完成提交操作。這兩個控件分別為:輸入郵發(fā)代號文本控件、輸入年份文本控件。 ②單個生成報紙數(shù)據(jù)功能的功能實現(xiàn)(singlegeneriteduere?cord.aspx.cs) 詳細流程如下: 第一步:通過年份信息,得出該年份最大日期為該年的12月31日,最小日期為該年的1月1日。 第二步:取當前日期為該年12月31日,計算其星期值,如上文代碼,然后通過查詢表weekmod來確定被查詢?nèi)掌诘膶瞧谑欠駷閼綀蠹垼ㄈ缟衔拇a)。如果返回結果表明該日期不在應到周期內(nèi),則將當前日期減1天,即12月30號,進入下個循環(huán);如果在應到周期內(nèi),則向表duerecord中插入相應信息。該過程的實現(xiàn)代碼與上文大同小異,這里不再給出示例。 ③批量生成應到報紙數(shù)據(jù)的頁面實現(xiàn)(batchgeneritedu?erecord.aspx) 這個頁面只需要一個輸入框來獲取年份信息,一個da?tagrid控件來顯示生成的數(shù)據(jù)項,需要自定義一個項來實現(xiàn)功能按鈕的功能。 ④批量生成應到報紙數(shù)據(jù)的功能實現(xiàn)(batchgeneritedu?erecord.aspx.cs) 詳細流程如下: 第一步:查詢表newspaper中沒有生成應到報紙數(shù)據(jù)的項,并將數(shù)據(jù)綁定到頁面上的datagrid控件中。 第二步:單擊圖5中的“生成”按鈕,生成單個的報紙記到數(shù)據(jù)。生成單個報紙記到數(shù)據(jù)的實現(xiàn)方法與前面相同。 5.4催缺模塊 5.4.1催缺模塊頁面設計(stat.aspx) 催缺模塊實現(xiàn)的功能為導出兩個時間點內(nèi)未到的刊物。所以頁面由兩個calendar控件和一個提交按鈕組成。calendar控件的作用是顯示一個日歷,用戶可通過該日歷導航到任意一年的任意一天。 5.4.2催缺模塊功能實現(xiàn)(stat.aspx.cs) 基本原理:對比時間一與時間二在表duerecord中存在,但在表record中不存在的數(shù)據(jù)項,然后顯示在頁面上。 基本設計過程為:用一個datatable實例來存儲返回來的數(shù)據(jù),再將databale中的數(shù)據(jù)項存儲在excel文件中實現(xiàn)自動生成文件功能。由于需要催缺的報紙數(shù)據(jù)一般不多,也可以將產(chǎn)生的數(shù)據(jù)項直接顯示在頁面上,進而呈現(xiàn)在管理員面前,使用起來也很簡潔、方便。 5.5報紙信息管理模塊 這個模塊實現(xiàn)的功能是對newspaper、record、duerecord等表的增刪改操作。因為這些操作具有普適性,所以這里不再闡述。值得注意是,ASP.NET的datagrid控件支持自動實現(xiàn)更新和刪除操作,能減少開發(fā)的難度和時間,充分體現(xiàn)ASP.NET在其系統(tǒng)開發(fā)的強大控件功能。由于datagrid控件功效優(yōu)越,本系統(tǒng)也采用了這種方法。 5.6統(tǒng)計查詢模塊 工作量統(tǒng)計模塊實現(xiàn)了查詢某個管理員在某段時間內(nèi)記到的報紙數(shù)。所以頁面由一個輸入框(輸入工作人員ID)、兩個calendar控件(選擇一個時間段)和提交按鈕組成?;驹頌椴樵儽韗ecord中在兩個時間點內(nèi)某個工作人員記到的數(shù)據(jù)項的數(shù)目,其實現(xiàn)過程與前面有類似性,開發(fā)中可查考上述方法和代碼。 5.7系統(tǒng)的初始化和管理 第一次使用報紙記到系統(tǒng),需要初始化報紙信息、報紙周期表等信息后系統(tǒng)才能使用。因為報紙出版商有時要調(diào)整出報周期,比如原來是星期二出刊,現(xiàn)在改成星期四(即到報周期改變),為了應對變化,要采取相應操作,即報紙周期每一次改變時,必須新增報紙周期而不能采用更改操作。然后重新生成該報紙的duerecord數(shù)據(jù),表duerecord應該在每年初始統(tǒng)一生成。對于中途休刊的報紙,要在刪除表duere?cord的相應數(shù)據(jù),以適應變化。對增刊,即號外的報紙,需要單獨新增一條record數(shù)據(jù)來與之對應。 本系統(tǒng)通過試用和不斷地調(diào)試,現(xiàn)已投入使用。其簡潔、實用的功能使報紙記到工作簡單化,將圖書館管理員從繁雜的手工處理中解放出來,得到了相關人員的認可。同時報紙記到系統(tǒng)也實現(xiàn)了報紙信息的規(guī)范化、有序化管理,并對每年下架、裝訂、回溯等工作提供了有效的支持,對圖書館發(fā)展來說具有很強的現(xiàn)實意義。隨著圖書館工作的發(fā)展和進一步細化,報紙記到工作也會隨之發(fā)生變化,對產(chǎn)生的新的功能需求,本系統(tǒng)預留了很大的設計空間,以便于在今后實踐中不斷改進和完善。 參考文獻: [1]王浩,謝昕,郭靜.論圖書館的報紙管理與功能拓展[J].中國報業(yè),2012(7下):227-228. [2]求是科技.ASP.NET數(shù)據(jù)庫管理系統(tǒng)開發(fā)實例導航[M].北京:人民郵電出版社,2005:1-5. [3] Solid Quality Learning,王為.SQL Server 2005從入門到精通[M].北京:清華大學出版社,2006:1-3. [4] web.config.百度百科[OL].[2014-06-24].http://baike.baidu. com/view/1365881.htm?fr=aladdin. 黃文碧男,1980年生。雙學士,館員,文獻建設部副主任。研究方向:信息管理。 收稿日期:(2014-10-15;責編:楊新寬。)6 結語