Advertisement
Guest User

Untitled

a guest
Apr 29th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct plyta{ /*struktura przechowujca informacje o pycie */
  6. char tytul[30]; /*pola autor i tytu mog mie栭aksymalnie 64 znaki*/
  7. char tworca[30];
  8. char gatunek[30];
  9. int cena;
  10. int rok_wydania;
  11. int dlugosc;
  12. };
  13.  
  14. int string_comparator(const void *a, const void *b){ /*funkcja wspomagajca qsort, decyduje o tym jak sortowa栥lementy, qsort przekazuje tu dwa wskaniki const void */
  15.  
  16. struct plyta const *ia = a;
  17. struct plyta const *ib = b;
  18. return strcmp(ia->tytul, ib->tytul); /*funkcja zwraca liczb꠼0, gdy s1 < s2, 0 gdy s1 jest taki sam jak s2 oraz liczb꠷iꫳz od zera gdy s1 > s2*/
  19. }
  20.  
  21. int main(int argc, char *argv[]){
  22. int n, i, pom2;
  23. struct plyta plyty[1000]; /*maksymalna liczba pyt to 1000*/
  24. char plik[30], tytul[30], pom, wybor;
  25. FILE *in, *out; /* zmienne przechowujce wskaniki do plik󷠪/
  26. n = 0;
  27. while(1){ /*niesko񣺯na p괬a w kt󲥪 naley wpisa栫olejne polecenia*/
  28. printf("Wybierz polecenie (Wpisz literke) \n");
  29. printf("spis polecen:\n c <-odczyt pliku \n d <-dodanie plyty \n w <- wypis listy plyt \n z <- zapis listy plyt\n k <- usuwanie plyty z listy \n s <- szukaj plyty \n q <- zamknij program \n");
  30. scanf("%c", &wybor); /*wczytywanie z pyty*/
  31. if( wybor == 'c'){ /*czytanie z pliku do programu*/
  32. printf("Podaj nazwe pliku\n");
  33. scanf("%s", plik);
  34. in = fopen(plik, "r"); /*otwiera plik in.txt, z opcj czytania */
  35. if (in == NULL){ /*sprawdzam czy plik istnieje*/
  36. printf("Plik wejsciowy nie istnieje\n");
  37. return 0;
  38. }
  39. else{
  40. fscanf(in, "%d", &n);
  41. for( i = 0; i < n; i++){
  42. fscanf(in, "%s", plyty[i].tytul); /*wczytujemy jedn warto栺 pliku wejciowego*/
  43. fscanf(in, "%s", plyty[i].tworca);
  44. fscanf(in, "%s", plyty[i].gatunek);
  45. fscanf(in, "%d", &(plyty[i].cena));
  46. fscanf(in, "%d", &(plyty[i].rok_wydania));
  47. fscanf(in, "%d", &(plyty[i].dlugosc));
  48. }
  49. }
  50. fclose(in); /*zamykamy strumie񠰬iku wyjciowego*/
  51. }
  52. else if( wybor == 'd'){ /*zmienna pomocnicza wyapujca biae znaki */
  53. printf("Dane: Tytul Autor Gatunek Cena Rok_wydania Dlugosc\n");
  54. scanf( "%c%s", &pom, plyty[n].tytul); /*wczytywanie z pliku wejciowego*/
  55. scanf( "%c%s", &pom, plyty[n].tworca);
  56. scanf( "%c%s", &pom, plyty[n].gatunek);
  57. scanf( "%d", &(plyty[n].cena));
  58. scanf( "%d", &(plyty[n].rok_wydania));
  59. scanf( "%d", &(plyty[n].dlugosc));
  60. n++;
  61. }
  62. else if( wybor == 'w'){ /*wypisywanie do terminala */
  63. qsort(plyty, n, sizeof(struct plyta), string_comparator); /*funkcja kt󲡠por󷮵je) */
  64. for(i = 0; i < n; i++){
  65. /*wczytywanie do terminala */
  66. printf("%s %s %s %d %d %d\n", plyty[i].tytul, plyty[i].tworca, plyty[i].gatunek, plyty[i].cena, plyty[i].rok_wydania, plyty[i].dlugosc);
  67. }
  68. }
  69. else if( wybor == 'z'){ /*zapisywanie do pliku */
  70. printf("Podaj nazwe pliku\n");
  71. scanf("%s", plik);
  72. out = fopen(plik,"w"); /*otwiera plik, z opcj wpisywania*/
  73. fprintf(out, "%d\n", n);
  74. for(i = 0; i < n; i++){
  75. fprintf(out, "%s %s %s %d %d %d\n", plyty[i].tytul, plyty[i].tworca, plyty[i].gatunek, plyty[i].cena, plyty[i].rok_wydania, plyty[i].dlugosc);
  76. }
  77. fclose (out);
  78. }
  79. else if( wybor == 'k'){ /*kasuje pyt꠯ wybranym tytule */
  80. scanf("%s", tytul);
  81. for( i = 0; i < n; i++){ /*usuwanie po tytule*/
  82. if(strcmp(tytul, plyty[i].tytul) == 0){
  83. plyty[i] = plyty[n-1]; /* plyta o indeksie 'i' zamienia si꠺ pyt o indeksie ostatnim, p󟮩ej wielkoc tablicy jest zmniejszana */
  84. n--;
  85. printf("usunieto\n");
  86. }
  87. }
  88. }
  89. else if( wybor == 's'){ /*wyszukuje informacji o pycie po jej tytule */
  90. printf("Wpisz tytul plyty\n");
  91. scanf("%s", tytul);
  92.  
  93. for( i = 0; i < n; i++){ /*wyszukiwanie po tytule*/
  94. pom2 = 0; /*zmienna sprawdza czy tytu istnieje w tablicy */
  95. if(strcmp(tytul, plyty[i].tytul) == 0){
  96. printf("%s %s %s %d %d %d\n", plyty[i].tytul, plyty[i].tworca, plyty[i].gatunek, plyty[i].cena, plyty[i].rok_wydania, plyty[i].dlugosc);
  97. pom2 = 1;
  98. }
  99. if(pom2 == 0){
  100. printf("Nie ma takiego tytulu\n");
  101. }
  102. }
  103. }
  104. else if( wybor == 'q'){ /* ko񣺹 program */
  105. break;
  106. }
  107. else
  108. printf("Nie znaleziono klucza\n");
  109. scanf("%c", &pom); /*wczytuje puste znaki */
  110. }
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement