Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > .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,401
Репутация: 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


23:53.


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

RusProfile.ru


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