Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <time.h>
- // Deklaracja struktury
- typedef struct samochod
- {
- char tablica[10], marka[20], model[20];
- float litraz, paliwo, olej, ubezpieczenie;
- int ludzie, przebieg, koszta;
- struct samochod *poprzedni, *nastepny; // wskaźniki na poprzednią i kolejną strukturę w bazie
- } samochod;
- // Funkcja Wyszukaj przyjmuje jako argument wskaźnik do początku bazy oraz łańcuch znaków. Zwraca ona wskaźnik do konkretnej struktury.
- samochod* Wyszukaj(samochod *Wskaznik, char *tablica)
- {
- samochod *wsk;
- wsk = Wskaznik; // tymczasowy wskaźnik, początkowo zawierający taki sam adres jak wskaźnik na pierwszą strukturę bazy
- 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.
- wsk = wsk->nastepny;
- return wsk;
- }
- // 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
- // te zmienne do każdej struktury z osobna. Przymuje jako argument zmienną całkowitą.
- double Generuj(int a)
- {
- double paliwo, olej, ubezpieczenie, litraz, ludzie;
- int przebieg;
- paliwo = 2 + rand()%8 + ((rand()%10)/10);
- olej = 150 + rand()%300 + ((rand()%100)/100);
- ludzie = 4 + rand()%3;
- ubezpieczenie = 600 + rand()%300 + ((rand()%100)/100);
- litraz = 1.4 + rand()%4;
- przebieg = 10000 + 100*(rand()%301); // roczny przebieg samochodu
- if(a == 1) return paliwo;
- else if(a == 2) return olej;
- else if(a == 3) return ludzie;
- else if(a == 4) return ubezpieczenie;
- else if(a == 6) return przebieg;
- else return litraz;
- }
- // Funkcja DodajSamochód ma oczywiste przeznaczenie. Przyjmuje ona w argumentach wskaźnik do struktury oraz łańcuchy znaków określone w main'ie.
- void DodajSamochod(samochod **Wskaznik, char *marka, char *model, char *tablica)
- {
- samochod *wsk, *nowy;
- wsk = *Wskaznik;
- nowy = (samochod*)malloc(sizeof(samochod));
- strcpy(nowy->marka, marka); // Kopiowanie stringów z argumentów do struktury.
- strcpy(nowy->model, model);
- strcpy(nowy->tablica, tablica);
- if (*Wskaznik == NULL)
- {
- nowy->poprzedni = NULL;
- nowy->nastepny = *Wskaznik;
- *Wskaznik = nowy;
- }
- else
- {
- while (wsk->nastepny != NULL) wsk = wsk->nastepny;
- nowy->nastepny = NULL;
- nowy->poprzedni = wsk;
- wsk->nastepny = nowy;
- }
- nowy->litraz = Generuj(5);
- nowy->ludzie = Generuj(3);
- nowy->paliwo = Generuj(1);
- nowy->olej = Generuj(2);
- nowy->ubezpieczenie = Generuj(4);
- nowy->przebieg = Generuj(6);
- // Przyjąłem cenę 5zł/litr paliwa.
- nowy->koszta = (nowy->olej)+ (nowy->ubezpieczenie) + (((nowy->paliwo)*(nowy->przebieg)*5)/100);
- }
- // Funkcja wypisuje dane o konkretnym samochodzie, wyszukanym, po numerze rejestracyjnym, za pomocą funkcji Wyszukaj.
- void OdczytajSamochod(samochod *wsk)
- {
- printf( "Marka: %s \n"
- "Model: %s \n"
- "Tablica: %s \n"
- "Litraz: %.1f l \n"
- "Ludzie: %d \n"
- "Spalanie: %.1f l/100km\n"
- "Olej: %.2f zł\n"
- "Ubezpieczenie: %.2f zł\n"
- "Przebieg: %d km\n"
- "Koszta: %d zł \n",
- wsk->marka, wsk->model, wsk->tablica, wsk->litraz, wsk->ludzie, wsk->paliwo, wsk->olej, wsk->ubezpieczenie, wsk->przebieg, wsk->koszta);
- }
- // Funkcja wypisuje całą bazę o samochodach, zaczynająć od wskaźnika na pierwszą strukturę
- // i przechodząc na kolejne, aż wskaźnik na kolejną strukturę będzie równy NULL, zgodnie z deklaracją w funkcji DodajElement
- void OdczytajWszystkieSamochody(samochod *Wskaznik)
- {
- samochod *wsk;
- wsk = Wskaznik;
- while(wsk != NULL)
- {
- 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"
- "Przebieg: %d km\nKoszta: %d zł\n",
- wsk->marka, wsk->model, wsk->tablica, wsk->litraz, wsk->ludzie, wsk->paliwo, wsk->olej, wsk->ubezpieczenie, wsk->przebieg, wsk->koszta);
- printf("========================================================");
- wsk = wsk->nastepny;
- }
- }
- // Funkcja zapisuje dane o wszystkich samochodach do pliku tekstowego samochody.txt
- void DoPliku(samochod *Wskaznik)
- {
- FILE *plik = NULL;
- samochod *wsk;
- wsk = Wskaznik;
- plik = fopen("samochody.txt", "w");
- while(wsk != NULL)
- {
- fprintf(plik, "Marka: %s \n"
- "Model: %s \n"
- "Tablica: %s \n"
- "Litraz: %.1f l \n"
- "Ludzie: %d \n"
- "Spalanie: %.1f l/100km\n"
- "Olej: %.2f zł\n"
- "Ubezpieczenie: %.2f zł\n"
- "Przebieg: %d km\n"
- "Koszta: %d zł \n",
- wsk->marka, wsk->model, wsk->tablica, wsk->litraz, wsk->ludzie, wsk->paliwo, wsk->olej, wsk->ubezpieczenie, wsk->przebieg, wsk->koszta);
- fprintf(plik, "========================================================\n");
- wsk = wsk->nastepny;
- }
- fclose(plik);
- }
- int main()
- {
- srand(time(NULL));
- samochod *Wskaznik = NULL;
- samochod *temp = NULL; // tymczasowy wskaźnik wykorzystywany w case 2, do wyszukania konkretnego elementu
- int x;
- char marka[20], model[20], tablica[20];
- // Menu wyboru
- printf("----------------------\n");
- printf("1. Dodanie samochodu do bazy.\n2. Wyświetlenie informacji o konkretnym samochodzie.\n3. Wyświetlenie całej bazy danych.\n");
- printf("4. Zapis bazy danych do pliku.\n0. Zakończ program.\n");
- printf("----------------------\n\n");
- poczatek:
- scanf("%d", &x);
- switch(x)
- {
- case 1:
- {
- printf("Podaj markę samochodu: "); scanf("%s", marka);
- printf("Podaj model samochodu: "); scanf("%s", model);
- printf("Podaj tablicę samochodu: "); scanf("%s", tablica);
- DodajSamochod(&Wskaznik, marka, model, tablica);
- goto poczatek;
- }
- case 2:
- {
- printf("Podaj tablicę samochodu, który chcesz sprawdzić: "); scanf("%s", tablica);
- temp = Wyszukaj(Wskaznik, tablica);
- OdczytajSamochod(temp);
- temp = NULL;
- goto poczatek;
- }
- case 3: OdczytajWszystkieSamochody(Wskaznik); goto poczatek;
- case 4: DoPliku(Wskaznik); goto poczatek;
- case 0: break;
- }
- return 0;
- }
- void DodajSamochod(samochod **Wskaznik, char *marka, char *model, char *tablica);
- void OdczytajSamochod(samochod *wsk);
- void OdczytajWszystkieSamochody(samochod *Wskaznik);
- double Generuj(int a);
- samochod* Wyszukaj(samochod *Wskaznik, char *tablica);
- void DoPliku(samochod *Wskaznik);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement