Загрузка данных
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
using CarCatalog.Модели;
namespace CarCatalog.Данные
{
public class ХранилищеДанных
{
private string путьКФайлу;
private List<Автомобиль> автомобили;
private List<Клиент> клиенты;
private List<Заявка> заявки;
private int следующийИдАвто;
private int следующийИдКлиента;
private int следующийИдЗаявки;
public ХранилищеДанных()
{
путьКФайлу = Path.Combine(Application.StartupPath, "cars.xml");
автомобили = new List<Автомобиль>();
клиенты = new List<Клиент>();
заявки = new List<Заявка>();
ЗагрузитьДанные();
}
private void ЗагрузитьДанные()
{
if (File.Exists(путьКФайлу))
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(путьКФайлу);
XmlNodeList автоУзлы = doc.SelectNodes("/Данные/Автомобили/Автомобиль");
if (автоУзлы != null)
{
foreach (XmlNode узел in автоУзлы)
{
Автомобиль авто = new Автомобиль();
авто.Ид = int.Parse(узел["Ид"].InnerText);
авто.Марка = узел["Марка"].InnerText;
авто.Модель = узел["Модель"].InnerText;
авто.ГодВыпуска = int.Parse(узел["ГодВыпуска"].InnerText);
авто.Цена = decimal.Parse(узел["Цена"].InnerText);
авто.ВНаличии = bool.Parse(узел["ВНаличии"].InnerText);
авто.ДатаВыпуска = DateTime.Parse(узел["ДатаВыпуска"].InnerText);
автомобили.Add(авто);
}
}
XmlNodeList клиентыУзлы = doc.SelectNodes("/Данные/Клиенты/Клиент");
if (клиентыУзлы != null)
{
foreach (XmlNode узел in клиентыУзлы)
{
Клиент клиент = new Клиент();
клиент.Ид = int.Parse(узел["Ид"].InnerText);
клиент.Фио = узел["Фио"].InnerText;
клиент.Телефон = узел["Телефон"].InnerText;
клиенты.Add(клиент);
}
}
XmlNodeList заявкиУзлы = doc.SelectNodes("/Данные/Заявки/Заявка");
if (заявкиУзлы != null)
{
foreach (XmlNode узел in заявкиУзлы)
{
Заявка заявка = new Заявка();
заявка.Ид = int.Parse(узел["Ид"].InnerText);
заявка.ИдКлиента = int.Parse(узел["ИдКлиента"].InnerText);
заявка.ЖелаемаяМарка = узел["ЖелаемаяМарка"].InnerText;
заявка.Статус = узел["Статус"].InnerText;
заявки.Add(заявка);
}
}
}
catch (Exception) { СоздатьТестовыеДанные(); }
}
else { СоздатьТестовыеДанные(); }
следующийИдАвто = автомобили.Count > 0 ? автомобили.Max(a => a.Ид) + 1 : 1;
следующийИдКлиента = клиенты.Count > 0 ? клиенты.Max(c => c.Ид) + 1 : 1;
следующийИдЗаявки = заявки.Count > 0 ? заявки.Max(z => z.Ид) + 1 : 1;
}
private void СоздатьТестовыеДанные()
{
автомобили = new List<Автомобиль>
{
new Автомобиль { Ид = 1, Марка = "Тойота", Модель = "Камри", ГодВыпуска = 2022, Цена = 25000, ВНаличии = true, ДатаВыпуска = new DateTime(2022, 3, 1) },
new Автомобиль { Ид = 2, Марка = "БМВ", Модель = "Х5", ГодВыпуска = 2023, Цена = 60000, ВНаличии = false, ДатаВыпуска = new DateTime(2023, 6, 10) }
};
клиенты = new List<Клиент>();
заявки = new List<Заявка>();
следующийИдАвто = 3;
следующийИдКлиента = 1;
следующийИдЗаявки = 1;
СохранитьДанные();
}
private void СохранитьДанные()
{
XmlDocument doc = new XmlDocument();
System.Xml.XmlDeclaration декларация = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(деклрация);
XmlElement корень = doc.CreateElement("Данные");
doc.AppendChild(корень);
XmlElement автоЭлемент = doc.CreateElement("Автомобили");
foreach (var авто in автомобили)
{
XmlElement автоузел = doc.CreateElement("Автомобиль");
ДобавитьЭлемент(автоузел, "Ид", авто.Ид.ToString());
ДобавитьЭлемент(автоузел, "Марка", авто.Марка);
ДобавитьЭлемент(автоузел, "Модель", авто.Модель);
ДобавитьЭлемент(автоузел, "ГодВыпуска", авто.ГодВыпуска.ToString());
ДобавитьЭлемент(автоузел, "Цена", авто.Цена.ToString());
ДобавитьЭлемент(автоузел, "ВНаличии", авто.ВНаличии.ToString());
ДобавитьЭлемент(автоузел, "ДатаВыпуска", авто.ДатаВыпуска.ToString("yyyy-MM-dd"));
автоЭлемент.AppendChild(автоузел);
}
корень.AppendChild(автоЭлемент);
XmlElement клиентыЭлемент = doc.CreateElement("Клиенты");
foreach (var клиент in клиенты)
{
XmlElement клиентузел = doc.CreateElement("Клиент");
ДобавитьЭлемент(клиентузел, "Ид", клиент.Ид.ToString());
ДобавитьЭлемент(клиентузел, "Фио", клиент.Фио);
ДобавитьЭлемент(клиентузел, "Телефон", клиент.Телефон);
клиентыЭлемент.AppendChild(клиентузел);
}
корень.AppendChild(клиентыЭлемент);
XmlElement заявкиЭлемент = doc.CreateElement("Заявки");
foreach (var заявка in заявки)
{
XmlElement заявкаузел = doc.CreateElement("Заявка");
ДобавитьЭлемент(заявкаузел, "Ид", заявка.Ид.ToString());
ДобавитьЭлемент(заявкаузел, "ИдКлиента", заявка.ИдКлиента.ToString());
ДобавитьЭлемент(заявкаузел, "ЖелаемаяМарка", заявка.ЖелаемаяМарка);
ДобавитьЭлемент(заявкаузел, "Статус", заявка.Статус);
заявкиЭлемент.AppendChild(заявкаузел);
}
корень.AppendChild(заявкиЭлемент);
doc.Save(путьКФайлу);
}
private void ДобавитьЭлемент(XmlElement родитель, string имя, string значение)
{
XmlElement элемент = родитель.OwnerDocument.CreateElement(имя);
элемент.InnerText = значение;
родитель.AppendChild(элемент);
}
public List<Автомобиль> ПолучитьАвтомобилиВНаличии()
{
return автомобили.Where(a => a.ВНаличии).ToList();
}
public void ДобавитьАвтомобиль(Автомобиль новыйАвто)
{
новыйАвто.Ид = следующийИдАвто++;
автомобили.Add(новыйАвто);
СохранитьДанные();
}
public void УдалитьАвтомобиль(int номерАвто)
{
var авто = автомобили.FirstOrDefault(a => a.Ид == номерАвто);
if (авто != null) { автомобили.Remove(авто); СохранитьДанные(); }
}
public bool ЕстьЛиАвтомобильВНаличии(string марка)
{
return автомобили.Any(a => a.Марка == марка && a.ВНаличии);
}
public Клиент НайтиКлиентаПоТелефону(string телефон)
{
return клиенты.FirstOrDefault(c => c.Телефон == телефон);
}
public void ДобавитьКлиента(Клиент новыйКлиент)
{
новыйКлиент.Ид = следующийИдКлиента++;
клиенты.Add(новыйКлиент);
СохранитьДанные();
}
public Клиент ПолучитьКлиентаПоИд(int номерКлиента)
{
return клиенты.FirstOrDefault(c => c.Ид == номерКлиента);
}
public void ДобавитьЗаявку(Заявка новаяЗаявка)
{
новаяЗаявка.Ид = следующийИдЗаявки++;
заявки.Add(новаяЗаявка);
СохранитьДанные();
}
public List<Заявка> ПолучитьОткрытыеЗаявкиПоМарке(string марка)
{
return заявки.Where(z => z.Статус == "открыта" && z.ЖелаемаяМарка == марка).ToList();
}
public void ИзменитьСтатусЗаявки(int номерЗаявки, string новыйСтатус)
{
var заявка = заявки.FirstOrDefault(z => z.Ид == номерЗаявки);
if (заявка != null) { заявка.Статус = новыйСтатус; СохранитьДанные(); }
}
}
}