Загрузка данных
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
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 ex)
{
MessageBox.Show("Ошибка загрузки данных: " + ex.Message);
СоздатьТестовыеДанные();
}
}
else
{
СоздатьТестовыеДанные();
}
// Определяем следующий ID
следующийИдАвто = автомобили.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 Автомобиль { Ид = 3, Марка = "Лада", Модель = "Веста", ГодВыпуска = 2023, Цена = 18000, ВНаличии = true, ДатаВыпуска = new DateTime(2023, 1, 15) }
};
клиенты = new List<Клиент>();
заявки = new List<Заявка>();
следующийИдАвто = 4;
следующийИдКлиента = 1;
следующийИдЗаявки = 1;
СохранитьДанные();
}
private void СохранитьДанные()
{
XmlDocument doc = new XmlDocument();
XmlDeclaration декларация = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(деклрация);
XmlElement корень = doc.CreateElement("Данные");
doc.AppendChild(корень);
// Сохраняем автомобили
XmlElement автоЭлемент = doc.CreateElement("Автомобили");
foreach (var авто in автомобили)
{
XmlElement автоузел = doc.CreateElement("Автомобиль");
XmlElement идУзел = doc.CreateElement("Ид");
идУзел.InnerText = авто.Ид.ToString();
автоузел.AppendChild(идУзел);
XmlElement маркаУзел = doc.CreateElement("Марка");
маркаУзел.InnerText = авто.Марка;
автоузел.AppendChild(маркаУзел);
XmlElement модельУзел = doc.CreateElement("Модель");
модельУзел.InnerText = авто.Модель;
автоузел.AppendChild(модельУзел);
XmlElement годУзел = doc.CreateElement("ГодВыпуска");
годУзел.InnerText = авто.ГодВыпуска.ToString();
автоузел.AppendChild(годУзел);
XmlElement ценаУзел = doc.CreateElement("Цена");
ценаУзел.InnerText = авто.Цена.ToString();
автоузел.AppendChild(ценаУзел);
XmlElement наличиеУзел = doc.CreateElement("ВНаличии");
наличиеУзел.InnerText = авто.ВНаличии.ToString();
автоузел.AppendChild(наличиеУзел);
XmlElement датаУзел = doc.CreateElement("ДатаВыпуска");
датаУзел.InnerText = авто.ДатаВыпуска.ToString("yyyy-MM-dd");
автоузел.AppendChild(датаУзел);
автоЭлемент.AppendChild(автоузел);
}
корень.AppendChild(автоЭлемент);
// Сохраняем клиентов
XmlElement клиентыЭлемент = doc.CreateElement("Клиенты");
foreach (var клиент in клиенты)
{
XmlElement клиентузел = doc.CreateElement("Клиент");
XmlElement идУзел = doc.CreateElement("Ид");
идУзел.InnerText = клиент.Ид.ToString();
клиентузел.AppendChild(идУзел);
XmlElement фиоУзел = doc.CreateElement("Фио");
фиоУзел.InnerText = клиент.Фио;
клиентузел.AppendChild(фиоУзел);
XmlElement телефонУзел = doc.CreateElement("Телефон");
телефонУзел.InnerText = клиент.Телефон;
клиентузел.AppendChild(телефонУзел);
клиентыЭлемент.AppendChild(клиентузел);
}
корень.AppendChild(клиентыЭлемент);
// Сохраняем заявки
XmlElement заявкиЭлемент = doc.CreateElement("Заявки");
foreach (var заявка in заявки)
{
XmlElement заявкаузел = doc.CreateElement("Заявка");
XmlElement идУзел = doc.CreateElement("Ид");
идУзел.InnerText = заявка.Ид.ToString();
заявкаузел.AppendChild(идУзел);
XmlElement идКлиентаУзел = doc.CreateElement("ИдКлиента");
идКлиентаУзел.InnerText = заявка.ИдКлиента.ToString();
заявкаузел.AppendChild(идКлиентаУзел);
XmlElement маркаУзел = doc.CreateElement("ЖелаемаяМарка");
маркаУзел.InnerText = заявка.ЖелаемаяМарка;
заявкаузел.AppendChild(маркаУзел);
XmlElement статусУзел = doc.CreateElement("Статус");
статусУзел.InnerText = заявка.Статус;
заявкаузел.AppendChild(статусУзел);
заявкиЭлемент.AppendChild(заявкаузел);
}
корень.AppendChild(заявкиЭлемент);
doc.Save(путьКФайлу);
}
// Методы для работы с автомобилями
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)
{
заявка.Статус = новыйСтатус;
СохранитьДанные();
}
}
}
}