Календарные задачи

Содержание

 

 

 

Введение

 

Delphi — императивный, структурированный, объектно-ориентированный язык программирования, диалект Object Pasca. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей самостоятельной жизнью и претерпевал различные изменения, связанные с современными тенденциями (например, с развитием платформы .NET) развития языков программирования: появились class helpers, перегрузки операторов и другое.

Данный курсовой проект был разработан в среде Delphi. Среди  множества языков Pascal является наиболее универсальным и легко изучаемым  языком. При этом его удобно использовать для создания сложных приложений, базами данных, приложения масштаба предприятия. Delphi так же прост в обучении, как и Visual Basic, но при этом средства языка программирования Pascal позволяет использовать все современные возможности объектно-ориентированного программирования.

Delphi – это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi – строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

Delphi прост и логичен. Основные конструкции языка четко выделяются в программе, что способствует хорошему восприятию написанного кода. Графический интерфейс Delphi отлично продуман, среда разработки предоставляет доступ только к тем участкам кода, с которыми необходимо работать, скрывая основную часть программы, которая создается автоматически самой разработкой.

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

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

 

 

Глава 1. Программирование в Delphi.

1.1. Borland Delphi.

Borland Delphi представляет собой средство разработки приложений для Microsoft Windows. Delphi является мощным и простым в использовании инструментом для создания автономных программ, обладающих графическим интерфейсом (GUI), или 32-битных консольных приложений (программ, которые не имеют графического интерфейса).

В сочетании с Borland Kylix, программисты Delphi могут создавать  из одного исходного текста приложения и для Windows и для Linux, и это открывает новые возможности и увеличивает потенциальную отдачу от усилий, вложенных в изучение Delphi. В Delphi используется кросс-платформенная библиотека компонентов CLX и визуальные дизайнеры для создания высокопроизводительных приложений для Windows, которые повторной компиляцей можно легко превратить в приложения для Linux.

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

При создании графического интерфейса приложений Delphi, у вас  все возможности языка программирования Object Pascal, "завернутого" в среду RAD. Такие компоненты окна графического пользовательского интерфейса, как формы, кнопки и списки объектов, включены в состав Delphi. Это означает, что вам не нужно писать никакого кода при добавлении их в ваше приложение. Вы просто "кладёте" их на вашу Форму, как в графическом редакторе. Вы можете также добавить на Форму элементы управления ActiveX, для создания в считанные минуты специализированных программ таких, например, как веб-браузеры. Delphi позволяет разработчикам дизайна внедрять в интерфейс новые элементы и кодировать их события одним щелчком мыши.

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

Лучшим способом представить  что такое Delphi является Object Pascal на основе визуальной среды разработки. Delphi основан на Object Pascal, языке, аналогичном объектно-ориентированному C++, а в некоторых случаях даже лучше. Для разработчиков не имеющих опыта работы в Паскале, Delphi имеет шаблоны своих структур на Паскале, что ускоряет процесс изучения языка.

Компилятор Delphi упаковывает  приложения в компактные исполняемые  файлы, причем нет необходимости  в громоздких библиотеках DLL - большое  удобство.

Библиотека Visual Component Library (автономные бинарные части программного обеспечения, которые выполняют некоторые конкретные предопределенные функции), или VCL, Delphi является объектно-ориентированной базой. В этой богатой библиотеке вы найдете классы для таких визуальных объектов Windows как окна, кнопки и т.д., а также классы для пользовательских элементов управления таких как таймер и мультимедийный плеер, наряду с невизуальными объектами, такими как список строк, таблицы базы данных, потоки и т.д.

Delphi может получать  доступ ко многим типам баз  данных. Используя BDE (Borland Database Engine - механизм доступа к базам данных), формы и отчеты, которые вы создаете, получают доступ к локальным базам данных, таким как Paradox и DBase, сетевых баз данных SQL Server, InterBase, также как и SysBase, и любые источники данных, доступные даже через ODBC (открытая связь с базами данных).

1.2. Интерфейс.

Delphi - система визуального  создания программ. Иногда для  создания программы, содержащей  все элементы профессионального  продукта, не требуется написать  ни строчки кода самостоятельно. Просто составив связи между  элементами интерфейса, мы получаем готовый текст работоспособной программы.

Вот как выглядит на экране работающая Delphi:

Вверху Главное Окно, слева Инспектор Объектов, и по центру - прототип программы, так называемая Форма. Объекты - это готовые компоненты, которые мы берём из Палитры компонентов, расположенной на Главном Окне, и располагаем на Форме в нужном нам порядке. Это могут быть кнопки, списки, рисунки, строки ввода данных, таблицы и другие элементы интерфейса, необходимые в каждой программе. Даже простейшая программа будет выглядеть и действовать как полноценная программа для Windows, имеющая все стандартные средства управления.

Программирование в Delphi весьма просто освоить. Первое, что мы хотим сделать, написав очередной фрагмент программы, это проверить его работоспособность. Обратите внимание на яркий зелёный треугольник на Главном окне - это кнопка, нажав на которую мы получаем готовую программу. Все недочёты сразу будут видны. Но даже если программа зависла, система Delphi не бросит нас на произвол Windows, а позволит продолжить работу. Так, постепенно добавляя новые модули, мы получаем законченный продукт, который также легко может быть изменён и дополнен.

Delphi упрощает создание программ, переводя его на визуальный уровень. Это позволяет программисту сразу сосредоточиться на сути решаемой задачи. В этом контексте система Delphi представляется средой, близкой к идеальной. Комфортное место разработчика сочетается с множеством технологий, интегрированных в среду, причём для перехода, допустим, к новой технологии доступа к данным не требуется изучать никаких новых методик. Требуется понимание базовых принципов системы, а весь вспомогательный код будет сгенерирован Delphi автоматически.

Слева - Инспектор объектов. В нём задаются свойства составляющих нашу программу компонентов. И наконец, в центре одно над другим два окна Delphi, окно формы будущей программы и окно программной начинки. Прямо перед нами - окно, которое в Delphi называется Форма. Именно Форма является визуальным прообразом будущей программы.

1.3. Типы данных.

Данные в компьютере можно рассматривать как ячейки памяти, имеющие свои имена (идентификаторы). Все данные в программе на языке Delphi должны быть описаны до их первого использования. И компилятор следит, чтобы в программе они использовались в соответствии с этим описанием, что позволяет избежать ошибок.

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

Место описания данных в программе - вне логических блоков begin / end. В модуле перед ключевым словом implementation есть блок описания:

var

Form1: TForm1;

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

Команда объявления переменных в языке Delphi:

var имя_переменной : тип_переменной ;

Слово var - ключевое. Именем может быть любой идентификатор, если он не был  описан ранее и не является одним  из ключевых или зарезервированных  слов языка Delphi. Если нужно описать несколько переменных одного типа, то их перечисляют, отделяя запятой:

var A, B, C : Integer;

Если несколько описаний следуют  друг за другом, то ключевое слово var повторно можно не указывать:

var A, B : Integer;

C, D : String;

Постоянную величину иначе называют константой. Конечно, в программе можно использовать числа и строки непосредственно: 3.1415 или 'Это значение числа пи', но иногда удобнее присвоить их идентификатору.

Описание констант аналогично описанию переменных, но используется ключевое слово const, за именем идентификатора следует тип, затем знак равенства и его значение. Причём тип константы допускается не указывать:

const pi=3.1415 ;

ZnakPi : String = 'Это значение числа  пи';

К слову, константа Pi встроенная в Delphi, то есть для того чтобы использовать в Delphi число 3,1415... в расчётах, нужно просто присвоить встроенную константу Pi переменной типа Real или просто использовать непосредственно в выражениях.

Строкой называется последовательность символов, заключённая в одиночные  кавычки:

'это текстовая строка'

Если текст должен содержать сам символ кавычки, то его надо повторить дважды:

'это '' - символ одиночной кавычки'

Строка может быть и пустой, не содержащей символов. Тогда она состоит  из двух идущих друг за другом без пробела  кавычек. Естественно, строка может  состоять и только из одних пробелов.

Самый популярный строковый  тип - String. Строка типа String может содержать  переменное количество символов объёмом  до 2 Гбайт. Если нужно ограничить размер строки фиксированным значением, то после ключевого слова String в квадратных скобках указывается число, определяющее количество символов в строке: String[50].

