创建一个简单的多项选择测验程序或测试

时间:2013-05-07 18:32:05

标签: delphi

我正在尝试制作一个包含30个问题(15个多项选择)的简单测验程序,并将所有问题的顺序随机化。它还必须以百分比形式计算结果,并用正确的答案显示错误回答的问题。即使只是一个包含3或4个示例问题的样本也没问题。

我不希望同一个问题不止一次出现。有没有我可以下载的免费源代码,以便我学会如何很好地完成这项工作。我只是一个新手,我真的想学习并看到所使用的战术。

我设法做到这一点,它正在从文本文件中读取问题,但我想修改它以显示用户名和以前用户的分数,我希望对我的程序进行修改或者是否有任何人来源我将欣赏简单测验计划的代码。

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

var
namefile, tmp : string;
f: text;
l,i,j,c: integer;
cc: double;
mas: array [1..100] of integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
  reset(f);
  readln(f,l);
  for I := 1 to l do
  begin
    Form2.Label1.Caption := 'Вопрос № '+Inttostr(i+1);
     readln(f,tmp);
     Form2.Label2.Caption := tmp;
     readln(f,tmp);
     Form2.RadioButton1.Caption := tmp;
     readln(f,tmp);
     Form2.RadioButton2.Caption :=tmp;
     readln(f,tmp);
     Form2.RadioButton3.Caption :=tmp;
     readln(f,tmp);
     Form2.RadioButton4.Caption :=tmp;
     readln(f,j);

     Form2.ShowModal;

     if (Form2.RadioButton1.Checked) then
           if (j=1) then
              mas[i]:=1;
     if (Form2.RadioButton2.Checked) then
           if (j=2) then
              mas[i]:=1;
     if (Form2.RadioButton3.Checked) then
           if (j=3) then
              mas[i]:=1;
     if (Form2.RadioButton4.Checked) then
           if (j=4) then
              mas[i]:=1;
  end;
  c:=0;
  for I := 1 to l do
    if mas[i]=1 then
      c:=c+1;
  cc:=(c*100)/l;

  label3.Caption:= 'Правильных ответов '+FloatToStr(cc)+'%';

  for I := 0 to l-1 do
     stringgrid1.Cells[i,1]:=IntToStr(mas[i+1]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  namefile:='test.txt';
  AssignFile(f, namefile);
  reset(f);
  readln(f,l);
  stringgrid1.ColCount:=l;
  for I := 1 to l do
    mas[i]:=0;
  for I := 0 to l-1 do
     stringgrid1.Cells[i,0]:=IntToStr(i+1);
  for I := 0 to l-1 do
    stringgrid1.Cells[i,1]:=IntToStr(mas[i+1]);
end;

end.

1 个答案:

答案 0 :(得分:0)

部分回答:
如果你想维持用户分数,那么在这个级别上取得进展的最佳选择是制作第二个用于维护用户名和分数的文本文件。
将它们读入数组。在程序启动时询问用户名,运行测验,看看你是否已经认识他,更新阵列,将其写回。

您的下一步是学习数据库访问并将所有数据存储在数据库中而不是文本文件中。

现在应该给你足够的锻炼; - )

像Toon说的那样,请在这里提出具体问题:我想要这个,试过这个(这里是代码),这个失败了,怎么解决?

此外,一旦你有一个工作程序,你可能想把它放在https://codereview.stackexchange.com/上,要求改进。
StackOverflow不适合它。