Advertisement
Guest User

Zal

a guest
Jan 29th, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.17 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. // Deklaracja struktury
  7. typedef struct samochod
  8. {
  9.     char tablica[10], marka[20], model[20];
  10.     float litraz, paliwo, olej, ubezpieczenie;
  11.     int ludzie, przebieg, koszta;
  12.     struct samochod *poprzedni, *nastepny; // wskaźniki na poprzednią i kolejną strukturę w bazie
  13.    
  14. } samochod;
  15.  
  16. // Funkcja Wyszukaj przyjmuje jako argument wskaźnik do początku bazy oraz łańcuch znaków. Zwraca ona wskaźnik do konkretnej struktury.
  17. samochod* Wyszukaj(samochod *Wskaznik, char *tablica)
  18. {
  19.     samochod *wsk;
  20.     wsk = Wskaznik; // tymczasowy wskaźnik, początkowo zawierający taki sam adres jak wskaźnik na pierwszą strukturę bazy
  21.    
  22.     while (strcmp(wsk->tablica, tablica) != 0)  // strcmp - funkcja z biblioteki string.h, porównuje ona dwa łańcuchy znaków i wyrzuca 0, jeśli są one takie same.
  23.         wsk = wsk->nastepny;
  24.    
  25.     return wsk;
  26. }
  27.  
  28. // Funkcja Generuj ma ustawione na sztywno widełki, pomiędzy którymi losuje wartości poszczególnych zmiennych. Jest ona wywoływana w funkcji DodajSamochód, i przypisuje
  29. // te zmienne do każdej struktury z osobna. Przymuje jako argument zmienną całkowitą.
  30. double Generuj(int a)
  31. {
  32.     double paliwo, olej, ubezpieczenie, litraz, ludzie;
  33.     int przebieg;
  34.    
  35.     paliwo         = 2 + rand()%8 + ((rand()%10)/10);
  36.     olej           = 150 + rand()%300 + ((rand()%100)/100);
  37.     ludzie         = 4 + rand()%3;
  38.     ubezpieczenie  = 600 + rand()%300 + ((rand()%100)/100);
  39.     litraz         = 1.4 + rand()%4;
  40.     przebieg       = 10000 + 100*(rand()%301); // roczny przebieg samochodu
  41.    
  42.     if(a == 1)      return paliwo;
  43.     else if(a == 2) return olej;
  44.     else if(a == 3) return ludzie;
  45.     else if(a == 4) return ubezpieczenie;
  46.     else if(a == 6) return przebieg;
  47.     else            return litraz;
  48. }
  49.  
  50. // Funkcja DodajSamochód ma oczywiste przeznaczenie. Przyjmuje ona w argumentach wskaźnik do struktury oraz łańcuchy znaków określone w main'ie.
  51. void DodajSamochod(samochod **Wskaznik, char *marka, char *model, char *tablica)
  52. {
  53.     samochod *wsk, *nowy;
  54.     wsk = *Wskaznik;
  55.    
  56.     nowy = (samochod*)malloc(sizeof(samochod));
  57.    
  58.     strcpy(nowy->marka, marka); // Kopiowanie stringów z argumentów do struktury.
  59.     strcpy(nowy->model, model);
  60.     strcpy(nowy->tablica, tablica);
  61.    
  62.     if (*Wskaznik == NULL)
  63.     {
  64.         nowy->poprzedni   =   NULL;
  65.         nowy->nastepny    =  *Wskaznik;
  66.         *Wskaznik          =   nowy;
  67.     }
  68.    
  69.     else
  70.     {
  71.         while (wsk->nastepny != NULL)  wsk = wsk->nastepny;
  72.        
  73.         nowy->nastepny    =   NULL;
  74.         nowy->poprzedni   =   wsk;
  75.         wsk->nastepny     =   nowy;
  76.     }
  77.    
  78.     nowy->litraz = Generuj(5);
  79.     nowy->ludzie = Generuj(3);
  80.     nowy->paliwo = Generuj(1);
  81.     nowy->olej = Generuj(2);
  82.     nowy->ubezpieczenie = Generuj(4);
  83.     nowy->przebieg = Generuj(6);
  84.    
  85.     // Przyjąłem cenę 5zł/litr paliwa.
  86.     nowy->koszta = (nowy->olej)+ (nowy->ubezpieczenie) + (((nowy->paliwo)*(nowy->przebieg)*5)/100);
  87. }
  88.  
  89. // Funkcja wypisuje dane o konkretnym samochodzie, wyszukanym, po numerze rejestracyjnym, za pomocą funkcji Wyszukaj.
  90. void OdczytajSamochod(samochod *wsk)
  91. {
  92.     printf( "Marka: %s \n"
  93.            "Model: %s \n"
  94.            "Tablica: %s \n"
  95.            "Litraz: %.1f l \n"
  96.            "Ludzie: %d \n"
  97.            "Spalanie: %.1f l/100km\n"
  98.            "Olej: %.2f zł\n"
  99.            "Ubezpieczenie: %.2f zł\n"
  100.            "Przebieg: %d km\n"
  101.            "Koszta: %d zł \n",
  102.            
  103.            wsk->marka, wsk->model, wsk->tablica, wsk->litraz, wsk->ludzie, wsk->paliwo, wsk->olej, wsk->ubezpieczenie, wsk->przebieg, wsk->koszta);
  104. }
  105.  
  106. // Funkcja wypisuje całą bazę o samochodach, zaczynająć od wskaźnika na pierwszą strukturę
  107. // i przechodząc na kolejne, aż wskaźnik na kolejną strukturę będzie równy NULL, zgodnie z deklaracją w funkcji DodajElement
  108. void OdczytajWszystkieSamochody(samochod *Wskaznik)
  109. {
  110.     samochod *wsk;
  111.     wsk = Wskaznik;
  112.     while(wsk != NULL)
  113.     {
  114.         printf("\n\nMarka: %s\n Model: %s\n Tablica: %s\n Litraz: %.1f l\n Ludzie: %d\nSpalanie: %.1f l/100km\nOlej: %.2f zł\nUbezpieczenie: %.2f zł\n"
  115.                "Przebieg: %d km\nKoszta: %d zł\n",
  116.                wsk->marka, wsk->model, wsk->tablica, wsk->litraz, wsk->ludzie, wsk->paliwo, wsk->olej, wsk->ubezpieczenie, wsk->przebieg, wsk->koszta);
  117.         printf("========================================================");
  118.         wsk = wsk->nastepny;
  119.     }
  120. }
  121.  
  122. // Funkcja zapisuje dane o wszystkich samochodach do pliku tekstowego samochody.txt
  123. void DoPliku(samochod *Wskaznik)
  124. {
  125.     FILE *plik = NULL;
  126.     samochod *wsk;
  127.     wsk = Wskaznik;
  128.    
  129.     plik = fopen("samochody.txt", "w");
  130.     while(wsk != NULL)
  131.     {
  132.         fprintf(plik,   "Marka: %s \n"
  133.                 "Model: %s \n"
  134.                 "Tablica: %s \n"
  135.                 "Litraz: %.1f l \n"
  136.                 "Ludzie: %d \n"
  137.                 "Spalanie: %.1f l/100km\n"
  138.                 "Olej: %.2f zł\n"
  139.                 "Ubezpieczenie: %.2f zł\n"
  140.                 "Przebieg: %d km\n"
  141.                 "Koszta: %d zł \n",
  142.                
  143.                 wsk->marka, wsk->model, wsk->tablica, wsk->litraz, wsk->ludzie, wsk->paliwo, wsk->olej, wsk->ubezpieczenie, wsk->przebieg, wsk->koszta);
  144.         fprintf(plik, "========================================================\n");
  145.         wsk = wsk->nastepny;
  146.     }
  147.     fclose(plik);
  148. }
  149.  
  150. int main()
  151. {
  152.     srand(time(NULL));
  153.     samochod *Wskaznik = NULL;
  154.     samochod *temp = NULL; // tymczasowy wskaźnik wykorzystywany w case 2, do wyszukania konkretnego elementu
  155.     int x;
  156.     char marka[20], model[20], tablica[20];
  157.    
  158.     // Menu wyboru
  159.     printf("----------------------\n");
  160.     printf("1. Dodanie samochodu do bazy.\n2. Wyświetlenie informacji o konkretnym samochodzie.\n3. Wyświetlenie całej bazy danych.\n");
  161.     printf("4. Zapis bazy danych do pliku.\n0. Zakończ program.\n");
  162.     printf("----------------------\n\n");
  163.    
  164. poczatek:
  165.     scanf("%d", &x);
  166.     switch(x)
  167.     {
  168.         case 1:
  169.         {
  170.             printf("Podaj markę samochodu: ");   scanf("%s", marka);
  171.             printf("Podaj model samochodu: ");   scanf("%s", model);
  172.             printf("Podaj tablicę samochodu: "); scanf("%s", tablica);
  173.            
  174.             DodajSamochod(&Wskaznik, marka, model, tablica);
  175.             goto poczatek;
  176.         }
  177.            
  178.         case 2:
  179.         {
  180.             printf("Podaj tablicę samochodu, który chcesz sprawdzić: "); scanf("%s", tablica);
  181.             temp = Wyszukaj(Wskaznik, tablica);
  182.             OdczytajSamochod(temp);
  183.             temp = NULL;
  184.             goto poczatek;
  185.         }
  186.         case 3: OdczytajWszystkieSamochody(Wskaznik); goto poczatek;
  187.         case 4: DoPliku(Wskaznik); goto poczatek;
  188.         case 0: break;
  189.     }
  190.     return 0;
  191. }
  192.  
  193.  
  194. void DodajSamochod(samochod **Wskaznik, char *marka, char *model, char *tablica);
  195. void OdczytajSamochod(samochod *wsk);
  196. void OdczytajWszystkieSamochody(samochod *Wskaznik);
  197. double Generuj(int a);
  198. samochod* Wyszukaj(samochod *Wskaznik, char *tablica);
  199. void DoPliku(samochod *Wskaznik);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement