Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229

Как работать с классом, имеющим закрытые поля?

17.06.2021, 14:39. Показов 2047. Ответов 8
Метки c# (Все метки)

Студворк — интернет-сервис помощи студентам
По условию задачи поля в классе Tovar должны быть именно закрытыми, как и массив товаров в классе Sklad. Нужно сделать следующие методы: вывод информации о товаре через индекс и через название товара и сортировку по названию, количеству и цене.

Сортировку я сделала, но вывод товаров получается неровным + не работает сортировка по количеству по возрастанию (см.скриншот). Пробовала поправить вывод через табуляцию, результат тоже не очень (не выводится код под кодом, название под названием и т.д.)
Как можно методы вывода сделать с помощью foreach?
Как вызвать методы, если их поля закрыты? Что надо поправить в коде?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
using System.Collections.Generic;
 
namespace Lab8_Windows
{
    class Tovar
    {
        private int code;
        private string name;
        private int kolvo;
        private string[] price; //цена товара в рублях (за 1 штуку)
    }
 
    class Sklad
    {
        private string[] tovar1 = { "535", "shampoo", "4", "72 rub" }; //code - name - kolvo - price 
        private string[] tovar2 = { "720", "soap", "2", "15 rub" };
        private string[] tovar3 = { "119", "toothpaste", "1", "38 rub" };
        private string[] tovar4 = { "082", "showergel", "10", "105 rub" };
        private string[] tovar5 = { "013", "laundrygel", "6", "400 rub" };
 
        public void Index(string Code) //поиск товара по коду
        {
            Code = code; //не существует в тек. контексте
            if (Code == "535")
            {
                Console.WriteLine(tovar1);
            }
            if (Code == "720")
            {
                Console.WriteLine(tovar2);
            }
            if (Code == "119")
            {
                Console.WriteLine(tovar3);
            }
            if (Code == "082")
            {
                Console.WriteLine(tovar4);
            }
            if (Code == "013")
            {
                Console.WriteLine(tovar5);
            }
            if (Code != "535" && Code != "720" && Code != "119" && Code != "082" && Code != "013")
            {
                Console.WriteLine("Incorrect code");
            }
        }
 
        private void Tovars(string tovarrr) //поиск товара по названию
        {
            if (tovarrr == "shampoo")
            {
                Console.WriteLine(tovar1);
            }
            if (tovarrr == "soap")
            {
                Console.WriteLine(tovar2);
            }
            if (tovarrr == "toothpaste")
            {
                Console.WriteLine(tovar3);
            }
            if (tovarrr == "showergel")
            {
                Console.WriteLine(tovar4);
            }
            if (tovarrr == "laundrygel")
            {
                Console.WriteLine(tovar5);
            }
            if (tovarrr != "shampoo" && tovarrr != "soap" && tovarrr != "toothpaste" && tovarrr != "showergel" && tovarrr != "laundrygel")
            {
                Console.WriteLine("Wrong product");
            }
 
            List<string[]> spisok = new List<string[]>();
            spisok.Add(new string[] { "535", "shampoo", "4", "72 rub" });
            spisok.Add(new string[] { "720", "soap", "2", "15 rub" });
            spisok.Add(new string[] { "119", "toothpaste", "1", "38 rub" });
            spisok.Add(new string[] { "082", "showergel", "10", "105 rub" });
            spisok.Add(new string[] { "013", "laundrygel", "6", "400 rub" });
            spisok.Sort((a, b) => a[0].CompareTo(b[0])); //сортировка по коду
            Console.WriteLine("By code:\n");
            for (int i = 0; i < spisok.Count; i++)
            {
                Console.WriteLine(String.Join(" ", spisok[i]));
            }
            Console.WriteLine("\n\n");
            Console.WriteLine("By name:\n");
            spisok.Sort((a, b) => a[1].CompareTo(b[1])); //сортировка по названию
            for (int i = 0; i < spisok.Count; i++)
            {
                Console.WriteLine(String.Join(" ", spisok[i]));
            }
            Console.WriteLine("\n\n");
            Console.WriteLine("By kolvo:\n");
            spisok.Sort((a, b) => a[2].CompareTo(b[2])); //сортировка по количеству
            for (int i = 0; i < spisok.Count; i++)
            {
                Console.WriteLine(String.Join(" ", spisok[i]));
            }
         }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //вызов методов
        }
    }
}
Миниатюры
Как работать с классом, имеющим закрытые поля?  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2021, 14:39
Ответы с готовыми решениями:

Как работать с классом Array?
Подскажите, как работать с классом Array.

Как работать с классом CIM_Fan?
Хочу сделать приложение, которое будет управлять оборотами кулера ноутбука. Наткнулся на класс, но не знаю откуда взять библиотеки для...

Как работать с классом WebClient
Shared Sub CreateGame(sum As Double) Dim Client As New WebClient Client.Headers.Add(&quot;Host&quot;, &quot;site.com&quot;) ...

8
 Аватар для esperanto_qun
1124 / 656 / 393
Регистрация: 28.01.2021
Сообщений: 1,336
17.06.2021, 14:49
Оу, да у вас много чего в коде исправлять надо, вот пример работы с закрытыми полями, с этим проблем нет, для вашей задачи:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 class User
    {
        string name;
        int age;
 
        public User(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public override string ToString() => $"Name- {name}, Age - {age}";
    }
    class Program
    {
        static void Main()
        {
            List<User> users = new List<User>()
           {
               new User("lex",40),
               new User("tom",31),
               new User("smith",38),
               new User("joker",12)
           };
            foreach (User item in users)
            {
                Console.WriteLine(item);
            }
        }
    }
1
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
17.06.2021, 14:49
как нибудь так
Выровнять текст в консоли
1
56 / 39 / 20
Регистрация: 11.06.2021
Сообщений: 154
17.06.2021, 15:53
Лучший ответ Сообщение было отмечено Скопа как решение

Решение

Дальше доработаете сортировку и остальное:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
namespace ConsoleApp1
{
    class Tovar
    {
        private int code;
        private string name;
        private int kolvo;
        private double price; //цена товара в рублях (за 1 штуку)
        public Tovar() { }
        public Tovar(int Code, string Name, int Kolvo, double Price) { code = Code; name = Name; kolvo = Kolvo; price = Price; }
 
        public int Code { get { return code; } set { code = value; } }
        public string Name { get { return name; } set { name = value; } }
        public int Kolvo { get { return kolvo; } set { kolvo = value; } }
        public double Price { get { return price; } set { price = value; } }
        public override string ToString() => $"Code - {code, 5}, Name - {name, 12}, Kolvo - {kolvo, 5}, Price - {price, 5}руб.";
    }
  
    class Sklad
    {
        private List<Tovar> sklad = new List<Tovar>();
        string NameSklad;
        public Sklad(string name) { NameSklad = name; }
        public void AddTovar(int Code, string Name, int Kolvo, double Price)
        {
            Tovar tovar = new Tovar(Code, Name, Kolvo, Price);
            sklad.Add(tovar);
        }
        public void Index(int code) //поиск товара по коду
        {
            foreach (Tovar tovar in sklad)
            {
                if (tovar.Code == code)
                    Console.WriteLine(tovar.ToString());
            }
 
        }
 
        public void Tovars(string name) //поиск товара по названию
        {
            foreach (Tovar tovar in sklad)
            {
                if (tovar.Name == name)
                    Console.WriteLine(tovar.ToString());
            }
 
        }
    }
    class Program
    {
        static void Main(string[] args)
        { 
            Sklad sklad = new Sklad("Sklad 1");
            sklad.AddTovar(535,    "shampoo",  4,  72); 
            sklad.AddTovar(720,       "soap",  2,  15);
            sklad.AddTovar(119, "toothpaste",  1,  38);
            sklad.AddTovar( 82,  "showergel", 10, 105);
            sklad.AddTovar( 13, "laundrygel",  6, 400);
            sklad.AddTovar( 82,  "showergel", 21, 115);
            sklad.Index(82);
            sklad.Tovars("soap");
 
        }
    }
}
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
17.06.2021, 16:22  [ТС]
filh, можете пояснить эти моменты, для чего они:

C#
1
2
3
4
5
6
7
8
public Tovar(int Code, string Name, int Kolvo, double Price) { code = Code; name = Name; kolvo = Kolvo; price = Price; }
 
        public int Code { get { return code; } set { code = value; } }
        public string Name { get { return name; } set { name = value; } }
        public int Kolvo { get { return kolvo; } set { kolvo = value; } }
        public double Price { get { return price; } set { price = value; } }
        public override string ToString() => $"Code - {code, 5}, Name - {name, 12}, Kolvo - {kolvo, 5}, Price - {price, 5}руб.";
    }
0
56 / 39 / 20
Регистрация: 11.06.2021
Сообщений: 154
17.06.2021, 16:27
Первая строка это конструктор класса. Передаем все значения при создании нового товара.
4 следующие позволяют записывать/считывать переменные, которые закрыты.
Последняя строка это перезагрузил toString для вывода в нужном виде для нас информации о товаре.
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
17.06.2021, 16:29  [ТС]
filh, а почему написано в таком формате:
C#
1
public string Name { get { return name; } set { name = value; } }
Для чего возвращение значения переменной и приравнивание её к value?
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
17.06.2021, 16:52
Скопа, https://metanit.com/sharp/tutorial/3.4.php
1
2 / 2 / 0
Регистрация: 19.12.2020
Сообщений: 229
17.06.2021, 16:53  [ТС]
Посмотрю, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2021, 16:53
Помогаю со студенческими работами здесь

Как работать с классом Encoding
Написал в блокноте тесты(test.cmd). Знаю, что в командной сторкое кирилица автоматически из аски конвертируется в ютф16, а на выход обратно...

Как работать с классом объединённым с абстрактным?
Здравствуйте в ede netbeans пишу код вот в этом месте код подсвечивается красным , скажите с чем связана эта ошибка с тем , что если...

Как работать с TObject классом-наследником
Я не могу найти как правильно создавать свой класс TObject. Может кто подскажет? Есть у TIdTCPServer AContext-&gt;Data которая по типу...

закрытые поля в C#
является ли это закрытым полем? public static readonly string ip; если нет то как оно выглядит ?

Закрытые поля класса
Здравствуйте.Помогите разобраться с кодом. Определен следующий класс: struct Cls { Cls(char c, double d, int i); private: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru