rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#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;
}