|
@@ -0,0 +1,195 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Windows.Forms;
|
|
|
+
|
|
|
+namespace ПроверкаПродукции
|
|
|
+{
|
|
|
+ internal class FileWork
|
|
|
+ {
|
|
|
+ public static string pathStart; // Путь к исходному файлу
|
|
|
+ public static string pathEnd; // Путь к конечному файлу
|
|
|
+ public void VvodNameFile()
|
|
|
+ {
|
|
|
+ char otv; // Переменная для диалога
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Console.WriteLine("После нажатия Enter, Вам необходимо указать csv файл где хранятся входные данные");
|
|
|
+ Console.ReadKey();
|
|
|
+ OpenFileDialog OD = new OpenFileDialog();
|
|
|
+ OD.DefaultExt = ".csv";
|
|
|
+ OD.Filter = "Text documents (.csv)|*.csv";
|
|
|
+ if (OD.ShowDialog() == DialogResult.OK)
|
|
|
+ {
|
|
|
+ pathStart = OD.FileName;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Console.Write("\nЖелаете повторить выбор входных данных?\nДа(Y)/Нет(N)\nОтвет: ");
|
|
|
+ otv = Convert.ToChar(Console.ReadLine());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Console.WriteLine("Введены некорректные данные!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ((otv.Equals('N') || otv.Equals('N') || otv.Equals('Т') || otv.Equals('т')))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void SaveNameFile() // Определение файла для вывода результатов
|
|
|
+ {
|
|
|
+ char otv; // Переменная для диалога с пользователем
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Console.WriteLine("После нажатия Enter, Вам необходимо указать csv файл куда будет сохранён результат");
|
|
|
+ Console.ReadKey();
|
|
|
+ SaveFileDialog OD = new SaveFileDialog();
|
|
|
+ OD.DefaultExt = ".csv";
|
|
|
+ OD.Filter = "Text documents (.csv)|*.csv";
|
|
|
+ if (OD.ShowDialog() == DialogResult.OK)
|
|
|
+ {
|
|
|
+ pathEnd = OD.FileName;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Console.Write("\nЖелаете повторить выбор файла?\nДа(Y)/Нет(N)\nОтвет: ");
|
|
|
+ otv = Convert.ToChar(Console.ReadLine());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Console.WriteLine("Введены некорректные данные!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ((otv.Equals('N') || otv.Equals('N') || otv.Equals('Т') || otv.Equals('т')))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void GetData(ref int[,] Time, ref int[] From, ref int[] Where) // Взятие входных данных из файла
|
|
|
+ {
|
|
|
+ var lines = File.ReadAllLines(pathStart);
|
|
|
+ string[][] text = new string[lines.Length][];
|
|
|
+ for (int i = 0; i < text.Length; i++)
|
|
|
+ {
|
|
|
+ text[i] = lines[i].Split(';');
|
|
|
+ }
|
|
|
+ Time = new int[text.Length - 1, text[text.Length - 2].Length - 1];
|
|
|
+ From = new int[text[text.Length - 2].Length - 1];
|
|
|
+ Where = new int[text.Length - 1];
|
|
|
+ int k = 0;
|
|
|
+ foreach (string[] line in text)
|
|
|
+ {
|
|
|
+ int p = 0;
|
|
|
+ foreach (string s in line)
|
|
|
+ {
|
|
|
+ if (k != 0 && p != 0)
|
|
|
+ {
|
|
|
+ Time[k - 1, p - 1] = Convert.ToInt32(s);
|
|
|
+ }
|
|
|
+ if (k != 0 && p == 0)
|
|
|
+ {
|
|
|
+ From[k - 1] = Convert.ToInt32(s);
|
|
|
+ }
|
|
|
+ if (k == 0 && p != 0)
|
|
|
+ {
|
|
|
+ Where[p - 1] = Convert.ToInt32(s);
|
|
|
+ }
|
|
|
+ p++;
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public bool Proverka() // Проверка входных данных
|
|
|
+ {
|
|
|
+ var lines = File.ReadAllLines(pathStart);
|
|
|
+ string[][] text = new string[lines.Length][];
|
|
|
+ for (int i = 0; i < text.Length; i++)
|
|
|
+ {
|
|
|
+ text[i] = lines[i].Split(';');
|
|
|
+ }
|
|
|
+ int k = 0;
|
|
|
+ foreach (string[] line in text)
|
|
|
+ {
|
|
|
+ int p = 0;
|
|
|
+ foreach (string s in line)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (k != 0 && p != 0)
|
|
|
+ {
|
|
|
+ if (Convert.ToInt32(s) < 0)
|
|
|
+ {
|
|
|
+ Console.WriteLine("Время переезда не может быть отрицательным!");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (k != 0 && p == 0)
|
|
|
+ {
|
|
|
+ if (Convert.ToInt32(s) <= 0)
|
|
|
+ {
|
|
|
+ Console.WriteLine("Пункты не могут иметь значение 0 или отрицательные!");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (k == 0 && p != 0)
|
|
|
+ {
|
|
|
+ if (Convert.ToInt32(s) <= 0)
|
|
|
+ {
|
|
|
+ Console.WriteLine("Пункты не могут иметь значение 0 или отрицательные!");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ p++;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Console.WriteLine("Во входных данных присутствуют некоректные данные, исправьте их и попробуйте снова");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ public void OutputResult(int maxF, int[] F, string[] path)
|
|
|
+ {
|
|
|
+ File.AppendAllText(pathEnd, "Результат:", Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ for (int i = 0; i < path.Length; i++)
|
|
|
+ {
|
|
|
+ File.AppendAllText(pathEnd, "Маршрут " + (i + 1) + ";" + path[i] + ";F = ;" + F[i], Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < path.Length; i++)
|
|
|
+ {
|
|
|
+ if (maxF == F[i])
|
|
|
+ {
|
|
|
+ File.AppendAllText(pathEnd, "Оптимальный маршрут равен " + F[i] + " дней;", Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ File.AppendAllText(pathEnd, "Оптимальный маршрут:;" + path[i], Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|