摘 要:隨著計算機科學(xué)技術(shù)的發(fā)展,各類系統(tǒng)應(yīng)用越來越廣泛,用戶在輸入數(shù)據(jù)時,經(jīng)常會有各種各樣錯誤,若有好的校驗方法,能夠在一定程度上避免錯誤,本文以天津開發(fā)區(qū)職業(yè)技術(shù)學(xué)院在線考試系統(tǒng)需求為例,闡述了在學(xué)生登錄系統(tǒng)需要輸入出生日期完善數(shù)據(jù)時要解決的問題,并介紹了在開發(fā)過程中解決問題的思路和代碼的實現(xiàn)過程。
關(guān)鍵詞:日期校驗;字符;算法
中圖分類號:TP393.092
當今社會,學(xué)校考核學(xué)生的考試方式已經(jīng)不僅僅局限于筆試,為實現(xiàn)考試方式的多元化,更好地分析學(xué)生的學(xué)習(xí)情況,把試題情況和學(xué)生基本信息相結(jié)合,更好地進行數(shù)據(jù)分析,我們在天津開發(fā)區(qū)職業(yè)技術(shù)學(xué)院在線考試系統(tǒng)中需要學(xué)生的基本信息,學(xué)生在初次登錄時,要輸入自己的信息,系統(tǒng)數(shù)據(jù)庫里只有學(xué)號班級等學(xué)籍信息并沒有個人信息,輸入信息包括性別、年齡、家庭住址和出生日期等。由于輸入時有的能夠選擇,例如性別,有的只能輸入,例如出生日期,在輸入時又難免會發(fā)生錯誤,而且在發(fā)生輸入的學(xué)生還不知曉,這樣就會造成數(shù)據(jù)不準確。這就要求我們在開發(fā)系統(tǒng)時必須找到一種校驗方法,能夠校驗輸入的數(shù)據(jù),對輸入不合法的數(shù)據(jù)進行提示,直到輸入正確合法的數(shù)據(jù)為止。
1 對出生日期校驗方式描述
對于日期的格式有很多種,根據(jù)我們中國人傳統(tǒng)的日期格式,可以是簡單的8位數(shù)字,也可以中間有分隔符,分隔符有很多種,例如:“-”、“/”、“.”等,這需要在輸入時有提示,例如:“日期格式1994-6-12”。
經(jīng)過驗證我們覺得使用分隔符格式比8位數(shù)字格式更好校驗,截取字符串也比較方便。其實也考慮過用選擇的方式,選擇年、月、日,這樣有兩個問題,一是對選擇日期正確與否不好判斷,二是存入數(shù)據(jù)庫時麻煩一些,因此我們采取的方式是讓同學(xué)們輸入日期,之后判斷日期是否符合要求,若符輸入的日期合要求就直接存入數(shù)據(jù)庫。下面簡單介紹一下采取的校驗算法。
算法描述:(1)判斷輸入的字符串是否為空,若為空提示輸入日期;(2)若不為空,則根據(jù)分隔符分別獲取年、月、日;(3)判斷年、月、日是否合法,若不合法返回0,否則返回1。
1)位數(shù)是否合法(年4位,月1位或2位,日1位或2位);2)月、日是否符合范圍(月:1-12,日1-31);3)若平年,二月份不能出現(xiàn)29日;4)若是小月(二、四、六、九、十一月)不能出現(xiàn)31日;5)二月份不能出現(xiàn)30日。
2 代碼實現(xiàn)
下邊的代碼,使用的是JavaScript語言,若chkdate函數(shù)返回0,說明輸入日期不合法,若返回1,說明輸入的日期合法。
function chkdate(datestr)
{ Var lthStr;
if (datestr != \"\")
lthStr = datestr.length ;
else
{ alert(\"請正確輸入日期!例1994-6-12\");
return 0; }
var tmpy=\"\"; var tmpm=\"\"; var tmpd=\"\";
var status; //用于判斷出現(xiàn)了幾次“-”
status=0;
for (i=0;i { if (datestr.charAt(i)== '-') { status++; } if (status>2) { return 0; } if ((status= =0) (datestr.charAt(i)!='-')) { tmpy=tmpy+datestr.charAt(i) } if ((status==1) (datestr.charAt(i)!='-')) { tmpm=tmpm+datestr.charAt(i) } if ((status==2) (datestr.charAt(i)!='-')) { tmpd=tmpd+datestr.charAt(i) } } year=new String (tmpy); month=new String (tmpm); day=new String (tmpd) if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2)) { return 0; } if (?。ǎ?<=month) (12>=month) (31>=day) (1<=day)) ) { return 0; } if (?。ǎ▂ear % 4)= =0) (month= =2) (day= =29)) { return 0; } if ((month<=7) ((month % 2)==0) (day>=31)) { return 0; } if ((month>=8) ((month % 2)==1) (day>=31)) { return 0; } if ((month= =2) (day= =30)) { return 0; } return 1; } 3 使用效果說明 本系統(tǒng)正式投入使用四年來,多次用于各個專業(yè)學(xué)生的考試,在使用過程中,同學(xué)們輸入自己的相關(guān)信息,未發(fā)現(xiàn)出生日期不準確的問題。有以下幾個方面需要說明:(1)本系統(tǒng)中在其它數(shù)據(jù)的輸入過程中也有校驗,只不過本文中沒有介紹;(2)同學(xué)們在輸入過程中,有的字符用全角或輸入的分隔符是否準確有的不好判定,我們在存入數(shù)據(jù)庫時有相應(yīng)的處理;(3)本算法并未對出生的年份有限制,若都是學(xué)生,其實可以限定一個范圍,這樣能在一定范圍內(nèi)避免錯誤。 4 結(jié)束語 學(xué)生輸入數(shù)據(jù)發(fā)生錯誤是經(jīng)常的事,他們在使用本系統(tǒng)考試時,有時并不關(guān)心自己的其他信息是否準確,而是更關(guān)心的是體統(tǒng)將給他們抽一套什么樣的試題,能不能重新抽取,以及考試結(jié)束后能不能看成績的等。這就要求我們在考試之前做更多的提醒,以及把系統(tǒng)做得更加完善。 好的算法能夠節(jié)省程序的執(zhí)行時間,簡化很多過程,得到良好的效果,我們也一直在尋找有沒有更好的算法,如何去完善我們的系統(tǒng)是這幾年我們一直在做的事情。通過這個小的算法我們也能夠知道我們的學(xué)生進一步思考,也能夠進一步指導(dǎo)我們平時的教學(xué),本文中提供的代碼也可以用于其它關(guān)于日期的校驗,在很多支持JavaScript的程序中都可以使用。 參考文獻: [1]張躍平,耿祥義.JSP程序設(shè)計[M].北京:清華大學(xué)出版社,2009. [2]馬建紅,李占波.JSP應(yīng)用與開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2011. [3]李平.基于JSP的動態(tài)網(wǎng)頁開發(fā)技術(shù)[J].微計算機信息,2009(21). 作者單位:天津開發(fā)區(qū)職業(yè)技術(shù)學(xué)院,天津 300457