Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.01 KB | None | 0 0
  1. /*Szlachetka Arkadiusz
  2.             Katalog plyt umozliwiajacy wczytanie nieokteśloną liczbę pozycji w różnych działach tematycznych*/
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<string.h>
  6. #include<ctype.h>
  7.  
  8. /*Struktura okreslajaca jedna plyte*/
  9. typedef struct {
  10.        char tytul[50],rodzaj_danych[30],nosnik[4],nr_katalogowy[6];
  11.        int state;
  12.        int *nast;
  13.        int *poprz;
  14.        }pozycja;
  15. void dodanie(pozycja t[], int i);
  16. void pok_alfab(pozycja t[]);
  17. void pok_nr(pozycja t[]);
  18. void edycja(pozycja t[]);
  19.  
  20. int czyliczba (char a){
  21. if (a < '0' || a > '9') return 0; else return 1;
  22. }
  23. /******************************************************************/
  24. int main(void)
  25. {
  26.     /*Tablica struktur jako katalog plyt*/
  27.      pozycja katalog[30];
  28.      pozycja *ile_plyt;
  29.  
  30.  
  31.      char selektor;
  32.  
  33.     int j = 0;
  34.  
  35.     for(j=0;j < 30; ++j)
  36.     {
  37.         katalog[j].state=0;
  38.     }
  39.  
  40.    printf("Szlachetka Arkadiusz\n");
  41.    printf("Katalog plyt umozliwiajacy wczytanie do 30-tu pozycji\n");
  42.  
  43.  do{
  44.  
  45.            printf("\n1. Dodaj nowa pozycje.\n");
  46.            printf("2. Edytuj plyty.\n");
  47.            printf("3. Wyswietl wszystkie pozycje wedlug rodzaju danych i kolejnosci alfabetycznej.\n");
  48.            printf("4. Wyswietl wszystkie pozycje wedlug numeru katalogowaego.\n");
  49.            printf("5. Zakoncz prace.\n\n");
  50.                    scanf("\n%c", &selektor);
  51.  
  52.   switch(selektor)
  53.   {
  54.                    case '1': j=0;
  55.                             while(katalog[j].state==1) ++j;
  56.                             dodanie(katalog,j);
  57.                         break;
  58.                    case '2': edycja(katalog);
  59.                         break;
  60.                    case '3': pok_alfab(katalog);
  61.                         break;
  62.                    case '4': pok_nr(katalog);
  63.                         break;
  64.                    case '5': printf("Milego dnia!\n\n");
  65.                         break;
  66.                    default: printf("Nieznany numer operacji, sprobuj jeszcze raz\n");
  67.                    }
  68. }
  69.      while(selektor != '5');
  70.  
  71.     return 0;
  72. }
  73.  
  74. void cleanbuff()
  75. {
  76.     char c;
  77.     while ((c = getchar()) != '\n' && c != EOF);
  78. }
  79.  
  80. /*************Dodawanie n nowej pozycji******************/
  81. void dodanie(pozycja t[], int i)
  82. {
  83.      char temp[50];
  84.      int k,limit,liczydlo=0,x=1,y=0;
  85.  
  86.      printf("Ile nowych plyt chcesz dodac?\n");
  87. do
  88.     {
  89.        k=1;
  90.     scanf("\n%s",temp);
  91.         if(strlen(temp)==1)
  92.         {
  93.             liczydlo = atoi(temp);
  94.             if(liczydlo==0)
  95.             {
  96.                             printf("Wpisales zla wartosc,sprobuj raz jeszcze\n");
  97.                             k=0;
  98.             }
  99.         }
  100.             else
  101.             {
  102.                 k=0;
  103.                 printf("Wpisales zla wartosc, sprobuj raz jeszcze \n");
  104.             }
  105. }
  106.  
  107.  
  108.  
  109. k=1;
  110. //k=0;
  111. //k=1;
  112. //limit+=liczydlo;
  113. //ile_plyt =(pozycja*)malloc(limit * sizeof(pozycja));
  114.  
  115. while(k==0);
  116.  
  117.       while(x <= liczydlo && i <30)
  118.      {
  119.             y=0;
  120.             printf("Podaj tytul plyty: \n");
  121.             scanf("\n%[ a-zA-Z0-9]s",temp);
  122.             cleanbuff();
  123.             strcpy(t[i].tytul, temp);
  124.  
  125.        while(y==0)
  126.        {
  127.                    printf("Podaj rodzaj nosnika:\nJesli CD - wpisz [1]\nJesli DVD wpisz [2]\n");
  128.                    scanf("%d", &y);
  129.                    cleanbuff();
  130.                    if(y==1) {strcpy(t[i].nosnik,"CD"); y=3;}
  131.                    else if (y==2) {strcpy(t[i].nosnik,"DVD"); y=3;}
  132.                    else {printf("Zly wybor\n"); y=0;}
  133.         }
  134.  
  135.             printf("Podaj rodzaj danych: \n");
  136.             scanf("\n%[ a-zA-Z0-9]s",temp);
  137.             cleanbuff();
  138.             strcpy(t[i].rodzaj_danych,temp);
  139.  
  140.             printf("Podaj numer katalogowy: \n");
  141.  
  142.                 do
  143.                     {
  144.                 scanf("%s",temp);
  145.                 cleanbuff();
  146.                 if((strlen(temp))==5)
  147.                 {
  148.                                      k=0;
  149.                                for(y=0;y<3;y++)
  150.                                {
  151.                                                k = (czyliczba(temp[y]));
  152.                                                if (!k) break;
  153.                                }
  154.                                if (k)
  155.                                {
  156.                                       for(y=3;y<5;y++)
  157.                                       {
  158.                                                k = (czyliczba(temp[y]));
  159.                                                if (k) { k=0; break; }
  160.                                                k = 1;
  161.  
  162.                                       }
  163.                                }
  164.                                if (k)
  165.                                {
  166.                                      for (y=0;t[y].state == 1;y++)
  167.                                      if (strcmp(t[y].nr_katalogowy,temp)==0) k=0;
  168.                                }
  169.                 }
  170.                 else
  171.                             {
  172.                                 printf("Wpisales zla wartosc, sprobuj jeszcze raz \n");
  173.                                 k=0;
  174.                             }
  175.                         if(k==0) printf("Wpisales zla wartosc, sprobuj jeszcze raz \nlub podany numer juz istnieje\n");
  176.               }
  177.                     while(k==0);
  178.             strcpy(t[i].nr_katalogowy,temp);
  179.      /*Ustawienie stanu na 1, w ten sposob sprawdzam czy dany element tablicy
  180.      miesci cos sensownego */
  181.             t[i].state = 1;
  182.  
  183.             ++x;
  184.             ++i;
  185.      }
  186.      if(i==30&&x<=liczydlo) printf("Niestety, nie ma juz miejsca na nowe plyty\n");
  187. }
  188. /*Wyswietlenie calego katalogu wg tytulu (alfabetycznie)*/
  189. void pok_alfab(pozycja t[])
  190. {
  191.  
  192.  
  193.     int b=0,a=0,i=0,k=0,j=0;
  194.     char tab[30];
  195.     pozycja tmp;
  196.     pozycja l[30];
  197.    
  198.     while (t[a].state==1)
  199.     {
  200.  
  201.           b=0;                  
  202.             while (b < 30)
  203.             {
  204.                   tab[b] = tolower(t[a].rodzaj_danych[b]);
  205.                   b++;
  206.                   }
  207.           strcpy(l[a].rodzaj_danych,tab);
  208.           a++;
  209.     }
  210.  
  211.  
  212.  
  213. /*strcmp porownuje napisy*/
  214.    do{     k=0;
  215.         i=j+1;
  216.         while(t[j].state==1 && t[i].state == 1)
  217.         {
  218.              if(strcmp(l[j].rodzaj_danych ,l[i].rodzaj_danych)>0){
  219.                 tmp = t[j];
  220.                 t[j]=t[i];
  221.                 t[i]=tmp;
  222.                 k=1;
  223.                                                            }
  224.         else if(strcmp(l[j].rodzaj_danych,l[i].rodzaj_danych)==0){
  225.                 if(strcmp(l[j].tytul,l[i].tytul)>0){
  226.                     tmp = t[i];
  227.                 t[i]=t[j];
  228.                 t[j]=tmp;
  229.                  k=1;
  230.                                                     }
  231.         }
  232.               ++i;
  233.         }
  234.     ++j;
  235.     }
  236.     while(k==1);
  237.  
  238. i=0;    
  239. if(i==0 && t[i].state != 1) printf("Brak jakichkolwiek elementow katalogu\n");
  240. else
  241. {
  242.     printf("Rodzaj danych\t\tTytul\t\tnumer\t\tnosnik\n");
  243.    
  244.     for (i=0;i<30;i++)
  245.     {
  246.         if (t[i].state==1)
  247.         {
  248.            
  249.             if(strcmp(t[j].rodzaj_danych,t[i].rodzaj_danych)) printf("\n%s\t\t",t[i].rodzaj_danych); else printf("\t\t");
  250.            
  251.             printf("\t%s\t\t",t[i].tytul);
  252.             printf("%s\t\t",t[i].nr_katalogowy);
  253.             printf("%s\n",t[i].nosnik);
  254.             j=i;
  255.         }
  256.     }
  257. }
  258.  
  259.  
  260. }
  261.  
  262. /***Wyswietlenie calego katalogu wg numeru katalogowego:*/
  263. void pok_nr(pozycja t[])
  264. {
  265.     int k = 0, j = 0, i = 0, m = 3, n = 3;
  266.     pozycja tmp;
  267.  
  268. do
  269. {
  270.     i = j+1;
  271.     k=1;
  272. while(t[j].state==1 && t[i].state==1)
  273. {
  274.     n=3;
  275.     m=3;                                
  276.     while (n<5 && m<5)
  277.     {
  278.         if( (t[j].nr_katalogowy[m]) > (t[i].nr_katalogowy[n]) )
  279.         {
  280.             tmp = t[i];
  281.             t[i]=t[j];
  282.             t[j]=tmp;
  283.             n=5;
  284.             k=0;
  285.         }
  286.         else if ((t[j].nr_katalogowy[m]) < (t[i].nr_katalogowy[n]) )
  287.         {
  288.             n=5;
  289.             k=0;
  290.         }
  291.         else
  292.         {
  293.                  n++;
  294.                  m++;
  295.                  if( (t[j].nr_katalogowy[m]) > (t[i].nr_katalogowy[n]) )
  296.                  {
  297.                      tmp = t[i];
  298.                      t[i]=t[j];
  299.                      t[j]=tmp;
  300.                      n=5;
  301.                      k=0;
  302.  
  303.                  }
  304.                  else if ((t[j].nr_katalogowy[m]) < (t[i].nr_katalogowy[n]) )
  305.                  {
  306.                       n=5;
  307.                       k=0;
  308.  
  309.                  }
  310.  
  311.                  else
  312.                  {
  313.                           n=0;
  314.                           m=0;
  315.                           while (m<3 && n<3)
  316.                           {
  317.                                 if ((t[j].nr_katalogowy[m])>(t[i].nr_katalogowy[n]))
  318.                                 {
  319.                                    tmp = t[i];
  320.                                    t[i]=t[j];
  321.                                    t[j]=tmp;
  322.  
  323.                                    n=5;
  324.                                 }
  325.  
  326.                                 n++;
  327.                                 m++;
  328.  
  329.                           }
  330.                           k=0;
  331.                           n=5;
  332.  
  333.                   }
  334.          }
  335.      }  
  336.         ++i;
  337. }
  338. ++j;
  339. }
  340. while(k==0);
  341.  
  342. i=0;    
  343. if(i==0 && t[i].state != 1) printf("Brak jakichkolwiek elementow katalogu\n");
  344. else
  345. {
  346.     printf("Numer\t\tRodzaj danych\t\tTytul\t\tnosnik\n");
  347.    
  348.     for (i=0;i<30;i++)
  349.     {
  350.         if (t[i].state==1)
  351.         {
  352.             printf("\n%s\t\t",t[i].nr_katalogowy);
  353.             printf("%s\t\t\t",t[i].rodzaj_danych);
  354.             printf("%s\t\t",t[i].tytul);
  355.             printf("%s\n",t[i].nosnik);
  356.             j=i;
  357.         }
  358.     }
  359. }
  360.  
  361.       }
  362.  
  363. void edycja(pozycja t[])
  364. {
  365.      char zmiana[6],temp[50];
  366.      int k=0,a=0,l=0,y=0;
  367.      if(t[0].state != 1) {printf("Brak jakichkolwiek elementow katalogu\n"); return;}
  368. do
  369. {
  370.      a=0;
  371.      printf("Ktora plyte chcesz edytowac? Wpisz jej numer katalogowy:\n");
  372.      scanf("%s",zmiana);
  373.      do
  374.      {
  375.             if (strcmp(t[a].nr_katalogowy,zmiana)==0) {l=1; break;}
  376.             if (t[a].state != 1)
  377.             {
  378.                  printf("Nie ma plyty o takim numerze.\n");
  379.                  l=0;
  380.                  break;
  381.             }
  382.             else l=1;
  383.             a++;
  384.      }
  385.      while(strcmp(t[a].nr_katalogowy,zmiana)!=0);
  386. }
  387.  
  388. while(t[0].state==1 && l==0);
  389.  
  390. {              
  391.      
  392.             printf("Podaj tytul plyty: \n");
  393.             scanf("\n%[ a-zA-Z0-9]s",temp);
  394.             cleanbuff();
  395.             strcpy(t[a].tytul, temp);
  396.  
  397.        while(y==0)
  398.        {
  399.                    printf("Podaj rodzaj nosnika:\nJesli CD - wpisz [1]\nJesli DVD wpisz [2]\n");
  400.                    while(!scanf("%d", &y))
  401.                    cleanbuff();
  402.                    if(y==1) {strcpy(t[a].nosnik,"CD"); y=3;}
  403.  
  404.                  else if (y==2) {strcpy(t[a].nosnik,"DVD"); y=3;}
  405.                    else {printf("Zly wybor\n"); y=0;}
  406.         }
  407.  
  408.             printf("Podaj rodzaj danych: \n");
  409.             scanf("\n%[ a-zA-Z0-9]s",temp);
  410.             cleanbuff();
  411.             strcpy(t[a].rodzaj_danych,temp);
  412.  
  413.             printf("Podaj numer katalogowy: \n");
  414.  
  415.                 do
  416.                     {
  417.                 scanf("%s",temp);
  418.                 cleanbuff();
  419.                 if(strcmp(temp,zmiana)==0) break;
  420.                 if((strlen(temp))==5)
  421.                 {
  422.                                      k=0;
  423.                                for(y=0;y<3;y++)
  424.                                {
  425.                                                k = (isdigit(temp[y]));
  426.                                                if (!k) break;
  427.                                }
  428.                                if (k)
  429.                                {
  430.                                       for(y=3;y<5;y++)
  431.                                       {
  432.                                                k = (isdigit(temp[y]));
  433.                                                if (k) { k=0; break; }
  434.                                                k = 1;
  435.  
  436.                                       }
  437.                                }
  438.                                if (k)
  439.                                {
  440.                                      for (y=0;t[y].state == 1;y++)
  441.                                      if (strcmp(t[y].nr_katalogowy,temp)==0) k=0;
  442.                                }
  443.                 }
  444.                 else
  445.                             {
  446.                                 printf("Wpisales zla wartosc, sprobuj jeszcze raz \n");
  447.                                 k=0;
  448.                             }
  449.                         if(k==0) printf("Wpisales zla wartosc, sprobuj jeszcze raz \nlub podany numer juz istnieje\n");
  450.               }
  451.                     while(k==0);
  452.             strcpy(t[a].nr_katalogowy,temp);
  453.             return;
  454. }
  455.  
  456. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement