Laba2 Tikhonov
unknown
csharp
3 years ago
17 kB
19
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...