Saját Kresz-teszt program C#-ban. Hogyan érdemes belefogni? (Többi lenn)
Egy kvíz programot szeretnék csinálni, felépítésében legjobban egy kresz tesztre hasonlít ezért fogalmaztam meg így a kérdést.
C#-ban szeretném csinálni.
A felépítés nagyjából a következő lenne:
- a kérdések egy adatbázisban lennének letárolva (3nehézség szerint)
- a program futtatásakor az adatbázisban tárolt kérdések közül randomra dobjon ki 60db kérdést (mindhárom nehézségből 20-at)
- minden kérdésre 4 válaszlehetőség lenne amiből csak 1 helyes
- bizonyos kérdésekhez képi melléklet is lenne (bonyolultságtól függően ezt lehet kihagyom)
-a teszt kitöltése időre megy (összesen 1óra)
A legelső kérdés az lenne, hogy C# nyelven van-e értelme egyáltalán belekezdeni az egészbe?
Amennyiben igen, úgy a kérdéseket milyen adatbázisban tároljam le és mi módon, hogy ezt a feladatot el tudja végezni?
Első körben szerintem ennyi, aztán később még formálódhat :)
Jó meg a nehézséged is belerakod az adatbázisba, azt nem olvastam el :D
Amúgy ez elég jó kis gyakorlás. Olyan 30 perc alatt meg is lehet csinálni. Kérdéseket beleírni több idő. :D
Ezt csak magadnak csinálod hobbinak?
Csak azért kérdezem, mert ha nem kritikus pont az, hogy az adatok védettek legyenek, akkor nem feltétlenül kell adatbázis, XML file is megteszi, a képek meg sima képfile-ok, amiknek az elérési útját az XML-ben tárolod. Egyéb esetben meg SQL Compact Edition.
És igen, a C#-nál alkalmasabbat nem nagyon találsz erre.
A db szerkezetét már a többiek leirták, uh. azzal nem vesződök :)
Köszönöm a válaszokat!
Igen, ezt csak úgy magamnak csinálom gyakorlásból, mert nemrég kezdtem el C#-ozni és gyakorló feladatok között volt egy ehhez hasonló, ebből jött az ötlet, hogy kicsit bonyolítok a dolgon és csinálok egy kvízprogramot, ott meg a kresz teszt jutott elsőként eszembe.
A kérdéseket nem feltétlenül adatbázisban akarom letárolni, csak azért gondoltam arra, mert nem tudtam, hogy ha letárolom egy xml-ben akkor hogyan olvasom ki belőle egyenként a kérdést.
Amit az első válaszoló leírt módszer ígéretesnek tűnik, úgyhogy megpróbálkozom azzal.
Közben eszembe jutott még egy kérdés a programmal kapcsolatban.
Ha az adatbázisos módszert választom és elkészült a program akkor azt hogyan tudom megcsinálni, hogy el tudjam indítani egy másik gépen is (nem azon amelyiken megtalálható hozzá a teljes fejlesztő környezet) ..itt gondolom nem csak az exe-t kell elmentenem és gondolom vinnem kell valahogy az adatbázist is a programmal?
Pont ezért javasoltam az XML-t.. :D Egyébként XML-t olvasni/irni C#-ban nagyon könnyü. Ha mégis DB-zni akarsz, akkor meg ja, hurcolhatod a programmal együtt a DB file-t, a szükséges drivereket, stbstb.
Random kiválasztásnál meg nehogy megcsináld ezt a hülyeséget, amit irtak :D Beolvasod memóriába az egész táblát, aztán mondjuk van 200 kérdésed összesen, azok benne egy listában, és Random.Next(200)..
Értem, akkor mégiscsak egyszerűbb lenne az xml.
Egy kis segítséget tudnál adni hogy hogy kezdjek bele? mármint milyen struktúrába tároljam le őket, hogy olvastassam ki, stb?
Az a baj (legalábbis szerintem) azzal a randommal amit te mondtál, hogy nekem 3féle nehézségből vannak kérdések és minden nehézségből akarok 20at kiválasztani (egy teszt 60kérdés)
Vagy tároljam le 3xml-ben a különböző nehézségeket?
<?xml version="1.0" encoding="utf-8" ?>
<questions>
<question title="Az alábbi képen látható forgalmi helyzetben kinek van elsőbbsége?" difficulty="2" correctanswerid="1" picturepath="c:\kreszteszt1.jpg">
<options>
<option id="1" title="Az A jelü autónak."></option>
<option id="2" title="A B jelü autónak."></option>
<option id="3" title="A C jelü autónak."></option>
</options>
</question>
<question title="Mennyi a megengedett sebesség lakott területen belül?" difficulty="1" correctanswerid="2">
<options>
<option id="1" title="70 km/h"></option>
<option id="2" title="50 km/h"></option>
<option id="3" title="90 km/h"></option>
</options>
</question>
</questions>
Tessék, kb. igy kéne kinéznie az XML-nek.
Példa a feldolgozáshoz:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"XMLFile1.xml");
XmlNodeList questionNodes = xmlDoc.SelectNodes("//question");
foreach (XmlNode questionNode in questionNodes)
{
string questionTitle = questionNode.Attributes["title"].Value;
List<string> questionOptions = new List<string>();
XmlNodeList optionNodes = questionNode.SelectNodes("options/option");
foreach (XmlNode optionNode in optionNodes)
{
int optionID = int.Parse(optionNode.Attributes["id"].Value);
string optionTitle = optionNode.Attributes["title"].Value;
}
}
Ha rám hallgatsz, én csinálnék valami Question nevü osztályt, és azokat hoznám létre az xml-ből beolvasott adatokkal.
Aztán:
Csinálsz 3 különböző List<Question> listát, amikbe nehézségi szint szerint pakolod külön-külön a Question object-eket.
Valamint: Amikor véletlenszerüen válogatod ki a kérdéseket a tesztre, akkor a következő:
Legyen egy Dictionary<string, Question> nevü Dictionary-d,
ahol a key a question title, a value meg nyilván egy Question tipusu objektum.
Ezután azt csinálod, hogy pl. mind3 nehézségi szinten 20 kérdés van, és mindegyikből akarsz választani 5-öt:
Random.Next(20), kiveszed a random szám indexén lévő kérdést az 1-es nehézségi listából.
Megnézed, hogy a dictionary-ben containsKey-el, hogy tartalmazza-e már azt a questiont, ha nem, belerakod, ha igen, akkor generálsz még egy random számot, és azzal próbálod, tehát gyakorlatilag két egymásba ágyazott ciklusod lesz, a külső 5ször fut le, a belső meg annyiszor, amig nem sikerül olyan random kérdést választania, ami még nincs benne a dictionary-ben.
Remélem, ez igy megfelel :D
Hálám üldözni fog a sírig :)
Nagyon profi vagy. Ezer köszönet érte.
Ennél jobb példát keresve sem találtam volna az xml feltöltéshez :)
Úgy látom ez a feladat csak nekem okozott ekkora fejtörést :D ...sebaj, majd belejövök idővel.
Még egyszer köszönöm a segítséget, kérdezek ha elakadnék :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!