/* system zarządzania zamówieniami do stolika można dodać zamówienie, a potem wystawić rachunek w pliku menu (potrawy i koszt) do stolika dodaję potrawy, na koniec wystawiam rachunek i czyszczenie stanu statyczna tablica zawierająca stoliki, dla każdego stolika stos zawierający złożone zamówienie. struktura zawierająca danie oraz jego koszt menu (danie ; koszt) a) funkcja wczytująca menu z pliku b) funkcja obliczająca dzienny utarg c) funkcja dodająca potrawę do stolika d) funkcja zapewniająca podgląd w rachunek e) funkcja rozliczająca stolik, zawierająca w sobie mechanizm usuwający stolik z systemu po rozliczeniu */ #define _CRT_SECURE_NO_WARNINGS #include #include #include #define STOLIKI 8 //const int STOLIKI = 8; int licznik = 0; /* struktura opisująca liczbę zespoloną */ typedef struct M{ char nazwa[30]; float cena; }menu; /* struktura komórki stosu */ struct node{ menu danie; struct node *wsk; }*top1, *temp; struct node* tab[STOLIKI - 1]; menu* wczytanieMenu(){ FILE *f; //wskaźnik na strukturę FILE float cena_pomocnicze; char nazwa_pomocnicze[29]; int i,d; menu* tym_wsk; menu* karta_dan; karta_dan = NULL; printf("wczytywanie pliku!\n\n"); f = fopen("menu.txt", "rt"); if (f == NULL){ printf("blad przy otwieraniu pliku\n"); }else{ for (i = 0;; ++i){ if (fscanf(f, "%28s %f", nazwa_pomocnicze, &cena_pomocnicze) == 2){ //fscanf zwraca ilość poprawnie wczytanych wyników, więc pętla działa tak długo, aż skończy wczytywać poprawne wyniki ++licznik; }else{ break; } } d=licznik; fseek( f , 0 , SEEK_SET ); tym_wsk = (menu*)malloc(licznik * sizeof(menu)); if ((tym_wsk) == NULL){ printf("blad pamieci\n"); return; } for (i = 0;; ++i){ if (fscanf(f, "%29s %f", nazwa_pomocnicze, &cena_pomocnicze) == 2){ //fscanf zwraca ilość poprawnie wczytanych wyników, więc pętla działa tak długo, aż skończy wczytywać poprawne wyniki karta_dan = tym_wsk; karta_dan[i].cena = cena_pomocnicze; strcpy(karta_dan[i].nazwa, nazwa_pomocnicze); } else{ break; } } fclose(f); //zamknięcie pliku po użyciu } return karta_dan; } menu wczytajDanie(menu* tablicaDan){ int i; char szukane[29];// ważne while (1){ printf("wprowadz nazwe dania:\n"); scanf("%28s", szukane); for (i = 0; iwsk = NULL; tab[nr_stolik]->danie = element; } else{ temp = (struct node *)malloc(1 * sizeof(struct node)); if (temp == NULL) return 1; temp->wsk = tab[nr_stolik]; temp->danie = element; tab[nr_stolik] = temp; } return 0; } /* wyświetla stos */ void display(int nr_stolik){ top1 = tab[nr_stolik]; if (top1 == NULL){ printf("Stos jest pusty\n"); } else{ while (top1 != NULL){ printf("%s %f \n", top1->danie.nazwa, top1->danie.cena); top1 = top1->wsk; } } } void rozlicz(int nr_stolik){ float suma = 0; top1 = tab[nr_stolik]; if (top1 == NULL){ printf("Stos jest pusty\n"); } else{ while (top1 != NULL){ suma = suma + top1->danie.cena; printf("%s %f \n", top1->danie.nazwa, top1->danie.cena); top1 = top1->wsk; } } printf("suma rachunku: %f\n", suma); } /* ściągnięcie ze stosu */ void pop(int nr_stolik){ top1 = tab[nr_stolik]; if (top1 == NULL){ printf("\n Blad : Proba sciagniecia z pustego stosu"); } else{ printf("\n sciagniete danie : %s %f", (tab[nr_stolik]->danie.nazwa), (tab[nr_stolik]->danie.cena)); top1 = top1->wsk; free(tab[nr_stolik]); tab[nr_stolik] = top1; } } void destroy(int nr_stolik){ top1 = tab[nr_stolik]; while (top1 != NULL){ if (top1 != NULL) top1 = tab[nr_stolik]->wsk; free(tab[nr_stolik]); tab[nr_stolik] = top1; if (top1 != NULL) top1 = top1->wsk; } free(top1); tab[nr_stolik] = NULL; printf("\n Usunieto stos"); } int main(){ int nrStolika; int wybor; menu* kartaDan; menu danie; kartaDan = wczytanieMenu(); while (1){ printf("\n\nwybierz numer stolika:\n"); while (1){ scanf("%d", &nrStolika); if (nrStolika <= STOLIKI) break; else printf("tai stolik nie istnieje, sprobuj jeszcze raz\n"); } printf("wybierz opcje dla stolika numer %d\n\n", nrStolika); printf("1. Dodaj potrawe do rachunku\n"); printf("2. Odejmij ostatnia potrawe od rachunku\n"); printf("3. Wyswietl rachunek\n"); printf("4. Podlicz stolik\n"); printf("5. Rozlicz stolik\n"); scanf("%d", &wybor); switch (wybor){ case 1: danie = wczytajDanie(kartaDan); push(danie, nrStolika); break; case 2: pop(nrStolika); break; case 3: display(nrStolika); break; case 4: rozlicz(nrStolika); break; case 5: rozlicz(nrStolika); destroy(nrStolika); break; default: break; } } return 0; }