Program do nauki słówek

0

Witam. Właśnie przymierzam się do napisania programu, w którym będzie możliwa nauka słówek do angielskiego. Planowałem 2 rodzaje nauki. Pierwszy rodzaj jest to po prostu otworzenie w programie dużego okna, w którym będą wszystkie słówka i po prostu czytamy. Drugi rodzaj polega na przejściu przez losowo wybrane 20 słówek z 1000, zaznaczenie, które słówko znam a którego nie znam, na koniec tych 20 słówek program ma zrobić taki mini sprawdzian, słówka, których nie znałem podczas tego losowania pokażą się w tym teście. Chciałbym też zrobić zapisywanie słówek tych, które już umiemy. Problem mój polega na tym, gdyż nie wiem jak się do tego zabrać, gdzie mam te wszystkie słówka zapisać i jak je wyczytywać po kolei. Przykładowo jedna zmienna musi posiadać słówko angielskie i przetłumaczone aby to się nie pomieszało użyłbym zmiennej dwuwymiarowej. Możecie mi trochę objaśnić drogę i sprawę jak to ma wyglądać? nie pogardzę jakimś przykładem. Naprawdę mi zależy na tym programiku, gdyż za rok będę już miał maturę, na którą chciałbym się solidnie przygotować + przy tym ćwiczyć programowanie.

Z góry dziękuje i pozdrawiam

0

Hmm a więc to zależy od Ciebie jak chcesz zapisać takie informacje, jest trochę tych możliwości, np:

  1. Baza danych
  2. Plik (np. txt)
  3. połączenie kilku tablic
    Przy każdym z tych rozwiązań możesz po prostu dodawać informacje typu bool (prawda czy fałsz - umiem czy nie umiem)
    W sumie możesz stworzyć nawet tablice struktur lub obiektów stworzonej przez siebie klasy i zapisywać je w jeden wybrany sposób - które proponowałem powyżej.

Pseudo kod struktury:

struct slowko
{
int id
string ang
string pol
bool umiem
}

Jeżeli chodzi o przydatność stwórz klasę dla słowa i zapisz do bazy danych (dla ćwiczeń będzie chyba najciekawiej)

0

Wcześniej jak takie coś próbowałem zrobić to zapisywałem opcją tablic dwuwymiarowych, lecz to dziwnie wychodziło. Nie dość, że muszę zapisać jakoś te 1000 słówek to jeszcze później w trakcie testu gdy nie wiemy danego słówka to też trzeba zapisać do tablicy, przypuśćmy stworzę tą tablicę na 10 wyrazów a użytkownik zapisze tylko 8 lub 11 i wyskoczy błąd :/

0
require "sequel"


class Program

  def initialize
    @db = Sequel.connect('sqlite://dictionary.sqlite3')
    @db.create_table? :dictionary do
      primary_key :id
      String :polish
      String :english
    end
    @dictionary = @db[:dictionary]
  end

  def start
    loop do
      puts '1. dodaj slowo'
      puts '2. rob test'
      puts 'inny. wyjscie'
      action_id = gets.to_i
      if action_id == 1
        add_word_from_user
      elsif action_id == 2
        make_test
      else
        exit
      end
    end
  end

  def add_word_from_user
    puts 'podaj angielskie slowo'
    english = gets.chop
    puts 'a teraz podaj polskie slowo'
    polish = gets.chop
    @dictionary.insert(:english => english,:polish => polish)
  end

  def show_words
    @dictionary.select.each do |r|
      puts "#{r[:id]}. |  #{r[:english]} | #{r[:polish]}"
    end
  end

  def make_test
    test = Test.new(@dictionary)
    test.start
  end

end


class Test

  def initialize(dictionary)
    @record_limit = 20
    @record_ids = []
    @record_limit.times do
      @record_ids << rand(1...dictionary.count)
    end
    @records = []
    @record_ids.each do |id|
      dictionary.where(:id => id).each do |r|
        @records << r
      end
    end
  end

  def start
    scores = 0
    @records.each do |r|
      puts r[:polish]
      english = gets.chop
      if r[:english] == english
        puts 'ok'
        scores += 1
      else
        puts "Zle, powinno byc #{r[:english]}"
      end
    end
    puts "twoj wynik to #{scores}/#{@record_limit}"
  end

end

p = Program.new
p.start

Od trzech dni uczę się ruby i widząc ten temat stwierdziłem, że w ramach nauki fajnie byłoby to napisać. Może choć trochę to Ci się przyda. Z drugiej strony fajnie byłoby, gdyby ktoś wiedział w jaki sposób można zapisać w ruby listy składane, bo ten zapis jakim się posługuje jest niezbyt wygodny.

0

Najgorszy problem jest z zapisaniem tych wszystkich słówek, pobieraniem ich jeżeli są potrzebnę. Żeby to było słówko bez tłumaczenia to byłoby łatwiej, a tak jedna zmienna musi pasować drugiej np angol[0] = "yes" , polak[0] = "tak", lub może tak można zrobić slowka[1,0] = "yes" slowka[1,1] = "tak". Naprawdę mam wielki problem z tym zapisywaniem, nie wiem w czym to zrobić a nie jestem pewny czy w takich zmiennych uda mi się to zrobić, natomiast w bazie jeżeli miałoby zapisać te 1000 słówek to ok, ale gdyby miało zrobić każdemu użytkownikowi test i zapisać w bazie znane mu słówka? a przypuśćmy, że byłoby 100 użytkowników.

0

ok podpowiem więcej, skoro zaczynasz:

  1. Stwórz plik z kilkoma słówkami, który niech wygląda tak:
    1,yes,tak,0; ( id słówka, ang, pol, czy umiem?)
    2,no,nie,1;

2.Teraz odczyt danych z pliku TextReader i StreamReader (poczytaj o tym)

  1. Wyświetlanie na ekranie i wymaganie odpowiedzi od użytkownika

  2. TextWriter i StreamWriter żeby zapisywać informacje do pliku

Na początek zadziałaj na plikach, a jak wstawisz kod spróbujemy przerobić na bazę danych i obiekty ;)
no i poprawimy błędy ;)

0

Z odczytywaniem nie byłoby problemu myślę ale gorzej byłoby z zapisaniem, gdyż zawsze mi to nie wychodziło, podwajało zapisywany tekst lub wszystko było w jednej linijce dlatego rzadko korzystam z pliku, czesciej ze zmiennych, baz danych. Zaraz będę zaczynał to robić, jak coś nie będzie wychodzić to zgłoszę się do was

0

Może zacznij więc od tego, że wpis trzeba czymś identyfikować (id) i edytować go (jeżeli korzystasz z bazy) lub usunąć i zrobić nowy wpis (jeżeli korzystasz z operacji na pliku) - jednak jeżeli chciał byś korzystać z operacji na plikach, dla własnego ułatwienia zapisuj wszystko w nowej linii.
Oczywiście lepszym rozwiązaniem była by baza danych - wtedy tylko dobre zapytania ;)
Powodzenia - czekamy na efekty ^^

0

Ale jak będę zapisywał w bazie wszystko to ta baza chyba wybuchnie xd, skoro będę musiał dla każdego użytkownika użytkownika zapisywać czego się nauczył to będzie ogromna baza. Program tworzę także dla kolegów i koleżanek dlatego mówię użytkownicy. Przykładowo jakbym miał w pliku .txt takie linijki
**
1.yes,tak,0
2.no,nie,0
3.how,jak,1**

Z tej linijki umiem tylko jedno słówko więc dajemy na końcu 1, pozostałych dwóch linijek nie umiem więc stawiamy 0. Zaraz pomyślę nad tym jak te wyczytywanie ma wyglądać bo na razie nie mam na to pomysłu, myślałem, żeby każdą rzecz dać po czymś innym (,.|) aby łatwiej było odróżniać co jest do czego.

0

Nie mam kompletnie pomysłu jak wyczytywać to po id. czyli jeżeli potrzebuje słówek spod id. 4 to nie wiem jak mam to zrobić aby znalazło mi słówka spod id. 4 i słowo angielskie i polskie zapisało pod dwie różne zmienne. Wiem tylko, że trzeba zrobić readtoend, dalej nie mam pomysłu, substring też nie pójdzie chyba, że tylko id wyczytać, gdyż słówka nie będą tej samej długości, ale jak później się odnieść do konkretnej linijki :/

0
            string [] tekst = File.ReadAllLines(@"C:\Angielski.txt");
            string linia = tekst[nr_linii_od_zera];
            MessageBox.Show(linia.Substring(0, 1));

Zrobiłem coś takiego aby dobrać się do konkretnej linii i odczytuje index poprzez substring bo tak będzie najprościej.
Teraz tylko możecie mi pomóc, gdyż nie wiem jak mam wyodrębnić z tej linijki słówko polskie i angielskie do oddzielnych zmiennych. Będzie też problem z zapisaniem tych słówek a co najgorsze zedytowanie konkretniej linijki w celu zmiany (umiem,nie umiem)

0

podpowiem ;) jest taka funkcja jak split - może Ci się przydać ;D
A co do bazy danych - wcale by nie wybuchła ;)
baza danych ma dużą przepustowość ;) a przecież możesz pobierać np całą tabele z bazy i zapisywać id użytkownika i id słówka wtedy dodając do tego czy użytkownik umie ;)
Wyglądało by to tak:
tabela użytkownik:
-id
-login
-haslo
tabela słówka:
-id
-ang
-pol
tabela czy umiem:
-uzytkownik.id
-słówka.id
-czy umiem ( 1 lub 0)

do tego proste zapytanie ;)

0

Sprwadzę tą funkcje ale raczej będę korzystał z bazy mysql. Jeszcze tylko muszę wymyślić jak to wszystko ma działać

0

Wstyd cokolwiek pokazywać jak nic konkretnego nie mam :D. Muszę myśleć jak te losowanie słówek, cały ten mechanizm ma wyglądać

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