Ejemplo n.º 1
0
 /// <summary>
 /// Сортирует массив notes по значению одного из свойств класса Note
 /// </summary>
 /// <param name="fNote">"Псевдоним" свойства класса Note</param>
 /// <param name="order">Порядок сортировки</param>
 public void sortNotes(FieldsNote fNote = FieldsNote.DATE_NOTE, Order order = Order.ASC)
 {
     for (int i = 0; i < this.count; ++i)
     {
         for (int j = 0; j < this.count - 1; ++j)
         {
             if (isGreaterOneNote(ref notes[j], ref notes[j + 1], fNote, order))
             {
                 swapNotes(ref notes[j], ref notes[j + 1]);
             }
         }
     }
 }
Ejemplo n.º 2
0
        // Идентификаторы записей (Id_Note) должны быть различным (в рамках одной программы).
        // Для этого при загрузке записей из файла ежедневника с совпадающими идентификаторами
        // они будут меняться (для исключения совпадения идентификаторов).

        /// <summary>
        /// Вывод главного меню программы
        /// </summary>
        static public void Menu()
        {
            int   choice = 0;
            Notes notes  = new Notes(); // создание пустого ежедневника

            do                          // бесконечный цикл (до выхода пользователя из программы)

            {
                do
                {
                    Console.Clear();
                    Console.WriteLine("========================================================");
                    Console.WriteLine("                    ГЛАВНОЕ МЕНЮ:");
                    Console.WriteLine("========================================================");
                    Console.WriteLine("1 - Добавить запись в ежедневник;");
                    Console.WriteLine("2 - Редактировать запись в ежедневнике;");
                    Console.WriteLine("3 - Удалить запись из ежедневника;");
                    Console.WriteLine("========================================================");
                    Console.WriteLine("4 - Загрузить данные из файла;");
                    Console.WriteLine("5 - Выгрузить данные в файл;");
                    Console.WriteLine("6 - Упорядочить записи в ежедневнике по выбранному полю;");
                    Console.WriteLine("========================================================");
                    Console.WriteLine("7 - Выйти из программы.");
                    Console.WriteLine("========================================================");
                    Console.WriteLine();

                    Console.Write("Выберите пункт: ");
                    int.TryParse(Console.ReadLine(), out choice);
                } while (choice < 1 || choice > 7);

                Console.Clear();

                switch (choice)
                {
                case 1:                // выбран пункт "Добавить запись"

                    notes.prntNotes(); // выводим ежедневник (если есть записи)
                    Console.Clear();

                    string   whatFamily, whatName, whatSirname;
                    DateTime whatBirthDate;
                    string   whatNotation;
                    Mood     whatMood = Mood.GOOD;      // по умолчанию настроение хорошее

                    Console.Write("Фамилия: ");
                    whatFamily = Console.ReadLine();
                    Console.Write("Имя: ");
                    whatName = Console.ReadLine();
                    Console.Write("Отчество: ");
                    whatSirname = Console.ReadLine();

                    string sBDay;       // вспомогательная переменная для конвертации в дату
                    do
                    {
                        Console.Write("Дата рождения (формат - дд.мм.гггг): ");
                        sBDay = Console.ReadLine();
                        if (!DateTime.TryParse(sBDay, out whatBirthDate))
                        {
                            continue;     // если дата рождения не является датой, то повторяем ввод
                        }
                        else
                        {
                            break;      // если дата рождения корректна (является датой) то выходим из цикла
                        }
                    } while (true);

                    // Создатель записи
                    Person whatPerson = new Person(whatFamily, whatName, whatSirname, whatBirthDate);

                    Console.Clear();

                    Console.Write("Напишите о настроении(плохое, хорошее, отличное): ");
                    string strMood = Console.ReadLine();
                    if (strMood == "плохое")
                    {
                        whatMood = Mood.BAD;
                    }
                    else if (strMood == "отличное")
                    {
                        whatMood = Mood.GREAT;
                    }

                    Console.Clear();

                    Console.Write("Сделайте запись: ");
                    whatNotation = Console.ReadLine();

                    Note note = new Note(whatNotation, whatPerson, whatMood);
                    notes.insertNotes(note);

                    continue;

                case 2:     // выбран пункт "Редактировать запись"

                    // если запсей в ежедневнике нет, то переходим к следующей итерации цикла
                    if (!notes.prntNotes())
                    {
                        continue;
                    }

                    uint id;        // хранит идентификатор записи
                    do
                    {
                        Console.WriteLine();
                        Console.Write("Введите номер идентификатора редактируемой записи (буква, или 0 - выход в меню): ");
                        uint.TryParse(Console.ReadLine(), out id);
                        if (id == 0)
                        {
                            break;
                        }

                        if (!notes.isNoteId(id))
                        {
                            Console.WriteLine("Записи с таким идентификатором не существует!");
                            continue;
                        }

                        break;
                    } while (true);

                    if (id == 0)
                    {
                        continue;               // пользователь выбрал выход, выводим меню
                    }
                    Console.Clear();
                    whatMood = notes.getNoteForId(id).Mood_Note;
                    Console.Write("Настроение(плохое, хорошее, отличное): ");
                    strMood = Console.ReadLine();
                    if (!String.IsNullOrEmpty(strMood))
                    {
                        if (strMood == "плохое")
                        {
                            whatMood = Mood.BAD;
                        }
                        else if (strMood == "отличное")
                        {
                            whatMood = Mood.GREAT;
                        }
                        else
                        {
                            whatMood = Mood.GOOD;
                        }
                    }

                    Console.Write("Сделайте запись: ");
                    whatNotation = Console.ReadLine();
                    // Если пользователь ввел пустое поле, то не меняем текст записи
                    if (String.IsNullOrEmpty(whatNotation))
                    {
                        whatNotation = notes.getNoteForId(id).Notation_Note;
                    }

                    notes.editNotes(id, whatNotation, whatMood);        // редактируем запись

                    Console.Clear();
                    notes.prntNotes();

                    Console.ReadKey();

                    continue;

                case 3:     // выбран пункт "Удалить запись"

                    // если запсей в ежедневнике нет, то переходим к следующей итерации цикла
                    if (!notes.prntNotes())
                    {
                        continue;
                    }

                    do
                    {
                        Console.WriteLine();
                        Console.Write("Введите номер идентификатора удаляемой записи (буква, или 0 - выход в меню): ");
                        uint.TryParse(Console.ReadLine(), out id);
                        if (id == 0)
                        {
                            break;
                        }

                        if (!notes.isNoteId(id))
                        {
                            Console.WriteLine("Записи с таким идентификатором не существует!");
                            continue;
                        }

                        break;
                    } while (true);

                    if (id == 0)
                    {
                        continue;               // пользователь выбрал выход, выводим меню
                    }
                    notes.deleteNotes(id);      // удаляем запись

                    Console.Clear();
                    notes.prntNotes();

                    Console.ReadKey();

                    continue;

                case 4:     // выбран пункт "Загрузить данные из файла"

                    Console.Write("Введите путь к файлу для загрузки данных в ежедневник: ");
                    string path = Console.ReadLine();

                    Console.Write("Загрузить данные по диапазону дат? (д/н): ");
                    string ch = Console.ReadLine();
                    Console.WriteLine();

                    if (ch == "д")
                    {
                        DateTime from, to;      // для обозначения промежутка дат
                        Console.Write("Загружаем с (дата в формате дд.мм.гггг чч:ММ:сс):  ");
                        DateTime.TryParse(Console.ReadLine(), out from);
                        Console.Write("Загружаем по (дата в формате дд.мм.гггг чч:ММ:сс): ");
                        DateTime.TryParse(Console.ReadLine(), out to);

                        notes.loadNotes(path, from, to);
                    }
                    else
                    {
                        notes.loadNotes(path);
                    }

                    continue;

                case 5:     // выбран пункт "Выгрузить данные в файл"

                    // если запсей в ежедневнике нет, то переходим к следующей итерации цикла
                    if (!notes.prntNotes())
                    {
                        continue;
                    }

                    Console.WriteLine();
                    Console.Write("Введите путь к файлу ежедневника (по умолчанию создастся файл Diary.diary в директории программы): ");
                    path = Console.ReadLine();
                    notes.unloadNotes(path);

                    continue;

                case 6:        // выбран пункт "Упорядочить записи"

                    int chFie; // выбор поля сортировки

                    do
                    {
                        Console.Clear();
                        Console.WriteLine("=============================");
                        Console.WriteLine("Поля записи:");
                        Console.WriteLine("=============================");
                        Console.WriteLine("1 - Идентификатор записи;");
                        Console.WriteLine("2 - Дата создания записи;");
                        Console.WriteLine("3 - Текст записи;");
                        Console.WriteLine("4 - Создатель записи;");
                        Console.WriteLine("5 - Настроение;");
                        Console.WriteLine("=============================");
                        Console.WriteLine();

                        Console.Write("Выберите поле по которому будем сортировать: ");
                        int.TryParse(Console.ReadLine(), out chFie);
                    } while (chFie < 1 || chFie > 5);

                    Console.Write("Отсортировать в обратном порядке? (д/н): ");
                    string chOrd = Console.ReadLine();

                    FieldsNote field = FieldsNote.DATE_NOTE;       // поле по которому будем сортировать (по умолчанию - дата создания записи)
                    Order      order;

                    if (chOrd == "д")
                    {
                        order = Order.DESC;
                    }
                    else
                    {
                        order = Order.ASC;
                    }

                    switch (chFie)
                    {
                    case 1:         // сортировка по Id
                        field = FieldsNote.ID_NOTE;
                        break;

                    case 2:         // сортировка по дате создания
                        field = FieldsNote.DATE_NOTE;
                        break;

                    case 3:         // сортировка по тексту записи
                        field = FieldsNote.NOTATION_NOTE;
                        break;

                    case 4:         // сортировка по создателю записи
                        field = FieldsNote.WRITER_NOTE;
                        break;

                    case 5:         // сортировка по настроению
                        field = FieldsNote.MOOD_NOTE;
                        break;

                    case 6:         // вернуться в главное меню
                        continue;
                    }

                    notes.sortNotes(field, order);

                    continue;

                case 7:     // выбран пункт "Выйти"
                    return;
                }
            } while (true);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Определяет больше ли первый объект второго
        /// </summary>
        /// <param name="oneNote">Первый объект сравнения</param>
        /// <param name="twoNote">Второй объект сравнения</param>
        /// <param name="fn">Поле по которому происходит сравнение</param>
        /// <param name="order">Порядок сортировки (по возрастанию, по убыванию)</param>
        /// <returns>true - если oneNote > twoNote</returns>
        private static bool isGreaterOneNote(ref Note oneNote, ref Note twoNote, FieldsNote fn, Order order)
        {
            // Переменные для сравнения строковых значений полей
            string fieldStrVal1 = String.Empty;
            string fieldStrVal2 = String.Empty;

            // Получение значений свойств объектов
            if (fn == FieldsNote.NOTATION_NOTE)
            {
                fieldStrVal1 = oneNote.Notation_Note;
                fieldStrVal2 = twoNote.Notation_Note;
            }
            else if (fn == FieldsNote.WRITER_NOTE)
            {
                fieldStrVal1 = oneNote.Writer_Note.personToString();
                fieldStrVal2 = twoNote.Writer_Note.personToString();
            }
            // Если порядок сортировки прямой
            if (order == Order.ASC)
            {
                if (String.Compare(fieldStrVal1, fieldStrVal2, true) == 1)
                {
                    return(true);
                }
            }
            else        // если порядок сортировки обратный
            {
                if (String.Compare(fieldStrVal1, fieldStrVal2, true) == -1)
                {
                    return(true);
                }
            }


            ////////////////////////////СРАВНЕНИЕ СВОЙСТВ Mood_Note, Id_Note, Date_Note///////////////////////////
            if (fn == FieldsNote.MOOD_NOTE)
            {
                uint fieldMoodVal1 = (uint)oneNote.Mood_Note;
                uint fieldMoodVal2 = (uint)twoNote.Mood_Note;

                // если порядок сортировки прямой
                if (order == Order.ASC)
                {
                    return(fieldMoodVal1 > fieldMoodVal2);
                }
                else
                {
                    return(fieldMoodVal1 < fieldMoodVal2); // если порядок обратный
                }
            }

            if (fn == FieldsNote.ID_NOTE)
            {
                uint fieldIdVal1 = oneNote.Id_Note;
                uint fieldIdVal2 = twoNote.Id_Note;

                // если порядок сортировки прямой
                if (order == Order.ASC)
                {
                    return(fieldIdVal1 > fieldIdVal2);
                }
                else
                {
                    return(fieldIdVal1 < fieldIdVal2);  // если порядок обратный
                }
            }

            if (fn == FieldsNote.DATE_NOTE)
            {
                DateTime fieldDTVal1 = oneNote.Date_Note;
                DateTime fieldDTVal2 = twoNote.Date_Note;

                // если порядок сортировки прямой
                if (order == Order.ASC)
                {
                    return(fieldDTVal1 > fieldDTVal2);
                }
                else
                {
                    return(fieldDTVal1 < fieldDTVal2);  // если порядок обратный
                }
            }
            //////////////////////КОНЕЦ_СРАВНЕНИЕ СВОЙСТВ Mood_Note, Id_Note, Date_Note//////////////////////////////


            return(false);   // в остальных случаях возвращаем false
        }