当前页面: 开发资料首页 → JSP 专题 → 怎样在jsp中自动生成一个号码
怎样在jsp中自动生成一个号码
摘要: 怎样在jsp中自动生成一个号码
形如YYMMXXXX
YY:年份后两位(如06)
MM:月份(如11)
XXXX:系统自动生成的号码,从0001开始计数,每个月都从头计数。
小弟现在很急,请大家帮助。
不是很难,为什么要系统自动生成呢?
DateFormat df= new DateFormat("YYMM");
String yymm = df.format(new date());
double rad = Math.random() * 1000;
Format df2 = new Format("0000"); <-这步不对,功能是format数值.
String xxxx =df2.format(rad);
result = yymm + xxxx;
第4步用NumberFormat
难的是每个月都得从头计数。怎样来控制这个。
还有一个控制按钮,按一次触发一次,号码+1
这些号码保存吗?如果保存的话,每次生成时判断一下当月是否有了
我帮你写一个吧,不带缓冲功能。如果你允许跳号,那么可以做带缓冲的
import java.io.*;
import java.util.*;
import java.text.*;
public class NumberManager {
private NumberManager(){
}
private static SimpleDateFormat sdf=new SimpleDateFormat("yyMM");
private static DecimalFormat df = new DecimalFormat("0000");
private static String fileName="c://recorddate.dat";
private static String currentMonth;
private static int currentNumber;
private static BufferedReader reader=null;
static {
try{
reader=new BufferedReader(new FileReader(fileName));
String temp=reader.readLine();
reader.close();
if (temp.length()!=8){
currentNumber=0;
currentMonth="0001";
}else{
currentNumber=Integer.parseInt(temp.substring(4,8));
currentMonth=temp.substring(0,4);
}
}catch(Exception ex){
ex.printStackTrace();
currentNumber=0;
currentMonth="0001";
}
System.out.println("currentNumber="+currentNumber);
}
public static void writeToFile(){
try{
PrintWriter writer=new PrintWriter(new FileWriter(fileName));
writer.print(currentMonth);
writer.println(df.format(currentNumber));
writer.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
public synchronized static String getNumber(Date date){
if (date==null){
return null;
}
String ym=sdf.format(date);
if (!ym.equals(currentMonth)){
currentMonth=ym;
currentNumber=1;
}else{
currentNumber++;
}
writeToFile();
return ym+df.format(currentNumber);
}
}
保存在数据库里面,而且生成号码的时候应该递增,从0001开始到9999。
不管怎么做必须把当前序号保存在一个地方,否则系统是无法知道已经到那个号了
你可以保存在文件里也可以是数据库里
当然你也可以随机生成一个,但是容易重复
具体的,假设用一个文件的形式来记录的话,形式如下:
月份=记录数量
0604=600
0605=400
假设5月最后记录序号为400了,那么进入6月份(不管是哪一天进来的),当没发现有6月记录,则现生成一条记录,变成:
0604=600
0605=400
0606=1
之后,每生成一条,在当月记录基础上加1.
回过头来,就是,程序每次启动,到文件或数据库中取系统当前时间所在月份的"记录数量"值,如果没有取到,说明是当月第一笔记录,生成记录和记录值.如果取到,则在原基础上加1.
如此即可.
up