/// <summary>
        /// Проверяет, инициализирована ли память для дня
        /// </summary>
        /// <param name="dt">день для проверки</param>
        /// <returns>True - да, день инициализирован, хотя список записей в дне может быть пуст.
        /// False - день не инициализирован</returns>
        private bool IsDateActivated(SimpleDateTime dt)
        {
            short currYear = dt.Year;
            sbyte currMon  = dt.Month;
            sbyte currDay  = dt.Day;

            // Проверка, выделена ли память для этой даты
            // Инициализирован ли год?
            if (!Organizer.ContainsKey(currYear))
            {
                return(false);
            }

            // Инициализирован ли месяц для этой даты?
            if (Organizer[currYear][currMon] == null)
            {
                return(false);
            }

            // Инициализирован ли день?
            if (Organizer[currYear][currMon][currDay] == null)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Добавляет запись в ежедневник
        /// </summary>
        /// <param name="noteDT">Дата и время записи</param>
        /// <param name="note">Запись</param>
        public void AddNote(uint noteID, SimpleDateTime noteDT, string location, string title, string text)
        {
            Note newNote = new Note(noteID, noteDT, location, title, text);

            this.Day.Add(newNote);                              // Добавляем запись в список
            this.Day.Sort(newNote.Compare);                     // сортируем по времени и ИД
        }
        public int CompareTo(object o)
        {
            SimpleDateTime key    = o as SimpleDateTime;
            int            result = Year.CompareTo(key.Year);

            if (result != 0)
            {
                return(result);
            }
            result = Month.CompareTo(key.Month);
            if (result != 0)
            {
                return(result);
            }
            result = Day.CompareTo(key.Day);
            if (result != 0)
            {
                return(result);
            }
            result = Hour.CompareTo(key.Hour);
            if (result != 0)
            {
                return(result);
            }
            result = Min.CompareTo(key.Min);
            return(result);
        }
 public SimpleDateTime(SimpleDateTime dt)
 {
     this.Year  = dt.Year;
     this.Month = dt.Month;
     this.Day   = dt.Day;
     this.Hour  = dt.Hour;
     this.Min   = dt.Min;
 }
 /// <summary>
 /// Возвращает указатель на список записей указанного дня
 /// </summary>
 /// <param name="dt">указанный день</param>
 /// <returns>Указатель на список записей указнного дня, либо null - если день не был активирован
 /// либо в дне нет записей</returns>
 public List <Note> GetDayList(SimpleDateTime dt)
 {
     if (IsDateActivated(dt))
     {
         return(this.Organizer[dt.Year][dt.Month][dt.Day].Day);
     }
     return(null);
 }
        /// <summary>
        /// Возвращает указатель на список записей указанного дня
        /// </summary>
        /// <param name="dt">указанный день</param>
        /// <returns>Указатель на список записей указнного дня, либо null - если день не был активирован
        /// либо в дне нет записей</returns>
        public List <Note> GetDayList(DateTime dt)
        {
            SimpleDateTime currDT = new SimpleDateTime(dt);

            if (IsDateActivated(currDT))
            {
                return(this.Organizer[currDT.Year][currDT.Month][currDT.Day].Day);
            }
            return(null);
        }
        /// <summary>
        /// Перемещает запись из указанной даты и с указанным ID в корзину
        /// </summary>
        /// <param name="id">Уникальный идентификатор записи</param>
        /// <param name="noteDT">Дата и время записи</param>
        public void RemoveNote(uint noteID, SimpleDateTime noteDT)
        {
            Note noteToRemove =
                Organizer[noteDT.Year][noteDT.Month][noteDT.Day].RemoveNote(noteID, noteDT);

            if (noteToRemove != null)
            {
                RecycleBin.Add(noteToRemove);
                Count--;
            }
        }
        //public string noteLocation { get; set; }
        //public string noteTitle { get; set; }
        //public string noteText { get; set; }
        public NewNote(SimpleDateTime currDate)
        {
            InitializeComponent();
            selectedDT.Year  = currDate.Year;
            selectedDT.Month = currDate.Month;
            selectedDT.Day   = currDate.Day;
            DateTime dt = new DateTime(currDate.Year, currDate.Month, currDate.Day);

            currentDate.Text = $"{dt.ToString("dddd, d MMMM yyyy г.")}";
            enterTime.Text   = $"{selectedDT.Hour:00}:{selectedDT.Min:00}";
        }
 /// <summary>
 /// Конструктор создаёт новую запись в заданных дате и времени
 /// </summary>
 /// <param name="noteID">Уникальный номер записи</param>
 /// <param name="noteDT">Дата и время отображения записи</param>
 /// <param name="title">Заголовок записи</param>
 /// <param name="text">Текст заметки</param>
 public Note(uint noteID, SimpleDateTime noteDT, string location, string title, string text)
 {
     // Помним, что конструктор класса вызывается при первом создании экземпляра класса через new
     // Поэтому переменным память не выделена. Переменные не инициализированы
     this.noteID     = noteID;                                // передаём уникальный ID
     this.DisplayDT  = new SimpleDateTime(noteDT);            // Отображаемые дата и время заметки
     this.CreationDT = new SimpleDateTime(DateTime.Now);      // Текущее значение даты и времени
     this.ChangeDT   = new SimpleDateTime(DateTime.MinValue); // Значение по умлочанию 01.01.0001 00:00:00
     this.DeleteDT   = new SimpleDateTime(DateTime.MinValue); // Значение по умлочанию 01.01.0001 00:00:00
     this.Location   = location;                              // записываем место
     this.Title      = title;                                 // записываем заголовок
     this.Text       = text;                                  // и текст заметки
 }
Exemplo n.º 10
0
        public MainWindow()
        {
            InitializeComponent();

            // Специально выделяем одну переменную, в которую записываем текущую дату
            // Делаем на случай, если программа будет работать в 00:00,
            // чтобы текущая дата (currDate) и дата на экране были одинаковыми
            DateTime tmpDT = DateTime.Now;

            currDate = new SimpleDateTime(tmpDT);

            // Выводим дату на экран
            currentDate.Text = $"{tmpDT.ToString("dddd, d MMMM yyyy г.")}";
        }
        ///// <summary>
        ///// Удаляет запись из списка записей дня.
        ///// (пока не реализовано) и помещает эту запись в корзину
        ///// </summary>
        ///// <param name="noteToRemove">Запись для удаления</param>
        //public void RemoveNote(Note noteToRemove)			// Может быть сделать bool. True - removed
        //{
        //	this.Day.Remove(noteToRemove);
        //}

        /// <summary>
        /// Удаляет запись с уникальным ID, датой и временем из списка записей дня.
        /// (пока не реализовано) и помещает эту запись в корзину
        /// </summary>
        /// <param name="noteID"></param>
        /// <param name="noteDT"></param>
        /// <returns>Возвращает удалённую запись, в которой поле DeletedDT установлено
        /// в текущую дату. Возвращает null, если такой записи не найдено.</returns>
        public Note RemoveNote(uint noteID, SimpleDateTime noteDT)
        {
            foreach (var e in this.Day)
            {
                if (e.noteID == noteID & e.DisplayDT == noteDT)
                {
                    // Если я правильно понимаю, то е - это ссылка на объект. И при удалении из списка
                    // объект в памяти остаётся, просто из списка удаляется ссылка.
                    // но сама ссылка продолжает указывать на тот же объект

                    this.Day.Remove(e);                                         // Удаляем объект из списка
                    e.DeleteDT.Update(DateTime.Now);                            // Помещаем текущие дату и время в ДВ удаления
                    return(e);                                                  // Возвращаем эту запись
                }
            }
            return(null);                                       // Запись с таким ИД и временем не найдена
        }
        /// <summary>
        /// Добавляет в ежедневник запись в конкретную дату и время, с заданными типом, заголовком и текстом.
        /// При добавлении генерирует уникальный ID записи.
        /// </summary>
        /// <param name="displayDT">Дата и время, в которое показана запись</param>
        /// <param name="title">Заголовок записи</param>
        /// <param name="text">Текст записи</param>
        /// <param name="typeOfNote">Тип записи - заметка, событие или дело</param>
        public bool AddNote(SimpleDateTime displayDT, string location, string title, string text)
        {
            short    currYear = displayDT.Year;
            sbyte    currMon  = displayDT.Month;
            sbyte    currDay  = displayDT.Day;
            DayClass dayToAdd;

            // Проверка, выделена ли память для этой даты
            // Инициализирован ли год?
            if (!Organizer.ContainsKey(currYear))
            {
                YearClass yearToAdd = new YearClass(currYear);
                Organizer.Add(currYear, yearToAdd);
            }

            // Инициализирован ли месяц для этой даты?
            if (Organizer[currYear][currMon] == null)
            {
                Organizer[currYear].CreateMonth(currMon);
            }

            // Инициализирован ли день?
            if (Organizer[currYear][currMon][currDay] == null)
            {
                Organizer[currYear].CreateDay(currMon, currDay);                    // создаём новый день
                dayToAdd = Organizer[currYear][currMon][currDay];                   // присваиваем ради сокращения записи

                Count++;
                IDcounter++;
                dayToAdd.AddNote(IDcounter, displayDT, location, title, text);
                return(true);
            }

            // Если пришли сюда, значит в дне есть список записей. Возможно он пуст.
            dayToAdd = Organizer[currYear][currMon][currDay];

            // Существует ли уже запись с такими же временем, типом, заголовком, текстом?
            //
            // Если существует и полностью всё совпадает - то значит, мы просто ничего не добавляем
            // Если совпадает дата, но время отличается - добавляем
            // Если совпадает дата и время, но заголовок и/или текст заметки оличается - добавляем
            // Если совпадает дата и время, и заголовок с текстом, - не добавляем.

            // Если в дне список записей пуст, то цикл просто не выполнится ни разу
            foreach (var e in dayToAdd.Day)
            {
                if (e.DisplayDT.Hour == displayDT.Hour)                 // Запись с таким временем
                {
                    if (e.DisplayDT.Min == displayDT.Min)               // уже существует?
                    {
                        if (e.Location == location)                     // Место совпадает
                        {
                            if (e.Title == title)                       // Заголовок и текст записи
                            {
                                if (e.Text == text)                     // совпадает?
                                {
                                    return(false);                      // ничего не добавляем!!! Такая заметка уже есть!!!
                                }
                            }
                        }
                    }
                }
            }
            // Специально сделал несколько  if-ов, а не составное выражение выр1 & выр2 & выр3
            // Потому что в логическом выражении вычисляются обе части выражения,
            // а сравнение текста - это оч. долго

            Count++;
            IDcounter++;
            dayToAdd.AddNote(IDcounter, displayDT, location, title, text);
            return(true);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Генерирует случайные записи в ежедневнике
        /// (пока не реализовано) Задаём диапазон лет и количество записей для генерации
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Click_GenerateNotes(object sender, RoutedEventArgs e)
        {
            GenerateNotesMenu getYearsWindow = new GenerateNotesMenu();

            getYearsWindow.ShowDialog();

            if (getYearsWindow.DialogResult == null ||
                getYearsWindow.DialogResult == false)
            {
                return;
            }

            short startYear     = Int16.Parse(getYearsWindow.enterStartYear.Text);
            short endYear       = Int16.Parse(getYearsWindow.enterEndYear.Text);
            uint  numberOfNotes = UInt32.Parse(getYearsWindow.enterNumberOfNotes.Text);

            if (startYear > endYear)
            {
                short tmp = startYear;
                startYear = endYear;
                endYear   = tmp;
            }

            Random         r = new Random();
            short          rYear;                // 5 лет
            sbyte          rMonth;               // 1 - 12
            sbyte          rDay;                 // 1 - 31
            sbyte          rHour;
            sbyte          rMin;
            sbyte          rSec;
            string         rLocation;
            string         rTitle;
            string         rText;
            SimpleDateTime rDT;

            for (int i = 0; i < numberOfNotes; i++)
            {
                rYear  = (short)r.Next(startYear, endYear);
                rMonth = (sbyte)r.Next(1, 13);
                if (DateTime.IsLeapYear(rYear) & rMonth == 2)
                {
                    rDay = (sbyte)r.Next(1, 30);                      // високосный февраль
                }
                else
                {
                    rDay = (sbyte)r.Next(1, YearClass.monthsLength[rMonth] + 1);
                }
                rHour     = (sbyte)r.Next(1, 24);
                rMin      = (sbyte)r.Next(1, 60);
                rSec      = (sbyte)r.Next(1, 60);
                rLocation = $"Location_{rMin}";
                rTitle    = $"Title_{rYear}{rMonth}{rDay}_{rHour}:{rMin}:{rSec}";
                rText     = $"This is the day {rDay} of month {rMonth} of the year {rYear}." +
                            $" Time now is {rHour} hours {rMin} minutes {rSec} seconds.";

                rDT = new SimpleDateTime(rYear, rMonth, rDay, rHour, rMin);
                myOrganizer.AddNote(rDT, rLocation, rTitle, rText);
            }
            currDate = new SimpleDateTime(DateTime.Now);
            dayToShowList.ItemsSource = myOrganizer.GetDayList(currDate);

            dayToShowList.Items.Refresh();
        }