李松林,饒華英,向曉麗,陳義中
(武漢工程大學(xué)研究設(shè)計(jì)院,湖北 武漢 430074)
?
基于B/S模式的期刊郵寄標(biāo)簽管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
李松林,饒華英,向曉麗,陳義中
(武漢工程大學(xué)研究設(shè)計(jì)院,湖北 武漢430074)
采用asp.net技術(shù)、C#編程語(yǔ)言、Access數(shù)據(jù)庫(kù),基于B/S模式設(shè)計(jì)開發(fā)了適用于期刊編輯部的郵寄標(biāo)簽管理系統(tǒng),實(shí)現(xiàn)了郵寄標(biāo)簽的信息管理、數(shù)據(jù)分析與統(tǒng)計(jì)、自動(dòng)排序、批量裁剪等功能。
asp.net; B/S模式;期刊;郵寄標(biāo)簽;管理系統(tǒng)
隨著信息技術(shù)的發(fā)展,期刊編輯部的信息化、網(wǎng)絡(luò)化管理水平有了很大的進(jìn)步[1-2]。不少期刊編輯部都已經(jīng)采用了期刊在線采編系統(tǒng)、網(wǎng)絡(luò)協(xié)同辦公系統(tǒng)(OA)等,這類系統(tǒng)對(duì)于提高期刊編輯部的工作效率和規(guī)范化管理水平發(fā)揮了非常重要的作用[3-4]。
期刊的發(fā)刊工作是期刊編輯部工作內(nèi)容中非常重要的一環(huán),是與讀者、作者、編委等進(jìn)行交流、擴(kuò)大期刊影響力的重要手段。每期的期刊都需要郵寄給多個(gè)不同地址的用戶,具有數(shù)據(jù)量大、地址范圍廣、數(shù)據(jù)統(tǒng)計(jì)困難等特點(diǎn)。目前普遍采用的方式是將郵寄信息匯總打印,然后通過人工進(jìn)行統(tǒng)計(jì)、裁剪和粘貼。可能存在數(shù)據(jù)重復(fù)、格式錯(cuò)誤、統(tǒng)計(jì)錯(cuò)誤、裁剪效率低下等問題,而目前主流的網(wǎng)絡(luò)辦公系統(tǒng)都未集成郵寄標(biāo)簽管理的相關(guān)功能?;诖耍髡呤褂胊sp.net技術(shù),采用三層(表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層)架構(gòu)體系,基于B/S模式設(shè)計(jì)開發(fā)了適用于期刊編輯部的郵寄標(biāo)簽管理系統(tǒng)[5-9],實(shí)現(xiàn)了郵寄標(biāo)簽的信息管理、數(shù)據(jù)分析與統(tǒng)計(jì)、自動(dòng)排序、批量裁剪等功能,可大幅提升期刊編輯部郵寄標(biāo)簽的處理效率和信息化管理水平。
采用Access數(shù)據(jù)庫(kù),設(shè)計(jì)了郵寄標(biāo)簽分類表、郵寄標(biāo)簽信息表、打印任務(wù)表、日志信息表、用戶信息表,表間通過Id進(jìn)行關(guān)聯(lián)。其中,郵寄標(biāo)簽信息表和打印任務(wù)表的字段設(shè)計(jì)見表1、表2:
其中,“標(biāo)簽分類”字段與郵寄標(biāo)簽分類表進(jìn)行對(duì)應(yīng),用于對(duì)標(biāo)簽信息的分類(如作者、編委等)進(jìn)行區(qū)分;“郵寄總數(shù)”字段為該信息郵寄期刊的總份數(shù);“是否本地”字段用于區(qū)分信息所在地為本地或是外地;“郵編”、“地址”、“補(bǔ)充地址”、“單位”、“收件人”、“補(bǔ)充信息”等字段為郵寄標(biāo)簽的詳細(xì)信息;“備注”字段用于添加備注信息;“操作者Id”和“添加時(shí)間”字段用于記錄操作來源。
其中,“打印任務(wù)名稱”字段用于給當(dāng)前打印任務(wù)進(jìn)行命名;“打印標(biāo)簽Id列表”字段為需要打印的郵寄標(biāo)簽信息的Id序列,以半角逗號(hào)(,)分隔,其中的各個(gè)Id與郵寄標(biāo)簽信息表中的標(biāo)簽信息Id對(duì)應(yīng);“備注”字段用于添加備注信息;“本地1份統(tǒng)計(jì)”、“本地2份統(tǒng)計(jì)”、“本地3份統(tǒng)計(jì)”、“外地1份統(tǒng)計(jì)”、“外地2份統(tǒng)計(jì)”、“外地3份統(tǒng)計(jì)”分別統(tǒng)計(jì)打印的郵寄標(biāo)簽信息中的本地和外地郵寄期刊的份數(shù),在添加打印信息時(shí)由業(yè)務(wù)邏輯層進(jìn)行統(tǒng)計(jì)和記錄;“打印時(shí)間”字段記錄了該打印信息的實(shí)際打印時(shí)間;“操作者Id”和“添加時(shí)間”字段用于記錄操作來源。
表1 郵寄標(biāo)簽信息表
表2 打印任務(wù)表
采用C#編程語(yǔ)言和面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,以郵寄標(biāo)簽管理、打印任務(wù)管理、打印模板管理、系統(tǒng)日志管理和用戶管理為主要功能進(jìn)行期刊郵寄標(biāo)簽管理系統(tǒng)的開發(fā)。郵寄標(biāo)簽管理系統(tǒng)的業(yè)務(wù)流程如圖1所示。
圖1 業(yè)務(wù)流程圖
2.1郵寄標(biāo)簽管理
郵寄標(biāo)簽管理模塊所包含的功能有:標(biāo)簽信息的添加、修改和刪除;標(biāo)簽信息的列表分頁(yè)顯示;標(biāo)簽信息按分類或?qū)傩缘暮Y選;標(biāo)簽信息數(shù)據(jù)統(tǒng)計(jì);信息的綜合查詢或按字段查詢;標(biāo)簽信息的批量添加等。標(biāo)簽信息的管理界面如圖2所示:
圖2 標(biāo)簽信息管理界面
2.1.1標(biāo)簽信息的添加添加標(biāo)簽信息時(shí)系統(tǒng)自動(dòng)對(duì)比數(shù)據(jù)庫(kù)中的已有數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的查重和提醒,同時(shí)根據(jù)標(biāo)簽信息的郵編數(shù)據(jù)自動(dòng)判斷該記錄的本地或外地屬性,批量添加數(shù)據(jù)時(shí)自動(dòng)掃描區(qū)分信息并校正格式,自動(dòng)與數(shù)據(jù)庫(kù)中的字段進(jìn)行對(duì)應(yīng)后入庫(kù)。標(biāo)簽信息添加界面如圖3所示:
圖3 標(biāo)簽信息添加界面
2.1.2標(biāo)簽信息的查詢標(biāo)簽信息的查詢檢索采用模糊匹配的方式,由于本系統(tǒng)中各字段的內(nèi)容長(zhǎng)度有限,采用模糊匹配的查詢效率足以滿足實(shí)際要求。
2.2打印任務(wù)管理
打印任務(wù)管理為本系統(tǒng)的核心功能,包括打印任務(wù)的添加、修改(補(bǔ)充)、標(biāo)簽信息的的打印等功能,同時(shí)還實(shí)現(xiàn)了郵寄標(biāo)簽信息的組合篩選、分類排序、匯總統(tǒng)計(jì)等功能。打印任務(wù)管理界面如圖4所示:
圖4 打印任務(wù)管理界面
2.2.1打印任務(wù)的添加與修改系統(tǒng)默認(rèn)將自動(dòng)添加當(dāng)期的作者標(biāo)簽數(shù)據(jù)、指定數(shù)目的某分類的隨機(jī)標(biāo)簽數(shù)據(jù)及其它分類的全部標(biāo)簽數(shù)據(jù)來生成當(dāng)期的打印任務(wù)。此外,還支持通過按分類或編號(hào)添加標(biāo)簽數(shù)據(jù)、直接從數(shù)據(jù)庫(kù)中選擇并添加標(biāo)簽數(shù)據(jù)以及按編號(hào)排除不需要打印的標(biāo)簽數(shù)據(jù)的功能。標(biāo)簽數(shù)據(jù)添加完成后系統(tǒng)進(jìn)行實(shí)時(shí)的分類統(tǒng)計(jì)和匯總,并實(shí)時(shí)反饋統(tǒng)計(jì)結(jié)果。
可以通過打印信息添加功能繼續(xù)添加新的標(biāo)簽數(shù)據(jù);可以補(bǔ)充打印指定數(shù)目的某分類的隨機(jī)標(biāo)簽數(shù)據(jù);在打印任務(wù)管理頁(yè)面會(huì)顯示當(dāng)前打印標(biāo)簽信息的詳細(xì)列表,可以對(duì)標(biāo)簽信息進(jìn)行篩選和剔除。
2.2.2標(biāo)簽信息的打印本系統(tǒng)設(shè)計(jì)了3種標(biāo)簽信息的打印方式:打印當(dāng)前任務(wù)全部的標(biāo)簽信息、打印指定分類的標(biāo)簽信息和補(bǔ)充打印指定數(shù)目的某分類的標(biāo)簽信息。
標(biāo)簽打印版式設(shè)計(jì)為橫向排版,采用4×4的布局方式。實(shí)現(xiàn)了標(biāo)簽數(shù)據(jù)的分類排序(按“標(biāo)簽分類”、“郵寄份數(shù)”、“所在地”3級(jí)排序)、郵寄份數(shù)的自動(dòng)拆分和分類統(tǒng)計(jì)、打印信息的自動(dòng)分頁(yè)、裁剪參考線的自動(dòng)設(shè)置等功能。核心業(yè)務(wù)代碼如下:
private void drawPrintPanel( )
{
DataSet ds = bllEmailType.GetList(0, "", "Id asc");
foreach (DataRow row in ds.Tables[0].Rows)
{
FYMail.Model.PrintList info = new FYMail.Model.PrintList();
info.EmailTypeId = Convert.ToInt32(row["Id"]);
info.TypeName = row["TypeName"].ToString();
info.TemplateString = row["TemplateString"].ToString();
info.Items = new List
printlist.Add(info);
}
model = bll.GetModel(this.Id);
if (model != null)
{
DataSet dsEmailBase = bllEmail.GetList(0, "Id>0 and Id IN(" + model.EmailList.TrimStart(',') + "0)", "Id asc");
foreach (DataRow row in dsEmailBase.Tables[0].Rows)
{
foreach (FYMail.Model.PrintList listItem in printlist)
{
if (listItem.EmailTypeId == Convert.ToInt32(row["EmailType"]))
{
string tmpStr = listItem.TemplateString.Replace("$郵編$",
row["Postcode"].ToString()).Replace("$地址1$", row["Address"].ToString()).Replace("$地址2$", row["Address2"].ToString()).Replace("$單位$", row["Department"].ToString()).Replace("$收件人$", row["Consignee"].ToString()).Replace("$其它$", row["OtherInfo"].ToString());
CalPrintList(temStr,row);
……
pageCount = orderPrintStr.Count / 16 + (orderPrintStr.Count % 16 == 0 0 : 1);
string pageTemplateStr = "
prtStr = new StringBuilder();
string outputStr = "";
for (int i = 0; i < pageCount; i++)
{
outputStr = pageTemplateStr.Replace("$位置1$", setPrtString(i * 4)).Replace("$位置2$", setPrtString(i * 4 + 1)).Replace("$位置3$", setPrtString(i * 4 + 2)).Replace("$位置4$", setPrtString(i * 4 + 3))
.Replace("$位置5$", setPrtString((pageCount + i) * 4)).Replace("$位置6$", setPrtString((pageCount + i) * 4 + 1)).Replace("$位置7$", setPrtString((pageCount + i) * 4 + 2)).Replace("$位置8$", setPrtString((pageCount + i) * 4 + 3))
.Replace("$位置9$", setPrtString((pageCount * 2 + i) * 4)).Replace("$位置10$", setPrtString((pageCount * 2 + i) * 4 + 1)).Replace("$位置11$", setPrtString((pageCount * 2 + i) * 4 + 2)).Replace("$位置12$", setPrtString((pageCount * 2 + i) * 4 + 3))
.Replace("$位置13$", setPrtString((pageCount * 3 + i) * 4)).Replace("$位置14$", setPrtString((pageCount * 3 + i) * 4 + 1)).Replace("$位置15$", setPrtString((pageCount * 3 + i) * 4 + 2)).Replace("$位置16$", setPrtString((pageCount * 3 + i) * 4 + 3));
if (i % 5 != 0)
{
outputStr = outputStr.Replace("background:url(../../images/4_4.jpg) left top no-repeat;", "");
}
prtStr.Append(outputStr).Append(" ");
}
PrtText.Text = prtStr.ToString();
}
標(biāo)簽信息的打印預(yù)覽效果如圖5如示,打印出的標(biāo)簽信息已由系統(tǒng)自動(dòng)分類排序,使用裁紙機(jī)根據(jù)裁剪參考線進(jìn)行批量裁剪后即可發(fā)布。
圖5 打印預(yù)覽效果
2.3打印模板管理
系統(tǒng)可對(duì)每個(gè)分類的標(biāo)簽信息進(jìn)行打印樣式設(shè)定,通過打印模板進(jìn)行管理。其中某個(gè)分類的打印模板代碼如下:
$郵編$ $份數(shù)$
$地址1$
$地址2$
$單位$
$收件人$ $其它$
以上代碼中,以符號(hào)“$”包含的信息與數(shù)據(jù)庫(kù)中的相應(yīng)字段一一對(duì)應(yīng);“ ”為HTML語(yǔ)言中空格的轉(zhuǎn)義字符,實(shí)現(xiàn)打印空格的作用;嵌入的HTML標(biāo)簽(如span標(biāo)簽)可以進(jìn)行自定義的樣式設(shè)置。
2.4系統(tǒng)日志管理
系統(tǒng)日志用于記錄用戶的訪問和操作,記錄的字段包括:用戶Id、用戶名、來源IP、操作類型、操作時(shí)間等,用于監(jiān)控系統(tǒng)的運(yùn)行狀態(tài)。
2.5用戶管理
用戶管理模塊實(shí)現(xiàn)了用戶的登陸、注銷、密碼修改等功能。
為簡(jiǎn)化管理流程,本系統(tǒng)僅設(shè)計(jì)了2個(gè)層次的用戶級(jí)別:普通管理員和系統(tǒng)管理員。其中,普通管理員可以進(jìn)行郵寄標(biāo)簽信息的管理和打印信息的管理;系統(tǒng)管理員除了以上權(quán)限外,還可以進(jìn)行打印模板設(shè)置及日志信息查看等。
系統(tǒng)前端界面設(shè)計(jì)為左右分欄框架結(jié)構(gòu),左側(cè)為導(dǎo)航區(qū),右側(cè)為數(shù)據(jù)顯示與處理區(qū)。其中,左側(cè)導(dǎo)航區(qū)可隱藏。
前端頁(yè)面采用HTML編碼,通過與頁(yè)面分離的CSS樣式文件進(jìn)行格式設(shè)置,兼容主流的IE、Chrome、Firefox、Safari和Opera瀏覽器,同時(shí)采用基于jQuery框架的java腳本進(jìn)行前端數(shù)據(jù)驗(yàn)證及用戶交互。
前端主頁(yè)外觀如圖6所示:
圖6 管理系統(tǒng)主界面
為保障系統(tǒng)的信息安全,對(duì)敏感信息(如用戶密碼)采用了MD5不可逆加密處理;通過完善編碼防止SQL注入、密碼猜解、木馬上傳等惡意攻擊手段;通過系統(tǒng)日志記錄系統(tǒng)的運(yùn)行情況,監(jiān)測(cè)系統(tǒng)的運(yùn)行狀態(tài)。
另外,主要從以下幾個(gè)方面優(yōu)化系統(tǒng)的性能:對(duì)程序算法進(jìn)行優(yōu)化,避免使用高復(fù)雜度的算法;對(duì)需要頻繁使用的數(shù)據(jù)進(jìn)行緩存,提高反應(yīng)速度;減少對(duì)系統(tǒng)性能影響較大的操作次數(shù),避免對(duì)數(shù)據(jù)庫(kù)的反復(fù)多次讀取。
本系統(tǒng)采用Visual Studio 2008軟件進(jìn)行編譯和發(fā)布。部署時(shí)服務(wù)端使用支持Access數(shù)據(jù)庫(kù)的windows server 2003或以上版本操作系統(tǒng),運(yùn)行IIS 6.0或以上版本服務(wù)程序,安裝.net framework 3.5運(yùn)行環(huán)境;客戶端全部基于瀏覽器進(jìn)行操作,無(wú)需安裝任何其它軟件。
采用asp.net技術(shù)、C#編程語(yǔ)言、Access數(shù)據(jù)庫(kù),基于B/S結(jié)構(gòu)設(shè)計(jì)開發(fā)了適用于期刊編輯部的郵寄標(biāo)簽管理系統(tǒng),實(shí)現(xiàn)了郵寄標(biāo)簽的信息管理、數(shù)據(jù)分析與統(tǒng)計(jì)、自動(dòng)排序、批量裁剪等功能,有助于提升期刊編輯部郵寄標(biāo)簽的處理效率和信息化管理水平。
[1]張瑩瑩,胡大衛(wèi),段學(xué)儉,等.現(xiàn)代出版的編輯業(yè)務(wù)流程數(shù)字化再造[J].印刷雜志,2011,(4):21~25.
[2]林江嬌.信息化視野下科技期刊的網(wǎng)絡(luò)化發(fā)展初探[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2013,26(5):143~144.
[3]曾婷.期刊稿件采編系統(tǒng)的發(fā)展現(xiàn)狀及展望[J].江漢大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,40(4):101~104.
[4]魯立,聞浩,郭萍,等.基于在線采編系統(tǒng)的期刊管理實(shí)踐[J].編輯學(xué)報(bào),2015,27(1):55~57.
[5]肖晶.基于NET平臺(tái)的期刊在線采編管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2013.
[6]胡明玲.三層體系結(jié)構(gòu)模式期刊管理系統(tǒng)分析及實(shí)現(xiàn)[J].情報(bào)雜志,2004,23(8):70~71,74.
[7]管勝波,張敬泉.基于C/S和B/S模式的圖書管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī):下半月版,2008,(4):114~117.
[8]劉叢.基于B/S架構(gòu)的編輯部管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2013.
[9]張誠(chéng),馬躍,何先剛.期刊云架構(gòu)及創(chuàng)建策略研究[J].出版發(fā)行研究,2012,(10):9~12.
2016—05—24
李松林(1985—),男,湖北松滋人,碩士,工程師.
陳義中,工程師,E-mail:378111416@qq.com。
G232
A
1009-2714(2016)03-0120-07
湖北師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2016年3期