管理员信息表等都建立索引,合理使用缓冲区。
5.3.2 如何验证输入的字符串
在图书管理系统的开发过程中,需要对一些输入的字符串进行验证,例如金额、电话号码、E-mail等,由于许多模块都需要用到这些验证,因此可以将其写入到一个公共JS脚本中然后在其他的页面中直接调用即可。JS中对字符串进行验证时,十分的方便快捷,减少服务器与客户端交互的过程,在客户端轻松的解决,要使用正则表达式验证输入的字符串,如验证输入的字符串是否为E-mail的地址格式的实现方法。代码如下:
验证输入为Email
if(formname.email.value!=formname.email.value.match(/^\\w +[.][\\w.] +$/))
{
alert(\您的电子邮件格式错误!\ formname.email.focus(); return false; }
5.3.3 自动计算图书归还日期
在图书管理系统运行中会常常遇到这样的问题:在借阅图书时,需要自动计算图书的归还日期,而这个日期又不是固定不变的,它是需要根据系统日期和数据表中保存的各类图书的最多借阅天数来计算的,即图书归还日期=“系统日期”+“最多借阅天数”。因此本系统是这样解决问题的:首先获取系统时间,然后从数据表中查询出该类图书最多借阅天数,最后计算归还日期。计算方法如下:
首先取出所借图书的最多借阅天数,然后根据图书的最多借阅天数,使用getMaxDay()方法返回一个int值,最后使用当前时间与先返回的Timespan时间间隔相加。
自动计算图书归还日期的关键代码如下: //获得当前日期
SimpleDateFormat time=new SimpleDateFormat(\); Calendar c = Calendar.getInstance(); //获得最多借阅天数
int days = getMaxDay();
27
+[@]\\w
//增加图书借阅天数
c.add(Calendar.DAY_OF_MONTH, days); //获得图书归还日期
String borrowandbackmanage = time.format(c.getTime());
5.3.4 系统登陆验证码的实现
在学校图书管理系统的开发过程中,怎么样防止某些人利用某些恶意的软件对图书管理系统进行恶意的登陆来攻击系统,增加图书管理系统的安全性是一个重要的问题。在图书管理系统的登陆模块中加入一个验证码的功能,即用户除了要输入帐号和密码还要输入系统为用户提供的验证码。验证码可以很好的解决了怎样防止恶意用户利用恶意软件对系统页面的疯狂提交、以及暴力破解密码进行登陆的问题。因此,设置一个随机函数在数字0~9和英文字母A~Z中随机抽取四个,在用户打开登陆界面的时候,系统通过随机生成器随机生成4个数字或字母或数字加字母存放在缓存内,并出现在界面上顺序是随机的,当用户登陆时输入的验证码要与缓存中的进行对比符合就进入,不符合就不能登陆。系统在提供验证码时候要加入一些干扰的条件的,不过这些人的肉眼是很容易分辨,但机器人程序不能分辨,很好的防止某人利用机器人程序对系统的恶意操作增加了系统的安全性。验证码实现的关键代码如下:
Image.jsp页面
<%@ page contentType=\%> <%@page
import=\%> <%
response.setDateHeader(\,-1000); //response.setContentType(\ response.setHeader(\,\);
response.setHeader(\,\); response.setDateHeader(\,0);
VerifyImage vb=VerifyImage.creatInstance();
ImageIO.write(vb.image,\,response.getOutputStream()); session.setAttribute(VerifyImage.VerifyNo,vb.sRand);
28
response.flushBuffer(); out.clear();
out = pageContext.pushBody();
%>
//VerifyImage 验证码类文件 import java.awt.Color; import java.awt.Font;
import java.awt.Graphics; import java.awt.Image;
import java.awt.image.BufferedImage; import java.util.Random; /** * @author To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments */
public class VerifyImage{ public String sRand=\;
public BufferedImage image=null; public String getSRand(){ return sRand; }
public BufferedImage getImage(){ return image; }
private VerifyImage(){ }
public static final String VerifyNo=\; public static VerifyImage creatInstance(){ VerifyImage vi=new VerifyImage();
// 在内存中创建图象
int width=40,height=17; vi.image=new
BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g=vi.image.getGraphics(); // 生成随机类
29
Random random=new Random(); // 设定背景色
g.setColor(getRandColor(200,250)); g.fillRect(0,0,width,height); // 设定字体
g.setFont(new Font(\,Font.PLAIN,12)); // 画边框
// g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for(int i=0;i<155;i++){
int x=random.nextInt(width); int y=random.nextInt(height); int xl=random.nextInt(12); int yl=random.nextInt(12); g.drawLine(x,y,x+xl,y+yl); }
// 取随机产生的认证码(4位数字)
for(int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10)); vi.sRand=vi.sRand+\+rand;
// 将认证码显示到图象中
g.setColor(new
Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,9*i+3,14); }
// 图象生效
g.dispose();
// com.et.util.Log.write(\ return vi; }
30
private static Color getRandColor(int fc,int bc){// 给定范
围获得随机颜色
Random random=new Random(); if(fc>255) fc=255; if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); }
}
31