Загрузка данных
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);
}
}
}