Как сделать календарь visual studio

Добавил пользователь Евгений Кузнецов
Обновлено: 10.09.2024

Широкое проникновение информационных технологий во все сферы человеческой деятельности предъявляет повышенные требования к компьютерной подготовке специалистов в высших учебных заведениях. Изначально вычислительные машины были созданы для решения сложных инженерных и математических задач и, несмотря на значительное расширение сферы их применения, это направление их использования остается главным. Но теперь также в сферу использования вычислительной техники входит и решение всяких второстепенных задач, таких как построение калькуляторов и календарей, нацеленных, прежде всего, на удобства пользователя.

Оглавление

ВВЕДЕНИЕ..………………………………………………………………….5
1 ПОСТАНОВКА ЗАДАЧИ И СРЕДА ЕЁ ИСПОЛЬЗОВАНИЯ………….7
2 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.…………………………………………8
3 ОСНОВНОЙ АЛГОРИТМ………………………………………………..13
4 ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА ЯЗЫКЕ С++..…………………. 16
5 ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ.……………………………. 21
ВЫВОДЫ……………………………………………………………………22
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ…………………………..23
Приложение А Текст программы………………………………………….24

Файлы: 1 файл

Вечный%20календарь.%20Курсовой%20проэкт.doc

МIНIСТЕРСТВО ОСВIТИ I НАУКИ УКРАIНИ

ХАРЬКIВСКИЙ НАЦIОНАЛЬНЫЙ УНIВЕРСИТЕТ РАДIОЕЛЕКТРОНIКИ

Керiвник Руденко Дiана Олександрiвна

Студент гр. КI-09-1 Михайлова Любов Олегiвна

ЗА Д А Н И Е

на курсовую работу студента

Михайлова Любовь Олеговна

(фамилия, имя, отчество)

2. Срок сдачи студентом законченной работы

4. Содержание расчётно-пояснитель ной записки (перечень подлежащих разработке вопросов) : вступление, постановка задачи и среда её использования, основной алгоритм, теоретические сведения, особенности реализации алгоритма на языке С++, инструкция по использованию, выводы, список используемых источников, приложение А Текст программы.

5. Перечень графического материала : 5 иллюстраций к курсовой работе.

6. Дата выдачи задания 20.12.2009.

Пояснительная записка к курсовой работе содержит: 43 страницы, 2 таблицы, 5 рисунков, 5 разделов, 3 источника.

Объект исследования – возможности использования основных операторов среды С++ для построения программ-приложений (калькулятор, календарь и т.д.).

Метод исследования – изучение необходимой литературы, написание алгоритма, его переведение в машинный код и тестирование программы.

Данная программа написана удобным для разработчика способом, но также далее будут представлены и другие способы решения поставленной задачи.

ОПЕРАТОР, АЛГОРИТМ, ПЕРЕКЛЮЧАТЕЛЬ,ТАБЛИЦА, ПАРАМЕТР, ЦИКЛ ,ЗОДИАК.

1 ПОСТАНОВКА ЗАДАЧИ И СРЕДА ЕЁ ИСПОЛЬЗОВАНИЯ………….7

2 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.…………………………………………8

4 ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА ЯЗЫКЕ С++..…………………. 16

5 ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ.……………………………. 21

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ…………………………..23

Приложение А Текст программы………………………………………….24

Широкое проникновение информационных технологий во все сферы человеческой деятельности предъявляет повышенные требования к компьютерной подготовке специалистов в высших учебных заведениях. Изначально вычислительные машины были созданы для решения сложных инженерных и математических задач и, несмотря на значительное расширение сферы их применения, это направление их использования остается главным. Но теперь также в сферу использования вычислительной техники входит и решение всяких второстепенных задач, таких как построение калькуляторов и календарей, нацеленных, прежде всего, на удобства пользователя.

Известные сегодня табличные календари приобрели современную форму только после того, как была изобретена печать. Вечные же календари придуманы гораздо раньше — время их создания восходит ещё к дотатарскому времени — вероятно, один из первых подобных календарей был найден на стене Киевской Софии.

Вечный календарь может быть реализован самыми разнообразными способами, внешне абсолютно непохожими друг на друга. Но в принципе их действия лежит одно — календари образуют цикл с периодичностью в 400 лет (допускается рассмотрение периодичности не в 400, а в 28 лет при условии, что вечный календарь не рассчитан на невисокосные годы, кончающиеся на 00).

Придумано множество вечных календарей такого вида, однако почти все они сводятся к одному: имеется 14 календарных сеток (7 возможных дней недели, с которых начинается год x 2 варианта — високосный и невисокосный год) и таблица, помогающая выбрать календарную сетку для нужного года либо определить сдвиг, помогающий правильно преобразовать одну сетку.

Календари этого вида различаются по степени удобства и быстроте использования. Такие календари иногда публиковались в газетах и журналах для вырезания и использования читателями. Именно такой алгоритм и был использован мною при построении вечного календаря в С++.

1 ПОСТАНОВКА ЗАДАЧИ И СРЕДА ЕЁ ИСПОЛЬЗОВАНИЯ

Тема данной курсовой роботы звучит элементарно : построить вечный календарь. Задача соответственно: используя инструменты С++ Visual Studio написать программу, позволяющую по введенным пользователем датам (году, месяцу и числу) отследить, не высокосный ли введенный год, а так же получить сведения какой это день недели. Так же в задачу данной программы входит проверка на корректность работы программы (правильный ввод месяца и соответствующего ему диапазона дат).

Данная программа содержит такое приложение, как сведения о знаке зодиака пользователя, т.е. при введении чисел для получения информации о дне недели, вы также можете узнать под каким знаком родился человек, с расчётом на то, что дата его рождения была введена изначально.

Что на счёт среды использования данной разработки, так это самый что ни есть обыкновенный календарь, отличающийся лишь тем, что теперь вы не ищете сами глазами в какой день недели у вас в этом году новый год, а лишь вводите параметры и получаете ответ на экран.

2 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

В данном коде используются такие основные операторы языка С, как операторы выбора и переключатели. Далее подробнее о них.

Оператор выбора if.

Оператор условного перехода if используется для разделения процесса последующего выполнения программы на два направления и имеет такой формат записи:

if (условие) оператор 1;

else оператор 2;

где условие – это выражение , что имеет логическое истина.

Реализуется оператор if следующим образом: сначала вычисляется условие и, если оно истинно, то выполняется оператор 1, а в противоположном случае – оператор 2 и далее управление передаётся следующему за if оператору, например

3. ОСНОВНОЙ АЛГОРИТМ

Для того, чтобы узнать день недели конкретного дня, требуется:

найти в первой таблице цифру, соответствующую указанному году и месяцу;

сложить эту цифру с номером дня;

найти во второй таблице получившееся число и посмотреть, какому дню недели оно соответствует.

В сегодняшнем премиальном учебнике и скринкасте я расскажу вам, как создать прозрачный календарный виджет. Мы будем использовать CSS3, чтобы придать ему блестящий внешний вид, а затем добавить некоторые довольно приятные функции с JavaScript.

Шаг 0. Идея

Я следую блогу 365PSD, действительно приятный сайт, который предлагает бесплатный PSD - обычно маленький фрагмент UI - каждый день. На 81-й день был действительно приятный виджет календаря. Я полагал, что не будет слишком сложно построить настоящую вещь, поэтому сегодня я покажу вам, как это сделать!





Шаг 1. HTML-код

Мы начнем с создания нашей структуры HTML. Конечно, мы начнем с каркаса:

Итак, внутри тела мы начнем с div , чтобы обернуть все это; затем в нем будет три основных раздела:

Я открою вам один секрет: когда я изначально построил пользовательский интерфейс этого календаря, у меня была только одна таблица с thead для дней и tbody для сетки календаря; но как только я начал писать JavaScript для переключения между месяцами, стало очевидно, что мне нужно использовать что-то более гибкое. Вы поймете, почему, когда мы доберемся до JavaScript.

Итак, это идет в заголовок:

У нас здесь пять элементов; на внешних сторонах у нас есть левый и правый переключатели календаря; так как я не хотел использовать какие-либо изображения в этом проекте, я нашел HTML-сущности ⟨ и &rang ( , соответственно). Затем у нас есть два пустых промежутка для привязок календаря. Наконец, в середине у нас есть метка месяца/года.

Полный скринкаст


И действительно, это голый HTML; пока не так много, но вот что мы имеем:





Шаг 2. CSS

Начнем с некоторого окружения:

Довольно очевидно, а? После установки цвета фона мы центрируем виджет календаря горизонтально и даем ему тень окна. Конечно, мы устанавливаем шрифт. Но почему мы устанавливаем отображение в таблицу? По умолчанию div будет отображаться в виде блока, что означает, что он займет всю доступную ширину; отображая его как таблицу, он будет занимать наименьшую ширину (пока он все еще содержит его дочерние элементы) и по-прежнему является блочным элементом.

Затем давайте сосредоточимся на панели заголовка:

Вот первая часть стиля заголовка; мы начинаем с установки курсора на указатель; текст, как правило, не будет выбираться. Затем мы установим красный цвет фона; однако, если браузер поддерживает его, мы будем использовать фоновый градиент: не забудьте добавить его как для mozilla, так и для webkit! Затем установите высоту 34px; мы установим положение относительное, потому что дочерние элементы будут позиционированы абсолютно; по положению родительского элемента относительно, дочерние будут помещены абсолютно по отношению к родителю, а не к body. Установите цвет текста на белый, вокруг верхнего левого и правого углов и сделайте шрифт полужирным. Затем создайте небольшую текстовую тень, чтобы текст выглядел c отступом. Наконец, преобразуйте текст в верхний регистр.

Каждый из элементов в заголовке представляет собой span ; каждый из них будет отображаться как встроенный блок. Также дайте им высоту строки 34px (высота заголовка).

Эти span также имеют некоторые специальные классы, поэтому давайте посмотрим на них:

Теперь у нас есть кнопки переключения месяца:

Мы установим ширину на этих кнопках и центрируем текст; конечно, нам тоже нужно будет позиционировать их. Затем, для левой кнопки, мы перемещаем ее полностью влево и вверх по левому краю. Правая кнопка идет вправо и округляет верхний правый угол.

Наконец, мы добавим эффект нависания для кнопок; конечно, мы будем использовать градиент.

Есть еще один элемент для стилизации: это метка месяца.

Мы будем использовать letter-spacing , чтобы немного добавить расстояния между буквами. Затем мы даем span ширину 100% и центрируем текст. Поскольку все соседние элементы расположены абсолютно, давая это, полная ширина делает именно то, что мы хотим.

Вот и весь заголовок! Я должен упомянуть, что, хотя мы полностью позиционировали большинство элементов, так как мы используем проценты для их размещения, все отлично масштабируется, когда вы увеличиваете или уменьшаете размер шрифта в браузере.

Хорошо, давайте перейдем к заголовкам дней.

Мы начинаем с двух несколько более общих селекторов: заголовок дня и сетка календаря - это обе таблицы, поэтому первое правило применяется к обоим из них: мы устанавливаем фон в белый цвет и сворачиваем границы. Когда границы таблицы сжимаются, у них нет прокладки между ними. Затем для всех ячеек таблицы мы установим цвет текста, их ширину, высоту и высоту линии до 30 пикселей и затем центрируем текст. Все они получают границу и курсор по умолчанию (стрелка / указатель);

Есть особый случай, о котором мы еще не говорили; возьмите свой ближайший календарь - нет, не iCal, я говорю о реальном календарях из мертвых деревьев и откройте, о, скажем, октябрь 2010 года. Вы заметите, что на последней неделе есть удвоенная ячейка, с 24 м и 31 м в том же квадрате. Нам нужно это сделать, поэтому давайте добавим стили для этого.

То, как мы отметим это, заключается в том, что каждую дату в ячейке таблицы помещаем в span.

Во-первых, мы позиционируем span относительно и сжимаем их шрифт; Затем мы перемещаем первый вверх на 5px, а второй - вниз на 5px.

Мы сделаем еще одну вещь; когда мы переключаемся между месяцами, мы хотим чтобы один медленно исчезал; для этого требуется, чтобы две таблицы находились поверх друг друга. Мы можем достичь этого:

И все это с помощью CSS! Теперь перейдем к некоторой функциональности.

Шаг 3. JavaScript

Мы сделаем функциональность для нашего календаря легкой для повторного использования; учитывая это, начнем:

Таким образом, мы создаем три функции внутри нашей функции CALENDAR; одна будет инициализировать виджет календаря, вторая будет перемещаться между месяцами, а третья будет создавать сетку календаря; обратите внимание на строку: createCal.cache = <>; мы обсудим это тоже!

Мы также создали три переменные наверху: мы дадим значения переменным wrap и label внутри init , а months - это массив с именами месяцев.

Вот содержание нашей функции init :

Однако switchMonth также может принимать еще два параметра; мы будем использовать их для события click на ярлыке. Когда пользователь нажимает имя месяца, мы должны перейти к текущему месяцу; поэтому мы переходим в текущий месяц и год, который мы можем получить из объекта JavaScript Date . Не забудьте установить параметр next в значение null!

