From 27b255088ae96df0200053354870389f7028905f Mon Sep 17 00:00:00 2001 From: MaksymBabych Date: Tue, 6 Feb 2024 20:41:04 +0200 Subject: [PATCH 1/2] add HomeWork 12 --- HomeWork12/HomeWork12.sln | 25 ++++++ .../HomeWork12/Entities/ContactEntity.cs | 14 +++ HomeWork12/HomeWork12/Enum/DirectoryType.cs | 9 ++ .../HomeWork12/Extentions/ContactExtention.cs | 29 +++++++ HomeWork12/HomeWork12/HomeWork12.csproj | 18 ++++ HomeWork12/HomeWork12/Models/Contact.cs | 45 ++++++++++ HomeWork12/HomeWork12/Program.cs | 29 +++++++ .../Abstractions/IContactRepository.cs | 10 +++ .../Repositories/ContactRepository.cs | 32 +++++++ .../Services/Abstractions/IContactService.cs | 12 +++ .../HomeWork12/Services/ContactService.cs | 80 +++++++++++++++++ HomeWork12/HomeWork12/StartUp.cs | 85 +++++++++++++++++++ 12 files changed, 388 insertions(+) create mode 100644 HomeWork12/HomeWork12.sln create mode 100644 HomeWork12/HomeWork12/Entities/ContactEntity.cs create mode 100644 HomeWork12/HomeWork12/Enum/DirectoryType.cs create mode 100644 HomeWork12/HomeWork12/Extentions/ContactExtention.cs create mode 100644 HomeWork12/HomeWork12/HomeWork12.csproj create mode 100644 HomeWork12/HomeWork12/Models/Contact.cs create mode 100644 HomeWork12/HomeWork12/Program.cs create mode 100644 HomeWork12/HomeWork12/Repositories/Abstractions/IContactRepository.cs create mode 100644 HomeWork12/HomeWork12/Repositories/ContactRepository.cs create mode 100644 HomeWork12/HomeWork12/Services/Abstractions/IContactService.cs create mode 100644 HomeWork12/HomeWork12/Services/ContactService.cs create mode 100644 HomeWork12/HomeWork12/StartUp.cs diff --git a/HomeWork12/HomeWork12.sln b/HomeWork12/HomeWork12.sln new file mode 100644 index 0000000..3c21238 --- /dev/null +++ b/HomeWork12/HomeWork12.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HomeWork12", "HomeWork12\HomeWork12.csproj", "{2CF99823-1819-49D2-A0FC-2BE327E67693}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2CF99823-1819-49D2-A0FC-2BE327E67693}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CF99823-1819-49D2-A0FC-2BE327E67693}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CF99823-1819-49D2-A0FC-2BE327E67693}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CF99823-1819-49D2-A0FC-2BE327E67693}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {78924CCC-685A-4A9B-AD3E-86D1107CC7A3} + EndGlobalSection +EndGlobal diff --git a/HomeWork12/HomeWork12/Entities/ContactEntity.cs b/HomeWork12/HomeWork12/Entities/ContactEntity.cs new file mode 100644 index 0000000..232e6a7 --- /dev/null +++ b/HomeWork12/HomeWork12/Entities/ContactEntity.cs @@ -0,0 +1,14 @@ +using HomeWork12.Enum; + +namespace HomeWork12.Entities +{ + internal class ContactEntity + { + public Guid Id { get; set; } + public string? FirstName { get; set; } + public string? LastName { get; set; } + public string? Number { get; set; } + public DateTime? CreateAt { get; set; } + public DirectoryType SectorType { get; set; } + } +} diff --git a/HomeWork12/HomeWork12/Enum/DirectoryType.cs b/HomeWork12/HomeWork12/Enum/DirectoryType.cs new file mode 100644 index 0000000..096b9bb --- /dev/null +++ b/HomeWork12/HomeWork12/Enum/DirectoryType.cs @@ -0,0 +1,9 @@ +namespace HomeWork12.Enum +{ + internal enum DirectoryType + { + Alphabet, + HeshTeg, + Number + } +} diff --git a/HomeWork12/HomeWork12/Extentions/ContactExtention.cs b/HomeWork12/HomeWork12/Extentions/ContactExtention.cs new file mode 100644 index 0000000..d74295b --- /dev/null +++ b/HomeWork12/HomeWork12/Extentions/ContactExtention.cs @@ -0,0 +1,29 @@ +using HomeWork12.Models; + +namespace HomeWork12 +{ + internal static class ContactExtention + { + public static List SortContacts(this List contacts) + { + var temp = new Contact(); + + for (int count = contacts.Count / 2; count >= 1; count /= 2) + { + for (int i = 0; i < contacts.Count; i++) + { + for (int c = i - count; c >= 0; c -= count) + { + if (contacts[c].CompareTo(contacts[c + count]) > 0) + { + temp = contacts[c]; + contacts[c] = contacts[c + count]; + contacts[c + count] = temp; + } + } + } + } + return contacts; + } + } +} diff --git a/HomeWork12/HomeWork12/HomeWork12.csproj b/HomeWork12/HomeWork12/HomeWork12.csproj new file mode 100644 index 0000000..3ae2675 --- /dev/null +++ b/HomeWork12/HomeWork12/HomeWork12.csproj @@ -0,0 +1,18 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + diff --git a/HomeWork12/HomeWork12/Models/Contact.cs b/HomeWork12/HomeWork12/Models/Contact.cs new file mode 100644 index 0000000..be3df17 --- /dev/null +++ b/HomeWork12/HomeWork12/Models/Contact.cs @@ -0,0 +1,45 @@ +using HomeWork12.Enum; + +namespace HomeWork12.Models +{ + internal class Contact : IComparable + { + public Guid Id { get; set; } + public string? FirstName { get; set; } + public string? LastName { get; set; } + public string? Number { get; set; } + public DateTime? CreateAt { get; set; } + public DirectoryType SectorType { get; set; } + + public override string ToString() + { + return @$"firstname {FirstName} lastname {LastName} + number of phone: {Number} + CreateTime at {CreateAt} + Directory {SectorType}"; + } + + public int CompareTo(Contact? contact) + { + int secondComper = SectorType.CompareTo(contact?.SectorType); + + if (secondComper != 0) + { + return secondComper; + } + else + { + int firstComper = FirstName.CompareTo(contact?.FirstName); + + if (firstComper != 0) + { + return firstComper; + } + else + { + return LastName.CompareTo(contact?.LastName); + } + } + } + } +} diff --git a/HomeWork12/HomeWork12/Program.cs b/HomeWork12/HomeWork12/Program.cs new file mode 100644 index 0000000..05dce6b --- /dev/null +++ b/HomeWork12/HomeWork12/Program.cs @@ -0,0 +1,29 @@ +using HomeWork12.Repositories; +using HomeWork12.Repositories.Abstractions; +using HomeWork12.Services; +using HomeWork12.Services.Abstractions; +using Microsoft.Extensions.DependencyInjection; + + +namespace HomeWork12 +{ + internal class Program + { + static void Main(string[] args) + { + void ConfigreServices(ServiceCollection serviceCollection) + { + serviceCollection.AddTransient() + .AddTransient() + .AddTransient(); + } + + var serviceCollection = new ServiceCollection(); + ConfigreServices(serviceCollection); + var provider = serviceCollection.BuildServiceProvider(); + + var start = provider.GetService(); + start!.Start(); + } + } +} diff --git a/HomeWork12/HomeWork12/Repositories/Abstractions/IContactRepository.cs b/HomeWork12/HomeWork12/Repositories/Abstractions/IContactRepository.cs new file mode 100644 index 0000000..4e43b48 --- /dev/null +++ b/HomeWork12/HomeWork12/Repositories/Abstractions/IContactRepository.cs @@ -0,0 +1,10 @@ +using HomeWork12.Entities; + +namespace HomeWork12.Repositories.Abstractions +{ + internal interface IContactRepository + { + public Guid AddContact(ContactEntity contactEntity); + public List GetContacts(); + } +} diff --git a/HomeWork12/HomeWork12/Repositories/ContactRepository.cs b/HomeWork12/HomeWork12/Repositories/ContactRepository.cs new file mode 100644 index 0000000..763edb7 --- /dev/null +++ b/HomeWork12/HomeWork12/Repositories/ContactRepository.cs @@ -0,0 +1,32 @@ +using HomeWork12.Entities; +using HomeWork12.Repositories.Abstractions; + +namespace HomeWork12.Repositories +{ + internal class ContactRepository : IContactRepository + { + private List _contacts = new List(); + + public Guid AddContact(ContactEntity contactEntity) + { + var contact = new ContactEntity() + { + Id = Guid.NewGuid(), + FirstName = contactEntity.FirstName, + LastName = contactEntity.LastName, + Number = contactEntity.Number, + CreateAt = contactEntity.CreateAt, + SectorType = contactEntity.SectorType + }; + + _contacts.Add(contact); + + return contact.Id; + } + + public List GetContacts() + { + return _contacts; + } + } +} diff --git a/HomeWork12/HomeWork12/Services/Abstractions/IContactService.cs b/HomeWork12/HomeWork12/Services/Abstractions/IContactService.cs new file mode 100644 index 0000000..6641bac --- /dev/null +++ b/HomeWork12/HomeWork12/Services/Abstractions/IContactService.cs @@ -0,0 +1,12 @@ +using HomeWork12.Models; + +namespace HomeWork12.Services.Abstractions +{ + internal interface IContactService + { + public Guid AddContact(Contact contact); + public List GetContacts(); + public List SortContacts(); + + } +} diff --git a/HomeWork12/HomeWork12/Services/ContactService.cs b/HomeWork12/HomeWork12/Services/ContactService.cs new file mode 100644 index 0000000..b0ad85a --- /dev/null +++ b/HomeWork12/HomeWork12/Services/ContactService.cs @@ -0,0 +1,80 @@ +using HomeWork12.Entities; +using HomeWork12.Enum; +using HomeWork12.Models; +using HomeWork12.Repositories.Abstractions; +using HomeWork12.Services.Abstractions; +using System.Text.RegularExpressions; + +namespace HomeWork12.Services +{ + internal class ContactService : IContactService + { + private IContactRepository _contactRepository; + + public ContactService(IContactRepository contactRepository) + { + _contactRepository = contactRepository; + } + public Guid AddContact(Contact contact) + { + var entity = new ContactEntity() + { + FirstName = contact.FirstName, + LastName = contact.LastName, + Number = contact.Number, + CreateAt = contact.CreateAt, + SectorType = GetDirectoryType(contact.FirstName, contact.LastName) + }; + + Guid id = _contactRepository.AddContact(entity); + + return id; + } + + public List GetContacts() + { + var contacts = new List(); + var entities = _contactRepository.GetContacts(); + + foreach (var contact in entities) + { + contacts.Add( + new Contact() + { + Id = contact.Id, + FirstName = contact.FirstName, + LastName = contact.LastName, + Number = contact.Number, + CreateAt = contact.CreateAt, + SectorType = contact.SectorType + }); + } + + return contacts; + } + + public List SortContacts() + { + return GetContacts().SortContacts(); + } + + private DirectoryType GetDirectoryType(string firstName, string lastName) + { + Regex numberCheck = new Regex("[0-9]"); + + Regex symbolCheck = new Regex("[^0-9a-zA-Zа-яА-ЯіїІЇ ]"); + + if (numberCheck.IsMatch(firstName) || numberCheck.IsMatch(lastName)) + { + return DirectoryType.Number; + } + + if (symbolCheck.IsMatch(firstName) || symbolCheck.IsMatch(lastName)) + { + return DirectoryType.HeshTeg; + } + + return DirectoryType.Alphabet; + } + } +} diff --git a/HomeWork12/HomeWork12/StartUp.cs b/HomeWork12/HomeWork12/StartUp.cs new file mode 100644 index 0000000..836882c --- /dev/null +++ b/HomeWork12/HomeWork12/StartUp.cs @@ -0,0 +1,85 @@ +using HomeWork12.Models; +using HomeWork12.Services.Abstractions; +using System.Globalization; +using System.Text; + +namespace HomeWork12 +{ + internal class StartUp + { + private readonly IContactService _contactService; + + public StartUp(IContactService contactService) + { + _contactService = contactService; + } + public void Start() + { + Console.OutputEncoding = UTF8Encoding.UTF8; + + UseCultur(); + + AddContact(); + + ShowContacts(); + } + + private void AddContact() + { + do + { + Console.WriteLine("enter name:"); + var name = Console.ReadLine(); + + Console.WriteLine("enter lastName:"); + var lastName = Console.ReadLine(); + + Console.WriteLine("enter number of phone"); + var number = Console.ReadLine(); + + var newContact = new Contact() + { + FirstName = name, + LastName = lastName, + Number = number, + CreateAt = DateTime.UtcNow + }; + + _contactService.AddContact(newContact); + + Console.WriteLine("Continue end construct? Y"); + } + while (Console.ReadKey().Key != ConsoleKey.Y); + + } + + private void ShowContacts() + { + foreach (var item in _contactService.SortContacts()) + { + Console.WriteLine(item.ToString()); + } + + } + + private void UseCultur() + { + Console.WriteLine("Choose cultur language: Ukraine - U or English - E/ defoult en"); + + if(Console.ReadKey().Key == ConsoleKey.U) + { + CultureInfo.CurrentUICulture = new CultureInfo("uk-UA"); + CultureInfo.CurrentCulture = new CultureInfo("uk-UA"); + } + else + { + CultureInfo.CurrentUICulture = new CultureInfo("en-US"); + CultureInfo.CurrentCulture = new CultureInfo("en-US"); + } + + Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name); + Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name); + Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name); + } + } +} \ No newline at end of file From 9b01bce461a2eeec73b5596d26e496e456cb5e0d Mon Sep 17 00:00:00 2001 From: MaksymBabych Date: Sun, 18 Feb 2024 20:51:41 +0200 Subject: [PATCH 2/2] correct --- HomeWork12/HomeWork12/Program.cs | 4 +++- HomeWork12/HomeWork12/Services/ContactService.cs | 2 +- HomeWork12/HomeWork12/StartUp.cs | 3 --- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/HomeWork12/HomeWork12/Program.cs b/HomeWork12/HomeWork12/Program.cs index 05dce6b..cfb69c3 100644 --- a/HomeWork12/HomeWork12/Program.cs +++ b/HomeWork12/HomeWork12/Program.cs @@ -3,7 +3,7 @@ using HomeWork12.Services; using HomeWork12.Services.Abstractions; using Microsoft.Extensions.DependencyInjection; - +using System.Text; namespace HomeWork12 { @@ -18,6 +18,8 @@ void ConfigreServices(ServiceCollection serviceCollection) .AddTransient(); } + Console.OutputEncoding = UTF8Encoding.UTF8; + var serviceCollection = new ServiceCollection(); ConfigreServices(serviceCollection); var provider = serviceCollection.BuildServiceProvider(); diff --git a/HomeWork12/HomeWork12/Services/ContactService.cs b/HomeWork12/HomeWork12/Services/ContactService.cs index b0ad85a..336c81b 100644 --- a/HomeWork12/HomeWork12/Services/ContactService.cs +++ b/HomeWork12/HomeWork12/Services/ContactService.cs @@ -62,7 +62,7 @@ private DirectoryType GetDirectoryType(string firstName, string lastName) { Regex numberCheck = new Regex("[0-9]"); - Regex symbolCheck = new Regex("[^0-9a-zA-Zа-яА-ЯіїІЇ ]"); + Regex symbolCheck = new Regex(@"[^0-9a-zа-яії ]", RegexOptions.IgnoreCase); if (numberCheck.IsMatch(firstName) || numberCheck.IsMatch(lastName)) { diff --git a/HomeWork12/HomeWork12/StartUp.cs b/HomeWork12/HomeWork12/StartUp.cs index 836882c..d3574f1 100644 --- a/HomeWork12/HomeWork12/StartUp.cs +++ b/HomeWork12/HomeWork12/StartUp.cs @@ -1,7 +1,6 @@ using HomeWork12.Models; using HomeWork12.Services.Abstractions; using System.Globalization; -using System.Text; namespace HomeWork12 { @@ -15,8 +14,6 @@ public StartUp(IContactService contactService) } public void Start() { - Console.OutputEncoding = UTF8Encoding.UTF8; - UseCultur(); AddContact();