Facebook
From Unique Dormouse, 9 Years ago, written in C.
Embed
Download Paste or View Raw
Hits: 542
  1. /*
  2. system zarządzania zamówieniami
  3. do stolika można dodać zamówienie, a potem wystawić rachunek
  4. w pliku menu (potrawy i koszt)
  5. do stolika dodaję potrawy, na koniec wystawiam rachunek i czyszczenie stanu
  6.  
  7. statyczna tablica zawierająca stoliki, dla każdego stolika stos zawierający złożone zamówienie.
  8. struktura zawierająca danie oraz jego koszt
  9. menu (danie ; koszt)
  10. a) funkcja wczytująca menu z pliku
  11. b) funkcja obliczająca dzienny utarg
  12. c) funkcja dodająca potrawę do stolika
  13. d) funkcja zapewniająca podgląd w rachunek
  14. e) funkcja rozliczająca stolik, zawierająca w sobie mechanizm usuwający stolik z systemu po rozliczeniu
  15. */
  16. #define _CRT_SECURE_NO_WARNINGS
  17. #include<stdio.h>
  18. #include<stdlib.h>
  19. #include<string.h>
  20.  
  21. #define STOLIKI 8
  22.  
  23. //const int STOLIKI = 8;
  24. int licznik = 0;
  25. /* struktura opisująca liczbę zespoloną */
  26. typedef struct M{
  27.         char nazwa[30];
  28.         float cena;
  29. }menu;
  30.  
  31. /* struktura komórki stosu */
  32. struct node{
  33.         menu danie;
  34.         struct node *wsk;
  35. }*top1, *temp;
  36.  
  37. struct node* tab[STOLIKI - 1];
  38.  
  39. menu* wczytanieMenu(){
  40.         FILE *f; //wskaźnik na strukturę FILE
  41.  
  42.         float cena_pomocnicze;
  43.         char nazwa_pomocnicze[29];
  44.         int i,d;
  45.         menu* tym_wsk;
  46.         menu* karta_dan;
  47.         karta_dan = NULL;
  48.  
  49.         printf("wczytywanie pliku!\n\n");
  50.         f = fopen("menu.txt", "rt");
  51.  
  52.         if (f == NULL){
  53.                 printf("blad przy otwieraniu pliku\n");
  54.         }else{
  55.                 for (i = 0;; ++i){
  56.                         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
  57.                                 ++licznik;
  58.                         }else{
  59.                                 break;
  60.                         }
  61.                 }
  62.                                 d=licznik;
  63.                                 fseek( f , 0 , SEEK_SET );
  64.                 tym_wsk = (menu*)malloc(licznik * sizeof(menu));
  65.                 if ((tym_wsk) == NULL){
  66.                         printf("blad pamieci\n");
  67.                         return;
  68.                 }
  69.                 for (i = 0;; ++i){
  70.                         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
  71.                                 karta_dan = tym_wsk;
  72.                                 karta_dan[i].cena = cena_pomocnicze;
  73.                                 strcpy(karta_dan[i].nazwa, nazwa_pomocnicze);
  74.                         }
  75.                         else{
  76.                                 break;
  77.                         }
  78.                 }
  79.                 fclose(f); //zamknięcie pliku po użyciu
  80.         }
  81.         return karta_dan;
  82. }
  83.  
  84. menu wczytajDanie(menu* tablicaDan){
  85.         int i;
  86.         char szukane[29];// ważne
  87.         while (1){
  88.                 printf("wprowadz nazwe dania:\n");
  89.  
  90.                 scanf("%28s", szukane);
  91.                 for (i = 0; i<licznik; ++i){
  92.                         if (strstr(tablicaDan[i].nazwa, szukane)){
  93.                                 return tablicaDan[i];
  94.                         }
  95.                 }
  96.                 printf("blednie wprowadzona nazwa potrawy, sprobuj jeszcze raz\n");
  97.         }
  98. }
  99.  
  100.  
  101.  
  102. /* tworzy stos */
  103. void create(){
  104.         int i;
  105.         for (i = 0; i<(STOLIKI - 1); ++i){
  106.                 tab[i] = NULL;
  107.         }
  108. }
  109.  
  110.  
  111. /*     dodaje daną do stosu, przyjmuje komórkę stosu, zwraca 0 gdy    */
  112. /* funkcja wykonanapoprawnie lub 1 gdy wystąpił błąd alokacji pamięci */
  113. int push(menu element, int nr_stolik){
  114.         if (tab[nr_stolik] == NULL){
  115.                 tab[nr_stolik] = (struct node *)malloc(1 * sizeof(struct node));
  116.                 if (tab[nr_stolik] == NULL) return 1;
  117.                 tab[nr_stolik]->wsk = NULL;
  118.                 tab[nr_stolik]->danie = element;
  119.         }
  120.         else{
  121.                 temp = (struct node *)malloc(1 * sizeof(struct node));
  122.                 if (temp == NULL) return 1;
  123.                 temp->wsk = tab[nr_stolik];
  124.                 temp->danie = element;
  125.                 tab[nr_stolik] = temp;
  126.         }
  127.  
  128.         return 0;
  129. }
  130.  
  131. /* wyświetla stos */
  132. void display(int nr_stolik){
  133.         top1 = tab[nr_stolik];
  134.  
  135.         if (top1 == NULL){
  136.                 printf("Stos jest pusty\n");
  137.         }
  138.         else{
  139.                 while (top1 != NULL){
  140.                         printf("%s %f \n", top1->danie.nazwa, top1->danie.cena);
  141.                         top1 = top1->wsk;
  142.                 }
  143.         }
  144. }
  145. void rozlicz(int nr_stolik){
  146.         float suma = 0;
  147.         top1 = tab[nr_stolik];
  148.  
  149.         if (top1 == NULL){
  150.                 printf("Stos jest pusty\n");
  151.         }
  152.         else{
  153.                 while (top1 != NULL){
  154.                         suma = suma + top1->danie.cena;
  155.                         printf("%s %f \n", top1->danie.nazwa, top1->danie.cena);
  156.                         top1 = top1->wsk;
  157.                 }
  158.         }
  159.                 printf("suma rachunku: %f\n", suma);
  160. }
  161. /* ściągnięcie ze stosu */
  162. void pop(int nr_stolik){
  163.         top1 = tab[nr_stolik];
  164.         if (top1 == NULL){
  165.                 printf("\n Blad : Proba sciagniecia z pustego stosu");
  166.         }
  167.         else{
  168.                 printf("\n sciagniete danie : %s %f", (tab[nr_stolik]->danie.nazwa), (tab[nr_stolik]->danie.cena));
  169.                 top1 = top1->wsk;
  170.                 free(tab[nr_stolik]);
  171.                 tab[nr_stolik] = top1;
  172.  
  173.         }
  174. }
  175.  
  176. void destroy(int nr_stolik){
  177.         top1 = tab[nr_stolik];
  178.  
  179.         while (top1 != NULL){
  180.                 if (top1 != NULL) top1 = tab[nr_stolik]->wsk;
  181.                 free(tab[nr_stolik]);
  182.                 tab[nr_stolik] = top1;
  183.                 if (top1 != NULL) top1 = top1->wsk;
  184.         }
  185.         free(top1);
  186.         tab[nr_stolik] = NULL;
  187.  
  188.         printf("\n Usunieto stos");
  189.  
  190. }
  191.  
  192. int main(){
  193.         int nrStolika;
  194.         int wybor;
  195.         menu* kartaDan;
  196.         menu danie;
  197.        
  198.        
  199.         kartaDan = wczytanieMenu();
  200.  
  201.         while (1){
  202.                 printf("\n\nwybierz numer stolika:\n");
  203.                 while (1){
  204.                         scanf("%d", &nrStolika);
  205.                         if (nrStolika <= STOLIKI) break;
  206.                         else printf("tai stolik nie istnieje, sprobuj jeszcze raz\n");
  207.                 }
  208.                 printf("wybierz opcje dla stolika numer %d\n\n", nrStolika);
  209.                 printf("1. Dodaj potrawe do rachunku\n");
  210.                 printf("2. Odejmij ostatnia potrawe od rachunku\n");
  211.                 printf("3. Wyswietl rachunek\n");
  212.                 printf("4. Podlicz stolik\n");
  213.                                 printf("5. Rozlicz stolik\n");
  214.                 scanf("%d", &wybor);
  215.                 switch (wybor){
  216.                 case 1:
  217.                         danie = wczytajDanie(kartaDan);
  218.                         push(danie, nrStolika);
  219.                         break;
  220.                 case 2:
  221.                         pop(nrStolika);
  222.                         break;
  223.                 case 3:
  224.                         display(nrStolika);
  225.                         break;
  226.                 case 4:
  227.                         rozlicz(nrStolika);
  228.                         break;
  229.                                 case 5:
  230.                                         rozlicz(nrStolika);
  231.                                         destroy(nrStolika);
  232.                                         break;
  233.                 default:
  234.                         break;
  235.                 }
  236.         }
  237.  
  238.  
  239.         return 0;
  240. }