开发进行时...

crazy coder

Avatar

如何通过C#实现单据号码的自动增加

这是cocosoft发在csdnblog上的一篇文章内容作一下引用,纯粹为学习之用...

下面,我给出一段代码。里面具有完整的注释。

using System;

namespace BaseLayer
{
///
/// 单据编号,产生自增编号,如:入参为"DJ000002",将返回"DJ000003"
///
public class SheetNumber
{
///
/// 单据编号,产生自增编号,如:入参为"DJ000002",将返回"DJ000003"
///
/// 原值
/// 下一值
public string NextNumber(string BaseNumber)
{
string NewNumber = "";//新值
int InNumber = 1;//进位
int PlaceValue;//位值
char[] No = BaseNumber.ToCharArray();

for(int i=BaseNumber.Length-1;i>=0;i--)
{
if(No[i]=='9' && InNumber==1)
{
InNumber=1;
NewNumber="0"+NewNumber;
}
else
if(InNumber==1 && No[i]>='0' && No[i]<'9')
{
PlaceValue=Int32.Parse(No[i].ToString());
PlaceValue=(InNumber+PlaceValue);
InNumber=0;
NewNumber=PlaceValue.ToString()+NewNumber;
}
else
{
InNumber=0;
NewNumber=No[i]+NewNumber;
}
}
if(BaseNumber==NewNumber)
NewNumber="0000000001";
return NewNumber;
}
}
}

OK。如果以后遇到要自己追加单据号码的话。这一段代码应该可能实现你的要求了吧?^_^


我想如果我在asp里,我会这样写:

Function Noplusplus(BaseNo)
Dim Count_0
Count_0="00000000"
Dim Count_fig
Count_fig=1'增量1
Dim NewNo
Dim MidNo
Midno=Cstr(clng(right(BaseNo,2))+Count_fig)'像DJ那样只有两位字符
NewNo=left(BaseNo,2) & left(Count_0,len(BaseNo)-2-len(MidNo)) & MidNo
Noplusplus=NewNo
End Function


上面是引用别人的代码
下面我的代码没有验证,想了就直接在这里写的,如果谁有兴趣或用得上时可参考一下,提出错误.谢谢

在sql和C#中都可用substring代替left和right,我想可以很轻松的移到sql和c#中,不知道比起cocosoft的代码有什么优势...

Function Noplusplus(BaseNo)
Dim Count_fig
Count_fig=1'增量1
Dim NewNo
Dim MidNo
Midno=Cstr(clng(right(BaseNo,2))+Count_fig)'像DJ那样只有两位字符
NewNo=left(BaseNo,2) & string(len(BaseNo)-2-len(MidNo),"0") & MidNo
Noplusplus=NewNo
End Function


改了一下...

评论已关闭