Загрузка данных


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

struct Employee
{
    public string LastName;
    public string FirstName;
    public string MiddleName;
    public string Position;
    public int BirthYear;
    public double Salary;
}

class Program
{
    static List<Employee> employees = new List<Employee>();
    static string fileName = "employees.csv";

    static void Main()
    {
        Load();
        bool running = true;
        while (running)
        {
            Console.WriteLine();
            Console.WriteLine("1. Ввод массива структур");
            Console.WriteLine("2. Сортировка массива структур");
            Console.WriteLine("3. Поиск по параметру");
            Console.WriteLine("4. Изменение структуры");
            Console.WriteLine("5. Удаление структуры");
            Console.WriteLine("6. Вывод всех структур");
            Console.WriteLine("7. Выход");
            Console.Write("Выберите пункт: ");
            string choice = Console.ReadLine();

            switch (choice)
            {
                case "1": InputEmployees(); break;
                case "2": SortEmployees(); break;
                case "3": SearchEmployee(); break;
                case "4": EditEmployee(); break;
                case "5": DeleteEmployee(); break;
                case "6": ShowAll(); break;
                case "7": running = false; break;
                default: Console.WriteLine("Неверный пункт"); break;
            }
        }
        Save();
    }

    static int ReadInt(string prompt, int min, int max)
    {
        int value;
        while (true)
        {
            Console.Write(prompt);
            if (int.TryParse(Console.ReadLine(), out value) && value >= min && value <= max)
                return value;
            Console.WriteLine("Некорректный ввод, повторите");
        }
    }

    static double ReadDouble(string prompt)
    {
        double value;
        while (true)
        {
            Console.Write(prompt);
            if (double.TryParse(Console.ReadLine(), out value) && value >= 0)
                return value;
            Console.WriteLine("Некорректный ввод, повторите");
        }
    }

    static string ReadString(string prompt)
    {
        string value;
        while (true)
        {
            Console.Write(prompt);
            value = Console.ReadLine();
            if (!string.IsNullOrWhiteSpace(value))
                return value;
            Console.WriteLine("Поле не может быть пустым");
        }
    }

    static void InputEmployees()
    {
        int n = ReadInt("Сколько сотрудников добавить: ", 1, 100);
        for (int i = 0; i < n; i++)
        {
            Employee e = new Employee();
            e.LastName = ReadString("Фамилия: ");
            e.FirstName = ReadString("Имя: ");
            e.MiddleName = ReadString("Отчество: ");
            e.Position = ReadString("Должность: ");
            e.BirthYear = ReadInt("Год рождения: ", 1900, DateTime.Now.Year);
            e.Salary = ReadDouble("Зарплата: ");
            employees.Add(e);
        }
    }

    static void SortEmployees()
    {
        employees = employees.OrderBy(e => e.LastName).ToList();
        Console.WriteLine("Отсортировано по фамилии");
    }

    static void SearchEmployee()
    {
        string key = ReadString("Введите фамилию для поиска: ");
        var found = employees.Where(e => e.LastName.Equals(key, StringComparison.OrdinalIgnoreCase)).ToList();
        if (found.Count == 0)
            Console.WriteLine("Не найдено");
        else
            foreach (var e in found) Print(e);
    }

    static void EditEmployee()
    {
        string key = ReadString("Фамилия сотрудника для изменения: ");
        int index = employees.FindIndex(e => e.LastName.Equals(key, StringComparison.OrdinalIgnoreCase));
        if (index == -1)
        {
            Console.WriteLine("Не найдено");
            return;
        }
        Employee e = employees[index];
        e.LastName = ReadString("Фамилия: ");
        e.FirstName = ReadString("Имя: ");
        e.MiddleName = ReadString("Отчество: ");
        e.Position = ReadString("Должность: ");
        e.BirthYear = ReadInt("Год рождения: ", 1900, DateTime.Now.Year);
        e.Salary = ReadDouble("Зарплата: ");
        employees[index] = e;
    }

    static void DeleteEmployee()
    {
        string key = ReadString("Фамилия сотрудника для удаления: ");
        int index = employees.FindIndex(e => e.LastName.Equals(key, StringComparison.OrdinalIgnoreCase));
        if (index == -1)
            Console.WriteLine("Не найдено");
        else
        {
            employees.RemoveAt(index);
            Console.WriteLine("Удалено");
        }
    }

    static void ShowAll()
    {
        if (employees.Count == 0)
        {
            Console.WriteLine("Список пуст");
            return;
        }
        foreach (var e in employees) Print(e);
    }

    static void Print(Employee e)
    {
        Console.WriteLine($"{e.LastName} {e.FirstName} {e.MiddleName} | {e.Position} | {e.BirthYear} | {e.Salary}");
    }

    static void Save()
    {
        var lines = employees.Select(e => $"{e.LastName};{e.FirstName};{e.MiddleName};{e.Position};{e.BirthYear};{e.Salary}");
        File.WriteAllLines(fileName, lines);
    }

    static void Load()
    {
        if (!File.Exists(fileName)) return;
        foreach (var line in File.ReadAllLines(fileName))
        {
            var parts = line.Split(';');
            if (parts.Length != 6) continue;
            Employee e = new Employee();
            e.LastName = parts[0];
            e.FirstName = parts[1];
            e.MiddleName = parts[2];
            e.Position = parts[3];
            e.BirthYear = int.Parse(parts[4]);
            e.Salary = double.Parse(parts[5]);
            employees.Add(e);
        }
    }
}