using System.Collections.Generic;
using System.Threading.Tasks;
static void Main(string[] args)
Dictionary<string, string> birthdays = new Dictionary<string, string>();
birthdays.Add("Андрей", "10.07");
birthdays.Add("Эвита", "10.03");
birthdays.Add("Папа", "11.08");
birthdays.Add("Баба Галя", "10.10");
Console.WriteLine("Текущий список всех ДР: \n");
foreach(string key in birthdays.Keys)
Console.WriteLine(key + " " + Instruments.ReverseDate(birthdays[key]));
var sorted = birthdays.OrderBy(birthdays => birthdays.Value);
Instruments.AddDaysTest();
while(argument.CompareTo("выход") != 0){
Console.WriteLine("Список доступных функций: \n");
Console.WriteLine("1. - Вывод всего списка");
Console.WriteLine("2. - Выход");
Console.WriteLine("3. - Добавить в список нового человека");
Console.WriteLine("4. - Удалить запись о человеке");
Console.WriteLine("5. - Список сегодняшних и ближайших дней рождения");
Console.Write("Введите команду: ");
argument = Console.ReadLine();
Console.WriteLine("Текущий список всех ДР: \n");
foreach(string key in birthdays.Keys)
Console.WriteLine(key + " " + birthdays[key]);
Console.Write("Введите имя: ");
string name = Console.ReadLine();
Console.Write("Введите дату рождения в формате [dd.mm]: ");
string date = Console.ReadLine();
birthdays.Add(name, date);
Console.WriteLine("Error");
Console.Write("Введите имя: ");
string name1 = Console.ReadLine();
if(birthdays.ContainsKey(name1))
string today = DateTime.Now.ToString("MM.dd");
bool isAny = birthdays.ContainsValue(today);
Console.WriteLine("Список ближайших дней рождений:");
Dictionary<string, string>.KeyCollection keyColl = birthdays.Keys;
foreach(string key in keyColl){
if(birthdays[key] == today){
Console.WriteLine(key + " - Сегодня");
}else if(gotDate == true){
if(birthdays[key].CompareTo(Instruments.AddDays(today, 30)) < 0)
Console.WriteLine(key + " - " + birthdays[key]);
public class Instruments{
public static string ReverseDate( string s )
string leftPart = s.Substring(0,2);
string rightPart = s.Substring(3);
return rightPart + "." + leftPart;
public static string AddDays(string s, int days)
int month = Convert.ToInt32(s.Substring(0,2));
int day = Convert.ToInt32(s.Substring(3));
int remainder = (day + days) % DateTime.DaysInMonth(DateTime.Now.Year, month);
month = (month + 1) % 12;
return month.ToString("D2") + "." + day.ToString("D2");
public static void AddDaysTest(){
string[] variants = {"01.01", "05.02", "20.01", "23.12"};
string[] results = {"31.01", "07.03", "19.02", "22.01"};
for(int i = 0; i < variants.Count(); i++){
string result = ReverseDate(AddDays(ReverseDate(variants[i]),days));
Console.WriteLine("Test #{0} | Input: \"{1}\" | Should be: \"{2}\" | Output: \"{3}\" - ", i+1, variants[i], results[i], result);
if(result.CompareTo(results[i]) == 0)
Console.WriteLine("WRONG");
Dictionary<string, string> birthdays = new Dictionary<string, string>();