Одиночный символ имеет  тип Char и записывается в виде знака  в одиночных кавычках: 'a'. Есть символы, которые на экране отобразить невозможно, например, символ конца строки (равен #13), символ переноса строки (равен #10). Такие символы записываются в виде их числового кода (в кодировке ANSI), перед которым стоит знак #. Например, #0. 
Наконец, существуют так называемые нуль-терминированные строки. Отсчёт символов в таких строках начинается с нуля, а заканчивается символом с кодом 0 (#0). Такие строки имеют тип PChar.

Числа бывают целые и  дробные.

В следующей таблице  перечислены стандартные типы целых  чисел и соответствующие им дипазоны допустимых значений.

Integer

-2147483648 .. +2147483647

Cardinal

0 .. 4294967295

Shortint

-128 .. +127

Smallint

-32768 .. +32767

Int64

-263 .. +263-1

Byte

0 .. +255

Word

0 .. +65535



Наиболее удобным для  использования в программах является тип Delphi Integer. Другие целые типы используются для уменьшения места, занимаемого данными в памяти компьютера.

Дробные числа имеют  дробную часть, отделяемую десятичной точкой. Допускается использование  символа e (или E), за которым следует  число, указывающее, что левую часть  нужно умножить на 10 в соответствующей степени: 5e25 - пять умножить на десять в двадцать пятой степени.

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

Real

5*10-324 .. 1.7*10308

Real48

2.9*10-39 .. 1.7*1038

Singl

1.5*10-45 .. 3.4*1038

Double

5*10-324 .. 1.7*10308

Extended

3.6*10-4951 .. 1.1*104932-1

Comp

-263 .. +263-1

Currency

922337203685477.5807



Наиболее удобным для  использования в программах является тип Delphi Real. Ему эквивилентен тип Double, но в будущем это может быть изменено. Вычисления с дробными числами  выполняются приближённо, за исключением  типа Currency (финансовый), который предназначен для минимизации ошибок округления в бухгалтерских расчётах.

Следующим типом данных является логический Boolean, состоящий  всего из двух значений: True (Истина) и False (Ложь). При этом True > False.

В Delphi информацию перед выводом, как правило, необходимо преобразовывать. Так как присвоение возможно только между переменными одного типа, то такая программа:

var A, B, C: Integer ;

begin

A := 5 ;

B := 10 ;

C := A+B ;

Label1.Caption := C ;

end ;

вызовет ошибку, так как свойство Caption имеет текстовый тип String, а использованные переменные - цифровой тип Integer. Значит, нужно преобразовать значение переменной C в текстовый тип. Для этого есть встроенная функция IntToStr. Строка в нашей "программе", вызывавшая ошибку, должна выглядеть так:

Label1.Caption := IntToStr(C) ;

Такая программа, кроме  показа числа 15, ни на что не способна. Мы должны научиться вводить в  программу другие числа. Используем компоненты Edit. Введённые числа будут  содержаться в свойстве Text этих компонентов. Расположим на форме два компонента Edit, один компонент Label и кнопку Button, по нажатию на которую и будем проводить вычисления. В компоненты Edit1 и Edit2 будем вводить числа для суммирования. Чтобы переместиться в редактор кода, щёлкнем дважды по нашей кнопке Button1. Мы попадём прямо в сформированную для нас средой Delphi заготовку обработчика нажатия на кнопку, непосредственно между операторами begin и end. Напишем такой простой код:

procedure TForm1.Button1Click(Sender: TObject);

var A, B, C: Integer;//Не забудьте описание переменных

begin

//Начало кода:

A := Edit1.Text;

B := Edit2.Text;

C := A+B;

Label1.Caption := IntToStr(C);

//Конец кода

end ;

При попытке исполнить  этот код Delphi покажет ошибки по аналогичной  причине - переменные A и B имеют цифровой тип Integer, а свойство Text - текстовый тип String. Исправить ошибки поможет встроенная функция StrToInt, выполняющая обратное преобразование - текст в целое число. Операторы присвоения переменным A и B должны выглядеть так:

A := StrToInt(Edit1.Text);

B := StrToInt(Edit2.Text);

В данном случае переменные A, B, C использовались для наглядности. Можно обойтись одной строчкой:

Label1.Caption:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text));

Аналогично, имеются функции  и для преобразования в строку и обратно действительных чисел c плавающей (Floating англ.) запятой, имеющих тип Real. Для преобразования в строку - FloatToStr, обратно - StrToFloat.

 

