edytor pytań

Odpowiedz Nowy wątek
2013-05-31 15:29
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ć.

  • 1.jpg (0.03 MB) - ściągnięć: 105
edytowany 1x, ostatnio: tomek905, 2013-05-31 15:30

Pozostało 580 znaków

2013-05-31 17:01
0

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

Pozostało 580 znaków

2013-05-31 17:19
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 poprostu 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?

edytowany 1x, ostatnio: tomek905, 2013-05-31 17:20

Pozostało 580 znaków

2013-05-31 17:54
asddasasdzxczxc
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ł.

Pozostało 580 znaków

2013-05-31 17:57
asddasasdzxczxc
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.

Pozostało 580 znaków

2013-05-31 20:28
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();
}
}

edytowany 1x, ostatnio: tomek905, 2013-05-31 20:33

Pozostało 580 znaków

2013-05-31 20:34
asddasasdzxczxc
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ę.

Pozostało 580 znaków

2013-05-31 21:05
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

Pozostało 580 znaków

2013-05-31 21:08
asddasasdzxczxc
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.

Pozostało 580 znaków

2013-05-31 21:15
asddasasdzxczxc
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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