Witam, otóż jestem początkujący w programowaniu w języku C.
Mam za zadanie utworzyć bazę filmów (tytuł-rok-gatunek) i do tej bazy powinno się dać dodawać filmy oraz posortować (sortowanie przez wybieranie) według tytułu, roku i gatunku.
I moim problemem jest wstawienie tej bazy do tablicy, aby posortować:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxDlugoscTytulu 50
#define maxDlugoscGatunku 50
//Struktura reprezentuj¹ca produkt
typedef struct movies_t
{
char tytul[maxDlugoscTytulu];
int rok;
char gatunek[maxDlugoscGatunku];
}Film;
int *t[20]; //tablica indeksów
char *t_gatunek[50]; //tablica imion
char *t_tytul[50]; //tablica nazwisk
//Struktura reprezentuj¹ca jedna liste
typedef struct lista1_t {
Film *movies;
struct lista1_t *nastepny;
} Lista;
//Dodawanie nowych flmów do bazy
Lista *dodaj(char tytul[], int rok, char gatunek[], Lista *lista1) {
Lista *nowaLista;
nowaLista = (Lista*)malloc(sizeof(Lista)); //alokacja pamiêci dla noweej listy
struct movies_t *movies = (struct movies_t*) calloc(1, sizeof(*movies)); //alokacja pamiêci dla nowego produktu
if(!movies)
{
fprintf(stderr, "Nie mo¿na zaalokowaæ pamiêci!");
exit(1);
}
strncpy(movies->tytul, tytul, sizeof(movies->tytul)); //przypisanie tytul do bazy
movies->rok = rok;
strncpy(movies->gatunek, gatunek, sizeof(movies->gatunek));
nowaLista->movies = movies;
nowaLista->nastepny= lista1;
lista1 = nowaLista;
return lista1;
}
//Funkcja do wypisywania filmow w konsoli
void wypisz(Lista *lista1) {
Lista *obecnaLista = lista1;
int liczbaPorzadkowa = 0;
while(obecnaLista != NULL) {
printf("%d. %s - %d - %s\n", liczbaPorzadkowa + 1, obecnaLista->movies->tytul, obecnaLista->movies->rok, obecnaLista->movies->gatunek);
obecnaLista = obecnaLista->nastepny;
liczbaPorzadkowa++;
}
}
//Funkcja zwracaj¹ca d³ugoœæ listy
int znajdzDlugoscListy(Lista *lista2)
{
int licznik = 0;
for (; lista2 != NULL; lista2 = lista2->nastepny)
{
++licznik;
}
return licznik;
}
int select_sort_tytul(Lista *movies_t)
{
char *tytul;
int i,j,m;
for (i=0;i<=50;++i)
{
m=i;
for (j=i+1;j<50;++j)
{
if ((tytul[j],t_gatunek[j],t[j])<(tytul[m],t_gatunek[m],t[m]))
m=j;
}
j=tytul[i],t[i],t_gatunek[i];
tytul[i],t[i],t_gatunek[i]=tytul[m],t[m],t_gatunek[m];
tytul[m],t[m],t_gatunek[m]=j;
}
/*for (i=0;i<500;i++)
{
printf("%c - %c - %c\t",t_tytul[i],t_gatunek[i],t[i]);
}*/return movies_t;
}
int main()
{
Lista *lista1 = NULL;
int wybor, rok;
char tytul[50];
char gatunek[50];
char *temp;
lista1 = dodaj("Plan B", 2010, "komedia", lista1);
lista1 = dodaj("Droga bez powrotu", 2003, "horror", lista1);
lista1 = dodaj("Kod niesmiertelnosci", 2011, "dramat", lista1);
lista1 = dodaj("Skarb narodow", 2004, "akcja", lista1);
lista1 = dodaj("The escort", 2015, "Dramat", lista1);
lista1 = dodaj("Hush", 2016, "dreszczowiec", lista1);
lista1 = dodaj("Annabelle", 2014, "mystery", lista1);
lista1 = dodaj("Witajcie w dzungli", 2003, "akcja", lista1);
while(1) {
printf("\n * Menu: *\n");
printf("\n 1. Dodaj nowy film do bazyn\n");
printf("\n 2. Wypisz liste filmow\n");
printf("\n 3. Posortuj filmy wg tytulu\n");
printf("\n 4. Posortuj filmy wg roku produkcji\n");
printf("\n 5. Posortuj filmy wg gatunku\n");
printf("\n 6. Zakoncz\n");
printf("\n Wybierz jedna z opcji [1-6] : ");
if (scanf("%d", &wybor) != 1) {
printf(" *Blad: Niepoprawne wejscie. Sprobuj ponownie !!!\n");
scanf("%s", &temp);
continue;
}
switch (wybor) {
case 1:
printf("Podaj tytu³ filmu, ktory chcesz dodac do bazy!\n");
scanf("%s", tytul);
printf("Podaj rok produkcji filmu, ktory chcesz dodac do bazy!\n");
scanf("%d", &rok);
printf("Podaj gatunek filmu, ktory chcesz dodac do bazy!\n");
scanf("%s", gatunek);
lista1 = dodaj(tytul, rok, gatunek, lista1);
break;
case 2:
printf("\nLista filmow znajdujacych sie w bazie: \n");
wypisz(lista1);
break;
case 3:
lista1 = select_sort_tytul(lista1);
printf("\nPosortowano wg tytulu !!!\n\n");
wypisz(lista1);
break;
case 4:
//lista1 = quicksortCena(lista1);
printf("\nPosortowano wg roku produkcji !!!\n\n");
wypisz(lista1);
break;
case 5:
//lista1 = quicksortNazwa(lista1);
printf("\nPosortowano wg gatunku !!!\n\n");
wypisz(lista1);
break;
case 6:
return(0);
break;
default:
printf("\nNiedozwolony opcja. Prosze sprobuj ponownie !!!\n");
}
}
return(0);
}