Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Szlachetka Arkadiusz
- Katalog plyt umozliwiajacy wczytanie nieokteśloną liczbę pozycji w różnych działach tematycznych*/
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<ctype.h>
- /*Struktura okreslajaca jedna plyte*/
- typedef struct {
- char tytul[50],rodzaj_danych[30],nosnik[4],nr_katalogowy[6];
- int state;
- int *nast;
- int *poprz;
- }pozycja;
- void dodanie(pozycja t[], int i);
- void pok_alfab(pozycja t[]);
- void pok_nr(pozycja t[]);
- void edycja(pozycja t[]);
- int czyliczba (char a){
- if (a < '0' || a > '9') return 0; else return 1;
- }
- /******************************************************************/
- int main(void)
- {
- /*Tablica struktur jako katalog plyt*/
- pozycja katalog[30];
- pozycja *ile_plyt;
- char selektor;
- int j = 0;
- for(j=0;j < 30; ++j)
- {
- katalog[j].state=0;
- }
- printf("Szlachetka Arkadiusz\n");
- printf("Katalog plyt umozliwiajacy wczytanie do 30-tu pozycji\n");
- do{
- printf("\n1. Dodaj nowa pozycje.\n");
- printf("2. Edytuj plyty.\n");
- printf("3. Wyswietl wszystkie pozycje wedlug rodzaju danych i kolejnosci alfabetycznej.\n");
- printf("4. Wyswietl wszystkie pozycje wedlug numeru katalogowaego.\n");
- printf("5. Zakoncz prace.\n\n");
- scanf("\n%c", &selektor);
- switch(selektor)
- {
- case '1': j=0;
- while(katalog[j].state==1) ++j;
- dodanie(katalog,j);
- break;
- case '2': edycja(katalog);
- break;
- case '3': pok_alfab(katalog);
- break;
- case '4': pok_nr(katalog);
- break;
- case '5': printf("Milego dnia!\n\n");
- break;
- default: printf("Nieznany numer operacji, sprobuj jeszcze raz\n");
- }
- }
- while(selektor != '5');
- return 0;
- }
- void cleanbuff()
- {
- char c;
- while ((c = getchar()) != '\n' && c != EOF);
- }
- /*************Dodawanie n nowej pozycji******************/
- void dodanie(pozycja t[], int i)
- {
- char temp[50];
- int k,limit,liczydlo=0,x=1,y=0;
- printf("Ile nowych plyt chcesz dodac?\n");
- do
- {
- k=1;
- scanf("\n%s",temp);
- if(strlen(temp)==1)
- {
- liczydlo = atoi(temp);
- if(liczydlo==0)
- {
- printf("Wpisales zla wartosc,sprobuj raz jeszcze\n");
- k=0;
- }
- }
- else
- {
- k=0;
- printf("Wpisales zla wartosc, sprobuj raz jeszcze \n");
- }
- }
- k=1;
- //k=0;
- //k=1;
- //limit+=liczydlo;
- //ile_plyt =(pozycja*)malloc(limit * sizeof(pozycja));
- while(k==0);
- while(x <= liczydlo && i <30)
- {
- y=0;
- printf("Podaj tytul plyty: \n");
- scanf("\n%[ a-zA-Z0-9]s",temp);
- cleanbuff();
- strcpy(t[i].tytul, temp);
- while(y==0)
- {
- printf("Podaj rodzaj nosnika:\nJesli CD - wpisz [1]\nJesli DVD wpisz [2]\n");
- scanf("%d", &y);
- cleanbuff();
- if(y==1) {strcpy(t[i].nosnik,"CD"); y=3;}
- else if (y==2) {strcpy(t[i].nosnik,"DVD"); y=3;}
- else {printf("Zly wybor\n"); y=0;}
- }
- printf("Podaj rodzaj danych: \n");
- scanf("\n%[ a-zA-Z0-9]s",temp);
- cleanbuff();
- strcpy(t[i].rodzaj_danych,temp);
- printf("Podaj numer katalogowy: \n");
- do
- {
- scanf("%s",temp);
- cleanbuff();
- if((strlen(temp))==5)
- {
- k=0;
- for(y=0;y<3;y++)
- {
- k = (czyliczba(temp[y]));
- if (!k) break;
- }
- if (k)
- {
- for(y=3;y<5;y++)
- {
- k = (czyliczba(temp[y]));
- if (k) { k=0; break; }
- k = 1;
- }
- }
- if (k)
- {
- for (y=0;t[y].state == 1;y++)
- if (strcmp(t[y].nr_katalogowy,temp)==0) k=0;
- }
- }
- else
- {
- printf("Wpisales zla wartosc, sprobuj jeszcze raz \n");
- k=0;
- }
- if(k==0) printf("Wpisales zla wartosc, sprobuj jeszcze raz \nlub podany numer juz istnieje\n");
- }
- while(k==0);
- strcpy(t[i].nr_katalogowy,temp);
- /*Ustawienie stanu na 1, w ten sposob sprawdzam czy dany element tablicy
- miesci cos sensownego */
- t[i].state = 1;
- ++x;
- ++i;
- }
- if(i==30&&x<=liczydlo) printf("Niestety, nie ma juz miejsca na nowe plyty\n");
- }
- /*Wyswietlenie calego katalogu wg tytulu (alfabetycznie)*/
- void pok_alfab(pozycja t[])
- {
- int b=0,a=0,i=0,k=0,j=0;
- char tab[30];
- pozycja tmp;
- pozycja l[30];
- while (t[a].state==1)
- {
- b=0;
- while (b < 30)
- {
- tab[b] = tolower(t[a].rodzaj_danych[b]);
- b++;
- }
- strcpy(l[a].rodzaj_danych,tab);
- a++;
- }
- /*strcmp porownuje napisy*/
- do{ k=0;
- i=j+1;
- while(t[j].state==1 && t[i].state == 1)
- {
- if(strcmp(l[j].rodzaj_danych ,l[i].rodzaj_danych)>0){
- tmp = t[j];
- t[j]=t[i];
- t[i]=tmp;
- k=1;
- }
- else if(strcmp(l[j].rodzaj_danych,l[i].rodzaj_danych)==0){
- if(strcmp(l[j].tytul,l[i].tytul)>0){
- tmp = t[i];
- t[i]=t[j];
- t[j]=tmp;
- k=1;
- }
- }
- ++i;
- }
- ++j;
- }
- while(k==1);
- i=0;
- if(i==0 && t[i].state != 1) printf("Brak jakichkolwiek elementow katalogu\n");
- else
- {
- printf("Rodzaj danych\t\tTytul\t\tnumer\t\tnosnik\n");
- for (i=0;i<30;i++)
- {
- if (t[i].state==1)
- {
- if(strcmp(t[j].rodzaj_danych,t[i].rodzaj_danych)) printf("\n%s\t\t",t[i].rodzaj_danych); else printf("\t\t");
- printf("\t%s\t\t",t[i].tytul);
- printf("%s\t\t",t[i].nr_katalogowy);
- printf("%s\n",t[i].nosnik);
- j=i;
- }
- }
- }
- }
- /***Wyswietlenie calego katalogu wg numeru katalogowego:*/
- void pok_nr(pozycja t[])
- {
- int k = 0, j = 0, i = 0, m = 3, n = 3;
- pozycja tmp;
- do
- {
- i = j+1;
- k=1;
- while(t[j].state==1 && t[i].state==1)
- {
- n=3;
- m=3;
- while (n<5 && m<5)
- {
- if( (t[j].nr_katalogowy[m]) > (t[i].nr_katalogowy[n]) )
- {
- tmp = t[i];
- t[i]=t[j];
- t[j]=tmp;
- n=5;
- k=0;
- }
- else if ((t[j].nr_katalogowy[m]) < (t[i].nr_katalogowy[n]) )
- {
- n=5;
- k=0;
- }
- else
- {
- n++;
- m++;
- if( (t[j].nr_katalogowy[m]) > (t[i].nr_katalogowy[n]) )
- {
- tmp = t[i];
- t[i]=t[j];
- t[j]=tmp;
- n=5;
- k=0;
- }
- else if ((t[j].nr_katalogowy[m]) < (t[i].nr_katalogowy[n]) )
- {
- n=5;
- k=0;
- }
- else
- {
- n=0;
- m=0;
- while (m<3 && n<3)
- {
- if ((t[j].nr_katalogowy[m])>(t[i].nr_katalogowy[n]))
- {
- tmp = t[i];
- t[i]=t[j];
- t[j]=tmp;
- n=5;
- }
- n++;
- m++;
- }
- k=0;
- n=5;
- }
- }
- }
- ++i;
- }
- ++j;
- }
- while(k==0);
- i=0;
- if(i==0 && t[i].state != 1) printf("Brak jakichkolwiek elementow katalogu\n");
- else
- {
- printf("Numer\t\tRodzaj danych\t\tTytul\t\tnosnik\n");
- for (i=0;i<30;i++)
- {
- if (t[i].state==1)
- {
- printf("\n%s\t\t",t[i].nr_katalogowy);
- printf("%s\t\t\t",t[i].rodzaj_danych);
- printf("%s\t\t",t[i].tytul);
- printf("%s\n",t[i].nosnik);
- j=i;
- }
- }
- }
- }
- void edycja(pozycja t[])
- {
- char zmiana[6],temp[50];
- int k=0,a=0,l=0,y=0;
- if(t[0].state != 1) {printf("Brak jakichkolwiek elementow katalogu\n"); return;}
- do
- {
- a=0;
- printf("Ktora plyte chcesz edytowac? Wpisz jej numer katalogowy:\n");
- scanf("%s",zmiana);
- do
- {
- if (strcmp(t[a].nr_katalogowy,zmiana)==0) {l=1; break;}
- if (t[a].state != 1)
- {
- printf("Nie ma plyty o takim numerze.\n");
- l=0;
- break;
- }
- else l=1;
- a++;
- }
- while(strcmp(t[a].nr_katalogowy,zmiana)!=0);
- }
- while(t[0].state==1 && l==0);
- {
- printf("Podaj tytul plyty: \n");
- scanf("\n%[ a-zA-Z0-9]s",temp);
- cleanbuff();
- strcpy(t[a].tytul, temp);
- while(y==0)
- {
- printf("Podaj rodzaj nosnika:\nJesli CD - wpisz [1]\nJesli DVD wpisz [2]\n");
- while(!scanf("%d", &y))
- cleanbuff();
- if(y==1) {strcpy(t[a].nosnik,"CD"); y=3;}
- else if (y==2) {strcpy(t[a].nosnik,"DVD"); y=3;}
- else {printf("Zly wybor\n"); y=0;}
- }
- printf("Podaj rodzaj danych: \n");
- scanf("\n%[ a-zA-Z0-9]s",temp);
- cleanbuff();
- strcpy(t[a].rodzaj_danych,temp);
- printf("Podaj numer katalogowy: \n");
- do
- {
- scanf("%s",temp);
- cleanbuff();
- if(strcmp(temp,zmiana)==0) break;
- if((strlen(temp))==5)
- {
- k=0;
- for(y=0;y<3;y++)
- {
- k = (isdigit(temp[y]));
- if (!k) break;
- }
- if (k)
- {
- for(y=3;y<5;y++)
- {
- k = (isdigit(temp[y]));
- if (k) { k=0; break; }
- k = 1;
- }
- }
- if (k)
- {
- for (y=0;t[y].state == 1;y++)
- if (strcmp(t[y].nr_katalogowy,temp)==0) k=0;
- }
- }
- else
- {
- printf("Wpisales zla wartosc, sprobuj jeszcze raz \n");
- k=0;
- }
- if(k==0) printf("Wpisales zla wartosc, sprobuj jeszcze raz \nlub podany numer juz istnieje\n");
- }
- while(k==0);
- strcpy(t[a].nr_katalogowy,temp);
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement