#include #include #include #define dlugosc_tekstu 20 void pustak (unsigned char szerokosc, char tekst[]); void brak_rek(void); void menu(void); enum boolean { false, true }; enum klawisze { enter = 13, f1 = 59, f5 = 63 }; //########################################################## //lista struct el_listy { struct el_listy *nastepny; struct el_listy *poprzedni; char tekst[dlugosc_tekstu]; }; //########################################################## //zmienne globalne struct el_listy *poczatek = NULL; struct el_listy *koniec = NULL; struct el_listy *bierzacy = NULL; struct el_listy *element = NULL; unsigned char m; //liczba wierszy menu //########################################################## void dodaj(char tekst[]) { struct el_listy *element = malloc(sizeof(struct el_listy)); strcpy(element->tekst, tekst); if (bierzacy) { if (bierzacy->nastepny) { element->nastepny = bierzacy->nastepny; bierzacy->nastepny->poprzedni = element; } else { element->nastepny = NULL; koniec = element; } element->poprzedni = bierzacy; bierzacy->nastepny = element; } else { element->poprzedni = NULL; element->nastepny = NULL; poczatek = element; koniec = element; } bierzacy = element; } //########################################################## void wprowadz(void) { char str[dlugosc_tekstu]; do { printf("Wprowadz tekst : "); fgets(str, dlugosc_tekstu, stdin); } while (str[0] == 10); str[strlen(str) - 1] = 0; dodaj(str); } //########################################################## void pokaz_bierzacy(void) { if (bierzacy) printf("\n%s\n", bierzacy->tekst); else brak_rek(); } //########################################################## void pokaz_wszystkie(void) { if (bierzacy) { menu(); struct el_listy *tymczas = bierzacy; tymczas = poczatek; do { printf("\n%s\n", tymczas->tekst); if (tymczas->nastepny) tymczas = tymczas->nastepny; } while (tymczas != koniec); printf("\n%s\n", tymczas->tekst); } else brak_rek(); system("pause"); } //########################################################## void pokaz_dokladnie(void) { if (bierzacy) { struct el_listy *tymczas = bierzacy; tymczas = poczatek; printf("\npoczatek %s ", poczatek->tekst); printf("\nkoniec %s ", koniec->tekst); printf("\nbierzacy %s ", bierzacy->tekst); int i = 0; do { printf("\n%s ", tymczas->tekst); if (tymczas->poprzedni) printf("poprzedni %s ", tymczas->poprzedni->tekst); else printf("poprzedni NULL "); if (tymczas->nastepny) printf("nastepny %s", tymczas->nastepny->tekst); else printf("nastepny NULL"); if (i++ == 10) break; if (tymczas->nastepny) tymczas = tymczas->nastepny; else break; } while (true); printf("\ntymczas %s ", tymczas->tekst); if (tymczas->poprzedni) printf("poprzedni %s ", tymczas->poprzedni->tekst); else printf("poprzedni NULL "); if (tymczas->nastepny) printf("nastepny %s", tymczas->nastepny->tekst); else printf("nastepny NULL"); } puts("\n"); system("pause"); } //########################################################## void usun_bierzacy(void) { if (bierzacy) { if (bierzacy->nastepny) { if (bierzacy->poprzedni) { bierzacy->poprzedni->nastepny = bierzacy->nastepny; bierzacy->nastepny->poprzedni = bierzacy-> poprzedni; bierzacy = bierzacy->poprzedni; } else { bierzacy->nastepny->poprzedni = NULL; poczatek = bierzacy->nastepny; bierzacy = bierzacy->nastepny; } } else if (bierzacy->poprzedni) { bierzacy->poprzedni->nastepny = NULL; koniec = bierzacy->poprzedni; bierzacy = bierzacy->poprzedni; } else { bierzacy = NULL; poczatek = NULL; koniec = NULL; } } } //########################################################## void kolejny(void) { if (bierzacy) if (bierzacy->nastepny) bierzacy = bierzacy->nastepny; } //########################################################## void z_powrotem(void) { if (bierzacy) if (bierzacy->poprzedni) bierzacy = bierzacy->poprzedni; } void poczatek_listy(void) { if (bierzacy) bierzacy = poczatek; } void koniec_listy(void) { if (bierzacy) bierzacy = koniec; } //########################################################## void plotek (unsigned char szerokosc) { unsigned char i; for (i = 0; i < szerokosc; i++) putchar('#'); //putchar('\n'); } void pustak (unsigned char szerokosc, char tekst[]) { unsigned char i; printf("# %s", tekst); for (i = 2 + strlen(tekst); i < szerokosc; i++) if (i == szerokosc - 1) putchar('#'); else putchar(0); //putchar('\n'); } //########################################################## #define sz_okna 80 #define wys_okna 25 void menu(void) { m = 0; system("cls"); plotek(sz_okna); pustak(sz_okna, "n - poprzedni, m - nastepny, k - ostatni, p - pierwszy"); pustak(sz_okna, "enter - wprowadz tekst, d - usun, a - pokaz wszystkie"); plotek(sz_okna); /* unsigned char i; for(i = 4 + m; i < wys_okna - 2; i++) pustak(sz_okna, ""); plotek(sz_okna); */ } //########################################################## void odczyt(void) { poczatek = NULL; koniec = NULL; bierzacy = NULL; FILE *plik = NULL; if (plik = fopen("c:\\plik.txt", "rt")); { char str[dlugosc_tekstu]; while (fgets( str, dlugosc_tekstu, plik ) != NULL) { str[strlen(str) - 1] = 0; dodaj( str ); } } fclose(plik); } //########################################################## void zapis(void) { if (bierzacy) { FILE *plik = NULL; if (plik = fopen("c:\\plik.txt", "wt")); { struct el_listy *tymczas = poczatek; do { fprintf(plik, "%s\n", tymczas->tekst); if (tymczas->nastepny) tymczas = tymczas->nastepny; else break; } while(true); fclose(plik); } } } //########################################################## void wyszukaj(void) { if (bierzacy) { char str[dlugosc_tekstu]; do { printf("Podaj tekst do wyszukania : "); fgets(str, dlugosc_tekstu, stdin); str[strlen(str) - 1] = 0; } while (str[0] == 10); struct el_listy *tymczas = poczatek; do { if (strpbrk(str, tymczas->tekst)) { bierzacy = tymczas; break; } if (tymczas->nastepny) tymczas = tymczas->nastepny; else break; } while(true); printf("Brak rekordu spelniajacego kryterium"); system("pause"); } } //########################################################## void brak_rek(void) { printf("Brak rekordow !\n"); } //########################################################## int main() { enum klawisze znak1, znak2; do { menu(); pokaz_bierzacy(); znak2 = '\0'; znak1 = getch(); if (znak1 == '\0') znak2 = getch(); fflush(stdin); if (znak1 == '\0') switch (znak2) { case f1: zapis(); break; case f5: odczyt(); break; } else switch (znak1) { case enter: wprowadz(); break; case 'n': z_powrotem(); break; case 'm': kolejny(); break; case 'd': usun_bierzacy(); break; case 'a': pokaz_wszystkie(); break; case 'p': poczatek_listy(); break; case 'k': koniec_listy(); break; case 'w': pokaz_dokladnie(); break; case 'f': wyszukaj(); break; } } while (znak1 != 'q'); return 0; }