logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Delphi] Jak dodać podliczanie punktów w teście w Delphi?

meloniasty 14 Gru 2010 19:59 1195 4
REKLAMA
  • #1 8868748
    meloniasty
    Poziom 2  
    Posty: 3
    Otóż zrobiłem sobie program wzorując się na innych podobnych test w delphi i mam taki drobny problem bo nie za bardzo wiem jak dodać do niego podliczanie punktów. Mam taki pomysł żeby za dobra odpowiedź przyjmowało wartość 1 a za złą 0 i na koniec sumowało i pokazywało wynik o to kod programu:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Panel1: TPanel;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        CheckBox3: TCheckBox;
        Panel2: TPanel;
        Label1: TLabel;
        Label2: TLabel;
        Panel3: TPanel;
        Panel5: TPanel;
        Label3: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      n: integer;
     tab1: array [1..15] of string ;
     tab2: array [1..15,1..3] of string ;
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      tab1[1]:='Co to Socket?';
      tab1[2]:='Jaki typ partycji wykorzystuje Windows XP ';
      tab1[3]:='Najpopularniejszy format plików muzycznych to';
      tab1[4]:='Jak nazywają się animacje, które wyświetlają się na stronach internetowych ?';
      tab1[5]:='Jaka komenda w Windows słuzy do otwierania rejestru systemowego ?';
      tab1[6]:='Co to PORT COM ?';
      tab1[7]:='Co to L2 cache ?';
      tab1[8]:='Jaka wersja systemu Windows jest najnowsza?';
      tab1[9]:='Przeglądarka Google nazywa się:';
      tab1[10]:='Najpopularniejsza wyszukiwarka internetowa to:';
      tab1[11]:='Firma Microsoft nie jest autorem oprogramowania:';
      tab1[12]:='Urządzeniem wskazującym nie jest:';
      tab1[13]:='Co to jest POP3?';
      tab1[14]:='Pliki o rozszerzeniu nazwy GIF to pliki';
      tab1[15]:='Definicja RGB: 000000 To kolor:';
      tab2[1,1]:='Podstawka pod procesor';
      tab2[1,2]:='Podstawka pod pamięć RAM';
      tab2[1,3]:='Wejście na karte graficzną';
      tab2[2,1]:='FAT 32';
      tab2[2,2]:='NTFS';
      tab2[2,3]:='FAT 32 i NTFS';
      tab2[3,1]:='.wma';
      tab2[3,2]:='.ogg';
      tab2[3,3]:='.mp3';
      tab2[4,1]:='Flashes';
      tab2[4,2]:='Flush';
      tab2[4,3]:='Flash';
      tab2[5,1]:='rededit';
      tab2[5,2]:='msconfig';
      tab2[5,3]:='rejestr';
      tab2[6,1]:='Wyjście komputerowe z tyłu komputera';
      tab2[6,2]:='Gniazdo do podłączenia dysków';
      tab2[6,3]:='Służy do transmisji danych z pamięci iprocesora do karty graficznej';
      tab2[7,1]:='Program do obsługi grafiki';
      tab2[7,2]:='Pamięć drugiego stopnia w procesorze';
      tab2[7,3]:='Służy do komunikacji pomiędzy komputerem a drukarką';
      tab2[8,1]:='XP';
      tab2[8,2]:='Vista';
      tab2[8,3]:='Seven';
      tab2[9,1]:='Chrome';
      tab2[9,2]:='Safari';
      tab2[9,3]:='Opera';
      tab2[10,1]:='Bing';
      tab2[10,2]:='Yahoo';
      tab2[10,3]:='Google';
      tab2[11,1]:='Internet Explorer';
      tab2[11,2]:='Open Office';
      tab2[11,3]:='Windows Media Player';
      tab2[12,1]:='mysz laserowa';
      tab2[12,2]:='mysz z kulką';
      tab2[12,3]:='mikrofon';
      tab2[13,1]:='Protokół dostępu do rejestru';
      tab2[13,2]:='Protokół dostępu do serwera poczty elektronicznej';
      tab2[13,3]:='Protokół dostępu do serwera www';
      tab2[14,1]:='Muzyczne';
      tab2[14,2]:='Tekstowe';
      tab2[14,3]:='Graficzne';
      tab2[15,1]:='Biały';
      tab2[15,2]:='Czarny';
      tab2[15,3]:='Szary';
    
      n:=0;
    
    
        Label1.Caption := 'Czy chcesz rozpocząc nowy test ?';
        Button2.Enabled := True;
        Button1.Enabled := True;
        Panel1.Visible := False;
        Panel3.Visible := False;
        Panel5.Visible := False;
        n := 0;
    
    
    
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    
      Panel1.Visible := True;
      Panel2.Color := $00E1E1E1;
    
      Button1.Caption := 'Dalej';
      Button2.Caption := 'Zakoncz';
      Button2.Enabled := True;
      Button1.Enabled := False;
      Panel3.Visible := False;
      Panel5.Visible := False;
    
      CheckBox1.Enabled := True;
      CheckBox2.Enabled := True;
      CheckBox3.Enabled := True;
      Panel3.Visible := False;
      Panel5.Visible := False;
    
      CheckBox1.Checked := False;
      CheckBox2.Checked := False;
      CheckBox3.Checked := False;
      Panel3.Visible := False;
      Panel5.Visible := False;
    
      n:=n+1;
    
      if n = 1 then begin
        Label1.caption:=tab1[1];
        Checkbox1.Caption:=tab2[1,1];
        Checkbox2.Caption:=tab2[1,2];
        Checkbox3.Caption:=tab2[1,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
    
      if n=2 then
      begin
       Label1.caption:=tab1[2];
        Checkbox1.Caption:=tab2[2,1];
        Checkbox2.Caption:=tab2[2,2];
        Checkbox3.Caption:=tab2[2,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
    
      if n=3 then
      begin
        Label1.caption:=tab1[3];
        Checkbox1.Caption:=tab2[3,1];
        Checkbox2.Caption:=tab2[3,2];
        Checkbox3.Caption:=tab2[3,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
       if n=4 then
      begin
        Label1.caption:=tab1[4];
        Checkbox1.Caption:=tab2[4,1];
        Checkbox2.Caption:=tab2[4,2];
        Checkbox3.Caption:=tab2[4,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
       if n=5 then
      begin
        Label1.caption:=tab1[5];
        Checkbox1.Caption:=tab2[5,1];
        Checkbox2.Caption:=tab2[5,2];
        Checkbox3.Caption:=tab2[5,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
       if n=6 then
      begin
        Label1.caption:=tab1[6];
        Checkbox1.Caption:=tab2[6,1];
        Checkbox2.Caption:=tab2[6,2];
        Checkbox3.Caption:=tab2[6,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
       if n=7 then
      begin
        Label1.caption:=tab1[7];
        Checkbox1.Caption:=tab2[7,1];
        Checkbox2.Caption:=tab2[7,2];
        Checkbox3.Caption:=tab2[7,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
       if n=8 then
      begin
        Label1.caption:=tab1[8];
        Checkbox1.Caption:=tab2[8,1];
        Checkbox2.Caption:=tab2[8,2];
        Checkbox3.Caption:=tab2[8,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
       if n=9 then
      begin
        Label1.caption:=tab1[9];
        Checkbox1.Caption:=tab2[9,1];
        Checkbox2.Caption:=tab2[9,2];
        Checkbox3.Caption:=tab2[9,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
      if n = 10 then begin
        Label1.caption:=tab1[10];
        Checkbox1.Caption:=tab2[10,1];
        Checkbox2.Caption:=tab2[10,2];
        Checkbox3.Caption:=tab2[10,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
      if n = 11 then begin
        Label1.caption:=tab1[11];
        Checkbox1.Caption:=tab2[11,1];
        Checkbox2.Caption:=tab2[11,2];
        Checkbox3.Caption:=tab2[11,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
      if n = 12 then begin
        Label1.caption:=tab1[12];
        Checkbox1.Caption:=tab2[12,1];
        Checkbox2.Caption:=tab2[12,2];
        Checkbox3.Caption:=tab2[12,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
      if n = 13 then begin
        Label1.caption:=tab1[13];
        Checkbox1.Caption:=tab2[13,1];
        Checkbox2.Caption:=tab2[13,2];
        Checkbox3.Caption:=tab2[13,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
      if n = 14 then begin
        Label1.caption:=tab1[14];
        Checkbox1.Caption:=tab2[14,1];
        Checkbox2.Caption:=tab2[14,2];
        Checkbox3.Caption:=tab2[14,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
      if n = 15 then begin
        Label1.caption:=tab1[15];
        Checkbox1.Caption:=tab2[15,1];
        Checkbox2.Caption:=tab2[15,2];
        Checkbox3.Caption:=tab2[15,3];
        Panel3.Visible := False;
        Panel5.Visible := False;
      end;
    
    
      if n = 15 then begin
        Button1.Caption := 'Tak.Powtórz';
        Button2.Caption := 'Nie.Zakończ';
        Label1.Caption := 'Dziekujemy za rozwiązanie naszego testu ';
        Label2.Caption := 'Czy chcesz powtórzyc test?';
        Label3.Caption := 'Twój wynik to:';
        Panel2.Color := clLime;
        Button2.Enabled := True;
        Button1.Enabled := True;
        Panel1.Visible := False;
        Panel3.Visible := True;
        Panel5.Visible := True;
        n := 0;
      end;
    
    end;
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      if (Sender as TCheckbox).Checked then begin
        CheckBox1.Enabled := False;
        CheckBox2.Enabled := False;
        CheckBox3.Enabled := False;
        Button1.Enabled := True;
      end;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Close;
    end;
    
    end.

    Jeśli ktoś ma jakiś pomysł niech pisze.
    Z góry dziekuje za poświęcony czas :)
  • REKLAMA
  • Pomocny post
    #2 8868785
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Proszę zamieścić pełen kod, wraz z wyglądem formularza.
    Nikt nie będzie tworzył własnego, żeby koledze pomóc.
  • REKLAMA
  • #3 8868850
    meloniasty
    Poziom 2  
    Posty: 3
    Ok mam nadzieje ze o to ci chodziło:

    Mniej więcej o to. Punkty za pobranie usunąłem. - arnoldziq
    Załączniki:
    • 1.1.rar (620.98 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #4 8870951
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Musisz dokonać kilku poprawek.
    1. Deklarujesz zmienną globalną :
    var
     Punkty : integer;

    2. Nie wiadomo jaka odpowiedź w tym teście jest poprawna, a jaka nie... To znaczy, ty to wiesz, ja to wiem, ale komputer nie bardzo ...
    Proponuję, na początek, zaznaczyć dobre odpowiedzi gwiazdkami.
    tab2[1,1]:='Podstawka pod procesor*';
      tab2[1,2]:='Podstawka pod pamiêæ RAM';
      tab2[1,3]:='Wejœcie na kartê graficzn¹';
      tab2[2,1]:='FAT 32';
      tab2[2,2]:='NTFS*';
      tab2[2,3]:='FAT 32 i NTFS';
      tab2[3,1]:='.wma';
      tab2[3,2]:='.ogg';
      tab2[3,3]:='.mp3*'; 

    3. Następnie tworzysz funkcję która usuwa gwiazdki z tekstu, żeby osoba widząca test, nie wiedziała która odpowiedź jest poprawna.
    function usun_gwiazdke( st : string):string;
    begin
     result:=st;
     while pos('*',result)<>0 do result[pos('*',result)]:=' ';
    end;

    4. Następnie modyfikujesz procedurę wyświetlania pytań i odpowiedzi np. w taki sposób :
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Panel1.Visible := True;
      Panel2.Color := $00E1E1E1;
    
      lblPunkty.caption:=inttostr(punkty); // wyswietlanie zdobytych punktow
    
      Button1.Caption := 'Dalej';
      Button2.Caption := 'Zakoncz';
      Button2.Enabled := True;
      Button1.Enabled := False;
      Panel3.Visible := False;
      Panel5.Visible := False;
    
      CheckBox1.Enabled := True;
      CheckBox2.Enabled := True;
      CheckBox3.Enabled := True;
      Panel3.Visible := False;
      Panel5.Visible := False;
    
      CheckBox1.Checked := False;
      CheckBox2.Checked := False;
      CheckBox3.Checked := False;
      Panel3.Visible := False;
      Panel5.Visible := False;
    
      n:=n+1;
    
      if (n>=1) and (n<21) then
      begin
       Label1.caption:=tab1[n];
       Checkbox1.Caption:=usun_gwiazdke(tab2[n,1]);
       Checkbox2.Caption:=usun_gwiazdke(tab2[n,2]);
       Checkbox3.Caption:=usun_gwiazdke(tab2[n,3]);
       Panel3.Visible := False;
       Panel5.Visible := False;
     end;
    
    
      if n = 21 then begin
        Button1.Caption := 'Tak.Powtórz';
        Button2.Caption := 'Nie.Zakoñcz';
        Label1.Caption := 'Dziekujemy za rozwi¹zanie naszego testu ';
        Label2.Caption := 'Czy chcesz powtórzyc test?';
        Label3.Caption := 'Twój wynik to:';
        Panel2.Color := clHighlight;
        Button2.Enabled := True;
        Button1.Enabled := True;
        Panel1.Visible := False;
        Panel3.Visible := True;
        Panel5.Visible := True;
        n := 0;
      end;
    end;

    5. I sprawdzasz, czy zaznaczona odpowiedź jest poprawna :
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      if (Sender as TCheckbox).Checked then begin
        if CheckBox1.Checked and (pos('*',tab2[n,1])<>0) then punkty:=punkty + 1;
        if CheckBox2.Checked and (pos('*',tab2[n,2])<>0) then punkty:=punkty + 1;
        if CheckBox3.Checked and (pos('*',tab2[n,3])<>0) then punkty:=punkty + 1;
        CheckBox1.Enabled := False;
        CheckBox2.Enabled := False;
        CheckBox3.Enabled := False;
        Button1.Enabled   := True;
      end;
    end;


    I gotowe. Masz w zmiennej Punkty zapisane ilość poprawnych odpowiedzi.

    Załączam cały poprawiony kod wraz z plikiem EXE.
    Załączniki:
    • test_ankieta.zip (225.67 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 8871625
    meloniasty
    Poziom 2  
    Posty: 3
    Bardzo dziękuje za pomoc i poświęcony mi czas. :D
REKLAMA