Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 03.01.2018, 19:36   #1
angrystrike
 
Регистрация: 18.03.2017
Сообщений: 6
Репутация: 10
По умолчанию Работа с XML XmlTextWriter, List

Program.cs
Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
 
namespace HomeXml
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Order> orders = new List<Order>();          
            string choice;            
            do
            {
                Console.WriteLine("pls");
                orders.Add(new Order());
 
                Console.WriteLine("One more order?(1 - yes)");
                choice = Console.ReadLine();              
            } while (choice == "1");
 
            XmlTextWriter writer = null;
            try
            {
                writer = new XmlTextWriter("Orders.xml", System.Text.Encoding.Unicode);
                writer.Formatting = Formatting.Indented;
                writer.WriteStartDocument(); // <start>
                writer.WriteStartElement("orders"); // <orders>
                foreach (Order order in orders)
                {
                    writer.WriteStartElement("order");  // <order>                
                    for (int i = 0; i < Order.goods.Capacity; i++)                  
                    {
                        writer.WriteStartElement("good"); // <good>
                        writer.WriteElementString("name", Order.goods[i].getName()); // <name>
                        writer.WriteElementString("date", Order.goods[i].getDate().ToString()); // <date>
                        writer.WriteElementString("price", Order.goods[i].getPrice().ToString()); // <price>
                        writer.WriteEndElement(); // </good>
                    }
 
                    writer.WriteEndElement(); // </order>
                }
                writer.WriteEndElement(); // </orders>
               
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.TargetSite);
            }
            finally
            {
                if (writer != null)
                {
                    writer.Close();
                }
            }
               
 
         }
     }
}

Order.cs
Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace HomeXml
{
    class Order
    {
        public static List<Good> goods = new List<Good>();
        public Order()
        {
            string choice;
            do
            {
                goods.Add(new Good());
 
                Console.WriteLine("One more product?(1 - yes)");
                choice = Console.ReadLine();
 
            } while (choice == "1");
        }
        public void Show()
        {
            foreach (Good item in goods)
            {
                Console.WriteLine(item);
            }
        }
    }
}

Good.cs
Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace HomeXml
{
    class Good
    {     
        private string name;
        private DateTime date;
        private double price;
 
        public DateTime getDate()
        {
            return date;
        }
        public double getPrice()
        {
            return price;
        }
        public string getName()
        {
            return name;
        }
        public Good()
        {
            bool b = true;
            do
            {
                b = true;
                Console.WriteLine("Name of product: ");
                name = Console.ReadLine();
                try
                {
                    Console.WriteLine("When this product cant be used: ");
                    date = Convert.ToDateTime(Console.ReadLine());
                    Console.WriteLine("Price(hrn): ");
                    price = Convert.ToDouble(Console.ReadLine());
                    if (price < 0)
                    {
                        b = false;
                    }
                }
                catch (FormatException)
                {
                    Console.WriteLine("Wrong format");
                    Console.WriteLine("--------------------");
                    b = false;
                }
 
            } while (b == false);
        }
        public override string ToString()
        {
            return $"{name}, {date}, {price}";
        }
    }
}

Пользователь вводит любое количество заказов(заказ состоит из любого количества товаров).Далее мне нужно это запихнуть в xml файл.Хочу увидеть что-то вроде:
good.png
А получается:
bad.png

1) почему то нету двух тегов <order>, хотя заказа два
2) лишний тег <good />
3) это конечно мелочь, но всё же как выводить дату без часов минут и секунд?
angrystrike вне форума   Ответить с цитированием
Старый 03.01.2018, 19:53   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,368
Репутация: 3353

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от angrystrike Посмотреть сообщение
это конечно мелочь, но всё же как выводить дату без часов минут и секунд?
Почитать документацию DateTime ToString.

Вообще дату/время обычно хранят в каком-то одном стандартном формате (например хотя бы InvariantCulture) потому что может получиться так, что на одном компе сохранили, а на другом открыть не смогли. Ну и если хранить время, то стоит либо хранить часовой пояс (например ISO 8601), либо переводить в UTC+0.

И не используйте Capacity, это не то.
Цитата:
Сообщение от angrystrike Посмотреть сообщение
getName
Вас Джависты покусали?) В C# же есть свойства.

Последний раз редактировалось Alex11223; 03.01.2018 в 19:56.
Alex11223 на форуме   Ответить с цитированием
Старый 03.01.2018, 21:54   #3
angrystrike
 
Регистрация: 18.03.2017
Сообщений: 6
Репутация: 10
По умолчанию

По-поводу capasity, насколько я знаю это количество элементов для которых память уже выделена. Просто подумал что в данной ситуации без разницы что использовать capasity или count.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вас Джависты покусали?) В C# же есть свойства.
Скорее c++, как-то привычнее и понятнее использовать геттеры и сеттеры

Даже при смене capasity на count все равно что то не так: при вводе двух заказов и одного продукта в каждом.В xml файле два заказа по два товара в каждом

Также я что-то напортачил с выводом, если в мейне прописать:
Код:

  foreach (Order item in orders)
            {
                item.Show();
            }

При некоторых запросах информация введеная пользователем может дублироваться.
Увы, не у кого больше спросить, надеюсь на вашу помощь

Последний раз редактировалось angrystrike; 03.01.2018 в 22:16.
angrystrike вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# - Как изменить свойство элемента в list? List<MyClass> kvi2994 C# (си шарп) 1 05.03.2015 19:28
class XmlTextWriter nwhta WPF, UWP, WinRT, XAML 3 16.11.2014 00:15
List Структура в List структуре и тд по аналогии с Delphi Кислый C# (си шарп) 3 13.09.2014 21:06
[c++][list] Порядок обработки двух list Padavan Помощь студентам 1 10.05.2011 14:56
Работа с БД XML Aleksey1989 Помощь студентам 5 26.10.2010 16:50


13:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru