/*
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<stdio.h>
#include<stdlib.h>
#include<string.h>
#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){
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");
for (i = 0; i<licznik; ++i){
if (strstr(tablicaDan
[i
].
nazwa, szukane
)){
return tablicaDan[i];
}
}
printf("blednie wprowadzona nazwa potrawy, sprobuj jeszcze raz\n");
}
}
/* tworzy stos */
void create(){
int i;
for (i = 0; i<(STOLIKI - 1); ++i){
tab[i] = NULL;
}
}
/* dodaje daną do stosu, przyjmuje komórkę stosu, zwraca 0 gdy */
/* funkcja wykonanapoprawnie lub 1 gdy wystąpił błąd alokacji pamięci */
int push(menu element, int nr_stolik){
if (tab[nr_stolik] == NULL){
tab
[nr_stolik
] = (struct node
*)malloc(1 * sizeof(struct node
));
if (tab[nr_stolik] == NULL) return 1;
tab[nr_stolik]->wsk = 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){
}
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){
}
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;
tab[nr_stolik] = top1;
}
}
void destroy(int nr_stolik){
top1 = tab[nr_stolik];
while (top1 != NULL){
if (top1 != NULL) top1 = tab[nr_stolik]->wsk;
tab[nr_stolik] = top1;
if (top1 != NULL) top1 = top1->wsk;
}
tab[nr_stolik] = NULL;
}
int main(){
int nrStolika;
int wybor;
menu* kartaDan;
menu danie;
kartaDan = wczytanieMenu();
while (1){
printf("\n\nwybierz numer stolika:\n");
while (1){
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");
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;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}