站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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


↑返回目录
前一篇: WEBWORK下拉框问题~~~急~~在线等`~~~高手进
后一篇: 如何用Hibernate来实现MSSQL的备份与还原