Еще одна вещь (и бонусный совет, его нет в скринкасте!): Когда пользователь загружает страницу, мы хотим загрузить правильный месяц на месяц, который жестко закодирован. Самый простой способ сделать это - вызвать метод jQuery click на ярлыке без каких-либо параметров; это имитирует щелчок мышью и переводит календарь на текущий месяц.

Перейдем к функции switchMonth :

Мы установим несколько переменных вверху; мы разбиваем метку на массив под названием curr ; мы также создаем переменную calendar и захватываем год текущего календаря.

Затем все становится сложнее. Я использовал условные операторы JavaScript, поэтому я могу поместить все это на одну строку. Вот что они делают:

Вы можете понять, почему условный оператор привлекателен: всего одна строка кода. Вот расширенная версия переменной года:

В конце всего, month и year будут правильными значениями для календаря, который мы пытаемся показать пользователю. Если вы почувствуете себя более комфортно, вы можете заменить эти две строки вышеприведенными фрагментами.

Затем мы создаем календарь и соответствующим образом корректируем DOM:

Что находится в объекте календаря, который возвращается из функции createCal ? Это объект, например:

Итак, у нас есть еще одна функция: createCal .

Вот наш старт: переменные. У нас day , установлен в 1; у нас есть две переменных для итерации: i и j . Затем мы выясним, в какой день недели начинается месяц; мы можем сделать это, создав объект Date для первого дня месяца и вызвав getDay.

Затем мы создаем массив, который содержит количество дней в каждом месяце; для февраля нам нужно учитывать високосные годы, поэтому используйте другое тернарное выражение для расчета.

Наконец, у нас есть очень важная переменная calendar , которая представляет собой массив.

Затем мы хотим использовать то свойство cache , которое мы используем для функции createCal . (Поскольку все в JavaScript является объектом, даже функции могут иметь свойства.)

Если этот объект cache имеет свойство с именем года, который мы ищем, мы можем проверить доступность месяца; если мы уже сделали месяц, мы вернем этот кешированный объект. Если нет свойства для указанного года, мы создаем его, потому что нам нужно будет создать месяц, который мы собираемся затем тоже создать в нем.

Затем нам нужно начать создавать календарь для запрошенного месяца.

Это сложный момент; в то время как переменная hasDays истинна, мы знаем, что у нас осталось несколько дней в месяце. Поэтому мы будем использовать наш i -итератор для добавления недельного массива в массив календаря. Затем мы используем for-loop на j -итераторе, пока как он меньше 7; так как мы начинаем с 0, это даст нам 7 дней для недельного массива. Внутри нашего цикла есть три случая.

Во-первых, нам нужно проверить, находимся ли мы в первую неделю месяца; если так, то мы не обязательно начнем в первый день. Мы уже знаем, в какой день начинается месяц; это сохранено в нашей переменной startDay . Поэтому, если j === startDay , то мы на правильном дне, чтобы начать, поэтому мы поставим значение day в нужном слоте. Затем мы увеличиваем day и startDay на единицу. В следующий раз 'round for for loop, j и startDay будут такими же, так что они будут продолжать работать до конца недели.

Если мы не на первой неделе ( i! == 0 ), то мы будем следить за тем, чтобы у нас осталось несколько дней, чтобы добавить в календарь; если это так, мы вставляем их в слоты. Наконец, если мы не на первой неделе, и у нас нет дней, чтобы добавить месяц, мы вместо этого добавим пустую строку. Затем мы установим hasDays в false.

В конце мы проверим, будет ли day больше, чем количество дней в месяце; если это так, мы установим hasDays в false. Это для специального случая, когда месяц заканчивается в субботу.

Конечно, не забывайте увеличивать i за пределами цикла for!

Как только у нас будет все на месте, мы вырезаем последний элемент из calendar .

Наконец, мы создадим наш законченный объект и поместим его в кеш. Почему мы создаем свойство calendar ? Ну, если мы просто вернули объект jQuery, как только мы добавили его в календарь, а затем переместили его на другой месяц, таблица будет удалена из DOM; позже, если мы вернемся к этому месяцу, элемент не будет отображаться, потому что кэш ссылается на тот же элемент DOM. Поэтому мы используем метод clone jQuery для получения копии элемента DOM. Затем метка получает имя месяца из массива месяцев и объединяется с годом. Наконец, мы возвращаем объект.

Готово! Вернемся в файл index.html, добавим тег скрипта с этим:

Вот оно! Вот как выглядит наш готовый продукт!





Но я не могу показать вам функциональность; вам нужно будет проверить код самостоятельно! Спасибо за прочтение!

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

Сегодня мы создадим программу, которая будет при запуске показывать нам цифровые часы и дату.

Для начала создаём форму. У нас она такая:

Всё, что у нас тут есть – это два Label’a + Timer.

Настраиваем Label’ы, переименовываем, увеличиваем шрифт – всё по усмотрению программиста.

Теперь переходим к коду, щёлкнув правой кнопкой мыши по форме и выбрав соответствующую команду.

Сразу после строки public partial class Form1 : Form объявим таймер. Делается это так:

Объявляем мы его в самом начале, чтобы все функции, которые у нас будут внутри, принимали его в расчёт (если он будет объявлен в какой-то одной отдельной функции, то вторая функция не будет его видеть).

Теперь рам надо включить наш таймер. Для этого мы возвращаемся в форму и дважды щёлкаем на неё левой кнопкой мыши.

Нас переносит в код, который будет срабатывать при загрузке формы (то есть, с самого начала работы программы). Здесь мы пишем следующее:

Первая строка устанавливает интервал обновления таймера. Число 1000 означает, что таймер будет обновляться каждые 1000 миллисекунд, т.е. каждую секунду.

Вторая строка очень важна – она срабатывает при каком-либо событии “Tick” в таймере. У нас она будет срабатывать каждые 1000 миллисекунд, пока включен таймер. Именно благодаря ней пользователь будет видеть смену часов, минут и секунд на циферблате. Само событие мы опишем ниже в функции timer1_Tick.

Третьей строкой мы запускаем наш таймер.

Теперь мы возвращаемся в форму и дважды кликаем на значке таймера ( ) внизу.

Вот и открылась у нас функция timer1_Tick. Мы запишем в неё определённый код, и каждые 1000 миллисекунд этот код будет исполняться заново.

Внутри нашей функции мы сначала объявим некоторые переменные:

В переменную h мы будем записывать часы, в переменную m – минуты, в s – секунды.

Переменная строкового типа time нам нужна, чтобы мы записали первые три переменные в строку для вывода в форму.

Теперь мы сделаем один “трюк”, предназначенный скорее для красоты вида, нежели для функционала и качества работы.

Дело в том, что мы привыкли видеть форму времени в виде, грубо говоря, 00:00:00 , то есть две цифры на вывод часов, две цифры на минуты и две цифры на секунды (например, 06:03:09 или 12:01:05).Время же из свойства DateTime.Now не имеет нулей перед цифрами, которые меньше десяти (иначе говоря, время будет выглядеть так: 6:3:9 или 12:1:5). Согласитесь, это не очень удобно и привычно видеть. Поэтому мы исправим благодаря оператору условия if.

Сначала мы задаём условие, что если h

Итак, в самом начале работы программы строка time у нас пустая (мы выше объявили её такой, с правой стороны поставив пустые кавычки: string time = “” ). Как только запускается таймер, в строку сначала записываются часы, принимая во внимание, больше ли 10 это время или меньше.

То есть вместо пустого пространства в строке теперь что-то типа “12”, если у нас в данный момент 12 часов. После этого в строку записывается двоеточие, теперь строка выглядит так: “12:”. Затем мы записываем минуты, опять учитывая, сколько знаков в них. Получится, например, так :”12:06?. Опять ставим двоеточие: “12:06:”. Заканчивается запись секундами: “12:06:34?. И перезаписываться наша строка от пустоты до полной формы времени будет каждые 1000 миллисекунд, то есть каждую секунду, чтобы мы видели, как меняется циферблат секунд, а впоследствии и минут с часами.

Однако пока что наша строка просто существует, но пользователь не видит её, не видит, сколько время в данный момент.

Поэтому мы выводим нашу строку в форму через Label. У нас это label2, с наиболее крупным шрифтом.

В сегодняшнем премиум- уроке и скриншоте я собираюсь показать вам, как создать удобный виджет календаря. Мы будем использовать CSS3, чтобы придать ему блестящий вид, а затем добавим довольно приятную функциональность с помощью JavaScript.

Шаг 0. Идея

Я слежу за блогом 365PSD , действительно аккуратным сайтом, который предлагает бесплатный PSD — обычно небольшой кусочек пользовательского интерфейса — каждый день. На 81-й день был действительно аккуратный виджет календаря. Я подумал, что создать настоящую вещь не составит большого труда, поэтому я покажу вам, как это сделать сегодня!


Шаг 1. HTML

Мы начнем с построения нашей структуры HTML. Конечно, мы начнем со скелета:

Читайте также: