摘 要:随着计算机科学技术的发展,各类系统应用越来越广泛,用户在输入数据时,经常会有各种各样错误,若有好的校验方法,能够在一定程度上避免错误,本文以天津开发区职业技术学院在线考试系统需求为例,阐述了在学生登录系统需要输入出生日期完善数据时要解决的问题,并介绍了在开发过程中解决问题的思路和代码的实现过程.
关 键 词:日期校验;字符;算法
中图分类号:TP393.092
当今社会,学校考核学生的考试方式已经不仅仅局限于笔试,为实现考试方式的多元化,更好地分析学生的学习情况,把试题情况和学生基本信息相结合,更好地进行数据分析,我们在天津开发区职业技术学院在线考试系统中需要学生的基本信息,学生在初次登录时,要输入自己的信息,系统数据库里只有学号班级等学籍信息并没有,输入信息包括性别、年龄、家庭住址和出生日期等.由于输入时有的能够选择,例如性别,有的只能输入,例如出生日期,在输入时又难免会发生错误,而且在发生输入的学生还不知晓,这样就会造成数据不准确.这就要求我们在开发系统时必须找到一种校验方法,能够校验输入的数据,对输入不合法的数据进行提示,直到输入正确合法的数据为止.
1对出生日期校验方式描述
对于日期的格式有很多种,根据我们中国人传统的日期格式,可以是简单的8位数字,也可以中间有分隔符,分隔符有很多种,例如:“-”、“/”、“.”等,这需要在输入时有提示,例如:“日期格式1994-6-12”.
经过验证我们觉得使用分隔符格式比8位数字格式更好校验,截取字符串也比较方便.其实也考虑过用选择的方式,选择年、月、日,这样有两个问题,一是对选择日期正确与否不好判断,二是存入数据库时麻烦一些,因此我们采取的方式是让同学们输入日期,之后判断日期是否符合要求,若符输入的日期合要求就直接存入数据库.下面简单介绍一下采取的校验算法.
算法描述:(1)判断输入的字符串是否为空,若为空提示输入日期;(2)若不为空,则根据分隔符分别获取年、月、日;(3)判断年、月、日是否合法,若不合法返回0,否则返回1.
1)位数是否合法(年4位,月1位或2位,日1位或2位);2)月、日是否符合范围(月:1-12,日1-31);3)若平年,二月份不能出现29日;4)若是小月(二、四、六、九、十一月)不能出现31日;5)二月份不能出现30日.
2代码实现
下边的代码,使用的是JaScript语言,若chkdate函数返回0,说明输入日期不合法,若返回1,说明输入的日期合法.
functionchkdate(datestr)
{VarlthStr;
if(datestr!等于"")
lthStr等于datestr.length;
else
{alert("请正确输入日期!例1994-6-12");
return0;}
vartmpy等于"";vartmpm等于"";vartmpd等于"";
varstatus;//用于判断出现了几次“-”
status等于0;
for(i等于0;i {if(datestr.charAt(i)等于等于'-') {status++;} if(status>2) {return0;} 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等于newString(tmpy);month等于newString(tmpm);day等于newString(tmpd) if((tmpy.length!等于4)||(tmpm.length>2)||(tmpd.length>2)) {return0;} if(!((1<=month)&&(12>等于month)&&(31>等于day)&&(1<=day))) {return0;} if(!((year%4)等于等于0)&&(month等于等于2)&&(day等于等于29)) {return0;} if((month<=7)&&((month%2)==0)&&(day>等于31)) {return0;} if((month>等于8)&&((month%2)等于等于1)&&(day>等于31)) {return0;} if((month等于等于2)&&(day等于等于30)) {return0;} return1; } 3使用效果说明 本系统正式投入使用四年来,多次用于各个专业学生的考试,在使用过程中,同学们输入自己的相关信息,未发现出生日期不准确的问题.有以下几个方面需要说明:(1)本系统中在其它数据的输入过程中也有校验,只不过本文中没有介绍;(2)同学们在输入过程中,有的字符用全角或输入的分隔符是否准确有的不好判定,我们在存入数据库时有相应的处理;(3)本算法并未对出生的年份有限制,若都是学生,其实可以限定一个范围,这样能在一定范围内避免错误. 4结束语 学生输入数据发生错误是经常的事,他们在使用本系统考试时,有时并不关心自己的其他信息是否准确,而是更关心的是体统将给他们抽一套什么样的试题,能不能重新抽取,以及考试结束后能不能看成绩的等.这就要求我们在考试之前做更多的提醒,以及把系统做得更加完善. 好的算法能够节省程序的执行时间,简化很多过程,得到良好的效果,我们也一直在寻找有没有更好的算法,如何去完善我们的系统是这几年我们一直在做的事情.通过这个小的算法我们也能够知道我们的学生进一步思考,也能够进一步指导我们平时的教学,本文中提供的代码也可以用于其它关于日期的校验,在很多支持JaScript的程序中都可以使用.