shiftry123

Laboratorium 2 Zadanie 3

Apr 2nd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //ANALIZATOR
  6.  
  7. int main(char argc, char* argv[]) {
  8.  
  9.     //ciag znakow przechowjacy nazwe sklepu, dla ktorego ma byc przeprowadzona analiza
  10.     char* shop_name;
  11.  
  12.     //zmienne z wyniakmi analizy
  13.     float tax = 0;
  14.     float loss = 0;
  15.     float profit = 0;
  16.  
  17.     if (argc == 2) {
  18.         //odczytanie nazwy sklepu
  19.         shop_name = argv[1];
  20.     }
  21.     else {
  22.         //nazwa sklepu nie zostala podane
  23.         printf("Podaj nazwe sklepu, dla ktorego chcesz przeprowadzic analize!");
  24.         return 0;
  25.     }
  26.  
  27.     //strumien obslugujacy plik z lista zyskow i strat
  28.     FILE* data_file;
  29.  
  30.     //nazwa pliku do otwarcia
  31.     char file_name[256];
  32.  
  33.     //przygotowanie nazwy pliku do otwarcia
  34.     sprintf_s(file_name, "%s.csv", shop_name);
  35.  
  36.     //otwarcie pliku z lista zyskow i strat
  37.     fopen_s(&data_file, file_name, "r");
  38.  
  39.     if (data_file == NULL) {
  40.         //zostala podana nieprawidlowa nazwa sklepu
  41.         printf("Dla tego sklepu nie istnieje lista zyskow i strat!");
  42.         return 0;
  43.     }
  44.  
  45.     //bufor linii
  46.     char line[256];
  47.  
  48.     //odczytywanie pliku linia po linii
  49.     while (fgets(line, sizeof(line), data_file)) {
  50.  
  51.         //licznik przechowujacy indeks ostatniego przecinka
  52.         int last = 0;
  53.  
  54.         //flaga zatrzymania petli
  55.         int stop = 0;
  56.  
  57.         //informacja o tym, ktora z wartosci jest odczytywana
  58.         int val = 0;
  59.  
  60.         //petla odczytujaca linie znak po znaku
  61.         for (int i = 0; line[i] < 256; i++) {
  62.  
  63.             //jesli trafiono na przecinek
  64.             if (line[i] == ',' || line[i] == '\n') {
  65.                 //bufor aktualnie odczytywanej liczby
  66.                 char number[256];
  67.  
  68.                 //odczytanie wszystkich cyfr od ostatniego przecinka do aktualnego
  69.                 for (int j = last; j < i; j++) {
  70.                     number[j - last] = line[j];
  71.                 }
  72.  
  73.                 //zakonczenie ciagu cyfer znakiem konca
  74.                 number[i] = '\0';
  75.  
  76.                 //ustawienie indeksu na znak po przecinku
  77.                 last = i + 1;
  78.  
  79.                 if (val == 0) {
  80.                     //odczytano zysk
  81.                     profit += (float)atof(number);
  82.                 }
  83.                 else if (val == 1) {
  84.                     //odczytano strate
  85.                     loss += (float)atof(number);
  86.                 }
  87.                 else {
  88.                     //odczytano podatek
  89.                     tax += (float)atof(number);
  90.                 }
  91.  
  92.                 val++;
  93.  
  94.                 //jesli natrafiono na koniec
  95.                 if (line[i] == '\n') {
  96.                     //last = i + 2;
  97.                     //ustawienie flagi konca na 1
  98.                     stop = 1;
  99.                 }
  100.             }
  101.  
  102.             //jesli natrafiono na koniec linii, to zatrzymanie petli
  103.             if (stop == 1) {
  104.                 break;
  105.             }
  106.         }
  107.     }
  108.  
  109.     //zamkniecie pliku z lista zyskow i strat
  110.     fclose(data_file);
  111.  
  112.     //strumien obslugujacy plik z wynikami analizy
  113.     FILE* return_data_file;
  114.  
  115.     //nazwa pliku z wynikami analizy
  116.     char return_file_name[256];
  117.  
  118.     //przygotowanie nazwy pliku z wynikami analizy
  119.     sprintf_s(return_file_name, "analyzed_%s.csv", shop_name);
  120.  
  121.     //otwarcie pliku
  122.     fopen_s(&return_data_file, return_file_name, "w");
  123.  
  124.     //zapisanie w pliku wynikow analizy
  125.     fprintf_s(return_data_file, "zyski,straty,podatki\n%.2f,%.2f,%.2f\n", profit, loss, tax);
  126.  
  127.     //zamkniecie pliku
  128.     fclose(return_data_file);
  129.  
  130.     printf("Analiza zakonczona powodzeniem!");
  131.     return 0;
  132. }
Add Comment
Please, Sign In to add comment