Skip to content

Commit 1483670

Browse files
committed
Another exam
1 parent 601fc02 commit 1483670

File tree

35 files changed

+1115
-0
lines changed

35 files changed

+1115
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.30523.141
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bakery", "Bakery\Bakery.csproj", "{25F905BC-FE73-4C1B-B4C0-33F1C63CAAF9}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{25F905BC-FE73-4C1B-B4C0-33F1C63CAAF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{25F905BC-FE73-4C1B-B4C0-33F1C63CAAF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{25F905BC-FE73-4C1B-B4C0-33F1C63CAAF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{25F905BC-FE73-4C1B-B4C0-33F1C63CAAF9}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {2848A923-FD2F-431E-8F72-000EB96D08BF}
24+
EndGlobalSection
25+
EndGlobal
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
</Project>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace Bakery.Core.Contracts
2+
{
3+
public interface IController
4+
{
5+
public string AddFood(string type, string name, decimal price);
6+
7+
public string AddDrink(string type, string name, int portion, string brand);
8+
9+
public string AddTable(string type, int tableNumber, int capacity);
10+
11+
public string ReserveTable(int numberOfPeople);
12+
13+
public string OrderFood(int tableNumber, string foodName);
14+
15+
public string OrderDrink(int tableNumber, string drinkName, string drinkBrand);
16+
17+
public string LeaveTable(int tableNumber);
18+
19+
public string GetFreeTablesInfo();
20+
21+
public string GetTotalIncome();
22+
}
23+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Bakery.Core.Contracts
2+
{
3+
public interface IEngine
4+
{
5+
void Run();
6+
}
7+
}
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
using System;
2+
using Bakery.Core.Contracts;
3+
using Bakery.Models.BakedFoods.Contracts;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using Bakery.Models.BakedFoods;
8+
using Bakery.Models.Drinks;
9+
using Bakery.Models.Drinks.Contracts;
10+
using Bakery.Models.Tables;
11+
using Bakery.Models.Tables.Contracts;
12+
using Bakery.Utilities.Messages;
13+
14+
namespace Bakery.Core
15+
{
16+
public class Controller : IController
17+
{
18+
private List<IBakedFood> bakedFoods = new List<IBakedFood>();
19+
private List<IDrink> drinks = new List<IDrink>();
20+
private List<ITable> tables = new List<ITable>();
21+
private decimal total = 0;
22+
23+
public string AddFood(string type, string name, decimal price)
24+
{
25+
IBakedFood food = default;
26+
27+
if (type == nameof(Bread))
28+
{
29+
food = new Bread(name, price);
30+
}
31+
else if (type == nameof(Cake))
32+
{
33+
food = new Cake(name, price);
34+
}
35+
36+
bakedFoods.Add(food);
37+
return string.Format(OutputMessages.FoodAdded, name, type);
38+
}
39+
40+
public string AddDrink(string type, string name, int portion, string brand)
41+
{
42+
IDrink drink = default;
43+
44+
if (type == nameof(Water))
45+
{
46+
drink = new Water(name, portion, brand);
47+
}
48+
else if (type == nameof(Tea))
49+
{
50+
drink = new Tea(name, portion, brand);
51+
}
52+
53+
drinks.Add(drink);
54+
return string.Format(OutputMessages.DrinkAdded, name, brand);
55+
}
56+
57+
public string AddTable(string type, int tableNumber, int capacity)
58+
{
59+
ITable table = default;
60+
61+
if (type == nameof(InsideTable))
62+
{
63+
table = new InsideTable(tableNumber, capacity);
64+
}
65+
else if (type == nameof(OutsideTable))
66+
{
67+
table = new OutsideTable(tableNumber, capacity);
68+
}
69+
70+
tables.Add(table);
71+
return string.Format(OutputMessages.TableAdded, tableNumber);
72+
}
73+
74+
public string ReserveTable(int numberOfPeople)
75+
{
76+
var freeTable = tables.FirstOrDefault(x => !x.IsReserved && x.Capacity >= numberOfPeople);
77+
78+
if (freeTable is null)
79+
{
80+
return string.Format(OutputMessages.ReservationNotPossible, numberOfPeople);
81+
}
82+
83+
freeTable.Reserve(numberOfPeople);
84+
return string.Format(OutputMessages.TableReserved, freeTable.TableNumber, numberOfPeople);
85+
}
86+
87+
public string OrderFood(int tableNumber, string foodName)
88+
{
89+
var targetTable = tables.FirstOrDefault(x => x.TableNumber == tableNumber);
90+
var targetFood = bakedFoods.FirstOrDefault(x => x.Name == foodName);
91+
92+
if (targetTable is null)
93+
{
94+
return string.Format(OutputMessages.WrongTableNumber, tableNumber);
95+
}
96+
if (targetFood is null)
97+
{
98+
return string.Format(OutputMessages.NonExistentFood, foodName);
99+
}
100+
101+
targetTable.OrderFood(targetFood);
102+
return string.Format(OutputMessages.FoodOrderSuccessful, tableNumber, foodName);
103+
}
104+
105+
public string OrderDrink(int tableNumber, string drinkName, string drinkBrand)
106+
{
107+
var targetTable = tables.FirstOrDefault(x => x.TableNumber == tableNumber);
108+
var targetDrink = drinks.FirstOrDefault(x => x.Name == drinkName && x.Brand == drinkBrand);
109+
110+
if (targetTable is null)
111+
{
112+
return string.Format(OutputMessages.WrongTableNumber, tableNumber);
113+
}
114+
if (targetDrink is null)
115+
{
116+
return string.Format(OutputMessages.NonExistentDrink, drinkName, drinkBrand);
117+
}
118+
119+
targetTable.OrderDrink(targetDrink);
120+
return $"Table {tableNumber} ordered {drinkName} {drinkBrand}";
121+
}
122+
123+
public string LeaveTable(int tableNumber)
124+
{
125+
var targetTable = tables.FirstOrDefault(x => x.TableNumber == tableNumber);
126+
var bill = targetTable.GetBill() + targetTable.Price;
127+
total += bill;
128+
targetTable.Clear();
129+
130+
return $"Table: {tableNumber}{Environment.NewLine}" +
131+
$"Bill: {bill}";
132+
}
133+
134+
public string GetFreeTablesInfo()
135+
{
136+
var freeTables = tables.Where(table => !table.IsReserved).ToList();
137+
StringBuilder sb = new StringBuilder();
138+
139+
foreach (var table in freeTables)
140+
{
141+
sb.AppendLine(table.GetFreeTableInfo());
142+
}
143+
144+
return sb.ToString().TrimEnd();
145+
}
146+
147+
public string GetTotalIncome()
148+
{
149+
return string.Format(OutputMessages.TotalIncome, total);
150+
}
151+
}
152+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
namespace Bakery.Core
2+
{
3+
using Bakery.Core.Contracts;
4+
using Bakery.IO;
5+
using Bakery.IO.Contracts;
6+
using System;
7+
8+
public class Engine : IEngine
9+
{
10+
private IWriter writer;
11+
private IReader reader;
12+
private IController controller;
13+
14+
public Engine()
15+
{
16+
this.writer = new Writer();
17+
this.reader = new Reader();
18+
this.controller = new Controller();
19+
}
20+
21+
public void Run()
22+
{
23+
string input = Console.ReadLine();
24+
25+
while (input != "END")
26+
{
27+
string[] arguments = input.Split();
28+
29+
string command = arguments[0];
30+
31+
string result = string.Empty;
32+
33+
try
34+
{
35+
switch (command)
36+
{
37+
case "AddFood":
38+
string type = arguments[1];
39+
string name = arguments[2];
40+
decimal price = decimal.Parse(arguments[3]);
41+
42+
result = controller.AddFood(type, name, price);
43+
break;
44+
45+
case "AddDrink":
46+
string drinktype = arguments[1];
47+
string drinkName = arguments[2];
48+
int portion = int.Parse(arguments[3]);
49+
string brand = arguments[4];
50+
51+
result = controller.AddDrink(drinktype, drinkName, portion, brand);
52+
break;
53+
54+
case "AddTable":
55+
string tableType = arguments[1];
56+
int tableNumber = int.Parse(arguments[2]);
57+
int capacity = int.Parse(arguments[3]);
58+
59+
result = controller.AddTable(tableType, tableNumber, capacity);
60+
break;
61+
62+
case "ReserveTable":
63+
int numberOfPeople = int.Parse(arguments[1]);
64+
65+
result = controller.ReserveTable(numberOfPeople);
66+
break;
67+
68+
case "OrderFood":
69+
int tableNum = int.Parse(arguments[1]);
70+
string foodName = arguments[2];
71+
72+
result = controller.OrderFood(tableNum, foodName);
73+
break;
74+
75+
case "OrderDrink":
76+
int tableN = int.Parse(arguments[1]);
77+
string drName = arguments[2];
78+
string drinkBrand = arguments[3];
79+
80+
result = controller.OrderDrink(tableN, drName, drinkBrand);
81+
break;
82+
83+
case "LeaveTable":
84+
int leftTableNum = int.Parse(arguments[1]);
85+
86+
result = controller.LeaveTable(leftTableNum);
87+
break;
88+
89+
case "GetFreeTablesInfo":
90+
result = controller.GetFreeTablesInfo();
91+
break;
92+
93+
case "GetTotalIncome":
94+
result = controller.GetTotalIncome();
95+
break;
96+
}
97+
98+
writer.WriteLine(result);
99+
}
100+
catch (ArgumentNullException ane)
101+
{
102+
writer.WriteLine(ane.Message);
103+
}
104+
catch (ArgumentException ae)
105+
{
106+
writer.WriteLine(ae.Message);
107+
}
108+
input = reader.ReadLine();
109+
}
110+
}
111+
}
112+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Bakery.IO.Contracts
2+
{
3+
public interface IReader
4+
{
5+
string ReadLine();
6+
}
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Bakery.IO.Contracts
2+
{
3+
public interface IWriter
4+
{
5+
void Write(string message);
6+
7+
void WriteLine(string message);
8+
}
9+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Bakery.IO
2+
{
3+
using Bakery.IO.Contracts;
4+
using System;
5+
6+
public class Reader : IReader
7+
{
8+
public string ReadLine()
9+
{
10+
return Console.ReadLine();
11+
}
12+
}
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace Bakery.IO
2+
{
3+
using Bakery.IO.Contracts;
4+
using System;
5+
using System.IO;
6+
7+
public class Writer : IWriter
8+
{
9+
public void Write(string message)
10+
{
11+
Console.Write(message);
12+
}
13+
14+
public void WriteLine(string message)
15+
{
16+
Console.WriteLine(message);
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)