pilpol Temat założony przez niniejszego użytkownika |
[C++] Słownik elektroniczny » 2010-06-13 09:48:44 Szukam pomocy przy pisaniu programu który by umożliwiał gromadzenie definicji pojęć a następnie przeglądanie i wyświetlanie tych definicji cechą dodatkową będzie zapis do formatu XML, HTMLi DOC lub RTF. Dodatkowo program ma wyszukiwać dane definicji wg. nazwy definicji i słów kluczowych. Bardzo proszę o jakiejś pomysły. Głównie chodzi o zapis. |
|
malan |
» 2010-06-13 10:39:36 |
|
filipesq |
» 2010-06-13 11:41:07 @malan: W kursie WinApi na ddt.pl prawie nic nie ma. Polecam darkcult.org |
|
pilpol Temat założony przez niniejszego użytkownika |
dalsze problemy » 2010-06-19 13:24:12 #include <fstream> #include <iostream> #include <conio.h> #include "console.ddt" #define MAX_HASEL 50 #define WYSWIETL_HASLO 20 using namespace ddt::console; using namespace std; struct hasloST { string slowo; string definicja; }; hasloST Wczytajhaslo( void ); void WyswietlDanehasla( hasloST ); void WyswietlListehasel( hasloST tablica[], int iloscElelemtow, int zaznaczElement, int wyswietlOdElementu ); void Kasujhaslo( hasloST tablica[], int & iloscElementow, int indeksDoSkasowania ); void Dodajhaslo( hasloST tablica[], int & aktualnaIloscElementow ); void Wyszukajhaslo( hasloST ); void Zapiszhalo( hasloST ); void WyswietlKomunikaty( int iloscElementow )
{ textbackground( 0 ); textcolor( 7 ); gotoxy( 1, 1 ); cout << "Ilosc hasel: " << iloscElementow << "/" << MAX_HASEL << " "; gotoxy( 1, 24 ); cout << "[ESC] Wyjscie "; cout << "[INSERT] Dodaj wpis "; cout << "[GORA/DOL] Poruszanie sie po liscie "; gotoxy( 1, 25 ); cout << "[DELETE] Kasuj haslo "; cout << "[ENTER] Pokaz haslo "; cout << "[CTRL+ENTER] Edytuj haslo "; cout << " [F3] Wyszukaj haslo "; cout << "[F6] Zapisz haslo "; return; } void EdytujTekst( string & fTekst ); void EdytujDanehasla( hasloST & ); bool WczytajTekstZpliku( fstream & plik, string & napis ); void WczytajDaneZPliku( const char * nazwaPliku, hasloST tablica[], int & iloscElementow ); void ZapiszTekstDoPliku( fstream & plik, string & napis ); void ZapiszDaneDoPliku( const char * nazwaPliku, hasloST tablica[], int & iloscElementow ); int main() { hasloST haslo[ MAX_HASEL ]; int iloschasel = 0; WczytajDaneZPliku( "baza.dat", haslo, iloschasel ); bool koniec = false; int pozycja = 0; int pozycjaListy = 0; while( koniec != true ) { textcolor( 7 ); textbackground( 0 ); clrscr(); if( pozycja >= iloschasel ) pozycja = iloschasel - 1; if( pozycja < 0 ) pozycja = 0; if( pozycja > pozycjaListy +( WYSWIETL_HASLO - 1 ) ) pozycjaListy = pozycja -( WYSWIETL_HASLO - 1 ); if( pozycja < pozycjaListy ) pozycjaListy = pozycja; WyswietlListehasel( haslo, iloschasel, pozycja, pozycjaListy ); WyswietlKomunikaty( iloschasel ); unsigned char znak = getch(); switch( znak ) { case 224: znak = getch(); switch( znak ) { case 72: pozycja -= 1; break; case 80: pozycja += 1; break; case 82: Dodajhaslo( haslo, iloschasel ); break; case 83: Kasujhaslo( haslo, iloschasel, pozycja ); break; case 114: Wyszukajhaslo; break; case 117: Zapiszhalo; break; } znak = 0; break; case 10: if( iloschasel > 0 ) EdytujDanehasla( haslo[ pozycja ] ); break; case 13: if( iloschasel > 0 ) WyswietlDanehasla( haslo[ pozycja ] ); break; case 27: koniec = true; break; } } ZapiszDaneDoPliku( "baza.dat", haslo, iloschasel ); return( 0 ); } void Dodajhaslo( hasloST tablica[], int & aktualnaIloscElementow ) { if( aktualnaIloscElementow < MAX_HASEL ) { tablica[ aktualnaIloscElementow ] = Wczytajhaslo(); aktualnaIloscElementow += 1; } return; } hasloST Wczytajhaslo( void ) { hasloST thaslo; clrscr(); cout << "Podaj slowo kluczowe: "; getline( cin, thaslo.slowo ); cout << "Podaj definicje hasla: "; getline( cin, thaslo.definicja ); return( thaslo ); } void WyswietlListehasel( hasloST tablica[], int iloscElementow, int zaznaczElement, int wyswietlOdElementu ) { int max = wyswietlOdElementu + WYSWIETL_HASLO; if( max > iloscElementow ) max = iloscElementow; for( int i = wyswietlOdElementu; i < max; i++ ) { if( i == zaznaczElement ) { textbackground( 12 ); textcolor( 14 ); } else { textbackground( 0 ); textcolor( 7 ); } gotoxy( 1, 3 + i - wyswietlOdElementu ); for( int j = 0; j < 60; j++ ) cout << " "; gotoxy( 1, wherey() ); cout <<( i + 1 ); gotoxy( 10, wherey() ); cout << tablica[ i ].slowo; } return; } void WyswietlDanehasla( hasloST haslo ) { clrscr(); cout << "Slowo kluczowe to: " << haslo.slowo << endl; cout << "Definicja hasla to: " << haslo.definicja << endl; cout << "Nacisnij dowolny klawisz aby powrocic do slow kluczowych." << endl; getch(); return; } void Kasujhaslo( hasloST tablica[], int & iloscElementow, int indeksDoSkasowania ) { if( iloscElementow > 0 ) { int minx = 20; int miny = 11; int maxx = 80 -( minx - 1 ); int maxy = 25 -( miny - 1 ); textcolor( 15 ); textbackground( 1 ); for( int y = miny; y <= maxy; y++ ) { gotoxy( minx, y ); for( int x = minx; x <= maxx; x++ ) cout << " "; } gotoxy( minx + 1, miny ); textcolor( 15 ); cout << "Slowo kluczowe: "; textcolor( 14 ); cout << tablica[ indeksDoSkasowania ].slowo; gotoxy( minx + 1, miny + 1 ); textcolor( 15 ); cout << "Definicja: "; textcolor( 14 ); cout << tablica[ indeksDoSkasowania ].definicja; gotoxy( minx + 1, maxy ); textcolor( 15 ); cout << "Czy chcesz usunac ten wpis? (T/N)"; unsigned char tOdpowiedz = 0; do { tOdpowiedz = getch(); if( tOdpowiedz == 224 ) { getch(); tOdpowiedz = 0; } } while(( tOdpowiedz != 't' ) &&( tOdpowiedz != 'T' ) &&( tOdpowiedz != 'N' ) &&( tOdpowiedz != 'n' ) ); if(( tOdpowiedz == 't' ) ||( tOdpowiedz == 'T' ) ) { for( int i = indeksDoSkasowania + 1; i < iloscElementow; i++ ) tablica[ i - 1 ] = tablica[ i ]; iloscElementow -= 1; } } return; } void EdytujTekst( string & fTekst ) { string tNowy; getline( cin, tNowy ); if( tNowy.length() == 0 ) { cout << "Nie wprowadzono zmian!" << endl; } else { fTekst = tNowy; cout << "Wprowadzono zmiany!" << endl; } } void EdytujDanehasla( hasloST & fhaslo ) { clrscr(); cout << "Pole, ktore zostawisz puste nie zostanie zmienione." << endl; cout << "Podaj nowe slowo kluczowe (stare: \"" << fhaslo.slowo << "\"): "; EdytujTekst( fhaslo.slowo ); cout << "Podaj nowa definicje (stare: \"" << fhaslo.definicja << "\"): "; EdytujTekst( fhaslo.definicja ); return; } bool WczytajTekstZpliku( fstream & plik, string & napis ) { short tDlugosc = 0; plik.read( reinterpret_cast < char *>( & tDlugosc ), sizeof( tDlugosc ) ); if(( plik.gcount() == sizeof( tDlugosc ) ) ) { napis.resize( tDlugosc ); plik.read( const_cast < char *>( napis.c_str() ), tDlugosc ); if(( plik.gcount() != tDlugosc ) ) return( false ); } else return( false ); return( true ); } void WczytajDaneZPliku( const char * nazwaPliku, hasloST tablica[], int & iloscElementow ) { fstream plik; plik.open( nazwaPliku, ios::in | ios::binary ); if( plik.good() ) { iloscElementow = 0; while( !plik.eof() ) { hasloST tTymczasowehaslo; short tDlugosc; if( ( WczytajTekstZpliku( plik, tTymczasowehaslo.slowo ) == true ) && ( WczytajTekstZpliku( plik, tTymczasowehaslo.definicja ) == true ) ) { tablica[ iloscElementow ] = tTymczasowehaslo; iloscElementow++; } else break; } plik.close(); } else { plik.clear(); plik.open( nazwaPliku, ios::out | ios::binary ); if( plik.good() ) plik.close(); } } void ZapiszTekstDoPliku( fstream & plik, string & napis ) { short tDlugosc = napis.length(); plik.write( reinterpret_cast < char *>( & tDlugosc ), sizeof( tDlugosc ) ); plik.write( napis.c_str(), tDlugosc ); } void ZapiszDaneDoPliku( const char * nazwaPliku, hasloST tablica[], int & iloscElementow ) { fstream plik; plik.open( nazwaPliku, ios::out | ios::binary ); if( plik.good() ) { for( int i = 0; i < iloscElementow; i++ ) { ZapiszTekstDoPliku( plik, tablica[ i ].slowo ); ZapiszTekstDoPliku( plik, tablica[ i ].definicja ); } plik.close(); } } Jak na razie wypociłem tyle mam nas tepujące problemy: W jakim formacie najlepiej zapisać bazę slow tak aby można było ja wy edytować poza programem, jak zrobić moduł wyszukiwania bo taki prosty jak jest w kursie to nie zadowlic mojego wykładowce potrzebuje zrobić taki żeby można było zastąpić jakaś literkę znakiem ? lub wpisać tylko cześć danego kluczowego słowa, oraz co najważniejsze mam dalej problem z zapisem bardzo proszę o pomoc ja się dopiero co uczę programowania :) |
|
DejaVu |
» 2010-06-19 13:35:51 Użyj bazy danych SQLite jeżeli chcesz mieć jakiś sensowny projekt. W przeciwnym wypadku będziesz męczył się z wieloma aspektami, które są czasochłonne do wykonania, a w bazie są dostarczone gotowe mechanizmy np. do wyszukiwania dancyh, wstawiania rekordów, usuwania i aktualizacji. /edit: Jeżeli się uczysz dopiero programowania to w moim przekonaniu ten projekt Ciebie może przerosnąć. Wyszukiwanie z użyciem znaku ? tak czy inaczej wymaga użycia jakiejś biblioteki bądź napisania prostego algorytmu (funkcji) do przesukiwania tekstu. bool czyPasuje( const char * sTekst, const char * sWzorzec ) { return false; }
if( czyPasuje( "To jest jakis tekst", "a?i" ) ) { cout << "Dopasowano!"; }
W przypadku gdybyś nie miał tych znaków zapytania rozwiązanie byłoby proste, ale tak to musisz napisać sobie mechanizm obsługujący znaki zapytania (nie jest trudne, ale i tak zabierze Ci trochę czasu). |
|
« 1 » |