Laba2 Tikhonov
unknown
csharp
3 years ago
17 kB
13
Indexable
using System; using System.Collections.Generic; using static ConsoleApp8.Program; using System.IO; namespace ConsoleApp8 { internal class Program { static void PrintMenu() { Console.WriteLine("1 - Добавить запись \r\n2 - Просмотреть записи \r\n3 - Изменить запись \r\n4 - Удалить запись \r\n5 - Сгенерировать отчет \r\n6 - Выход"); } static MainRecord Inp() { MainRecord mainRecord = new MainRecord(); MainRecord1 mainRecord1 = new MainRecord1(); MainRecord2 mainRecord2 = new MainRecord2(); Console.WriteLine("Введите имя клиента:"); mainRecord.Client = Console.ReadLine(); string[] clientList = mainRecord.Client.Split(" "); if (clientList.Length == 1) { Console.WriteLine("Введите фамилию"); mainRecord1.surname = Console.ReadLine(); } else { Console.WriteLine("Введите отчество"); mainRecord2.lastname = Console.ReadLine(); } Console.WriteLine("Введите дату начала в формате: 'ГГГГ-ММ-ДД':"); mainRecord.StartDate = Console.ReadLine(); Console.WriteLine("Введите дату окончания в формате: 'ГГГГ-ММ-ДД':"); mainRecord.FinishDate = Console.ReadLine(); Console.WriteLine("Введите стоимость:"); mainRecord.Price = Console.ReadLine(); return mainRecord; } static void Main(string[] args) { Loader loader = new Loader(); MainRecord rec = new MainRecord(); List<MainRecord> mainRecords = new List<MainRecord>(); MainRecord mainRecord = new MainRecord(); PrintMenu(); int sch = 1; string xz = "-1"; while (xz != "6") { xz = Console.ReadLine(); switch (xz) { case "1": mainRecord.id = sch; sch++; do { MainRecord mainRecord3 = new MainRecord(); mainRecord3 = Inp(); mainRecord.Client = mainRecord3.Client; mainRecord.StartDate = mainRecord3.StartDate; mainRecord.FinishDate = mainRecord3.FinishDate; mainRecord.Price = mainRecord3.Price; rec = loader.Sav(mainRecord); if ((rec.StartDate == "-") || (rec.FinishDate == "-")) { Console.WriteLine("Неправильный формат даты. Введите данные заново."); } } while ((rec.StartDate == "-") || (rec.FinishDate == "-")); Console.WriteLine("Запись добавлена"); break; case "2": List<MainRecord> records = loader.GetRecords(); if (records.Count == 0) { Console.WriteLine("Записи отсутсвуют."); } else { Console.WriteLine(); foreach (MainRecord record in records) { Console.WriteLine($"id: {record.id} | Клиент: {record.Client} | Дата начала: {record.StartDate} | Дата окончания: {record.FinishDate} | Стоимость: {record.Price}\n"); } } break; case "3": Console.WriteLine("Введите id записи, которую нужно изменить"); mainRecord.id = Convert.ToInt32(Console.ReadLine()); do { MainRecord mainRecord3 = new MainRecord(); mainRecord3 = Inp(); mainRecord.Client = mainRecord3.Client; mainRecord.StartDate = mainRecord3.StartDate; mainRecord.FinishDate = mainRecord3.FinishDate; mainRecord.Price = mainRecord3.Price; rec = loader.EditRecords(mainRecord); if ((rec.StartDate == "-") || (rec.FinishDate == "-")) { Console.WriteLine("Неправильный формат даты. Введите данные заново."); } } while ((rec.StartDate == "-") || (rec.FinishDate == "-")); Console.WriteLine("Запись изменена"); break; case "4": Console.WriteLine("Введите id записи, которую нужно удвлить:"); try { int num = Convert.ToInt32(Console.ReadLine()); if (loader.Del(num) == true) { Console.WriteLine("Запись удалена"); } else { Console.WriteLine("Неверный id."); } } catch { Console.WriteLine("Ошибка."); } break; case "6": Console.WriteLine("Вы вышли."); break; case "5": try { Console.WriteLine("Введите путь до файла:"); string filePath = Console.ReadLine(); Console.WriteLine("Введите срок ремонта от:"); DateOnly startDate = DateOnly.Parse(Console.ReadLine()); Console.WriteLine("Введите срок ремонта до:"); DateOnly finishDate = DateOnly.Parse(Console.ReadLine()); if (loader.RenderReport(filePath, startDate, finishDate)) { Console.WriteLine("Отчет сгенерирован."); } else { Console.WriteLine("Ошибка."); } } catch { Console.WriteLine("Неправильная дата"); } break; default: break; } } Environment.Exit(0); } public class Loader { FileDataSource fileDataSource = new FileDataSource("C:\\Users\\theGeekBeard\\Desktop\\data.dat"); public bool RenderReport(string filePath, DateOnly startDate, DateOnly finishDate) { List<MainRecord> records = fileDataSource.GetAll(); int generalPrice = 0; foreach (MainRecord record in records) { DateOnly StartDate = DateOnly.Parse(record.StartDate); DateOnly FinishDate = DateOnly.Parse(record.FinishDate); if (startDate < StartDate && finishDate > FinishDate) { try { int price = Convert.ToInt32(record.Price); generalPrice += price; } catch { continue; } } } try { using (StreamWriter writer = new StreamWriter(filePath, true)) { writer.Write($"\nОбщая стоимость от {startDate} до {finishDate}: {generalPrice}"); } return true; } catch (Exception ex) { return false; } } public MainRecord Sav(MainRecord record) { try { DateOnly StartDate = DateOnly.Parse(record.StartDate); DateOnly FinishDate = DateOnly.Parse(record.FinishDate); if (StartDate > FinishDate) { record.StartDate = "-"; return record; } fileDataSource.Save(record); return record; } catch (FormatException) { record.StartDate = "-"; return record; } } public List<MainRecord> GetRecords() { List<MainRecord> xz = fileDataSource.GetAll(); xz = xz.OrderBy(o => o.StartDate).ToList(); xz = xz.OrderBy(o => o.Client).ToList(); return xz; } public MainRecord EditRecords(MainRecord record) { try { DateTime StartDate = DateTime.Parse(record.StartDate); DateTime FinishDate = DateTime.Parse(record.FinishDate); if (StartDate > FinishDate) { record.StartDate = "-"; return record; } fileDataSource.Edit(record); return record; } catch (FormatException) { record.StartDate = "-"; return record; } } public bool Del(int id) { return fileDataSource.Delete(id); } } public class MainRecord { public int id; public string Client; public string StartDate; public string FinishDate; public string Price; } public class MainRecord2 : MainRecord { public string lastname; } public class MainRecord1 : MainRecord { public string surname; } public interface IDataSource { MainRecord Save(MainRecord record); MainRecord Edit(MainRecord record); bool Delete(int id); List<MainRecord> GetAll(); } public class FileDataSource: IDataSource { public string filePath; public FileDataSource(string path = "C:\\Users\\theGeekBeard\\Desktop\\data.dat") { filePath = path; } private List<MainRecord> records = new List<MainRecord>(); public MainRecord Save(MainRecord record) { MainRecord mainRecord = new MainRecord(); mainRecord.id = record.id; mainRecord.Client = record.Client; mainRecord.StartDate = record.StartDate; mainRecord.FinishDate = record.FinishDate; mainRecord.Price = record.Price; List<MainRecord> rec = GetAll(); using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Append))) { writer.Write(rec.Last().id + 1); writer.Write(mainRecord.Client); writer.Write(mainRecord.StartDate); writer.Write(mainRecord.FinishDate); writer.Write(mainRecord.Price); } return record; } public MainRecord Edit(MainRecord record) { MainRecord mainRecord = new MainRecord(); mainRecord.id = record.id; mainRecord.Client = record.Client; mainRecord.StartDate = record.StartDate; mainRecord.FinishDate = record.FinishDate; mainRecord.Price = record.Price; List<MainRecord> rec = GetAll(); foreach (MainRecord recItem in rec) { if (recItem.id == record.id) { rec.Remove(recItem); rec.Add(record); break; } } if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception e) { ; } } using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Append))) { foreach (MainRecord recItem in rec) { writer.Write(recItem.id); writer.Write(recItem.Client); writer.Write(recItem.StartDate); writer.Write(recItem.FinishDate); writer.Write(recItem.Price); } } return record; } public bool Delete(int id) { List<MainRecord> rec = GetAll(); foreach (MainRecord recItem in rec) { if (recItem.id == id) { rec.Remove(recItem); break; } if (recItem == rec.Last()) return false; } if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception e) { ; } } using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Append))) { foreach (MainRecord recItem in rec) { writer.Write(recItem.id); writer.Write(recItem.Client); writer.Write(recItem.StartDate); writer.Write(recItem.FinishDate); writer.Write(recItem.Price); } } return true; } public List<MainRecord> GetAll() { records.Clear(); using (BinaryReader reader = new BinaryReader(File.Open("C:\\Users\\theGeekBeard\\Desktop\\data.dat", FileMode.Open))) { while (reader.PeekChar() > -1) { int id = reader.ReadInt32(); string client = reader.ReadString(); string startDate = reader.ReadString(); string finishDate = reader.ReadString(); string price = reader.ReadString(); MainRecord mainRecord = new MainRecord(); mainRecord.id = id; mainRecord.Client = client; mainRecord.StartDate = startDate; mainRecord.FinishDate = finishDate; mainRecord.Price = price; records.Add(mainRecord); } } return records; } } } }
Editor is loading...