![]() |
|
#1
|
|||
|
|||
![]() Есть программа теста где вопросы берутся из бд Access. Но они идут по порядку, а как сделать что бы рандомно и без повторений?
Код:
procedure TForm4.Button1Click(Sender: TObject); var a: Integer; s: string; v: string; begin a:= -1; if(RadioButton1.Checked) then a:= 1 else if(RadioButton2.Checked) then a:= 2 else if(RadioButton3.Checked) then a:= 3; if(a < 0) then ShowMessage('Необходимо дать ответ!') else begin Inc(QCount); if((answers[a] = TrueAnswer[1]) or (answers[a] = TrueAnswer2[1])) then inc(TrueCount); ADOTable1.Next; if(ADOTable1.EOF) then begin s:= 'Тест завершен. Всего вопросов: '+InttoStr(QCount)+'. Правильных ответов: '+InttoStr(TrueCount)+', неправильных: '+IntToStr(QCount-TrueCount); ShowMessage(s); Button1.Enabled:= False; Edit1.Text:= ''; Edit2.Text:= ''; Edit3.Text:= ''; Edit4.Text:= ''; RadioButton1.Checked:= false; RadioButton2.Checked:= false; RadioButton3.Checked:= false; v:= 'Всего вопросов: '+InttoStr(QCount)+'. Правильных ответов: '+InttoStr(TrueCount)+', неправильных: '+IntToStr(QCount-TrueCount); With ADOTAble1 do begin Close; TableName:='result'; Open; Insert; FieldByName('ФИО').AsString:=NameStudent; FieldByName('Группа').AsString:=Group; FieldByName('Глава').AsString:=Nomer; FieldByName('Результат').AsString:=V; post; end; end else Quest; end; end; procedure TForm4.Button2Click(Sender: TObject); begin if (NameStudentEdit.Text='')or(GroupEdit.Text='')or(ComboBox1.Text='') then begin ShowMessage('Все поля должны быть заполнены!'); exit; end; if(ComboBox1.ItemIndex <> -1) then begin QCount:= 0; with ADOTable1 do begin Active:= false; TableName:= 'Глава '+ComboBox1.Text; Active:= True; First; TrueCount:= 0; end; Quest; Button1.Enabled:= True; NameStudent:=NameStudentEdit.Text; Group:=GroupEdit.Text; Nomer:=ComboBox1.Text; end; end; procedure TForm4.FormActivate(Sender: TObject); begin NameStudentEdit.SetFocus; end; procedure TForm4.Quest; begin with ADOTable1 do begin Edit1.Text:= FieldByName('Вопрос').AsString; Edit2.Text:= FieldByName('Ответ А').AsString; Edit3.Text:= FieldByName('Ответ Б').AsString; Edit4.Text:= FieldByName('Ответ С').AsString; TrueAnswer:= FieldByName('Правильный ответ').AsString; RadioButton1.Checked:= false; RadioButton2.Checked:= false; RadioButton3.Checked:= false; end; end; |
#2
|
||||
|
||||
![]() Заполняете TList номерами записей. Рандомно получаете индекс элемента из списка. Выводите вопрос по полученному номеру записи и удаляете из списка отработаный индекс.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |