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

Tworzenie testu wyboru w Delphi z podliczaniem odpowiedzi

elektronik_tk 20 Lut 2006 18:13 2994 4
REKLAMA
  • #1 2326714
    elektronik_tk
    Poziom 26  
    Posty: 1146
    Pomógł: 18
    Ocena: 50
    Witam. Mam napisac test wyboru a),b),c),d).
    Nie wiem jak się za to zabrać, jeszcze najlepiej gdyby podliczało poprawne i błędne odpowiedzi.
    Moja najprostrzą koncepcją jest jedynie takie coś:
    na każdym formularzu osobne pytanie. odpowiedzi zaznaczane Radiobuttonami, potem podliczane w programie dobre odpowiedzi, np przypisując dobremu zaznaczeniu liczbe 1 i potem dodaniu ich. no ale bym musial mieć duużo formularzy, bo do każdego pytania osobny i jakiś przycisk gdy przechodzi do nastepnego pytania to zamyka ten formularz i otwiera następny.
    na pewno jest jakiś lepszy sposob. Pomóżcie.
    może już ktoś robił coś podobnego?
  • REKLAMA
  • #2 2327123
    Jaro15l_90r
    Poziom 13  
    Posty: 84
    Pomógł: 4
    Zrób sobie plik INI np taki:
    [dane]
    ile_pytan=1
    
    [pytanie_1]
    pytanie=Jakieś tam pytanie numer 1
    odp_a=Odpowiedź a
    odp_b=Odpowiedź b
    odp_c=Odpowiedź c
    odp_d=Odpowiedź d
    poprawna=b

    I tak zrób sobie kilka sekcji pytanie_2, pytanie_3 itd. i zmień ilość pytań w sekcji dane. Plik zapisz pod nazwą pytania.ini w katalogu programu.

    W programie w uses wpisz dodaj IniFiles;
    Dodaj zmienne: INI: TIniFile;, ile_pytan, teraz, punkty: integer; oraz poprawne: string;. Stwórz label: pyt, odp_a, odp_b, odp_c, odp_d oraz buttony a, b, c, d.
    W procedurze OnFormCreate dopisz takie linijki:
    INI := TIniFile.Create(Application.Exename)+'pytania.ini');
    ile_pytan := INI.Readinteger('dane', 'ile_pytan', 0);
    punkty := 0;
    teraz := 1;
    Pytanie(1);


    Stwórz procedurę np.:
    procedure Pytanie(numer: integer);
    begin
    pyt.caption := INI.Readstring('pytanie_'+inttostr(numer), 'pytanie', '');
    odp_a.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_a', '');
    odp_b.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_b', '');
    odp_c.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_c', '');
    odp_d.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_d', '');
    poprawne := INI.Readstring('pytanie_'+inttostr(numer), 'poprawna', '');
    end;


    Stwóz teraz akcję OnClick na przyciskach a, b, c, d i wpisz coś takiego:
    If poprawne = 'a' then // Dla przycisku A, dla innych odpowiednio b, c, d...
    begin
    inc(punkty);
    If teraz < ile_pytan then
    begin
    inc(teraz);
    Pytanie(teraz);
    end
    else
    Application.Messagebox(PAnsiChar('Koniec testu! Zdobyłeś '+inttostr(punkty)+' punktów, gratulacje.'), 'Test', MB_OK+MB_IconInformation);
    end;


    Oczywiście kod jest pisany na szybko i nie wiem czy będzie działał poprawnie, jeżeli ni, to przepraszam za pomyłki.
  • REKLAMA
  • #3 2327186
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Najprosciej bylo by to zrobic z wykorzystaniem html, kontrolki WebBrowser (ew wlasnej) lub z wykorzystaniem skrolowanego formularza (ew czegos co nazywa sie wizard).

    Ja zrobil bym to tak:
    1. ustalil format danych (testu): osobiscie preferuje XML (moze byc nawet kodowany)
    2. program odczytuje w jakis sposob dane, chodzi mi o to ze uzytkownik wybiera test albo ma go narzuconego odgornie.
    3. tworzysz kontrolki dynamicznie wczytujac kazda kontrolke do kontenera. Kontener przechowuje informacje o typie ew informacjach (np zew obrazku, odpowiedzi, pytaniu, itp). Potem w petli sprawdasz jaki jest rodzaj pytania jaka kontrolke nalezy wstawic. majac je wszystkie w kontenerze bez problemu obliczysz sobie rozmiar formularza. Podczas wstawiania kontrolek bez problemu obliczysz sobie w jakim miejscu nalezy ja wstawic. pracy jest sporo. Chociaz to zalezy na jaki efekt koncowy liczysz. Zasze mozna odwalic fuszere. Nauczylo mnie to przegladanie kodow umieszczanych od czasu do czasu na tym forum:)

    Kod tworzacy w zasadzie jest najciekawsza czescia zadania.
    Nad szczegolami zastanow sie sam.

    Jesli wybierzesz HTML sprawa renderingu jest bardzo prosta poniewaz zrobi to za ciebie sama kontrolka jedyny problem to odebranie i sprawdzenie danych. Przy uzyciu DHTML bedziesz mogl latwo dynamicznie smieniac zawartosc strony.

    Osobiscie proponuje HTML. Bedziesz mogl latwo zmieniac layout-y.
  • REKLAMA
  • #4 2327973
    Konto nie istnieje
    Konto nie istnieje  
  • #5 2328763
    elektronik_tk
    Poziom 26  
    Posty: 1146
    Pomógł: 18
    Ocena: 50
    _h napisał:
    elektronik - Twoj pomysl jest dobry. Ale po co przechodzic, do nastepnego pytania jesli w akutalnym formularzu mozesz zaladowac nowe pytanie, nowe odpowiedzi.

    Ile pytan tyle rekordow postaci [pytanie,odp_a,odp_b,odp_c,odp_d,praw_odp] albo
    [pytanie,[odp_a,pktow],[odp_b,pktow],[odp_c,pktow],[odp_d,pktow]]

    Przycisk 'dalej' obslugiwal by zdarzenie rpzejscia do nowego rekordu - wyswietlenia w labelu pytania, zaladowania nowych caption do radiogroup. Wszystko oparte o jeden formularz, jden radiogorup itd

    Dodano po 2 [minuty]:

    Dodatkowo mozna byloby spokojnie przechodzic miedzy pytaniami dodajac opcje w rekordzie [wybrana_wczesniej_odpowiedz]


    no właśnie pisałem, że to co ja tam obmyśliłem nie jest najlepsze, bo poprostu sie na tym aż tak dobrze nie znam ;)
    znalazłem jakiś artykuł w Espercie :D właśnie jest coś podobnego o czym piszesz. Moze już sobie sam poradze. Jakby co to jeszcze się odezwę z pytaniami ;]
REKLAMA