Wyszukiwarka Struktury

Odpowiedz Nowy wątek
2017-11-26 18:13
0

Napisać i uruchomić program do wyszukiwania plików dźwiękowych w pewnej bazie danych (znanej a'priori, np. umieszczonej w kodzie źródłowym programu - nie trzeba pisać procedury wprowadzania danych przez użytkownika!). Pojedynczy rekord w bazie odpowiada jednemu plikowi, a plik charakteryzuje się następującymi cechami:

  1. Nazwa oraz katalog na dysku, w którym plik się znajduje (czyli pełna ścieżka dostępu)
  2. Typ pliku (MP3 / WAV / WMA / OPUS itp.)
  3. Czas trwania
  4. Opis
    1. Wykonawca
    2. Tytuł
    3. Gatunek (Disco, Classic, Rock, itp.)

No i tak zaczałem i potem próbowałem recznie pododawać jakieś dane do struktury. I czy da się ją jakoś sprawnie wypełnić? I czy to wyszukiwanie to powinna być pętla idąca po kolei po wszystkich zmiennych sprawdzająca jeden typ ?

#include <stdio.h>
#include <stdlib.h>

enum format{MP3,WAV,WMA,OPUS};
enum gatunek{Disco,Rock,Country,Classic,Pop,Rap,Electronic,Soul,RnB,Jazz};
struct songs{
enum format form;
float dlug;
char wyk[25];
char tyt[30];
enum gatunek gat;
}

Ogólnie jeśli chodzi o struktury to jestem laikiem i z góry dzięki za pomoc !!!

Pozostało 580 znaków

2017-11-26 19:04
0
  1. Ta baza to ma być sql czy tylko taka lista rekordów wypełnionych w programie? jeśli to drugie to stwórz sobie plik tekstowy i odczytaj z niego dane.
  2. Wyszukiwanie jak to wyszukiwanie, musisz sprawdzać po kolei każdy rekord z listy czy spełnia podany warunek, np czy nazwa wykonawcy się zgadza, jeśli nie następny rekord, jeśli tak to znaleziono szukany rekord, inaczej chyba tego nie da się wymyślić, chociaż można jakoś zoptymalizować.

Pozostało 580 znaków

2017-11-26 19:15
0

Tylko lista rekordów. Ale nwm jak odczytać dane i dać je do struktury?

Pozostało 580 znaków

2017-11-26 19:19
0

Bo tak to poprostu tak wypisuje

struct songs s1;
struct songs s2;
struct songs s3;
struct songs s4;

s1.form =0;
s2.form =1;
s3.form =2;
s4.form =3;

s1.dlug =1.20;
s2.dlug =3.20;
s3.dlug =3.22;
s4.dlug =4.20;

s1.wyk ="Toto";
s2.wyk ="Jackson";
s3.wyk ="Travis Scott";
s4.wyk ="Pink Floyd";

^^^^ tu w sumie powinno byc strcpy^^^

edytowany 1x, ostatnio: Adam Smoliński, 2017-11-26 19:25
I chyba wystarczy wpisać poprostu więc chill - Adam Smoliński 2017-11-26 19:26

Pozostało 580 znaków

2017-11-26 19:34
0

Tylko czy mogę dać te s1 s2 s3 s4 jako tablice s[1] s[2] ... Jeśli tak to jak to zrobić?

Pozostało 580 znaków

2017-11-26 19:47
Zimny Orzeł
0

Możesz jako tablice to zrobić, ale jest jeden problem jak zrobisz na typie tablicowym a[0] to iterujesz na wielkości tablicy, byś musiał wcześniej zrzutować na typ wskaźnikowy ewentualnie elementowy struktury jakoś (int)element i potem iterować.

Pozostało 580 znaków

2017-11-26 21:31
0

Dobra ogarnałem tyle jakieś pomysły czemu szukacz nie działa ?

#include <stdio.h>
#include <stdlib.h>
#define MAX_SCIEZKA 256
#define MAX_TXT 128
#define BAB 5
const char* numopis(int i, const char** tab)
{
    return tab[i];
}

enum typp {MP3, WAV, WMA, OPUS};
const char* typOpisy[] = {"MP3", "WAV", "WMA", "OPUS"};

enum Gatunek {DISCO, CLASSIC, ROCK};
const char* gatOpisy[] = {"DISCO", "CLASSIC", "ROCK"};

struct plik{
    char sciezka[MAX_SCIEZKA];
    enum typp typ;
    float dlugosc;
    char wykonawca[MAX_TXT];
    char tytul[MAX_TXT];
    enum Gatunek gatunek;
};
void rekord(const struct plik* p){
printf("Scieżka %s\n",p->sciezka);
printf(" %s %s",p->wykonawca, p->tytul);
printf("Dlugosc %.2f minut",p->dlugosc);
printf("\n gatunek %s",numopis(p->gatunek,gatOpisy));
printf("\n format %s",numopis(p->typ,typOpisy));
}
void szukacz(float t, const struct plik* p){
int a;
for(a=0;a<BAB;a++){
    if(baza[a].dlugosc ==t);
    rekord(&baza[a]);

}
}

int main()
{

    int i;
    float t;

    const struct plik baza[] = {
        { "pulpit/muzyka/totoafrica0.wav",   WAV,  1,  "Toto", "Africa", DISCO   },
        { "pulpit/muzyka/jackson1.wav",   WAV,  2.4,  "Jackson", "Smooth", DISCO   },
        { "pulpit/muzyka/mask2.wav",   WAV,  1.5,  "Future", "Mask off", CLASSIC   },
        { "pulpit/muzyka/pink3.mp3",  MP3, 1.6,   "Pink Floyd", "High Hopes", ROCK   },
        { "pulpit/muzyka/bones4.mp3",   MP3,  1.8,   "Bones", "DIRT", CLASSIC   },
        { "pulpit/muzyka/y5.opus",   OPUS,  2.2,  "Ylivis", "Fox", CLASSIC   }
    };
    printf("Wpisz nr rekordu \n");
    scanf(" %d", &i);

    rekord(&baza[i]);

    printf("Poszukaj utworu po długości, wpisz długsc");
    scanf("%f", &t);

    return 0;
}

Sory za brak komentarzy w kodzie

edytowany 2x, ostatnio: Adam Smoliński, 2017-11-26 21:33

Pozostało 580 znaków

2017-11-26 21:35
Zimny Orzeł
0
Adam Smoliński napisał(a):
printf("Poszukaj utworu po długości, wpisz długsc");
    scanf("%f", &t);

    return 0;

Chodzi ci o to, że po wprowadzeniu wartości, po której chcesz szukać wychodzisz z maina i nic nie robisz?

Chodzilo mi o funkcje szukacz bo przy kompilacji error baza undeclared first use in function i nie wiem co zrobic nie przywolalem jeszcze tej funkcji bo błąd mi wyskakiwał - Adam Smoliński 2017-11-26 21:38

Pozostało 580 znaków

2017-11-26 21:42
Zimny Orzeł
0
void szukacz(float t, const struct plik* p){
int a;
for(a=0;a<BAB;a++){
    if(baza[a].dlugosc ==t);
    rekord(&baza[a]);

}
}

const struct plik *p
A baza ?

może p[a].dlugosc?

Pozostało 580 znaków

2017-11-26 21:43
Zimny Orzeł
0

czy tam p[a]->dlugosc bo nie pamiętam kiedy jest -> a kiedy . :(

No w sumie jo zamiast baza powinno być plik - Adam Smoliński 2017-11-26 21:44

Pozostało 580 znaków

2017-11-26 21:44
Zimny Orzeł
0

Ewentualnie const struct plik p zamień na const struct plik baza

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0