Построение вечного календаря

Автор: Пользователь скрыл имя, 04 Мая 2013 в 00:36, курсовая работа

Краткое описание

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

Оглавление

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

Файлы: 1 файл

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

— 214.50 Кб (Скачать)

Далее выполняется проверка на корректность ввода данных пользователем  для каждой переменной.

Условия корректного ввода  для года следующие: он не должен быть меньше нуля и больше 3000 (при желании  пользователь может продлить вторую границу до бесконечности). Для месяца: не меньше единицы и не больше двенадцати. А вот для дней месяца (в тексте программы переменная day) то тут условия правильного ввода для каждого месяца( а для февраля ещё и для года), свои: для января, марта, мая, июля, август, октября и декабря число дней в месяце не должно превышать 31; для апреля, июня, сентября и октября оно должно быть не более 30; ну а для февраля в зависимости от того високосный введенный год или нет оно должно быть не больше 29 и 28 соответственно. И, конечно же, число не может быть менее 1.

В программной реализации это выглядит следующим образом:

if ((((m==1)||(m==3)) || ((m==5)||(m==7)) || ((m==8)||(m==10)) ||(m==12)) &&(data<=0||data>31)) {cout<<"\nERROR! Enter right data, please"; goto vvod_data; };

if ((m==2)&&(((data<=0)||(data>28))&&(god%4!=0)) ||(((data<=0)||(data>29))&&(god%4==0))) {cout<<"\nERROR! Enter right data, please"; goto vvod_data; };

if ((((m==4)||(m==6))||((m==9)||(m==11)))&&((data<=0)||(data>30))) {cout<<"\nERROR! Enter right data, please"; goto vvod_data; };

 

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

Например, если пользователь вводит неверный порядковый номер месяца (13, 14, -5) программа будет запрашивать повторный ввод до тех пор, пока не будет введён месяц с номером от 1 до 12, и только после этого управление передастся на следующий после ввода месяца оператор.


Рисунок 4.1 – проверка на корректность ввода месяца

 

Следует, также, подчеркнуть, что оператор goto – это не единственный способ возврата на повторный ввод при неверном первоначальном введении параметра.

Данную операцию можно реализовать с помощью  циклов, а именно цикла с послеусловием do while.

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

Синтаксис данного оператора  следующий:

do оператор

while (выражение-условие);

где оператор – тело цикла, что может быть представлено в виде простого или сложного оператора.

В процессе выполнения оператора do  while сначала выполняется вход в тело цикла и выполняется оператор, что представляет собой тело цикла (он может быть как простой, так и сложенный); далее проверяется выражение-условие, и, если оно истинно,– цикл повторяется, а когда оно ошибочно, то происходит выход из цикла и управление идёт на слудующий за do  while оператор.

В данной фрагменте проверки корректности (рассмотрим на примере месяца) этот цикл использовался бы следующим образом:

 

do {cout<<"\nEnter month\n";

cin>>m;}

while ((m<1)||(m>12)) ;

 

Из условия  цикла видно, что ввод месяца будет  проходить до тех пор, пока переменная  m не попадёт в промежуток от 1 до 12, что и будет условием выхода и передачи управления на следующий оператор.

После ввода  данных диалог с пользователем окончен и программа начинает высчитывать, высокосный ли год, выводит нам сообщение о животном-символе года, выводит словесный эквивалент месяца, и, собственно, день недели. Если введённая дата совпадает из каким-то из зафиксированых разработчиком праздников (Новый год, 8 марта), то мы получаем сообщение и об отмечаемом в этот день празднике.

Далее программа  передаёт управление на отвечающие за знак зодиака оператор.

Программа делает запрос о том, хочет ли пользователь по ранее введеным датам получить информацию о знаке зодиака, припадающего на эти числа:

cout<<"\n\n\nDo you want to know your zodiac about this data?";

cout<<"\nEnter 1-yes, 0-no\n\n";

cout<<"answer ";

cin>>z;

Если пользователь введёт 1, то получит на экран знак зодиака, а если 0, то программа заканчивает свою работу, т.к. она уже выполнила все требуемые операции.

 

Рисунок 4.2 –  пример работы зодиака

Из рисунка 4.2 видим, что программа действительно  высвечивает верную информацию:

это год тигра;

9й месяц –  это сентябрь;

19е сентября  будет воскресенье;

человек, родившийся в этот день, по знаку зодиака Virgo, т.е.дева.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

На самом  деле, проверить самостоятельно данную программу не составляет особых сложностей.

После запуска программы в Microsoft Visual Studio 2008 выполняйте показываемые на экране требования:

введите год;

введите месяц;

введите число;

если вы хотите узнать свой знак зодиака, то на вопрос «Do you want to know your zodiac about this data?» в поле «answer » введите 1, что эквивалентно положительному ответу.

P.S. Если вы получаете сообщение об ошибке, то вам следует повторно ввести запрашуемый параметр, так что следите за правильностью своего ввода и диалогом с программой.

 

 

 

 

 

 

 

 

 

 

 

 

ВЫВОДЫ

 

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

Мною лично  были приобретены новые навыки , а также закреплены старые и изучены особенности написания программ на языке программирования С++.

Были рассмотрены  принципы построения вечного календаря и работы с ним по самому распространённому на сегодняшний день способом.

 

 

 

 

 

 

 

 

 

 

 

 

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

  1. Е.П.Путятiн, В.П.Степанов, В.П.Пчелiнов, Т.Г.Долженкова, О.О.Матат. Основи програмування мовою С++: Навчальний посiбник – Х.: ТОВ  «Компанiя Смiт», 2005. – 320 с.
  2. В.А.Менделев. Энциклопедия необходимых знаний. Книга эрудита. – Х.: Книжный клуб «Клуб семейного досуга», 2007. – 352 с.
  3. Методичнi вказiвки до курсового проектування з дисциплiни «Програмування» / Упоряд.: Т.Г.Долженкова, Д.О.Руденко – Х.: ХНУРЕ, 2004. – 16 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

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

#include "stdafx.h"

#include <math.h>

#include <conio.h>

#include <iostream>

#include <string.h>

#include <time.h>

#include <windows.h>

using namespace std;

void main ()

{int god;

vvod_g:cout<<"Enter year ";

cin>>god;

if ((god<=0)||(god>=3000)) {cout<<"ERROR! Enter right year, please";

goto vvod_g;

}

 

int m;

vvod_m:cout<<"\nEnter month ";

cin>>m;

if (m<=0||m>12) {cout<<"\nERROR! Enter right month, please";

goto vvod_m;

}

 

int data;

vvod_data:cout<<"\nEnter data  ";

cin>>data;

 

cout<<"\n\n\n\n";

if ((god%4==0&&god%100!=0)||(god%400==0))

cout<<god<<" year is leap";

if (god%12==0) cout<<"\nMonkey_s year";

if ((god-1)%12==0) cout<<"\nCock_s year";

if ((god-2)%12==0) cout<<"\nDog_s year";

if ((god-3)%12==0) cout<<"\nPig_s year";

if ((god-4)%12==0) cout<<"\nMouse_s year";

if ((god-5)%12==0) cout<<"\nCow_s year";

if ((god-6)%12==0) cout<<"\nTiger_s year";

if ((god-7)%12==0) cout<<"\nRabbit_s year";

if ((god-8)%12==0) cout<<"\nDragon_s year";

if ((god-9)%12==0) cout<<"\nShake_s year";

if ((god-10)%12==0) cout<<"\nHorse_s year";

if((god-11)%12==0) cout<<"\nSheep year";

 

switch (m)

{ case 1: cout<<"\n\nJanuary"; break;

case 2:cout<<"\n\nFebruary"; break;

case 3:cout<<"\n\nMarch"; break;

case 4:cout<<"\n\nApril"; break;

case 5:cout<<"\n\nMay"; break;

case 6:cout<<"\n\nJune"; break;

case 7:cout<<"\n\nJuly"; break;

case 8:cout<<"\n\nAvgust"; break;

case 9:cout<<"\n\nSeptember"; break;

case 10:cout<<"\n\nOctomber"; break;

case 11:cout<<"\n\nNovember"; break;

case 12:cout<<"\n\nDecember"; break; };

if ((((m==1)||(m==3)) || ((m==5)||(m==7)) || ((m==8)||(m==10)) ||(m==12)) &&(data<=0||data>31)) {cout<<"\nERROR! Enter right data, please"; goto vvod_data; };

if ((m==2)&&(((data<=0)||(data>28))&&(god%4!=0)) ||(((data<=0)||(data>29))&&(god%4==0))) {cout<<"\nERROR! Enter right data, please"; goto vvod_data; };

if ((((m==4)||(m==6))||((m==9)||(m==11)))&&((data<=0)||(data>30))) {cout<<"\nERROR! Enter right data, please"; goto vvod_data; };

 

int d;

if ((god+8)%28==0) {switch (m)

                      { case 1:d=2; goto day; break;

                        case 2:d=5;goto day; break;

                        case 3:d=6;goto day; break;

                        case 4:d=2;goto day; break;

                        case 5:d=4;goto day; break;

                        case 6:d=0;goto day; break;

                        case 7:d=2;goto day; break;

                        case 8:d=5;goto day; break;

                        case 9:d=1; goto day; break;

                        case 10:d=3;goto day; break;

                        case 11:d=1;goto day; break;

case 12:d=6;goto day; break;  };

};

if ((god+7)%28==0) {switch (m)

                      { case 1:d=4; goto day; break;

                        case 2:d=0;goto day; break;

                        case 3:d=0;goto day; break;

                        case 4:d=3;goto day; break;

                        case 5:d=5;goto day; break;

                        case 6:d=1;goto day; break;

                        case 7:d=3;goto day; break;

                        case 8:d=6;goto day; break;

                        case 9:d=2; goto day; break;

                        case 10:d=4;goto day; break;

                        case 11:d=0;goto day; break;

  case 12:d=2;goto day; break; };

};

if ((god+6)%28==0) {switch (m)

                      { case 1:d=5; goto day; break;

                        case 2:d=1;goto day; break;

                        case 3:d=1;goto day; break;

                        case 4:d=4;goto day; break;

                        case 5:d=6;goto day; break;

                        case 6:d=2;goto day; break;

                        case 7:d=4;goto day; break;

                        case 8:d=0;goto day; break;

                        case 9:d=3; goto day; break;

                        case 10:d=5;goto day; break;

                        case 11:d=1;goto day; break;

    case 12:d=3;goto day; break; };

};

if ((god+5)%28==0) {switch (m)

                      { case 1:d=6;goto day; break;

                        case 2:d=2;goto day; break;

                        case 3:d=2;goto day; break;

                        case 4:d=5;goto day; break;

                        case 5:d=0;goto day; break;

                        case 6:d=3;goto day; break;

                        case 7:d=5;goto day; break;

                        case 8:d=1;goto day; break;

                        case 9:d=4;goto day; break;

                        case 10:d=6;goto day; break;

                        case 11:d=2;goto day; break;

                        case 12:d=4;goto day; break; };

};

if ((god+4)%28==0) {switch (m)

                      { case 1:d=0; goto day; break;

                        case 2:d=3;goto day; break;

                        case 3:d=4;goto day; break;

                        case 4:d=0;goto day; break;

                        case 5:d=2;goto day; break;

                        case 6:d=5;goto day; break;

                        case 7:d=0;goto day; break;

                        case 8:d=3;goto day; break;

                        case 9:d=6;goto day; break;

                        case 10:d=1;goto day; break;

                        case 11:d=4;goto day; break;

   case 12:d=6;goto day; break; };

};

if ((god+3)%28==0) {switch (m)

                      { case 1:d=2; goto day; break;

                        case 2:d=5; goto day; break;

                        case 3:d=5; goto day; break;

                        case 4:d=1; goto day; break;

                        case 5:d=3;goto day; break;

                        case 6:d=6;goto day; break;

                        case 7:d=1;goto day; break;

                        case 8:d=4;goto day; break;

                        case 9:d=0;goto day; break;

                        case 10:d=2;goto day; break;

                        case 11:d=5;goto day; break;

   case 12:d=0;goto day; break;  };

};

if ((god+2)%28==0) {switch (m)

                      { case 1:d=3;  goto day; break;

                        case 2:d=6;goto day; break;

                        case 3:d=6;goto day; break;

                        case 4:d=2;goto day; break;

                        case 5:d=4;goto day; break;

                        case 6:d=0;goto day; break;

                        case 7:d=2;goto day; break;

                        case 8:d=5;goto day; break;

                        case 9:d=1;goto day; break;

                        case 10:d=3;goto day; break;

                        case 11:d=6;goto day; break;

                        case 12:d=1;goto day; break;  };

};

if ((god+1)%28==0) {switch (m)

                      { case 1:d=4;goto day; break;

                        case 2:d=0;goto day; break;

                        case 3:d=0;goto day; break;

                        case 4:d=3;goto day; break;

                        case 5:d=5;goto day; break;

                        case 6:d=1;goto day; break;

                        case 7:d=3;goto day; break;

                        case 8:d=6;goto day; break;

                        case 9:d=12;goto day; break;

                        case 10:d=4;goto day; break;

                        case 11:d=0;goto day; break;

                        case 12:d=2;goto day; break; };

};

if (god%28==0) {switch (m)

                      { case 1:d=5;goto day; break;

                        case 2:d=1;goto day; break;

                        case 3:d=2;goto day; break;

                        case 4:d=5;goto day; break;

                        case 5:d=0;goto day; break;

                        case 6:d=3;goto day; break;

                        case 7:d=5;goto day; break;

                        case 8:d=1;goto day; break;

                        case 9:d=4;goto day; break;

                        case 10:d=6; goto day; break;

                        case 11:d=2;goto day; break;

                        case 12:d=4;goto day; break; };

};

if ((god-1)%28==0) {switch (m)

                      { case 1:d=0;goto day; break;

                        case 2:d=3; goto day; break;

                        case 3:d=3;goto day; break;

                        case 4:d=6;goto day; break;

                        case 5:d=1;goto day; break;

                        case 6:d=4;goto day; break;

                        case 7:d=6;goto day; break;

                        case 8:d=2;goto day; break;

                        case 9:d=5;goto day; break;

                        case 10:d=0;goto day; break;

                        case 11:d=3;goto day; break;

                        case 12:d=5;goto day; break; };

};

if ((god-2)%28==0) {switch (m)

                      { case 1:d=1;goto day; break;

                        case 2:d=4;goto day; break;

                        case 3:d=4;goto day; break;

Информация о работе Построение вечного календаря