diff --git a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/AbstractCompany.cs b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/AbstractCompany.cs index eca0f45..e2d16e0 100644 --- a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/AbstractCompany.cs @@ -60,11 +60,10 @@ public abstract class AbstractCompany /// Компания /// Добавляемый объект /// - public static bool operator +(AbstractCompany company, DrawningTrackedCar trackedCar) + public static int operator +(AbstractCompany company, DrawningTrackedCar trackedCar) { - return company._collection?.Insert(trackedCar) ?? false; + return company._collection.Insert(trackedCar); } - /// /// Перегрузка оператора удаления для класса /// diff --git a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ICollectionGenericObjects.cs index d4360a4..feb1675 100644 --- a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -21,7 +21,7 @@ public interface ICollectionGenericObjects /// /// Добавляемый объект /// true - вставка прошла удачно, false - вставка не удалась - bool Insert(T obj); + int Insert(T obj); /// /// Добавление объекта в коллекцию на конкретную позицию diff --git a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ListGenericObjects.cs b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ListGenericObjects.cs index f22284a..509e2dd 100644 --- a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ListGenericObjects.cs +++ b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/ListGenericObjects.cs @@ -49,19 +49,16 @@ public class ListGenericObjects: ICollectionGenericObjects return _collection[position]; } - public bool Insert(T obj) + public int Insert(T obj) { // TODO проверка, что не превышено максимальное количество элементов // TODO вставка в конец набора - if (Count != _maxCount) - { - _collection.Add(obj); - return true; - } - return false; + if (Count == _maxCount) return -1; + _collection.Add(obj); + return Count; } - public int Insert(T obj, int position) + public int Insert(T obj, int position) { // TODO проверка, что не превышено максимальное количество элементов // TODO проверка позиции diff --git a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/MassiveGenericObjects.cs index 47b5b7d..1446181 100644 --- a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/MassiveGenericObjects.cs @@ -53,17 +53,19 @@ public class MassiveGenericObjects : ICollectionGenericObjects return _collection[position]; } - public bool Insert(T obj) + public int Insert(T obj) { - for (int i = 0; i < _collection.Length; i++) + int index = 0; + while (index < _collection.Length) { - if (_collection[i] == null) + if (_collection[index] == null) { - _collection[i] = obj; - return true; + _collection[index] = obj; + return index; } + ++index; } - return false; + return -1; } public int Insert(T obj, int position) diff --git a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/StorageCollection.cs b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/StorageCollection.cs index 5c96cff..a16629a 100644 --- a/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectByldozer/ProjectByldozer/CollectionGenericObjects/StorageCollection.cs @@ -90,60 +90,104 @@ public class StorageCollection /// - /// Сохранение информации по автомобилям в хранилище в файл - /// - /// Путь и имя файла - /// true - сохранение прошло успешно, false - ошибка при сохранении данных - public bool SaveData(string filename) + /// Сохранение информации по автомобилям в хранилище в файл + /// + /// Путь и имя файла + /// true - сохранение прошло успешно, false - ошибка при сохранении данных + /// + /// Сохранение информации по автомобилям в хранилище в файл + /// + /// Путь и имя файла + /// true - сохранение прошло успешно, false - ошибка при сохранении данных + public bool SaveData(string filename) { if (_storages.Count == 0) { return false; } - if (File.Exists(filename)) { File.Delete(filename); } - - StringBuilder sb = new(); - - sb.Append(_collectionKey); - foreach (KeyValuePair> value in _storages) + using (StreamWriter writer = new StreamWriter(filename)) { - sb.Append(Environment.NewLine); - // не сохраняем пустые коллекции - if (value.Value.Count == 0) + writer.Write(_collectionKey); + foreach (KeyValuePair> value in _storages) { - continue; - } - - sb.Append(value.Key); - sb.Append(_separatorForKeyValue); - sb.Append(value.Value.GetCollectionType); - sb.Append(_separatorForKeyValue); - sb.Append(value.Value.MaxCount); - sb.Append(_separatorForKeyValue); - - foreach (T? item in value.Value.GetItems()) - { - string data = item?.GetDataForSave() ?? string.Empty; - if (string.IsNullOrEmpty(data)) + StringBuilder sb = new(); + sb.Append(Environment.NewLine); + // не сохраняем пустые коллекции + if (value.Value.Count == 0) { continue; } - - sb.Append(data); - sb.Append(_separatorItems); + sb.Append(value.Key); + sb.Append(_separatorForKeyValue); + sb.Append(value.Value.GetCollectionType); + sb.Append(_separatorForKeyValue); + sb.Append(value.Value.MaxCount); + sb.Append(_separatorForKeyValue); + foreach (T? item in value.Value.GetItems()) + { + string data = item?.GetDataForSave() ?? string.Empty; + if (string.IsNullOrEmpty(data)) + { + continue; + } + sb.Append(data); + sb.Append(_separatorItems); + } + writer.Write(sb); } - } - using FileStream fs = new(filename, FileMode.Create); - byte[] info = new UTF8Encoding(true).GetBytes(sb.ToString()); - fs.Write(info, 0, info.Length); + } + //if (_storages.Count == 0) + //{ + // return false; + //} + //if (File.Exists(filename)) + //{ + // File.Delete(filename); + //} + //StringBuilder sb = new(); + //sb.Append(_collectionKey); + //foreach (KeyValuePair> value in _storages) + //{ + // sb.Append(Environment.NewLine); + // // не сохраняем пустые коллекции + // if (value.Value.Count == 0) + // { + // continue; + // } + // sb.Append(value.Key); + // sb.Append(_separatorForKeyValue); + // sb.Append(value.Value.GetCollectionType); + // sb.Append(_separatorForKeyValue); + // sb.Append(value.Value.MaxCount); + // sb.Append(_separatorForKeyValue); + // foreach (T? item in value.Value.GetItems()) + // { + // string data = item?.GetDataForSave() ?? string.Empty; + // if (string.IsNullOrEmpty(data)) + // { + // continue; + // } + // sb.Append(data); + // sb.Append(_separatorItems); + // } + //} + //using FileStream fs = new(filename, FileMode.Create); + //byte[] info = new UTF8Encoding(true).GetBytes(sb.ToString()); + //fs.Write(info, 0, info.Length); + return true; } + /// + /// Загрузка информации по автомобилям в хранилище из файла + /// + /// Путь и имя файла + /// true - загрузка прошла успешно, false - ошибка при загрузке данных /// /// Загрузка информации по автомобилям в хранилище из файла /// @@ -155,64 +199,103 @@ public class StorageCollection { return false; } - - string bufferTextFromFile = ""; - using (FileStream fs = new(filename, FileMode.Open)) + using (StreamReader fs = File.OpenText(filename)) { - byte[] b = new byte[fs.Length]; - UTF8Encoding temp = new(true); - while (fs.Read(b, 0, b.Length) > 0) - { - bufferTextFromFile += temp.GetString(b); - } - } - - string[] strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); - if (strs == null || strs.Length == 0) - { - return false; - } - - if (!strs[0].Equals(_collectionKey)) - { - //если нет такой записи, то это не те данные - return false; - } - - _storages.Clear(); - foreach (string data in strs) - { - string[] record = data.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); - if (record.Length != 4) - { - continue; - } - - CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); - ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); - if (collection == null) + string str = fs.ReadLine(); + if (str == null || str.Length == 0) { return false; } - - collection.MaxCount = Convert.ToInt32(record[2]); - - string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); - foreach (string elem in set) + if (!str.StartsWith(_collectionKey)) { - if (elem?.CreateDrawningTrackedCar() is T car) + return false; + } + _storages.Clear(); + string strs = ""; + while ((strs = fs.ReadLine()) != null) + { + //по идее этого произойти не должно + //if (strs == null) + //{ + // return false; + //} + string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); + if (record.Length != 4) { - if (!collection.Insert(car)) + continue; + } + CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); + ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); + if (collection == null) + { + return false; + } + collection.MaxCount = Convert.ToInt32(record[2]); + string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); + foreach (string elem in set) + { + if (elem?.CreateDrawningTrackedCar() is T TrackedCar) { - return false; + if (collection.Insert(TrackedCar) == -1) + { + return false; + } } } + _storages.Add(record[0], collection); } - - _storages.Add(record[0], collection); + return true; + //string bufferTextFromFile = ""; + //using (FileStream fs = new(filename, FileMode.Open)) + //{ + // byte[] b = new byte[fs.Length]; + // UTF8Encoding temp = new(true); + // while (fs.Read(b, 0, b.Length) > 0) + // { + // bufferTextFromFile += temp.GetString(b); + // } + //} + //string[] strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); + //if (strs == null || strs.Length == 0) + //{ + // return false; + //} + //if (!strs[0].Equals(_collectionKey)) + //{ + // //если нет такой записи, то это не те данные + // return false; + //} + //_storages.Clear(); + //foreach (string data in strs) + //{ + // string[] record = data.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); + // if (record.Length != 4) + // { + // continue; + // } + // CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); + // ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); + // if (collection == null) + // { + // return false; + // } + // collection.MaxCount = Convert.ToInt32(record[2]); + // string[] set = record[3].Split(_separatorItems, + // StringSplitOptions.RemoveEmptyEntries); + // foreach (string elem in set) + // { + // if (elem?.CreateDrawningShip() is T ship) + // { + // if (collection.Insert(ship) == -1) + // { + // return false; + // } + // } + // } + // _storages.Add(record[0], collection); + //} + //return true; } - - return true; } /// @@ -221,13 +304,14 @@ public class StorageCollection /// /// private static ICollectionGenericObjects? CreateCollection(CollectionType collectionType) - { - return collectionType switch { - CollectionType.Massive => new MassiveGenericObjects(), - CollectionType.List => new ListGenericObjects(), - _ => null, - }; + return collectionType switch + { + CollectionType.Massive => new MassiveGenericObjects(), + CollectionType.List => new ListGenericObjects(), + _ => null, + }; + } } -} + diff --git a/ProjectByldozer/ProjectByldozer/FormCarCollection.cs b/ProjectByldozer/ProjectByldozer/FormCarCollection.cs index c2c1cb4..aa8ea67 100644 --- a/ProjectByldozer/ProjectByldozer/FormCarCollection.cs +++ b/ProjectByldozer/ProjectByldozer/FormCarCollection.cs @@ -60,16 +60,14 @@ public partial class FormCarCollection : Form { return; } - - if (_company + Trackedcar) + if (_company + Trackedcar != -1) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); - } else { - MessageBox.Show("не удалось добавить объект"); + MessageBox.Show("Не удалось добавить объект"); } } diff --git a/ProjectByldozer/ProjectByldozer/FormCarConfig.cs b/ProjectByldozer/ProjectByldozer/FormCarConfig.cs index 9c720aa..b11896b 100644 --- a/ProjectByldozer/ProjectByldozer/FormCarConfig.cs +++ b/ProjectByldozer/ProjectByldozer/FormCarConfig.cs @@ -14,7 +14,7 @@ public partial class FormCarConfig : Form /// /// Событие для передачи объекта /// - private event TrackedCarDelegate? TrackedCarDelegate; + private event Action? TrackedCarDelegate; /// /// конструктор /// @@ -36,7 +36,7 @@ public partial class FormCarConfig : Form /// Привязка внешнего метода к событию /// /// - public void AddEvent(TrackedCarDelegate TrackedcarDelegate) + public void AddEvent(Action TrackedcarDelegate) { TrackedCarDelegate += TrackedcarDelegate; }