edytor pytań

0

Witam, Chciałbym napisać w C# prosty edytor pytań, który polegałby na tym, że wpisuje tresc pytania odpowiedzi oraz zaznaczam która jest poprawna, chciałbym zapisać to pytanie jakoś na dysku w różnym folderze, w zależność od jego trudność, np. żeby łatwe nie były z trudnymi. Niestety nie za bardzo wiem jak to zrobić, chciałbym tez pożniej umieć korzystac z tych wpisanych wartości po wczytaniu żeby zrobić quiz i żeby mieć np dostęp do wartości jaka odpowiedż jest poprawna żeby później porównywać. Prosze o jakieś rady wskazówki bo nie za bardzo wiem jak sie do tego zabrać.

0

Ładne okienko, a zapisać możesz dowolnie - w pliku tekstowym o własnym formacie, pliku XML, ...

0

napisalem cos takiego :

[Serializable]
public class Pytanie
{
public string tresc;
public string a;
public string b;
public string c;
public string d;
public string odpowiedz;

    public Pytanie(string pyt, string  aa, string bb, string cc, string dd, string odp)
    {
        tresc = pyt;
        a = aa;
        b = bb;
        c = cc;
        d = dd;
        odpowiedz = odp;
    }
}
static class Serializacja
{
    static string sciezka = null;
    static Pytanie x = null;
    public static void serializuj(Pytanie x, string sciezka)
    {
        FileStream myStream = File.Create(sciezka);
        BinaryFormatter myBinaryFormat = new BinaryFormatter();
        myBinaryFormat.Serialize(myStream, x);
        myStream.Close();
    }

i w przycisku zapisz cos takiego:
private void button2_Click(object sender, EventArgs e)
{
string y = "";
if (radioButton1.Checked) {y = textBox2.Text;}
if (radioButton2.Checked) {y = textBox3.Text;}
if (radioButton3.Checked) {y = textBox4.Text;}
if (radioButton4.Checked) {y = textBox5.Text;}

        Pytanie a = new Pytanie(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, y);

        Serializacja.serializuj(a, "pyt.dat");
    }

wszystko fajnie bo pytanie zapisuje sie na dysku tylko teraz jak zrobic zeby zapisywalo sie w roznych folderach w zaleznosci od wybrania opcji trudnosci pytania i jeszcze jedno pytanie, na które nie mam kompletnie pomysłu. Bede chcial zrobic pozniej quiz i np w jego poczatkowej fazie losowac pytania z folderu łatwe, chciałem nazwac zserializowane pytania jako liczby naturalne i po prostu losowac liczbe od zera do liczby pytan w folderze ale nie moge jako nazwy dac liczby. Ma ktos jakis pomysl jak to rozwiazac? Zeby w przyszlosci łatwo losowac pytanie z folderu?

0

Zmień nazwy w klasie. Jeżeli coś jest publiczne powinno się zaczynać od wielkiej litery, czyli Treść itd. Jeżeli masz prywatne pola, to wtedy zapisujesz je _treść. Prawie nigdy nie powinieneś nazywać zmiennych jak a,b,c,d... Jak już, to OdpowiedźA, OdpowiedźB... Jeżeli już przy odpowiedziach jesteśmy, to zrób List<string> MożliweOdpowiedzi, w ten sposób niezależnie czy masz 2 odpowiedzi, czy 100 program będzie działał.

0

Co do samego problemu, to po prostu stwórz klasę nadrzędną która będzie zawierała listę pytani i serializuj ten obiekt.

0

ok a teraz mam pytanie. Chcę zrobić coś takiego że gdy wezmę edytuj pojawia mi się okienko w którym wybieram pytanie do edycji a nastepnie gdy je klikne deserializuje sie tak ze w textboxach mam to pytanie do edytowania. jak to zrobic? kombinuje nad czyms takim ale chyba nie o to chodzi.

private void button3_Click(object sender, EventArgs e)
{

        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            Pytanie temp = new Pytanie("" ,"" ,"" ,"" ,"" ,"" );
            System.IO.StreamReader sr = new
               System.IO.StreamReader(openFileDialog1.FileName);
            Deserializacja.deserializuj(temp, openFileDialog1.FileName);
            sr.Close();

            textBox1.Text = temp.tresc;
            textBox2.Text = temp.a;
            textBox3.Text = temp.b;
            textBox4.Text = temp.c;
            textBox5.Text = temp.d;
        }
        
    }

static class Deserializacja
{
static string sciezka = null;
static Pytanie z = null;
public static void deserializuj(Pytanie x, string sciezka)
{
FileStream myStream = File.OpenRead(sciezka);
BinaryFormatter myBinaryFormat = new BinaryFormatter();
Pytanie z = (Pytanie)myBinaryFormat.Deserialize(myStream);
myStream.Close();
}
}

0

Kombinuj z innej strony. Stwórz coś typu ListaPytań którą ładujesz przy starcie programu/zapisujesz na życzenie, a wewnątrz programu działaj właśnie na tej liście. Nie może być tak, że w każdej części programu robisz deserializację/serializację.

0

Mozesz mi bardziej łopatologicznie przybliżyc jak zrobic taka liste? Ta serializacja mi wszystko miesza, że już nie wiem jak. Czyli moje wymarzone okienko dialogowe gdzie wybieram pytanie czyli plik i go edytuje pojdzie w piach?;p

0

Z grubsza chodzi mi o coś typu

class BazaPytań
{
   List<Pytanie> Łatwe;
   List<Pytanie> Średnie;
   List<Pytanie> Trudne;
}

I później serialziujesz właśnie taką bazę i kod też powinien komunikować się z tym tworem.

A ogólnie trudność najlepiej przechowywać w klasie Pytanie.

0

Z grubsza chodzi mi o to, że powinieneś wprowadzić trochę abstrakcji.

Program
{
   Pytanie PobierzPytanieZFormularza()
   void WyswietlPytanieWFormularzu( Pytanie pytanieDoWyświetlenia )
}

enum PoziomTurdnosci { Latwe, Srednie, Trudne };
BazaPytań
{
    Pytanie WylosujPytanie(PoziomTrudnosci)
    IList<Pytania> DajListePytan(PoziomTrudnosci)
    IList<Pytania> DajListeWszystkichPytan()
}

itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1