关于汽车牌照号码的算法和设计问题(急!纹银200)(200分)

  • 主题发起人 主题发起人 bungee_jumping
  • 开始时间 开始时间
B

bungee_jumping

Unregistered / Unconfirmed
GUEST, unregistred user!
汽车牌照号码看起来像这样
京A-12345...京A-99999....京A-A0000...
京A-A0001...京A-A9999...京A-B0000..
京A-Z9999...京A-ZA000....京A-ZA001...
我打算让牌照号自动产生,怎么写算法?
注意:不是简单的36进制

 
0..9.a..z,自动产生什么意思,有范围,还是从头到尾
 

比如说:
假如现在的牌照号是:京A-A0000,则下一牌照号应为:A-A0001;
假如现在的牌照号是:京A-A9999,则下一牌照号应为:A-AB000;
......
每一位的取值范围是0至9至A至Z
 
还是不明白!
 
我用了两个小时写了下面的一段,没考虑汉字和下划线,你试试看可有用,献丑了

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
s1, s2: string;
i, len, carry: integer;

function IsNumber(alpha: char):boolean;
var
ti: integer;
begin
ti := ord(alpha) - ord('0');
if (ti >= 0) and (ti <=9) then
Result := True //是数字
else
Result := False
//不是数字
end;

function number(c: char):integer;
begin
result := ord(c) - ord('0');
end;

begin

s1 := trim(edit1.Text)
//edit1中是输入车牌号
s2 := s1;
len := length(s1);
carry := 1;
for i := len downto 1 do
begin
if IsNumber(s1) then //是数字
begin
if Number(s1)+ carry = 10 then
begin
s2 := '0';
carry := 1;
end
else
begin
s2 := chr( ord(s1) + carry )
break;
end;
end
else //是字母
begin
if s1='Z' then
begin
if (i=len) or (carry=1) then
begin
s2 := '0';
carry := 1;
end
else
begin
s2 := s1;
break;
end
end
else
begin
s2 := chr(ord(s1) + carry);
break;
end;
end;
end;

edit2.text := s2
//edit2 -- 输出车牌号

end;


end.
 
对了,还忘了开始时先把字符串转换成大写。给我点银子吧,我缺钱花了。
 
待我仔细看看,先谢过。
 
给我银子
 
接受答案了.
 
后退
顶部