Mam do napisania program spis płyt cd i dvd. Wszystko działa mam problem z posortowaniem alfabetycznie. Co jest nie tak? Co zmienić?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <time.h>
#define BUFOR 100
struct katalog_CD
{
char NAZWA[20];
char WYKONAWCA[20];
char SERIA[15];
}katc[30];
struct katalog_DVD
{
char NAZWAD[20];
char WYKONAWCAD[20];
char SERIAD[15];
}katd[30];
char rodzaj[3]={'\0'};
int ro;
int r,p,i,j,dlugosc=0,dlugosc1=0;
FILE *plik;
char nazwa[20];
void WyborSpisuCD()
{
int wybor1=0, dzialanie;
do
{
printf("Podaj nazwe pliku do otworzenia na spis CD\n");
scanf("%s",nazwa);
printf("\n\nPodales nazwe pliku: %s\n",nazwa);
printf("Chcesz otworzyc ten plik?\n");
printf("\n1-tak\n2-nie (wpisz jeszcze raz)\n");
printf("Jesli plik nie istnieje zostanie utworzony!\n");
scanf("%d",&wybor1);
}
while(wybor1!=1);
}
FILE *plik1;
char nazwa1[20];
void WyborSpisuDVD()
{
int wybor2=0, dzialanie;
do
{
printf("Podaj nazwe pliku do otworzenia na spis DVD\n");
scanf("%s",nazwa);
printf("\n\nPodales nazwe pliku: %s\n",nazwa1);
printf("Chcesz otworzyc ten plik?\n");
printf("\n1-tak\n2-nie (wpisz jeszcze raz)\n");
printf("Jesli plik nie istnieje zostanie utworzony!\n");
scanf("%d",&wybor2);
}
while(wybor2!=1);
}
void WyswietlCD()
{
char *BuffFile;
plik=fopen(nazwa,"a+");
if((BuffFile=(char*)malloc(BUFOR))==NULL)
{
printf("Nie moge przydzielic pamieci!\n");
exit(1);
}
fscanf(plik, "%d", &dlugosc);
system("cls");
for (i=0; i<dlugosc; i++)
{
fscanf(plik, "%s", &katc[i].NAZWA);
fscanf(plik, "%s", &katc[i].WYKONAWCA);
fscanf(plik, "%s", &katc[i].SERIA);
}
fclose(plik);
for( i=0; i<dlugosc; i++)
{
printf("Dane CD%2d:\n\tNazwa: %s\n\tWykonawca %s \n\tSeria: %s\n",
i+1,katc[i].NAZWA,katc[i].WYKONAWCA,katc[i].SERIA);
}
}
void WyswietlDVD()
{
char *BuffFile;
plik1=fopen(nazwa1,"a+");
if((BuffFile=(char*)malloc(BUFOR))==NULL)
{
printf("Nie moge przydzielic pamieci!\n");
exit(1);
}
fscanf(plik1, "%d", &dlugosc1);
system("cls");
for (j=0; j<dlugosc1; j++)
{
fscanf(plik1, "%s", &katd[j].NAZWAD);
fscanf(plik1, "%s", &katd[j].WYKONAWCAD);
fscanf(plik1, "%s", &katd[j].SERIAD);
}
fclose(plik1);
for( j=0; j<dlugosc1; j++)
{
printf("Dane DVD%2d:\n\tNazwa: %s\n\tWykonawca %s \n\tSeria: %s\n",
j+1,katd[j].NAZWAD,katd[j].WYKONAWCAD,katd[j].SERIAD);
}
}
void DodajPozycje()
{
printf("Jakiego formatu jest plyta ? (CD/DVD)\n");
scanf("%s",&rodzaj);
ro=strlen(rodzaj);
if(ro<3)
{
printf("Podaj ile pozycji chcesz dodac: \n");
scanf("%d",&r);
for(i=0;i<r;i++)
{
printf("Podja nazwe plyty: \n");
scanf("%s",&katc[dlugosc].NAZWA);
printf("Podaj autora plyty: \n");
scanf("%s,",katc[dlugosc].WYKONAWCA);
printf("Podaj serie: \n");
scanf("%s",&katc[dlugosc].SERIA);
dlugosc=dlugosc+1;
}
plik =fopen(nazwa,"w");
fprintf(plik, "%d\n", dlugosc);
for(i=0; i<=dlugosc; i++)
{
fprintf(plik, "%s %s %s\n",
katc[i].NAZWA, katc[i].WYKONAWCA, katc[i].SERIA);
}
fclose(plik);
skok1:;
printf("\n");
printf("Spis plyt CD:\n\n");
for(i=0;i<=dlugosc;i++)
{
printf("Nazwa: %s \n Wykonawca: %s \n Seria: %s \n",
katc[i].NAZWA,katc[i].WYKONAWCA,katc[i].SERIA);
}
}
else
{
printf("Podaj ile pozycji chcesz dodac: \n");
scanf("%d",&p);
for(j=0;j<p;j++)
{
printf("Podja nazwe plyty: \n");
scanf("%s",&katd[dlugosc1].NAZWAD);
printf("Podaj autora plyty: \n");
scanf("%s,",katd[dlugosc1].WYKONAWCAD);
printf("Podaj serie: \n");
scanf("%s",&katd[dlugosc1].SERIAD);
dlugosc1=dlugosc1+1;
}
plik1=fopen(nazwa1,"w");
fprintf(plik1, "%d\n", dlugosc1);
for(j=0; j<=dlugosc1; j++)
{
fprintf(plik1, "%s %s %s\n",
katd[j].NAZWAD, katd[j].WYKONAWCAD, katd[j].SERIAD);
}
fclose(plik1);
skok2:;
printf("\n");
printf("Spis plyt DVD:\n\n");
for(j=0;j<=dlugosc1;j++)
{
printf("Nazwa: %s \n Wykonawca: %s \n Seria: %s \n",
katd[j].NAZWAD,katd[j].WYKONAWCAD,katd[j].SERIAD);
}
}
}
void EdytujPozycje()
{
int e;
char BuffFile;
printf("Jakiego formatu jest plyta ? (CD/DVD)\n");
scanf("%s",&rodzaj);
ro=strlen(rodzaj);
if(ro<3)
{
//EDYCJA CD
for( i=0; i<dlugosc; i++)
{
printf("%2d: %s %s %s\n",
i+1, katc[i].NAZWA, katc[i].WYKONAWCA, katc[i].SERIA);
}
printf("Podaj ktora pozycje chcesz edytowac \n");
scanf("%d",&e);
e=e-1;
printf("Podj nowa nazwe plyty: \n");
scanf("%s",&katc[e].NAZWA);
printf("Podaj autora plyty: \n");
scanf("%s,",katc[e].WYKONAWCA);
printf("Podaj serie: \n");
scanf("%s",&katc[e].SERIA);
plik =fopen(nazwa,"w");
fscanf(plik, "%d", &dlugosc);
for(i=0;i<=e;i++)
{
fprintf(plik, "%s %s %s\n", katc[i].NAZWA, katc[i].WYKONAWCA, katc[i].SERIA);
}
fclose(plik);
skok3:;
}
else
{
int f;
char BuffFile;
//EDYCJA DVD
for( j=0; j<dlugosc; j++)
{
printf("%2d: %s %s %s\n",
j+1, katd[j].NAZWAD, katd[j].WYKONAWCAD, katd[j].SERIAD);
}
printf("Podaj ktora pozycje chcesz edytowac \n");
scanf("%d",&f);
f=f-1;
printf("Podj nowa nazwe plyty: \n");
scanf("%s",&katd[f].NAZWAD);
printf("Podaj autora plyty: \n");
scanf("%s,",katd[f].WYKONAWCAD);
printf("Podaj serie: \n");
scanf("%s",&katd[f].SERIAD);
plik1 =fopen(nazwa1,"w");
fscanf(plik1, "%d", &dlugosc1);
for(j=0;j<=f;j++)
{
fprintf(plik1, "%s %s %s\n", katd[j].NAZWAD, katd[j].WYKONAWCAD, katd[j].SERIAD);
}
fclose(plik1);
skok4:;
}
}
void UsunPozycje()
{
printf("Jakiego formatu jest plyta ? (CD/DVD)\n");
scanf("%s",&rodzaj);
ro=strlen(rodzaj);
if(ro<3)
{
int u,x;
usun:
for( i=0; i<dlugosc; i++)
{
printf("%2d: %s %s %s\n",
i+1, katc[i].NAZWA, katc[i].WYKONAWCA, katc[i].SERIA);
}
printf("Ktora pozycje skasowac:");
scanf("%d", &u);
if(u>dlugosc)
{
printf("\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!Nie ma takiej pozycji !!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
printf("Wybierz numer od 1 do %d:\n", dlugosc);
goto usun;
}
printf("Pozycja %d: %s %s %s - zostanie usunieta\nCzy kontynuowac?(tak-1)",
u, katc[u-1].NAZWA, katc[u-1].WYKONAWCA, katc[u-1].SERIA);
scanf("%d", &x);
if (x==1)
{
plik =fopen(nazwa,"w");
fprintf(plik, "%d\n", dlugosc-1);
for(i=0; i<dlugosc; i++)
{
if(i==u-1)
{
printf("\nUSUNIETO\n");
}
else fprintf(plik, "%s %s %s\n",
katc[i].NAZWA, katc[i].WYKONAWCA, katc[i].SERIA);
}
fclose(plik);
}
else printf("\nAnulowano usuwanie.\n");
}
else
{
int v,y;
usun1:
for( j=0; j<dlugosc1; j++)
{
printf("%2d: %s %s %s\n",
j+1, katd[j].NAZWAD, katd[j].WYKONAWCAD, katd[j].SERIAD);
}
printf("Ktora pozycje skasowac:");
scanf("%d", &v);
if(v>dlugosc1)
{
printf("\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!Nie ma takiej pozycji !!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
printf("Wybierz numer od 1 do %d:\n", dlugosc1);
goto usun;
}
printf("Pozycja %d: %s %s %s - zostanie usunieta\nCzy kontynuowac?(tak-1)",
v, katd[v-1].NAZWAD, katd[v-1].WYKONAWCAD, katd[v-1].SERIAD);
scanf("%d", &y);
if (y==1)
{
plik1 =fopen(nazwa1,"w");
fprintf(plik1, "%d\n", dlugosc1-1);
for(j=0; j<dlugosc1; j++)
{
if(j==v-1)
{
printf("\nUSUNIETO\n");
}
else fprintf(plik1, "%s %s %s\n",
katd[j].NAZWAD, katd[j].WYKONAWCAD, katd[j].SERIAD);
}
fclose(plik1);
}
else printf("\nAnulowano usuwanie.\n");
}
}
void Sortuj()
{
int sortowanie;
printf("Według jakiego ktyterium chcesz sortowac? \n1.Nazwy \n2.Wykonawcy \n3.Serii? \nWybierz (1-3): ");
void Naz()
{
int sortujNAZWA(const void *a, const void *b)
{
const katc *el1 = a;
const katc *el2 = b;
if(el1->NAZWA<el2->NAZWA)
return -1;
else
if(el1->NAZWA==el2->NAZWA)
return 0;
else
return 1;
}
qsort(nazwa,30, sizeof(katc),sortuj_NAZWA)
printf("Dane posortowane\n");
}
void Wykon()
{
}
void Ser()
{
}
switch(sortowanie)
{
case 1:Naz();
case 2:Wykon();
case 3:Ser();
}
}
int main()
{
printf("Program sluzy do katalogowania plyt CD i DVD \n\n");
WyborSpisuCD();
WyborSpisuDVD();
int dzialanie;
while (dzialanie!=0)
{
printf("\n\nMenu uzytkownika. Wybierz dzialanie:\n");
printf("\t1. Wyswietl spis CD\n");
printf("\t2. Wyswietl spis DVD\n");
printf("\t3. Dodaj pozycje do spisu CD/DVD\n");
printf("\t4. Edytuj pozycje w spisie CD/DVD\n");
printf("\t5. Usun pozycje ze spisu CD/DVD\n");
printf("\t6. Sortowanie\n");
printf("\t0. Wyjscie\n");
scanf("%d",&dzialanie) ;
switch(dzialanie)
{
case 1:WyswietlCD(); break;
case 2:WyswietlDVD(); break;
case 3:DodajPozycje(); break;
case 4:EdytujPozycje(); break;
case 5:UsunPozycje(); break;
case 6:Sortuj(); break;
case 0:printf("Do zobaczenia!\n");break;
default: printf("Wybrales nieistniejace dzialanie!\n"); break;
}
}
return 0;
}