Advertisement
Guest User

projekt

a guest
Dec 1st, 2015
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.02 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. typedef struct kniha {
  7.     char sign[20], isbn[23], nazov[113], autori[113], preukaz[113];
  8.     int datum;
  9.     struct kniha *dalsi;
  10.     int poradie;
  11. }KNIHA;
  12.  
  13. void nacitanie(KNIHA **z, KNIHA *p, int *pocz) {
  14.     FILE *fr;
  15.     if ((fr = fopen("NASOBKY.TXT", "r")) == NULL) { printf("Zaznamy neboli nacitane\n"); exit (0); }
  16.     int poc=0;
  17.     char somarina[100];
  18.     KNIHA *pz=*z, *akt;
  19.     while (fgets(somarina, 100, fr) > 0)
  20.     {
  21.         ++poc;
  22.         p = (KNIHA*)malloc(sizeof(KNIHA));
  23.         fgets(p->sign, 20, fr);
  24.         p->sign[strlen(p->sign)-1]='\0';
  25.         fgets(p->isbn, 23, fr);
  26.         p->isbn[strlen(p->isbn)-1]='\0';
  27.         fgets(p->nazov, 113, fr);
  28.         p->nazov[strlen(p->nazov)-1]='\0';
  29.         fgets(p->autori, 113, fr);
  30.         p->autori[strlen(p->autori)-1]='\0';
  31.         fscanf(fr,"%d",&p->datum);
  32.         getc(fr);
  33.         fgets(p->preukaz, 113, fr);
  34.         p->preukaz[strlen(p->preukaz)-1]='\0';
  35.         p->poradie = poc;
  36.         p->dalsi = NULL;
  37.      
  38.       if(pz==NULL)
  39.         {
  40.             pz=p;
  41.             akt=p;
  42.         }
  43.         else
  44.         {
  45.             akt->dalsi=p;
  46.             akt=p;
  47.         }
  48.         p = p->dalsi;
  49.  
  50.     }
  51.  
  52.     *pocz=poc;
  53.     *z=pz;
  54.     fclose(fr);
  55. }
  56. void vypis(KNIHA **z, KNIHA *p, int *pocz) {
  57.     KNIHA *p1=*z;
  58.   if (p1!=NULL){
  59.     while (p1 != NULL) {
  60.         printf("%d.\nsignatura: %s\nisbn: %s\nnazov: %s\nautori: %s\ndatum: %d\npreukaz: %s\n", p1->poradie, p1->sign, p1->isbn, p1->nazov, p1->autori, p1->datum, p1->preukaz);
  61.         p1 = p1->dalsi;
  62.     }
  63. }
  64. }
  65. void vypozicky(KNIHA **z, KNIHA *p, char ciskaz[]){
  66.     int i=0;
  67.     p = *z;
  68.     if (p == NULL) printf("Pre dane cislo preukazu neevidujeme vypozicky\n");
  69.     else {
  70.       while(p != NULL){
  71.         if (strcmp(p->preukaz,ciskaz)==0){
  72.            ++i;
  73.            printf("%d.\nsignatura: %s\nisbn: %s\nnazov: %s\nautori: %s\ndatum: %d\npreukaz: %s\n", i, p->sign, p->isbn, p->nazov, p->autori, p->datum, p->preukaz);
  74.       }
  75.            p = p->dalsi;
  76.              
  77.     }
  78.       if (i==0) printf("Pre dane cislo preukazu neevidujeme vypozicky\n");
  79. }
  80. }
  81.  
  82. void aktualizacia(KNIHA **z, KNIHA *p, int datus){
  83.  p = *z;
  84.  int pocet=0;
  85.  if (p == NULL) printf("Aktualizovalo sa 0 zaznamov\n");
  86.   else {
  87.     while (p != NULL){
  88.       if ((p->datum)<=(datus)){
  89.         p->datum+=10000;
  90.         ++pocet;
  91.       }
  92.       p=p->dalsi;
  93.   }
  94. printf("Aktualizovalo sa %d zaznamov\n",pocet);
  95.   }
  96. }
  97.  
  98. void pridanie(KNIHA **z, KNIHA *p, int cislo){
  99. KNIHA *novy,*zacatek=*z,*pomocna;
  100. int i;
  101.  
  102. novy=(KNIHA *)malloc(sizeof(KNIHA));
  103.  
  104. if(novy == NULL)
  105.    printf("Chyba pri alokovani");
  106.         getchar();
  107.         fgets(novy->sign, 113, stdin);
  108.         novy->sign[strlen(novy->sign)-1]='\0';
  109.         fgets(novy->isbn, 113, stdin);
  110.         novy->isbn[strlen(novy->isbn)-1]='\0';
  111.         fgets(novy->nazov, 113, stdin);
  112.         novy->nazov[strlen(novy->nazov)-1]='\0';
  113.         fgets(novy->autori, 113, stdin);
  114.         novy->autori[strlen(novy->autori)-1]='\0';
  115.         scanf("%d",&novy->datum);
  116.         getchar();
  117.         fgets(novy->preukaz, 113, stdin);
  118.         novy->preukaz[strlen(novy->preukaz)-1]='\0';
  119.         //novy->poradie=cislo;
  120.         novy->dalsi=NULL;
  121.  
  122.  if(zacatek==NULL)
  123.  {
  124.    zacatek=novy;
  125.    novy->poradie=1;
  126.  }
  127.   else{
  128.    p = zacatek;
  129.     if (cislo == p->poradie){
  130.     novy->poradie=1;
  131.     novy->dalsi=zacatek;
  132.     zacatek=novy;
  133.     for (pomocna=zacatek->dalsi;pomocna!=NULL;pomocna=pomocna->dalsi)
  134.   pomocna->poradie+=1;
  135.     }
  136.         else{
  137.   p = zacatek;
  138.   if (cislo > p->poradie){
  139.       for (i=1;i < cislo-1; i++){
  140.        p=p->dalsi;
  141.       }
  142.        pomocna=p->dalsi;
  143.        p->dalsi = novy;
  144.        novy->dalsi=pomocna;
  145.  
  146.     for (pomocna=novy->dalsi;pomocna!=NULL;pomocna=pomocna->dalsi)
  147.   pomocna->poradie+=1;
  148.     }
  149.           else
  150.       {
  151.     p = zacatek;
  152.     while(p->dalsi!=NULL)
  153.     {
  154.         p = p->dalsi;
  155.     }
  156.     if(cislo>p->poradie){
  157.    novy->poradie=p->poradie + 1;
  158.    p->dalsi = novy;
  159.   }
  160.       }
  161.   }
  162.   }
  163.   *z=zacatek;
  164. }
  165.  
  166. void vymazanie(KNIHA **z, KNIHA *p, char vymaz[]){
  167.   KNIHA *predch, *zac=*z,*pomocna, *pozicia;
  168.   p=*z;
  169.   if (p!=NULL){
  170.   int i,pocet=0;
  171.   char c;
  172.   char poms1[100],poms2[100];
  173.   for (i=0;i<strlen(vymaz);i++){
  174.     c=toupper(vymaz[i]);
  175.     sprintf(poms1+i,"%c",c);}
  176.     poms1[i]='\0';  
  177.  
  178.  
  179.     while(p!=NULL)
  180.     {
  181.       for (i=0;i<strlen(p->autori);i++){
  182.       c=toupper(p->autori[i]);  
  183.         sprintf(poms2+i,"%c",c);}
  184.     if((strcmp(poms2,poms1)==0) || (strstr(poms2,poms1)!=NULL))
  185.     {
  186.       ++pocet;
  187.       pozicia=p;
  188.         if(p==zac)
  189.         {
  190.         zac=p->dalsi;
  191.         free(p);
  192.         p=p->dalsi;
  193.         }
  194.         else
  195.         {
  196.         predch->dalsi=p->dalsi;
  197.         free(p);
  198.         p=p->dalsi;
  199.         }
  200.       for (pomocna=pozicia;pomocna!=NULL;pomocna=pomocna->dalsi)
  201.   pomocna->poradie-=1;
  202.     }
  203.     else
  204.     {
  205.         predch=p;
  206.         p = p->dalsi;
  207.     }
  208.     }
  209. printf("Vymazalo sa %d zaznamov\n",pocet);
  210.  
  211. *z=zac;
  212. }
  213. else printf("Vymazalo sa 0 zaznamov\n");
  214. }
  215. int main()
  216. {
  217.     KNIHA *z1 = NULL, *p1 = NULL;
  218.     int *pz=(int*)malloc(sizeof(int)),datumis,c1;
  219.     char c,cpreukaz[100],vymaz[100];
  220.     while ((c = getchar()) > 0) {
  221.         if (c == 'n') { nacitanie(&z1, p1,pz); printf("Nacitalo sa %d zaznamov\n",*pz); }
  222.         else
  223.             if (c == 'v') vypis(&z1,p1,pz);
  224.             else
  225.                 if (c == 'h') {scanf("%s",cpreukaz); vypozicky(&z1, p1, cpreukaz);}
  226.                 else
  227.                     if (c == 'a') {scanf("%d",&datumis); aktualizacia(&z1, p1, datumis);}
  228.                     else
  229.                       if (c == 'p') {scanf("%d",&c1); while(c1<=0) scanf("%d",&c1); pridanie(&z1,p1,c1);}
  230.                         else
  231.                             if (c == 'z') {getchar(); fgets(vymaz,100,stdin); vymaz[strlen(vymaz)-1]='\0'; vymazanie(&z1,p1,vymaz);}
  232.                             else
  233.                                 if (c == 'k') { while ((p1 = z1) != NULL) {
  234.                                                     z1 = z1->dalsi;
  235.                                                     free (p1);
  236.                                                     }  
  237.                                                free (pz);
  238.                                                break;
  239.                                               }
  240.     }
  241.     return 0;
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement