Witam,
mam na jutro do napisania program w [C] i z niektórymi rzeczami mam problem. Ogólnie program ma wczytywać z pliku *.txt bazę danych o filmach, zapisać to wszystko do poszczególnych tablic i następnie na kilka sposobów przetwarzać. Część rzeczy już zrobiłem, ale część nie chce mi wyjść, m.in. :
-
Sortowanie w strukturze, funkcja mi działa, ale chcąc wyświetlić część posortowaną i do tego nazwę oryginalnie przypisaną do tej daty to wyświetla mi nazwy w oryginalnej kolejności, tzn np mając filmy:
Iron man 3 2013
Iron man 2008
Iron man 2 2010
gdy to posortuję wg dat to nazwy zostają w takiej samej kolejności, a lata będą 2008,2010 i 2013. Jest coś nie tak z indeksowaniem i nie wiem jak to poprawić. -
Wyszukiwanie elementu w tablicy. Chodzi np o wyszukanie wszystkich filmów akcji i wyświetlenie ich. Próbowałem przez wyszukanie zwykłym for'em i dopisanie do nowej tablicy ale nie wyszło mi to.
-
Menu wyboru. Jakoś nie za bardzo mogę ogarnąć polecenie switch i case.
Wszystkie wskazówki i uwagi będą bardzo cenne i z góry dziękuję za pomoc :)
Dorzucam kod tego, co mi się do tej pory udało zrobić i część pliku tekstowego.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct dane
{
char tytul[100];
char rezyser[100];
char rok[100];
char gatunek[100];
char ocena[100];
char a[100];
};
struct dane tab[100];
void sortujrok( struct dane tabela[], int rozmiar )
{
int i, j;
char bufor[100];
for(j=0;j<rozmiar;j++)
{
for(i=0;i<rozmiar-1;i++)
{
if(strcmp(tabela[i].rok,tabela[i+1].rok)>0)
{
strcpy(bufor,tabela[i+1].rok);
strcpy(tabela[i+1].rok,tabela[i].rok);
strcpy(tabela[i].rok,bufor);
}
}
}}
void sortujocena( struct dane tabela[], int rozmiar )
{
int i, j;
char bufor[100];
for(j=0;j<rozmiar;j++)
{
for(i=0;i<rozmiar-1;i++)
{
if(strcmp(tabela[i].ocena,tabela[i+1].ocena)>0)
{
strcpy(bufor,tabela[i+1].ocena);
strcpy(tabela[i+1].ocena,tabela[i].ocena);
strcpy(tabela[i].ocena,bufor);
}
}
}}
void sortujgatunek( struct dane tabela[], int rozmiar )
{
int i, j;
char bufor[100];
for(j=0;j<rozmiar;j++)
{
for(i=0;i<rozmiar-1;i++)
{
if(strcmp(tabela[i].gatunek,tabela[i+1].gatunek)>0)
{
strcpy(bufor,tabela[i+1].gatunek);
strcpy(tabela[i+1].gatunek,tabela[i].gatunek);
strcpy(tabela[i].gatunek,bufor);
}
}
}}
int main ()
{
int i=0, j, k, size=0, wiersz=1, pomoc;
char rok[100];
char b;
FILE *file = fopen("baza.txt", "r");
FILE *file2 =fopen("x.txt", "w");
while(!feof(file))
{
fscanf(file,"%[^;]%*c%[^;]%*c%[^;]%*c%[^;]%*c%[^;]%*c%*c", tab[wiersz-1].tytul, tab[wiersz-1].rezyser, tab[wiersz-1].rok, tab[wiersz-1].gatunek, tab[wiersz-1].ocena);
++size;
fprintf(file2,"%d %s %s %s %s %s \n", wiersz, tab[wiersz-1].tytul, tab[wiersz-1].rezyser, tab[wiersz-1].rok, tab[wiersz-1].gatunek, tab[wiersz-1].ocena);
++wiersz;
}
fclose(file);
fclose(file2);
FILE *file3 = fopen("z.txt", "w");
wiersz=1;
fprintf(file3, "Lp Tytul Rezyser Rok produkcji Gatunek Ocena(1-10)\n\n");
for(i=0;i<size;i++)
{
fprintf(file3, "%d %s %s %s %s %s \n", wiersz, tab[wiersz-1].tytul, tab[wiersz-1].rezyser, tab[wiersz-1].rok, tab[wiersz-1].gatunek, tab[wiersz-1].ocena);
++wiersz;}
fclose(file3);
system("PAUSE");
return 0;
}
W taki sposób mam przygotowaną bazę filmów (przykładowe 3):
Iron Man 3;Shane Black;2013;Akcja,Sci-Fi;7,8;
Zielona mila;Frank Darabont;1999;Dramat;8,7;
Forrest Gump;Robert Zemeckis;1994;Dramat;8,6;
Pozdrawiam i liczę na szybką pomoc :)