Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. Skip to content
  2.  
  3. Search or jump to…
  4.  
  5. Pull requests
  6. Issues
  7. Marketplace
  8. Explore
  9.  
  10. @szympop900
  11. 2
  12. 0 0 polsl-aei-pk2/5cac4974-gr22-repo Private
  13. Code Issues 0 Pull requests 0 Projects 0 Wiki Insights
  14. 5cac4974-gr22-repo/lab4/lab4_11.04/lab4_11.04/ekspres_kawy.c
  15. @szympop900 szympop900 lab
  16. 4136dbf 10 hours ago
  17. 231 lines (200 sloc) 5.18 KB
  18.  
  19. #include <stdio.h>
  20.  
  21. typedef enum {
  22. state_init,
  23. state_choosedrink,
  24. state_changebasesize,
  25. state_checkcoffee,
  26. state_checkwater,
  27. state_checkmilk,
  28. state_refillcoffee,
  29. state_refillwater,
  30. state_refillmilk,
  31. state_makecoffee,
  32. state_turnoff,
  33. number_of_states
  34. } state_type;
  35.  
  36. typedef struct coffeemaker_total {
  37. int water;
  38. int coffee;
  39. int milk;
  40. int coffeetype;
  41. int base_size;
  42.  
  43. int selected_drink;
  44. int required_coffee;
  45. int required_water;
  46. int required_milk;
  47. }coffeemaker;
  48.  
  49. typedef state_type state_functions(coffeemaker *data);
  50.  
  51.  
  52. state_type run_state(state_type current_state, coffeemaker *data);
  53. state_type do_state_init(coffeemaker *data);
  54. state_type do_state_choosedrink(coffeemaker *data);
  55. state_type do_state_changebasesize(coffeemaker *data);
  56. state_type do_state_checkcoffee(coffeemaker *data);
  57. state_type do_state_checkwater(coffeemaker *data);
  58. state_type do_state_checkmilk(coffeemaker *data);
  59. state_type do_state_refillcoffee(coffeemaker *data);
  60. state_type do_state_refillwater(coffeemaker *data);
  61. state_type do_state_refillmilk(coffeemaker *data);
  62. state_type do_state_makecoffee(coffeemaker *data);
  63. state_type do_state_turnoff(coffeemaker *data);
  64.  
  65. state_type do_state_init(coffeemaker *data)
  66. {
  67. FILE *file;
  68. file = fopen("data.txt", "rt");
  69. int water;
  70. fread(water, sizeof(int), 1, file);
  71. data->water = water;
  72. int coffee;
  73. fread(coffee, sizeof(int), 1, file);
  74. data->coffee = coffee;
  75. int milk;
  76. fread(milk, sizeof(int), 1, file);
  77. data->milk = milk;
  78. int coffeetype;
  79. fread(coffeetype, sizeof(int), 1, file);
  80. data->coffeetype = coffeetype;
  81. int base_size;
  82. fread(base_size, sizeof(int), 1, file);
  83. data->base_size = base_size;
  84.  
  85. return state_choosedrink;
  86. }
  87.  
  88. state_type do_state_choosedrink(coffeemaker *data)
  89. {
  90. printf("Choose coffee:\n 1 - Small\n 2 - Big\n 3 - Ekspresso\n 4 - Capucino\n 5 - Hot Milk");
  91. int choose;
  92. scanf("%d%", choose);
  93. data->selected_drink = choose;
  94. switch (choose)
  95. {
  96. case 1: data->required_coffee = 1;
  97. data->required_water = 1;
  98. data->required_milk = 1;
  99. break;
  100. case 2: data->required_coffee = 2;
  101. data->required_water = 2;
  102. data->required_milk = 2;
  103. break;
  104. case 3: data->required_coffee = 4;
  105. data->required_water = 1;
  106. data->required_milk = 0;
  107. break;
  108. case 4: data->required_coffee = 3;
  109. data->required_water = 2;
  110. data->required_milk = 2;
  111. break;
  112. case 5: data->required_coffee = 0;
  113. data->required_water = 0;
  114. data->required_milk = 5;
  115. break;
  116. }
  117. return state_changebasesize;
  118. }
  119.  
  120. state_type do_state_changebasesize(coffeemaker *data)
  121. {
  122. printf("Current base size: %d\n", data->base_size);
  123. printf("1 - change\n 2 - no change\n");
  124. int change;
  125. scanf("%d", change);
  126. switch (change)
  127. {
  128. case 1: printf("Give new base size:\n");
  129. int new_basesize;
  130. scanf("%d", new_basesize);
  131. data->base_size = new_basesize;
  132. }
  133. return state_checkcoffee;
  134. }
  135.  
  136. state_type do_state_checkcoffee(coffeemaker *data)
  137. {
  138. if (data->required_coffee > data->coffee)
  139. return state_refillcoffee;
  140. else
  141. return state_checkwater;
  142. }
  143.  
  144. state_type do_state_checkwater(coffeemaker *data)
  145. {
  146. if (data->required_water > data->water)
  147. return state_refillwater;
  148. else
  149. return state_checkmilk;
  150. }
  151.  
  152. state_type do_state_checkmilk(coffeemaker *data)
  153. {
  154. if (data->required_milk > data->milk)
  155. return state_refillmilk;
  156. else
  157. return state_makecoffee;
  158. }
  159.  
  160. state_type do_state_refillcoffee(coffeemaker *data)
  161. {
  162. data->coffee = data->coffee + 5;
  163. return state_checkcoffee;
  164. }
  165.  
  166. state_type do_state_refillwater(coffeemaker *data)
  167. {
  168. data->water = data->water + 5;
  169. return state_checkwater;
  170. }
  171.  
  172. state_type do_state_refillmilk(coffeemaker *data)
  173. {
  174. data->milk = data->milk + 5;
  175. return state_checkmilk;
  176. }
  177.  
  178. state_type do_state_makecoffee(coffeemaker *data)
  179. {
  180. data->coffee = data->coffee - data->required_coffee;
  181. data->water = data->water - data->required_water;
  182. data->milk = data->milk - data->required_milk;
  183. printf("Making coffee\n");
  184. system("pause");
  185. return state_turnoff;
  186. }
  187.  
  188. state_type do_state_turnoff(coffeemaker * data)
  189. {
  190. printf("Do you want to turn off coffee maker?\n 1 - Make another coffee\n 2 - Exit, turnoff\n");
  191. int exit;
  192. scanf("%d", exit);
  193. switch (exit)
  194. {
  195. case 1: return state_choosedrink;
  196. case 2: printf("Turning off!\n");
  197. FILE *file;
  198. file = fopen("data.txt", "wt");
  199. int water;
  200. water = data->water;
  201. fwrite(water, sizeof(int), 1, file);
  202.  
  203. int coffee;
  204. coffee = data->coffee;
  205. fwrite(coffee, sizeof(int), 1, file);
  206.  
  207. int milk;
  208. milk = data->milk;
  209. fwrite(milk, sizeof(int), 1, file);
  210.  
  211. int coffeetype;
  212. coffeetype = data->coffeetype;
  213. fwrite(coffeetype, sizeof(int), 1, file);
  214.  
  215. int base_size;
  216. base_size = data->base_size;
  217. fwrite(base_size, sizeof(int), 1, file);
  218.  
  219. }
  220. system("cls");
  221. return state_turnoff;
  222.  
  223. }
  224.  
  225. state_functions* const state_table[number_of_states] = { do_state_init, do_state_choosedrink, do_state_changebasesize,
  226. do_state_checkcoffee, do_state_checkwater, do_state_checkmilk,
  227. do_state_refillcoffee, do_state_refillwater, do_state_refillmilk,
  228. do_state_makecoffee, do_state_turnoff };
  229.  
  230. state_type run_state(state_type current_state, coffeemaker *data)
  231. {
  232. return state_table[current_state](data);
  233. }
  234.  
  235. int main()
  236. {
  237. state_type current_state = state_init;
  238. coffeemaker data = { 0 };
  239. while (current_state != state_turnoff)
  240. {
  241. current_state = run_state(current_state, &data);
  242. }
  243. system("pause");
  244. return 0;
  245. }
  246.  
  247.  
  248.  
  249. © 2019 GitHub, Inc.
  250. Terms
  251. Privacy
  252. Security
  253. Status
  254. Help
  255. Contact GitHub
  256. Pricing
  257. API
  258. Training
  259. Blog
  260. About
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement