Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1.  
  2. #include<stdlib.h>
  3. #include<stdio.h>
  4. #include<string.h>
  5.  
  6. //struktura towar int numer, double cena, int ilosc, char nazwa[30]
  7. //plik o nazwie magazyn.txt
  8. //funkcja dodaj, jezeli istnieje zmien ilosc towaru na nowa, jesli nie istnieje to dodaj
  9. //funkcja przecena zwraca ilosc strat, przecenia wybrane towary o podany %
  10.  
  11. struct towar
  12. {
  13. char nazwa[30];
  14. int numer;
  15. float cena;
  16. int ilosc;
  17. };
  18.  
  19. void dodaj(char *nazwa);
  20. void wyswietl(char *nazwa);
  21. double przecena(char *nazwa);
  22.  
  23.  
  24. int main(void)
  25. {
  26. float tmp;
  27. char plik[13] = "magaz.txt";
  28. char c = ' ';
  29. do
  30. {
  31. printf("\n**********\n");
  32. printf("[d] - dodaj towar do bazy\n");
  33. printf("[w] - wyswietl liste\n");
  34. printf("[p] - przecen towary\n");
  35. printf("[q] - wyjscie\n");
  36. printf("\n**********\n");
  37.  
  38. fflush(stdin);
  39. scanf("%c", &c);
  40.  
  41. switch (c)
  42. {
  43. case 'd':
  44. dodaj(plik);
  45. break;
  46. case 'w':
  47. wyswietl(plik);
  48. break;
  49. case 'p':
  50. tmp = przecena(plik);
  51. printf("straty wynosza %f", tmp);
  52. break;
  53.  
  54. }
  55. } while (c != 'q');
  56.  
  57. scanf("%d", &c);
  58. return 0;
  59. }
  60.  
  61.  
  62.  
  63. void dodaj(char * nazwa)
  64. {
  65. int gotowe;
  66. gotowe = 0;
  67. FILE *plik;
  68. FILE *tmp;
  69. struct towar zKlawiatury, zPliku;
  70. int i = 0;
  71. if ((plik = fopen(nazwa, "r+")) == NULL)
  72. {
  73. plik = fopen(nazwa, "w+");
  74. }
  75. if ((tmp = fopen("tmp", "r+")) == NULL)
  76. {
  77. tmp = fopen("tmp", "w+");
  78. }
  79.  
  80. printf("podaj nazwe towaru\n");
  81. fflush(stdin);
  82. scanf("%s", zKlawiatury.nazwa);
  83. printf("podaj numer\n");
  84. fflush(stdin);
  85. scanf("%d", &zKlawiatury.numer);
  86. printf("podaj cene\n");
  87. fflush(stdin);
  88. scanf("%f", &zKlawiatury.cena);
  89. printf("podaj ilosc\n");
  90. fflush(stdin);
  91. scanf("%d", &zKlawiatury.ilosc);
  92.  
  93. while (fread(&zPliku, sizeof(struct towar), 1, plik) != 0)
  94. {
  95. if ((strcmp(zKlawiatury.nazwa, zPliku.nazwa) == 0) && (zKlawiatury.numer == zPliku.numer) && (zKlawiatury.cena == zPliku.cena))
  96. {
  97. zKlawiatury.ilosc = zPliku.ilosc + zKlawiatury.ilosc;
  98. fwrite(&zKlawiatury, sizeof(struct towar), 1, tmp);
  99. gotowe = 1;
  100. }
  101. else
  102. {
  103. fwrite(&zPliku, sizeof(struct towar), 1, tmp);
  104. }
  105.  
  106. }
  107. if (gotowe == 0)
  108. {
  109. fseek(plik, 0, SEEK_END);
  110. fwrite(&zKlawiatury, sizeof(struct towar), 1, tmp);
  111. }
  112.  
  113. fclose(tmp);
  114. fclose(plik);
  115.  
  116. remove(nazwa);
  117. rename("tmp", nazwa);
  118. }
  119.  
  120.  
  121. void wyswietl(char * nazwa)
  122. {
  123. int i = 0;
  124.  
  125. FILE *plik;
  126. struct towar m;
  127.  
  128. if ((plik = fopen(nazwa, "r+")) == NULL)
  129. {
  130. plik = fopen(nazwa, "w+");
  131. }
  132.  
  133. while (fread(&m, sizeof(struct towar), 1, plik) == 1)
  134. printf("[%d] %s \t %d \t %f \t %d \n", i++, m.nazwa, m.numer, m.cena, m.ilosc);
  135. fclose(plik);
  136.  
  137. }
  138.  
  139. double przecena(char * nazwa)
  140. {
  141. double sumastrat;
  142. struct towar wczytany;
  143. char c = ' ';
  144. int p;
  145. FILE *plik;
  146. FILE *tmp;
  147.  
  148. fflush(stdin);
  149.  
  150. if ((plik = fopen(nazwa, "r+")) == NULL)
  151. {
  152. plik = fopen(nazwa, "w+");
  153. }
  154. tmp = fopen("tmp", "w+");
  155.  
  156. while (fread(&wczytany, sizeof(struct towar), 1, plik) != 0)
  157. {
  158. fflush(stdin);
  159. printf("czy chcesz przecenic towar %s ? Wcisnij T\n", wczytany.nazwa);
  160. scanf("%c", &c);
  161. if ((c == 'T') || (c == 't'))
  162. {
  163. do
  164. {
  165. printf("o ile procent chcesz przecenic towar %s\n", wczytany.nazwa);
  166. fflush(stdin);
  167. scanf("%d", &p);
  168. } while ((p <= 100) && (p > 0));
  169.  
  170. sumastrat += (wczytany.cena * p / 100);
  171. wczytany.cena = wczytany.cena - (wczytany.cena * p / 100);
  172.  
  173. if (!(p == 100))
  174. {
  175. fwrite(&wczytany, sizeof(struct towar), 1, tmp);
  176. }
  177. }
  178. else
  179. {
  180. fwrite(&wczytany, sizeof(struct towar), 1, tmp);
  181. }
  182.  
  183. c = ' ';
  184.  
  185. }
  186.  
  187.  
  188.  
  189. fclose(tmp);
  190. fclose(plik);
  191.  
  192. remove(nazwa);
  193. rename("tmp", nazwa);
  194.  
  195. return sumastrat;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement