Skip to content

Commit c2db464

Browse files
committed
Условие задачи:
УСЛОВИЕ ЗАДАЧИ: Фирма продает составляющие компьютера. Первая форма отвечает за учет продаж, вторая за добавление и редактирование составляющих. Первая форма: Список, выпадающий список, текстовое поле, кнопка вызова второй формы. В выпадающем списке появляются наименования всех товаров, которые в наличии в магазине. Пользователь выбирает товар, в текстовом окне, которое нельзя редактировать, появляется цена. Пользователь нажимает «добавить» и товар добавляется в список продаж. Также должно быть окошко, которое выводит общую стоимость. Вторая форма: Информация о комплектующих (наименование, характеристика, описание и цена) вводится в текстовые поля; в список добавляется текстовая строка, содержащая информацию о товаре, кроме цены, цена в списке не видна, но содержится; также комплектующие можно редактировать.
1 parent fb18811 commit c2db464

File tree

19 files changed

+2272
-0
lines changed

19 files changed

+2272
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 14
4+
VisualStudioVersion = 14.0.23107.0
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hometask-2", "Hometask-2\Hometask-2.csproj", "{BF049804-1771-4C9C-8AD4-DF30D22D04BD}"
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+
{BF049804-1771-4C9C-8AD4-DF30D22D04BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{BF049804-1771-4C9C-8AD4-DF30D22D04BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{BF049804-1771-4C9C-8AD4-DF30D22D04BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{BF049804-1771-4C9C-8AD4-DF30D22D04BD}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
EndGlobal
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<startup>
4+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
5+
</startup>
6+
</configuration>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Hometask_2.Entities;
7+
8+
9+
namespace Hometask_2
10+
{
11+
//
12+
//Набор исходных данных для тестирования работы приложения
13+
//
14+
static partial class Program
15+
{
16+
//создание тестовых названий категорий товаров
17+
static Category SetCategoryTestData()
18+
{
19+
Category categories = new Category();
20+
categories.Add("Экраны");
21+
categories.Add("Мышки");
22+
categories.Add("Принтеры");
23+
return categories;
24+
}
25+
//создание товаров
26+
static Assortment SetAssortmentTestData(Category categories)
27+
{
28+
Assortment assortment = new Assortment(categories);
29+
// Категория №1: Экран
30+
Product screen1 = new Product("Экраны", "Очень хороший",
31+
"Супер характеристики","Экран Самсунг", 150);
32+
Product screen2 = new Product("Экраны", "нормальный",
33+
"неплохие характеристики", "Экран Филипс", 50);
34+
Product screen3 = new Product("Экраны", "плохой",
35+
"плохие характеристики", "Экран Хуавэй", 10);
36+
// Категория №2: Мышки
37+
Product mouse1 = new Product("Мышки", "Очень хорошая",
38+
"Супер характеристики", "Мышка Logitech", 150);
39+
Product mouse2 = new Product("Мышки", "нормальная",
40+
"неплохие характеристики", "Мышка Apple", 50);
41+
Product mouse3 = new Product("Мышки", "плохая",
42+
"плохие характеристики", "Мышка Corsair", 10);
43+
//добавление товаров в ассортмент магазина
44+
45+
assortment.AddProduct(screen1);
46+
assortment.AddProduct(screen2);
47+
assortment.AddProduct(screen3);
48+
assortment.AddProduct(mouse1);
49+
assortment.AddProduct(mouse2);
50+
assortment.AddProduct(mouse3);
51+
return assortment;
52+
}
53+
}
54+
}
Lines changed: 307 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
9+
10+
namespace Hometask_2.Entities
11+
{
12+
public class Assortment
13+
{
14+
//ПОЛЯ КЛАССА
15+
//+-------------------------------------------------------------------+
16+
17+
/// <summary>
18+
/// ассортимент товара
19+
/// </summary>
20+
private static Dictionary<string,
21+
Dictionary<string, Product>> assortment = null;
22+
/// <summary>
23+
/// Перечень зарегестрированных в программе товарных категорий
24+
/// </summary>
25+
private Category categories = null;
26+
27+
28+
29+
30+
//КОНСТРУКТОРЫ КЛАССА
31+
//+-------------------------------------------------------------------+
32+
33+
/// <summary>
34+
/// Инициализирует поле categories и заполняет данными объект
35+
/// assortment
36+
/// </summary>
37+
/// <param name="categories"></param>
38+
public Assortment(Category categories)
39+
{
40+
assortment = new Dictionary<string, Dictionary<string, Product>>();
41+
if (categories == null)
42+
{
43+
throw new ArgumentNullException("Нельзя приступить к работе " +
44+
"с ассортиментом, поскольку не создана ни одна товарная " +
45+
"категория. Для того что бы иметь возможность " +
46+
"создавать товары, создайте надлежащие им категории");
47+
}
48+
this.categories = categories;
49+
for(int i = 0; i < this.categories.Count; ++i)
50+
{
51+
assortment.Add(this.categories[i], new Dictionary<string,
52+
Product>());
53+
}
54+
}
55+
56+
57+
58+
59+
//ИНДЕКСАТОРЫ КЛАССА
60+
//+-------------------------------------------------------------------+
61+
62+
/// <summary>
63+
/// возвращает значение Value объекта Dictionary
64+
/// </summary>
65+
/// <param name="key">название товарной категории</param>
66+
/// <returns>объект Dictionary<string, Product></returns>
67+
public Dictionary<string, Product> this[string key]
68+
{
69+
get
70+
{
71+
return assortment[key];
72+
}
73+
}
74+
75+
76+
77+
78+
//МЕТОДЫ КЛАССА
79+
//+-------------------------------------------------------------------+
80+
81+
/// <summary>
82+
/// Добавление нового товара в ассортимент
83+
/// </summary>
84+
/// <param name="newProduct"></param>
85+
public void AddProduct(Product newProduct)
86+
{
87+
if(assortment == null)
88+
{
89+
throw new NullReferenceException("Не создан объект класса " +
90+
"assortment предназначенный для хранения данных об " +
91+
"ассортименте товаров.");
92+
}
93+
else
94+
{
95+
if(this.categories == null)
96+
{
97+
throw new ArgumentNullException("Нельзя приступить к " +
98+
"работе с ассортиментом, поскольку не создана ни " +
99+
"одна товарная категория. Для того что бы иметь " +
100+
"возможность создавать товары, создайте надлежащие " +
101+
"им категории");
102+
}
103+
else
104+
{
105+
if (!this.categories.Contains(newProduct.Category))
106+
{
107+
throw new ArgumentException("Указанная товарная " +
108+
"категория отсутствует или название категории" +
109+
"товара указанно неверно");
110+
}
111+
else
112+
{
113+
if (assortment[newProduct.Category].ContainsKey(newProduct.Name))
114+
{
115+
throw new ArgumentException("Указанное имя товара " +
116+
"уже существует в базе данных. Товар не может " +
117+
"быть внесен в базу данных. Присвойте товару " +
118+
"уникальное имя.");
119+
}
120+
else
121+
{
122+
assortment[newProduct.Category].Add(newProduct.Name,
123+
newProduct);
124+
}
125+
}
126+
}
127+
}
128+
}
129+
130+
/// <summary>
131+
/// Предоставление информации о продукте (имя, характеристики и т.п.)
132+
/// </summary>
133+
/// <param name="categotyName">Имя товарной категории</param>
134+
/// <param name="productName">Имя продукта</param>
135+
/// <returns>объект класса Product</returns>
136+
public Product GetProduct(string categotyName, string productName)
137+
{
138+
if (assortment == null)
139+
{
140+
throw new NullReferenceException("Не создан объект класса " +
141+
"assortment предназначенный для хранения данных об " +
142+
"ассортименте товаров.");
143+
}
144+
else
145+
{
146+
if (this.categories == null)
147+
{
148+
throw new ArgumentNullException("Нельзя приступить к " +
149+
"работе с ассортиментом, поскольку не создана ни " +
150+
"одна товарная категория. Для того что бы иметь " +
151+
"возможность создавать товары, создайте надлежащие " +
152+
"им категории");
153+
}
154+
else
155+
{
156+
if (!assortment[categotyName].ContainsKey(productName))
157+
{
158+
return null;
159+
}
160+
else
161+
{
162+
Dictionary<string, Product> product =
163+
assortment[categotyName];
164+
return product[productName];
165+
}
166+
}
167+
}
168+
}
169+
170+
/// <summary>
171+
/// Предоставление информации о продукте (имя, характеристики и т.п.)
172+
/// </summary>
173+
/// <param name="productName">Имя продукта</param>
174+
/// <returns>бъект класса Product</returns>
175+
public Product GetProduct(string productName)
176+
{
177+
if (assortment == null)
178+
{
179+
throw new NullReferenceException("Не создан объект класса " +
180+
"assortment предназначенный для хранения данных об " +
181+
"ассортименте товаров.");
182+
}
183+
else
184+
{
185+
if (this.categories == null)
186+
{
187+
throw new ArgumentNullException("Нельзя приступить к " +
188+
"работе с ассортиментом, поскольку не создана ни " +
189+
"одна товарная категория. Для того что бы иметь " +
190+
"возможность создавать товары, создайте надлежащие " +
191+
"им категории");
192+
}
193+
else
194+
{
195+
Product productInfo = null;
196+
for(int i = 0; i < this.categories.Count; ++i)
197+
{
198+
Dictionary<string, Product> subDictionary =
199+
assortment[categories[i]];
200+
if (subDictionary.TryGetValue(productName,
201+
out productInfo))
202+
break;
203+
}
204+
return productInfo;
205+
}
206+
}
207+
}
208+
209+
/// <summary>
210+
/// Замена информации об одном продукте, информацией о другом продукте
211+
/// </summary>
212+
/// <param name="oldProductInfo">старая информация о продукте
213+
/// хранимая в объекте Product</param>
214+
/// <param name="newProductInfo">новая информация о продукте
215+
/// хранимая в объекте Product</param>
216+
/// <returns>true - в случае если быа выполнена заена объектов</returns>
217+
public void ReplaceProduct(Product oldProductInfo, Product newProductInfo)
218+
{
219+
if (assortment == null)
220+
{
221+
throw new NullReferenceException("Не создан объект класса " +
222+
"assortment предназначенный для хранения данных об " +
223+
"ассортименте товаров.");
224+
}
225+
else
226+
{
227+
if (this.categories == null)
228+
{
229+
throw new ArgumentNullException("Нельзя приступить к " +
230+
"работе с ассортиментом, поскольку не создана ни " +
231+
"одна товарная категория. Для того что бы иметь " +
232+
"возможность создавать товары, создайте надлежащие " +
233+
"им категории");
234+
}
235+
else
236+
{
237+
if (assortment.ContainsKey(oldProductInfo.Category))
238+
{
239+
Dictionary<string, Product> subDictionary =
240+
assortment[oldProductInfo.Category];
241+
if (subDictionary.ContainsKey(oldProductInfo.Name))
242+
{
243+
subDictionary.Remove(oldProductInfo.Name);
244+
if (oldProductInfo.Category == newProductInfo.Category)
245+
{
246+
subDictionary.Add(newProductInfo.Name, newProductInfo);
247+
}
248+
else
249+
{
250+
if (assortment.ContainsKey(newProductInfo.Category))
251+
{
252+
subDictionary = assortment[newProductInfo.Category];
253+
if(!subDictionary.ContainsKey(newProductInfo.Name))
254+
{
255+
subDictionary.Add(newProductInfo.Name, newProductInfo);
256+
}
257+
else
258+
{
259+
throw new ArgumentException("При выполнении редактирования " +
260+
"информации о товаре, возникла ошибка. Выбранная для товара" +
261+
"новая товарня категория, уже содержит в себе товар с " +
262+
"аналогичным именем");
263+
}
264+
}
265+
else
266+
{
267+
throw new ArgumentException("При выполнении редактирования " +
268+
"информации о товаре, возникла ошибка. Выбранная " +
269+
"пользователем товарная категория не существует");
270+
}
271+
}
272+
}
273+
else
274+
{
275+
throw new ArgumentException("В ассортименте магазина, " +
276+
"не существует имени товара, выбранного для редактирования");
277+
}
278+
}
279+
else
280+
{
281+
throw new ArgumentException("В ассортименте нет товарной категории," +
282+
"указанной в описанни выбранного для редактирования товара");
283+
}
284+
}
285+
}
286+
}
287+
288+
/// <summary>
289+
/// Предоставляет список продуктов в виде объекта Dictionary<string, Product>
290+
/// </summary>
291+
/// <returns>колллекция значений Value</returns>
292+
public Dictionary<string, Dictionary<string, Product>>.ValueCollection GetValueCollection()
293+
{
294+
return assortment.Values;
295+
}
296+
297+
/// <summary>
298+
/// Предоставляет колдекцию значений Key поля assortment
299+
/// (тип данных: Dictionary<string, Dictionary<string, Product>>)
300+
/// </summary>
301+
/// <returns>колллекция значений Key</returns>
302+
public Dictionary<string, Dictionary<string, Product>>.KeyCollection GetKeyCollection()
303+
{
304+
return assortment.Keys;
305+
}
306+
}
307+
}

0 commit comments

Comments
 (0)