Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Skip to content
- Search or jump to…
- Pull requests
- Issues
- Marketplace
- Explore
- @szympop900
- 2
- 0 0 polsl-aei-pk2/5cac4974-gr22-repo Private
- Code Issues 0 Pull requests 0 Projects 0 Wiki Insights
- 5cac4974-gr22-repo/lab4/lab4_11.04/lab4_11.04/ekspres_kawy.c
- @szympop900 szympop900 lab
- 4136dbf 10 hours ago
- 231 lines (200 sloc) 5.18 KB
- #include <stdio.h>
- typedef enum {
- state_init,
- state_choosedrink,
- state_changebasesize,
- state_checkcoffee,
- state_checkwater,
- state_checkmilk,
- state_refillcoffee,
- state_refillwater,
- state_refillmilk,
- state_makecoffee,
- state_turnoff,
- number_of_states
- } state_type;
- typedef struct coffeemaker_total {
- int water;
- int coffee;
- int milk;
- int coffeetype;
- int base_size;
- int selected_drink;
- int required_coffee;
- int required_water;
- int required_milk;
- }coffeemaker;
- typedef state_type state_functions(coffeemaker *data);
- state_type run_state(state_type current_state, coffeemaker *data);
- state_type do_state_init(coffeemaker *data);
- state_type do_state_choosedrink(coffeemaker *data);
- state_type do_state_changebasesize(coffeemaker *data);
- state_type do_state_checkcoffee(coffeemaker *data);
- state_type do_state_checkwater(coffeemaker *data);
- state_type do_state_checkmilk(coffeemaker *data);
- state_type do_state_refillcoffee(coffeemaker *data);
- state_type do_state_refillwater(coffeemaker *data);
- state_type do_state_refillmilk(coffeemaker *data);
- state_type do_state_makecoffee(coffeemaker *data);
- state_type do_state_turnoff(coffeemaker *data);
- state_type do_state_init(coffeemaker *data)
- {
- FILE *file;
- file = fopen("data.txt", "rt");
- int water;
- fread(water, sizeof(int), 1, file);
- data->water = water;
- int coffee;
- fread(coffee, sizeof(int), 1, file);
- data->coffee = coffee;
- int milk;
- fread(milk, sizeof(int), 1, file);
- data->milk = milk;
- int coffeetype;
- fread(coffeetype, sizeof(int), 1, file);
- data->coffeetype = coffeetype;
- int base_size;
- fread(base_size, sizeof(int), 1, file);
- data->base_size = base_size;
- return state_choosedrink;
- }
- state_type do_state_choosedrink(coffeemaker *data)
- {
- printf("Choose coffee:\n 1 - Small\n 2 - Big\n 3 - Ekspresso\n 4 - Capucino\n 5 - Hot Milk");
- int choose;
- scanf("%d%", choose);
- data->selected_drink = choose;
- switch (choose)
- {
- case 1: data->required_coffee = 1;
- data->required_water = 1;
- data->required_milk = 1;
- break;
- case 2: data->required_coffee = 2;
- data->required_water = 2;
- data->required_milk = 2;
- break;
- case 3: data->required_coffee = 4;
- data->required_water = 1;
- data->required_milk = 0;
- break;
- case 4: data->required_coffee = 3;
- data->required_water = 2;
- data->required_milk = 2;
- break;
- case 5: data->required_coffee = 0;
- data->required_water = 0;
- data->required_milk = 5;
- break;
- }
- return state_changebasesize;
- }
- state_type do_state_changebasesize(coffeemaker *data)
- {
- printf("Current base size: %d\n", data->base_size);
- printf("1 - change\n 2 - no change\n");
- int change;
- scanf("%d", change);
- switch (change)
- {
- case 1: printf("Give new base size:\n");
- int new_basesize;
- scanf("%d", new_basesize);
- data->base_size = new_basesize;
- }
- return state_checkcoffee;
- }
- state_type do_state_checkcoffee(coffeemaker *data)
- {
- if (data->required_coffee > data->coffee)
- return state_refillcoffee;
- else
- return state_checkwater;
- }
- state_type do_state_checkwater(coffeemaker *data)
- {
- if (data->required_water > data->water)
- return state_refillwater;
- else
- return state_checkmilk;
- }
- state_type do_state_checkmilk(coffeemaker *data)
- {
- if (data->required_milk > data->milk)
- return state_refillmilk;
- else
- return state_makecoffee;
- }
- state_type do_state_refillcoffee(coffeemaker *data)
- {
- data->coffee = data->coffee + 5;
- return state_checkcoffee;
- }
- state_type do_state_refillwater(coffeemaker *data)
- {
- data->water = data->water + 5;
- return state_checkwater;
- }
- state_type do_state_refillmilk(coffeemaker *data)
- {
- data->milk = data->milk + 5;
- return state_checkmilk;
- }
- state_type do_state_makecoffee(coffeemaker *data)
- {
- data->coffee = data->coffee - data->required_coffee;
- data->water = data->water - data->required_water;
- data->milk = data->milk - data->required_milk;
- printf("Making coffee\n");
- system("pause");
- return state_turnoff;
- }
- state_type do_state_turnoff(coffeemaker * data)
- {
- printf("Do you want to turn off coffee maker?\n 1 - Make another coffee\n 2 - Exit, turnoff\n");
- int exit;
- scanf("%d", exit);
- switch (exit)
- {
- case 1: return state_choosedrink;
- case 2: printf("Turning off!\n");
- FILE *file;
- file = fopen("data.txt", "wt");
- int water;
- water = data->water;
- fwrite(water, sizeof(int), 1, file);
- int coffee;
- coffee = data->coffee;
- fwrite(coffee, sizeof(int), 1, file);
- int milk;
- milk = data->milk;
- fwrite(milk, sizeof(int), 1, file);
- int coffeetype;
- coffeetype = data->coffeetype;
- fwrite(coffeetype, sizeof(int), 1, file);
- int base_size;
- base_size = data->base_size;
- fwrite(base_size, sizeof(int), 1, file);
- }
- system("cls");
- return state_turnoff;
- }
- state_functions* const state_table[number_of_states] = { do_state_init, do_state_choosedrink, do_state_changebasesize,
- do_state_checkcoffee, do_state_checkwater, do_state_checkmilk,
- do_state_refillcoffee, do_state_refillwater, do_state_refillmilk,
- do_state_makecoffee, do_state_turnoff };
- state_type run_state(state_type current_state, coffeemaker *data)
- {
- return state_table[current_state](data);
- }
- int main()
- {
- state_type current_state = state_init;
- coffeemaker data = { 0 };
- while (current_state != state_turnoff)
- {
- current_state = run_state(current_state, &data);
- }
- system("pause");
- return 0;
- }
- © 2019 GitHub, Inc.
- Terms
- Privacy
- Security
- Status
- Help
- Contact GitHub
- Pricing
- API
- Training
- Blog
- About
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement