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

Проблема в методе который берет информацию из 2-х других классов

04.06.2024, 13:23. Показов 592. Ответов 4

Студворк — интернет-сервис помощи студентам
Необходимо создать консольное приложение которая является программой для учета товаров магазина. Есть несколько классов: 1. Product с полями: name (название продукта), description (описание продукта), price (цена за 1 ед. продукта), quantity(количество продуктов на складе магазина) 2. Order с полями: OrderNumber (номер заказа) ClientPhone (номер телефона клиента) OrderDate (вводится 1 дата заказа и 2 дата (текущая дата currentDate )) Status(статус определяется в зависимости от даты если: currentDate.Date == orderDate.Date то статус = "процессе", если currentDate.Date < orderDate.Date то статус = "не начат", если currentDate.Date > orderDate.Date.AddDays(2) то статус = "выполнен") Product (лист продуктов в котором их выбирают) TotalCost (итоговая цена заказа которая считается по формуле количество товара*на цену за 1 ед. товара *0.1(на наценку)). Вызывается меню в котором через кейс вызываются методы. и проблема в том что не могу сделать так чтобы продукты которые в список с продуктами работал в методе создания нового заказа, тут все на таких костылях сделал временной мерой чтобы проверить остальные действия меню - они работают, еще в идеале реализовать сохранение данных в файл и вывод из него данных чтобы при новом запуске старые данные сохранялись.

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
class Product //класс продукт
{
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }
 
    public Product(string name, string description, decimal price, int quantity)
    {
        Name = name;
        Description = description;
        Price = price;
        Quantity = quantity;
    }
    public override string ToString()
    {
        return $"Товар: {Name}, Описание: {Description}, Цена: {Price}, Количество: {Quantity}";
    }
}
 
class Order // класс Заказ
{
    public int OrderNumber { get; set; }
    public string ClientContacts { get; set; }
    public DateTime OrderDate { get; set; }
    public string Status { get; set; }
 
    public Order(int orderNumber, string clientContacts, DateTime orderDate, string status)
    {
        OrderNumber = orderNumber;
        ClientContacts = clientContacts;
        OrderDate = orderDate;
        Status = status;
    }
    public override string ToString()
    {
        return $"Order Number: {OrderNumber}, Customer Name: {ClientContacts}, Order Date: {OrderDate}, Status: {Status}";
    }
 
        static void ManageOrders() 
        {
            List<Order> orderList = new List<Order>();
            while (true)
            {
                Console.WriteLine("\nУправление заказами:");
                Console.WriteLine("4.1 Создать новый заказ");
                Console.WriteLine("4.2 Просмотреть все заказы");
                Console.WriteLine("4.3 Просмотр подробностей конкретного заказа");
                Console.WriteLine("4.4 Удалить заказ");
                Console.WriteLine("Нажмите любую клавишу для выхода");                
                Console.Write("\nВыберите действие: ");
                string choice = Console.ReadLine();
                switch (choice)
                {
                    case "4.1":
                        CreateNewOrder(orderList); //метод добавления нового заказа
                        break;
                    case "4.2":
                        ViewAllOrders(orderList); // метод вывода всех заказов
                        break;
                    case "4.3":
                        ViewOrderDetails(orderList); // метод подробного вывода
                        break;
                    case "4.5":
                        DeleteOrder(orderList); // метод удаления 
                        break;
                    default:
                        Console.WriteLine("Exiting order management...");
                        return;
                }
            }        
}
 
static void CreateNewOrder(List<Order> orderList) //метод добавления нового заказа
{
    List<Product> productList = new List<Product>();
    Console.WriteLine("Enter details for the new order:");
    Console.Write("Order Number: ");
    int orderNumber = int.Parse(Console.ReadLine());
    Console.Write("Customer Name: ");
    string clientPhone = Console.ReadLine();
    DateTime orderDate = InputDate("Введите дату заказа (в формате ГГГГ-ММ-ДД):");
    DateTime currentDate = InputDate("Введите текущую дату (в формате ГГГГ-ММ-ДД):");
    //Console.Write("Status:");
    string status = DetermineStatus(orderDate, currentDate);
    Console.WriteLine("Введите название товара: ");
    string productName = Console.ReadLine();
    Console.WriteLine("Введите цену товара:");
    double price = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("Введите количество: ");
    int quantity = Convert.ToInt32(Console.ReadLine());
    // Расчет итоговой стоимости заказа
    double totalPrice = price * quantity;
    orderList.Add(new Order(orderNumber, clientPhone, orderDate, status, new Product(productName, "", price, quantity), totalPrice));
    Console.WriteLine("Новый заказ успешно добавлен!");
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2024, 13:23
Ответы с готовыми решениями:

Написать программу которая берёт информацию из файла, который был уже создан и заполнен, и выполняет поиск в ней
Написать программу которая берёт информацию из файла, который был уже создан и заполнен, и выполняет поиск в ней с тем что вводим мы. Надо,...

Создать класс, который хранит информацию об обсадных трубах и в методе определить максимальный объем трубы
Здравствуйте. Первый раз делаю что-то в Delphi. Вот задание: Объявить класс, позволяющий объекту хранить информацию о количестве обсадных...

Написать класс, который считает доход с других классов
Пожаааалуйста помогите! Есть абстрактный класс Deposit Есть 3 класса наследника BaseDeposit, SpecialDeposit и LongDeposit Создать...

4
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,726
Записей в блоге: 1
04.06.2024, 13:44
Представленный класс Order не содержит свойства Product, которое вы пытаетесь передать в конструкторе.
0
0 / 0 / 0
Регистрация: 09.10.2020
Сообщений: 17
04.06.2024, 13:46  [ТС]
Поправка класса Order:
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
class Order
        {
            public int OrderNumber { get; set; }
            public string ClientPhone { get; set; }
            public DateTime OrderDate { get; set; }
            public string Status { get; set; }
            public Product Product { get; set; }
            public double TotalCost { get; set; }
 
            public Order(int orderNumber, string clientPhone, DateTime orderDate, string status, Product product, double totalCost)
            {
                OrderNumber = orderNumber;
                ClientPhone = clientPhone;
                OrderDate = orderDate;
                Status = status;
                Product = product;
                TotalCost = totalCost;
            }
            public override string ToString()
            {
                return $"Order Number: {OrderNumber}, Customer phone: {ClientPhone}, Дата заказа: {OrderDate.ToString("yyyy-MM-dd")}, Status: {Status}";                //Этот метод на подробный вывод заказа                
            }
 
            public string DisplayOrder()
            {
                return $"Номер заказа: {OrderNumber}, Телефон клиента: {ClientPhone}";
            }            //метод что выводит только номер заказа и телефон клиента
        }
0
 Аватар для Andrey-MSK
3317 / 2204 / 387
Регистрация: 14.08.2018
Сообщений: 7,411
Записей в блоге: 4
04.06.2024, 14:10
Цитата Сообщение от Huodini Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int OrderNumber { get; set; }
 public string ClientPhone { get; set; }
 public DateTime OrderDate { get; set; }
 public string Status { get; set; }
 public Product Product { get; set; }
 public double TotalCost { get; set; }
public Order(int orderNumber, string clientPhone, DateTime orderDate, string status, Product product, double totalCost)
 {
 OrderNumber = orderNumber;
 ClientPhone = clientPhone;
 OrderDate = orderDate;
 Status = status;
 Product = product;
 TotalCost = totalCost;
 }
Если вы используете свойства, да ещё и публичные, зачем заполнять их в конструкторе?
Кто мешает делать вот так
C#
1
Order MyOrder = new Order { OrderNumber =  orderNumber, /* и т.д. */ };
???

Добавлено через 4 минуты
Huodini, Конструктор + свойства можно использовать для заполнения приватного свойства
C#
1
public int OrderNumber { get; private set; }
или для заполнения свойства, которое только для чтения
C#
1
public int OrderNumber { get; }
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,726
Записей в блоге: 1
04.06.2024, 14:15
Лучший ответ Сообщение было отмечено Huodini как решение

Решение

Huodini, по идее в заказе может быть много товаров, поэтому должно быть то-то типа того:
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
class Order
        {
            public int OrderNumber { get; set; }
            public string ClientPhone { get; set; }
            public DateTime OrderDate { get; set; }
            public string Status { get; set; }
            public List<Product> Products { get; set; }
            public double TotalCost { get; set; }
 
            public Order(int orderNumber, string clientPhone, DateTime orderDate, string status, List<Product> products, double totalCost)
            {
                OrderNumber = orderNumber;
                ClientPhone = clientPhone;
                OrderDate = orderDate;
                Status = status;
                Products = products;
                TotalCost = totalCost;
            }
            public override string ToString()
            {
                return $"Order Number: {OrderNumber}, Customer phone: {ClientPhone}, Дата заказа: {OrderDate.ToString("yyyy-MM-dd")}, Status: {Status}";                //Этот метод на подробный вывод заказа                
            }
 
            public string DisplayOrder()
            {
                return $"Номер заказа: {OrderNumber}, Телефон клиента: {ClientPhone}";
            }            //метод что выводит только номер заказа и телефон клиента
        }
Ну и вводить товары также нужно в некой итерации, т.е. строки 86-91 должны быть внутри цикла с выходом из него по требованию пользователя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.06.2024, 14:15
Помогаю со студенческими работами здесь

Выбрать аудио плеер, который покажет информацию о воспроизведении на других ПК
Добрый день. Подскажите пожалуйста, есть ли аудио плееры с возможностью вывода сообщений о том какой трек проигрывается на ДРУГОЙ...

Удаление динамического массива объектов класса, который имеет динамические массивы объектов других классов
Здравствуйте. Опишу вопрос подробнее. У меня есть класс Department, который имеет динамический массив объектов класса Sector. Класс Sector,...

Берет информацию только с 1 строчки memo
Всем привет, делаю парсер(в потоке) Знаю что из потока нельзя взаимодействовать с виз. компонентами но как сделать по другому я не знаю...

Класс, содержащий вложенные объекты других классов. Обратиться к методам этих классов
Помогите с задачей пожалуйста. Разработать класс, содержащий вложенные объекты других классов. Обратиться к методам этих классов....

Excel: отобразить информацию про студентов определенной группы, и скрыть информацию обо всех других студентах
Разработать макрос процедуру которая в Excel файле отображает информацию про студентов определенной группы, и скрывает информацию о всех...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru