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

📄 main.~pas

📁 局域网考试系统 局域网考试系统
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, Menus, ComCtrls, StdCtrls, ExtCtrls, DB, Grids, DBGrids,
  ADODB, ToolWin, DBCtrls,Jpeg,Zlib,Buttons,Clipbrd, Spin, ScktComp,
  Sockets, NMUDP, Gauges, CheckLst, Tabs, XPMenu;

const
  CREATESUBSQL:String='CREATE TABLE %S(索引 COUNTER,学科分支名称 TEXT(50),学科分支表名 TEXT(20),备注 TEXT(50))';
  //用于创建学科分支SQL语句
  CREATESUBITEMSQL:String='CREATE TABLE %S(索引 COUNTER,章节名称 TEXT(50),章节表名 TEXT(20),备注 TEXT(50))';
   //用于创建章节分支SQL语句
  CREATESUBSECTIONSQL:String='CREATE TABLE %S(索引 COUNTER,题目 LONGBINARY,主观答案 LONGBINARY,客观答案 TEXT(50),选中标志 YESNO,备注 TEXT(50))';
  //用于创建考题表的SQL语句

type

  TStudentInf=record
                IDD:String[16];
                Name:String[20];
                Num:String[20];
                end; //自定义的学生信息数据类型
  TNodeType=(NT_BOOT,NT_SUB,NT_SUBITEM,NT_SUBSECTION,NT_SECTIONITEM);
  TSelRateItem=record
               TableName:String[64];
               CheckRate:Integer;
  end;
  TMyNode=record
               NodeType:TNodeType;
               FiledNameInParent:String[20];
               TableName:String[64];
               CheckRate:Integer;
  end;
  TPMyNode=^TMyNode;
  TPSelRateItem=^TSelRateItem;
  TPStudentInf=^TStudentInf;
  TMainForm = class(TForm)
    BigImageList: TImageList;
    DS1: TDataSource;
    SubTreeQuery: TADOQuery;
    ADOCom: TADOCommand;
    UseQuery: TADOQuery;
    ImageList2: TImageList;
    LowImageList: TImageList;
    PC1: TPageControl;
    TabSheet1: TTabSheet;
    P1: TPanel;
    SubTree: TTreeView;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    Splitter1: TSplitter;
    StatusBar: TStatusBar;
    Splitter2: TSplitter;
    DBG1: TDBGrid;
    PC3: TPageControl;
    TS3: TTabSheet;
    SBox1: TScrollBox;
    FieldImage: TImage;
    RateSheet: TTabSheet;
    SelQuery: TADOQuery;
    NodeTable: TADOTable;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    AnswerPanel: TPanel;
    AddKGButton: TSpeedButton;
    TreePopMenu: TPopupMenu;
    AddSubMenu: TMenuItem;
    RenameSubMenu: TMenuItem;
    N1: TMenuItem;
    DelSubMenu: TMenuItem;
    MainMenu1: TMainMenu;
    S1: TMenuItem;
    quit1: TMenuItem;
    TS2: TTabSheet;
    SBox2: TScrollBox;
    AnsImage: TImage;
    Splitter3: TSplitter;
    RateLabel: TLabel;
    RateTB: TTrackBar;
    SB1: TSpeedButton;
    PaperQuery: TADOQuery;
    SectionPanel: TPanel;
    AddButton: TSpeedButton;
    DelButton: TSpeedButton;
    AddZGButton: TSpeedButton;
    EditButton: TSpeedButton;
    QuesSock: TServerSocket;
    RegStu: TNMUDP;
    ImageList1: TImageList;
    SelRateShow: TGauge;
    About1: TMenuItem;
    N2: TMenuItem;
    AnsUdp: TNMUDP;
    Splitter4: TSplitter;
    SavePopMenu: TPopupMenu;
    S2: TMenuItem;
    TabSheet2: TTabSheet;
    StuTable: TADOTable;
    DS2: TDataSource;
    DepQuery: TADOQuery;
    ClassQuery: TADOQuery;
    DBGrid1: TDBGrid;
    TabSheet3: TTabSheet;
    OkButton: TSpeedButton;
    GR1: TGroupBox;
    StuCountEdit: TSpinEdit;
    Panel2: TPanel;
    LeftTopL: TLabel;
    RightBottomL: TLabel;
    PB1: TProgressBar;
    Splitter5: TSplitter;
    Panel3: TPanel;
    ClassCheckList: TCheckListBox;
    DepTab: TTabSet;
    AddToButton: TSpeedButton;
    PageControl1: TPageControl;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    StudentList: TListBox;
    ST1: TStaticText;
    DelFromButton: TSpeedButton;
    ClassList: TCheckListBox;
    CheckQuery: TADOQuery;
    GB2: TGroupBox;
    NameL: TLabel;
    NumL: TLabel;
    DepL: TLabel;
    ClassL: TLabel;
    NameEdit: TEdit;
    NumEdit: TEdit;
    AddStuBtn: TBitBtn;
    DelStuBtn: TBitBtn;
    ClassEdit: TComboBox;
    DepEdit: TComboBox;
    FindStuBtn: TBitBtn;
    FindTab: TTabSet;
    FindEdit: TEdit;
    Image1: TImage;
    OkTimeBtn: TSpeedButton;
    ST3: TStaticText;
    SaveTimer: TTimer;
    StaticText1: TStaticText;
    SaveTimeEdit: TSpinEdit;
    TimeEdit: TSpinEdit;
    SpeedButton1: TSpeedButton;
    RenameQuery: TADOQuery;
    PageControl2: TPageControl;
    TabSheet6: TTabSheet;
    TabSheet7: TTabSheet;
    ScoreMemo: TMemo;
    StuSaysMemo: TMemo;
    XPMenu1: TXPMenu;
    xpcheck: TCheckBox;
    procedure SubTreeChange(Sender: TObject; Node: TTreeNode);
    procedure AddSubMenuClick(Sender: TObject);
    procedure DelSubMenuClick(Sender: TObject);
    procedure RenameSubMenuClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SubTreeDeletion(Sender: TObject; Node: TTreeNode);
    procedure SubTreeClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure DBG1CellClick(Column: TColumn);
    procedure AddButtonClick(Sender: TObject);
    procedure SBox1MouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    procedure FieldImageClick(Sender: TObject);
    procedure DelButtonClick(Sender: TObject);
    procedure RateTBChange(Sender: TObject);
    procedure SB1Click(Sender: TObject);
    procedure AddZGButtonClick(Sender: TObject);
    procedure AddKGButtonClick(Sender: TObject);
    procedure EditButtonClick(Sender: TObject);
    procedure quit1Click(Sender: TObject);
    procedure OkButtonClick(Sender: TObject);
    procedure RegStuDataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure QuesSockClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure About1Click(Sender: TObject);
    procedure AnsUdpDataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure DepTabChange(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
    procedure AddToButtonClick(Sender: TObject);
    procedure DelFromButtonClick(Sender: TObject);
    procedure NameEditKeyPress(Sender: TObject; var Key: Char);
    procedure NumEditKeyPress(Sender: TObject; var Key: Char);
    procedure DepEditKeyPress(Sender: TObject; var Key: Char);
    procedure ClassEditKeyPress(Sender: TObject; var Key: Char);
    procedure AddStuBtnClick(Sender: TObject);
    procedure DelStuBtnClick(Sender: TObject);
    procedure FindTabChange(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
    procedure FindStuBtnClick(Sender: TObject);
    procedure OkTimeBtnClick(Sender: TObject);
    procedure S2Click(Sender: TObject);
    procedure SaveTimerTimer(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure xpcheckClick(Sender: TObject);
  private
    { Private declarations }
    Bitmap:TBitmap;
    procedure CreateSub(TreeNode:TTreeNode;SubName,SubTableName,FieldNameInParent:String);
    procedure CreateSubItem(TreeNode:TTreeNode;SubItemName,SubItemTableName,FieldNameInParent:String);
    procedure CreateSubSection(TreeNode:TTreeNode;SubSectionName,SubSectionTableName,FieldNameInParent:String);

  public
    { Public declarations }
    SelRateList:TList;
    SelectedOld:TTreeNode;
    DeleteTableList:TStringList;
    FieldStream,DecStream:TMemoryStream;
    RegistedOK:array[0..63] of Char;
    RegistedNO:array[0..63] of Char;
    APPPATH:String;
    PaperFileStream:array[1..100] of TFileStream;
    SelectPaperNum:Integer;
    PerStep:Integer;
    function CheckStuInfo(PStuInf:TPStudentInf):Boolean;
    procedure AddToClassList;
    procedure DelFromClassList;
    procedure InitProgressBar(TEXT:String);
    procedure RefreshDepList;
    procedure RefreshClassList(DepName:String);
    procedure SaveScore(FromIP,ScoreStr:String);
    procedure ImageSaveToBlobField(Image:TImage;BlobField:TBlobField);
    procedure ImageLoadFromBlobField(Image:TImage;BlobField:TBlobField);
    procedure ShowNode(TreeNode:TTreeNode);
    procedure SetTreeMenu(Index:Integer);
    procedure DelTreeNode(TreeNode:TTreeNode);
    procedure AddTreeNode(TreeNode:TTreeNode);
    procedure RenameTreeNode(TreeNode:TTreeNode);
    procedure CreateSubTree;
    procedure WriteBlobField(Field:TBlobField;Stream:TStream);
    procedure ReadBlobField(Field:TBlobField;Stream:TStream);
    procedure CompressStream(SourceStream,DeskStream:TStream);
    procedure DeCompressStream(SourceStream,DeskStream:TStream);
    procedure SetSectionButton(Show:Boolean);
    procedure SelectATestPaper(Num:Integer);
    procedure InitConnection;

  end;

var
  MainForm: TMainForm;

const
     RegOK='Registed ok!';
     RegNO='Registed no!';
     REGIDD='$$ZHAOLOVEWANG$$';

implementation

uses DataForm, About;

{$R *.dfm}

procedure TMainForm.DelTreeNode(TreeNode: TTreeNode);
var
     i:Integer;
     FieldName:String;
begin
     if MessageBox(Handle,PChar('你真的要删除'+TreeNode.Text),'警告',MB_ICONWARNING or MB_YESNO)= IDYES then
     begin
     DeleteTableList.Clear;
     with UseQuery do
     begin
          Close;
          SQL.Clear;
          SQL.Add('SELECT * FROM '+TPMyNode(TreeNode.Parent.Data)^.TableName);
          ExecSQL;
          Open;
          FieldName:=UseQuery.Fields[2].FieldName;
          Close;
     end;
     ADOCom.CommandText:=Format('DELETE * FROM %s WHERE %S=''%S''',[TPMyNode(TreeNode.Parent.Data)^.TableName,FieldName,TPMyNode(TreeNode.Data)^.TableName]);
     ADOCom.Execute;
     TreeNode.Delete;
     for i:=0 to DeleteTableList.Count-1 do
     begin
          ADOCom.CommandText:='DROP TABLE '+DeleteTableList[i];
          ADOCom.Execute;
     end;
     SubTree.Refresh;
     end;
end;

procedure TMainForm.SetTreeMenu(Index: Integer);
begin
     case Index of
          0:
          begin
                AddSubMenu.Caption:='增加学科分支(&A)';
                AddSubMenu.Visible:=True;
                DelSubMenu.Visible:=False;
                RenameSubMenu.Visible :=False;
          end;
          2:
          begin
                AddSubMenu.Caption:='增加'+SubTree.Selected.Text+'分支(&A)';
                RenameSubMenu.Caption :='为'+SubTree.Selected.Text+'重命名(&R)';
                AddSubMenu.Visible:=True;
                DelSubMenu.Caption:='删除本'+SubTree.Selected.Parent.Text+'分支(&D)';
                DelSubMenu.Visible:=True;
                RenameSubMenu.Visible :=True;
          end;
          4:
          begin
                AddSubMenu.Caption:='增加'+SubTree.Selected.Text+'章节(&A)';
                RenameSubMenu.Caption :='为'+SubTree.Selected.Text+'重命名(&R)';
                DelSubMenu.Caption:='删除本'+SubTree.Selected.Parent.Text+'分支(&D)';
                AddSubMenu.Visible:=True;
                DelSubMenu.Visible:=True;
                RenameSubMenu.Visible :=True;
          end;
          6:
          begin
                AddSubMenu.Visible:=False;
                RenameSubMenu.Caption :='为'+SubTree.Selected.Text+'重命名(&R)';
                DelSubMenu.Caption:='删除本'+SubTree.Selected.Parent.Text+'分支(&D)';
                DelSubMenu.Visible:=True;
                RenameSubMenu.Visible :=True;
          end;
     end;
end;

procedure TMainForm.SubTreeChange(Sender: TObject; Node: TTreeNode);
begin
     SetTreeMenu(Node.ImageIndex);
end;

procedure TMainForm.AddTreeNode(TreeNode: TTreeNode);
var
     NodeText:String;
     Node:TTreeNode;
     PNode:TPMyNode;
     Rco:Integer;
begin
     NodeText:=Trim(InputBox('为'+TreeNode.Text+'命名','名称为:',''));
     if NodeText<>'' then
     begin
          Node:=SubTree.Items.AddChild(TreeNode,NodeText);
          Node.ImageIndex :=TreeNode.ImageIndex+2;
          Node.SelectedIndex :=TreeNode.SelectedIndex +2;
          GetMem(PNode,SizeOf(TMyNode));
          NodeTable.Close;
          NodeTable.TableName :=TPMyNode(TreeNode.Data)^.TableName;
          NodeTable.Open;
          NodeTable.Last;
          Rco:=NodeTable.Fields[0].AsInteger+1;
               case TreeNode.SelectedIndex of
                    1:
                    begin
                         NodeTable.Append;
                         NodeTable.Fields[1].AsString:=NodeText;
                         NodeTable.Fields[2].AsString:='sub'+IntToStr(Rco);
                         PNode^.NodeType:=NT_SUB;
                         PNode^.TableName :=NodeTable.Fields[2].AsString;
                         ADOCom.CommandText:=Format(CREATESUBSQL,[PNode^.TableName]);
                    end;
                    3:
                    begin
                         NodeTable.Append;
                         NodeTable.Fields[1].AsString:=NodeText;
                         NodeTable.Fields[2].AsString:=TPMyNode(TreeNode.Data)^.TableName+'sub'+IntToStr(Rco);
                         PNode^.NodeType:=NT_SUBITEM;
                         PNode^.TableName :=NodeTable.Fields[2].AsString;
                         ADOCom.CommandText:=Format(CREATESUBITEMSQL,[PNode^.TableName]);
                    end;
                    5:
                    begin
                         NodeTable.Append;
                         NodeTable.Fields[1].AsString:=NodeText;
                         NodeTable.Fields[2].AsString:=TPMyNode(TreeNode.Data)^.TableName+'sub'+IntToStr(Rco);
                         PNode^.NodeType:=NT_SUBITEM;
                         PNode^.TableName :=NodeTable.Fields[2].AsString;
                         ADOCom.CommandText:=Format(CREATESUBSECTIONSQL,[PNode^.TableName]);
                    end;
               end;
          NodeTable.Post;
          ADOCom.Execute;
          Node.Data:=PNode;
     end;


end;

procedure TMainForm.AddSubMenuClick(Sender: TObject);
begin
     AddTreeNode(SubTree.Selected);
end;

procedure TMainForm.DelSubMenuClick(Sender: TObject);
begin
     DelTreeNode(SubTree.Selected);
end;

procedure TMainForm.RenameTreeNode(TreeNode: TTreeNode);
var
     OldName:String;
     RenameSQL:String;
begin
     OldName:=TreeNode.Text;
     SubTree.Selected.Text:=Trim(InputBox('为'+TreeNode.Text+'命名','名称为:',TreeNode.Text));
     RenameSQL:='UPDATE '+TPMyNode(TreeNode.Parent.Data)^.TableName+' SET '+TPMyNode(TreeNode.Data)^.FiledNameInParent+
          '="'+SubTree.Selected.Text+'" WHERE '+TPMyNode(TreeNode.Data)^.FiledNameInParent+'="' +OldName+'"';
     with RenameQuery do
     begin
          Close;
          SQL.Clear;
          SQL.Add(RenameSQL);
          ExecSQL;
     end;
end;

procedure TMainForm.RenameSubMenuClick(Sender: TObject);
begin
     RenameTreeNode(SubTree.Selected);
end;

procedure TMainForm.CreateSubTree;
var
     Node:TTreeNode;
     PNode:TPMyNode;
begin
//     if SubTree.Items.GetFirstNode <>nil then SubTree.Items.GetFirstNode.Delete;
     Node:=SubTree.Items.Add(nil,'学科');
     Node.ImageIndex :=0;
     Node.SelectedIndex:=1;
     GetMem(PNode,SizeOf(TMyNode));
     PNode^.NodeType:=NT_BOOT;
     PNode^.TableName :='学科信息';
     PNode^.CheckRate :=0;
     Node.Data:=PNode;
     with DMForm do
     begin

⌨️ 快捷键说明

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