/// <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; // и текст заметки }
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); }
/// <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(); }