Глава 2. Построение календаря.

2.1. Создание  формы календаря.

Поместим на форму компоненты,  расположенные на вкладке Samples: календарь (Calendar) и поле ввода со стрелками SpinEdit. Мы используем их для создания приложения, позволяющего установить системную дату и просмотреть календарь за любой месяц. Также поместим список ComboBox, три надписи Label и пять кнопок Button.

 Приложение будет  обрабатывать события:

  • Form1: OnCreate;
  • Calendar1, ComboBox1, SpinEdit1: OnChange;
  • Button1, … Button5: OnClick.

 Разместите компоненты  примерно так: 

 Интерфейс нашего  приложения интуитивен: в календаре  пользователь может выбрать дату отображенного месяца, из списка выбрать месяц для отображения, а с помощью поля со стрелками ввести год. Нажатие на кнопку «Сегодня» прокручивает календарь до месяца, содержащего текущую системную дату, а кнопка «Установить», наоборот, устанавливает дату, выбранную в календаре, в качестве текущей.

Кнопки « << » и  « >> » прокручивают календарь  на один месяц назад и вперед соответственно.

2.2. Листинг программы

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, DateUtils, StdCtrls, Spin, Grids, Calendar;

type

  TForm1 = class(TForm)

    Calendar1: TCalendar;

    SpinEdit1: TSpinEdit;

    ComboBox1: TComboBox;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Label1: TLabel;

    Button4: TButton;

    Button5: TButton;

    Label2: TLabel;

    Label3: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Calendar1Change(Sender: TObject);

    procedure SpinEdit1Change(Sender: TObject);

    procedure ComboBox1Change(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

const

    C2 : array [0..11] of String = ('крысы','коровы','тигра',

                                   'зайца','дракона','змеи',

                                   'лошади','овцы','обезьяны',

                                   'курицы','cобаки','свиньи');

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var I: Integer;

begin

Form1.Caption := 'Календарь';

Button1 .Caption := '&<<';

Button2.Caption := '&Сегодня';

Button3 .Caption := '&>>';

Button1.Width := 25;

Button3.Width := 25;

Button4.Caption := '&Установить';

Button5.Caption := '&Готово';

Label1.Font.Style :=[fsBold];

// Задаем номер первого  дня в неделе (1 = понедельник)

Calendar1.StartOfWeek := 1;

SpinEdit1.MinValue := 1;

SpinEdit1.MaxValue := 9999;

// Заполняем список  названиями месяцев

for I := 1 to MonthsPerYear do

ComboBox1.Items.Add(LongMonthNames[I]);

Button2Click(Sender);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Calendar1.CalendarDate := Now;

end;

procedure TForm1.Calendar1Change(Sender: TObject);

var

Tmp : String;

begin

// Выводим во вспомагательную  строку дату, выбранную в календаре

// В собственном формате

Tmp:=FormatDateTime ('dddd d mmmm yyyy', Calendar1.CalendarDate);

// Вспомогательную строку  отображаем в надписи

Label1.Caption := 'Дата: ' + Tmp;

// Прокручиваем список  до выбраного месяца

// (месяцы в календаре  нумеруются от 1, а элементы

// списка — от 0, поэтому  вычитаем 1)

ComboBox1.ItemIndex :=Calendar1.Month - 1;

// Прокручиваем поле  со сткрелками до выбраного  года

SpinEdit1.Value:= Calendar1.Year;

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

//    Прокручиваем  календарь до года, выбраного  в SpinEdit

Calendar1.Year := SpinEdit1.Value;

if ((Calendar1.Year-1996)/4)=int((Calendar1.Year-1996)/4) then Label2.Caption:='високосный год'

   else Label2.Caption:='невисокосный год';

Label3.Caption:='Год '+C2[(Calendar1.Year-4) mod 12];

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

// Прокручиваем календарь  до месяца, выбраного в списке

Calendar1.Month := ComboBox1.ItemIndex + 1;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Calendar1.PrevMonth;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Calendar1.NextMonth;

end;

procedure TForm1.Button4Click(Sender: TObject);

var SysTime: TSystemTime;

TmpTime: TdateTime;

begin

// Сохраняем в SysTime системную дату и время

GetSystemTime (SysTime);

TmpTime := SystemTimeToDateTime (SysTime);

// Заменяем часть "дата" датой, выбранной в календаре

ReplaceDate(TmpTime, Calendar1.CalendarDate);

// Преобразуем обратно в SystemTime

DateTimeToSystemTime (TmpTime, SysTime);

// Устанавливаем новым  системным временем

SetSystemTime (SysTime);

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

Close;

end;

end.

2.3. Описание  используемых функций.

Для получения системного времени мы использовали функцию GetSystemTime из Windows API исключительно для иллюстрации  преобразования типов: в Delphi существует функция Now аналогичного назначения, но возвращающая результат типа TDateTime.

 Функция SetSystemTime возвращает  значение логического типа (True в  случае успеха), которое мы никак  не проверяем, хотя в реальном  приложении выполнять проверку  обязательно: установка системного времени могла завершиться неудачей, например, из-за того, что у пользователя, за¬пустившего приложение, недостаточно полномочий.

 В методе TForm1. FormCreate мы для наглядности вместо  константы 12 использовали константу  MonthsPerYear, объявленную в модуле DateUtils, ради которой мы этот модуль и подключаем. Эта константа появилась в Delphi начиная с версии 6, а для предыдущих версий (или для того, чтобы вычеркнуть модуль DateUtils из секции Uses) ее нужно объявить:

Код:

const Months PerYear=12;

Чтобы определить, високосный это год или нет, используется функция IsLeapYear. Функция IsLeapYear возвращает True, если данное календарное значение является високосным годом. Год может иметь значение 0.. 9999.

 

 

Заключение

 

Язык программирования Delphi 7 относится к языкам высокого уровня. Выделяются несколько базовых понятий в Delphi 7, такие как объекты, классы и методы. Этот язык прост в оперировании и широко используется для создания программ разного типа сложности.

Данный язык программирования поддерживает принципы объектно-ориентированного языка программирования. Это новый подход к программированию сложных программ, который включает в себя лучшие идеи структурного программирования и модульного. Этот метод позволяет разложить проблему на составные части. Каждая составная часть становится самостоятельным объектом, который содержит коды и данные. Программирование в целом упрощается, и программист получает возможность оперировать большими по объему программами.

В данной контрольной  работе была поставлена задача: разработка календаря.

При решении поставленной задачи были изучены такие возможности, как: создавать собственные модули, вызывать процедуры и функции из других модулей, получила навыки в создании собственных объектов, также изучена работа с графикой, с основными графическими инструментами среды программирования Delphi.

Данная работа выполнялась  на компьютере, на котором установлена  операционная система Microsoft Windows 7 Максимальная.

Компьютер имеет достаточную  производительность и емкость внешней  памяти для функционирования ОС Microsoft Windows XP и программного обеспечения, а также оснащен мышью, клавиатурой и монитором с разрешением не менее 1024 на 768.

 

Список литературы

 

  1. Delphi 2007. Алгоритмы и программы: О. В. Чеснокова — Москва, НТ Пресс, 2008 г.- 368 с.
  2. Нил Дж. Рубенкинг. Язык программирования Delphi для «чайников». Введение в Borland Delphi 2006 = Delphi for Dummies. — М.: Диалектика, 2007. — 336 с.
  3. Осваиваем Delphi Win32: С. А. Любавин — Москва, НТ Пресс, 2008 г.- 576 с.
  4. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi (+ CD-ROM): А. Я. Архангельский — Санкт-Петербург, Бином-Пресс, 2007 г.- 1248 с.
  5. Программирование в Turbo Pascal. Переход к Delphi (+ CD-ROM): Ю. А. Шпак — Москва, МК-Пресс, 2006 г.- 416 с.
  6. Программирование на Delphi Win32: С. А. Любавин — Москва, НТ Пресс, 2008 г.- 576 с.
  7. Самоучитель Delphi 7 Studio: Вячеслав Понамарев — Санкт-Петербург, БХВ-Петербург, 2003 г.- 504 с.
  8. Учимся программировать на Delphi 2007: О. В. Чеснокова — Санкт-Петербург, НТ Пресс, 2008 г.- 368 с.
  9. Хавьер Пашеку. Программирование в Borland Delphi 2006 для профессионалов = Delphi for .NET Developer’s Guide. — М.: Вильямс, 2006. — 944 с.

Календарные задачи