我现在在搞一个有关考试报名系统的程序,
一个功能模块是实现按报名编号自动生成考室号、座位号、考号; 现在要把原来的报名次序打乱,考室按五行七座排),不知道用什么算法才能实现。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, ComCtrls, WinSkinStore,
      WinSkinData;type
      TForm1 = class(TForm)
        ADO: TADOQuery;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Button1: TButton;
        Button2: TButton;
        PROG: TProgressBar;
        SD: TSkinData;
        SkinStore1: TSkinStore;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    VAR X,Y:INTEGER;
    str:string;
    begin
      ado.Close;
      ADO.SQL.Clear;
      ADO.SQL.Add('UPDATE TEST SET 考号=0,考室号=0,座位号=0');
      ADO.ExecSQL;
      RANDOMIZE;
      DATASOURCE1.DataSet:=NIL;
      ADO.Close;
      ADO.SQL.Clear;
      ado.SQL.Add('select * from test');
      ADO.Open;
      Y:=ADO.RecordCount;
      X:=0;
      WHILE ADO.RecordCount>0 DO
      BEGIN
        X:=X+1;
        PROG.Position:=ROUND(X/Y*100);
        ADO.RecNo:=RANDOM(ADO.RecordCount)+1;
        ADO.Edit;
        ADO.FieldByName('考号').AsInteger:=x;
        ADO.Post;
        ADO.Close;
        ADO.SQL.Clear;
        ado.SQL.Add('select * from test where 考号=0');
        ADO.Open;
      END;
      ADO.Close;
      ADO.SQL.Clear;
      ado.SQL.Add('UPDATE TEST SET 考室号=round((考号-0.0001)/35+0.5),座位号=考号-round((考号-0.0001)/35-0.5)*35');
      ADO.ExecSQL;
      ADO.Close;
      ADO.SQL.Clear;
      ADO.SQL.Add('SELECT * FROM TEST ORDER BY 考号');
      DATASOURCE1.DataSet:=ADO;
      ADO.OPEN;
      SHOWMESSAGE('处理成功!');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      CLOSE;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    SD.SkinFile:='SKIN.SKN';
    SD.Active:=TRUE;
    end;end.