All pastes #454769 Raw Edit

Untitled

public text v1 · immutable
·published 2007-04-23 20:21 UTC
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;
}