Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2018, 18:36   #1
angrystrike
 
Регистрация: 18.03.2017
Сообщений: 6
По умолчанию Работа с 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, 18:53   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

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

И не используйте Capacity, это не то.
Цитата:
Сообщение от angrystrike Посмотреть сообщение
getName
Вас Джависты покусали?) В C# же есть свойства.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

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

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

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

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

Также я что-то напортачил с выводом, если в мейне прописать:
Код:
  foreach (Order item in orders)
            {
                item.Show();
            }
При некоторых запросах информация введеная пользователем может дублироваться.
Увы, не у кого больше спросить, надеюсь на вашу помощь

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# - Как изменить свойство элемента в list? List<MyClass> kvi2994 C# (си шарп) 1 05.03.2015 18:28
class XmlTextWriter nwhta WPF, UWP, WinRT, XAML 3 15.11.2014 23: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