⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reg.pas

📁 局域网考试系统 局域网考试系统
💻 PAS
字号:
unit Reg;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets,WinSock, NMUDP, ScktComp, ComCtrls;

type
  TRegForm = class(TForm)
    GB1: TGroupBox;
    NameEdit: TEdit;
    L1: TLabel;
    NumEdit: TEdit;
    RegButton: TButton;
    CancelButton: TButton;
    RegStu: TNMUDP;
    QuesSock: TClientSocket;
    PaperStep: TProgressBar;
    procedure RegButtonClick(Sender: TObject);
    procedure CancelButtonClick(Sender: TObject);
    procedure RegStuDataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure FormCreate(Sender: TObject);
    procedure QuesSockRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    PaperSize:Integer;
    HadRec:Integer;
    RecFileStream:TFileStream;
  end;

var
  RegForm: TRegForm;
const
    RegistedOK='Registed ok!';
    RegistedNO='Registed no!';
    REGIDD='$$ZHAOLOVEWANG$$';

implementation

uses main;

var
     StuInf:TStudentInf;
{$R *.dfm}

procedure TRegForm.RegButtonClick(Sender: TObject);
var
     WSAData:TWSAData;
     HostName:array[0..36] of Char;
     HostEnt:PHostEnt;
begin
     WSAStartup($200,WSAData);
     gethostname(HostName,25);
     HostEnt:=gethostbyname(HostName);
     HostIP:=IntToStr(Ord((HostEnt^.h_addr^)^));
     HostIP:=HostIP+'.'+IntToStr(Ord((HostEnt^.h_addr^+1)^));
     HostIP:=HostIP+'.'+IntToStr(Ord((HostEnt^.h_addr^+2)^));
     HostIP:=HostIP+'.255';
     RegStu.RemoteHost :=HostIP;
     HostName:='Who is Teacher?';
     RegStu.SendBuffer(HostName,Length(HostName));
end;

procedure TRegForm.CancelButtonClick(Sender: TObject);
begin
     Application.Terminate;
end;

procedure TRegForm.RegStuDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
     Buffer:array[0..255] of Char;
     TimeLen:String;
     i:Integer;
begin
     RegStu.ReadBuffer(Buffer,NumberBytes);
     if Buffer='I am.' then
     begin
          MainForm.TeacherIP:=FromIP;
          StuInf.Name :=NameEdit.Text;
          StuInf.Num :=NumEdit.Text;
          StuInf.IDD :=REGIDD;
          CopyMemory(@Buffer,@StuInf,SizeOf(StuInf));
          RegStu.SendBuffer(Buffer,SizeOf(StuInf));
     end
     else
     begin
          if Copy(Buffer,1,Length(RegistedOK))=RegistedOK then
          begin
               PaperSize:=StrToInt(Copy(Buffer,NumberBytes-19,10));
               TimeLen:='';
               for i:=9 downto 1 do
               begin
                    if Buffer[NumberBytes-i]=Chr(0) then Break;
                    TimeLen:=TimeLen+Buffer[NumberBytes-i];
               end;
               MainForm.TimeCount:=StrToInt(TimeLen);
               PaperStep.Max :=PaperSize;
               QuesSock.Host :=FromIP;
               QuesSock.Open;
          end
          else if Copy(Buffer,1,Length(RegistedOK))=RegistedNO then
          begin
               ShowMessage('注册不成功!');
               Application.Terminate;
          end;

     end;
end;

procedure TRegForm.FormCreate(Sender: TObject);
begin
     HadRec:=0;
     RecFileStream:=TFileStream.Create(MainForm.PaperFileName,fmCreate);
end;

procedure TRegForm.QuesSockRead(Sender: TObject; Socket: TCustomWinSocket);
var
     Buffer:array[0..32767] of Byte;
     RecLen:Integer;
begin
     RecLen:=Socket.ReceiveBuf(Buffer,32767);
     HadRec:=HadRec+RecLen;
     if RecLen>0 then
     begin
          RecFileStream.Write(Buffer,RecLen);
          PaperStep.StepBy(RecLen);
     end;
     if HadRec=PaperSize then
     begin
          HadRec:=0;
          RecFileStream.Free;
          MainForm.Show;
          MainForm.InitQues;
          Close;
     end;
end;

procedure TRegForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     Action:=caFree;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -