Разработка алгоритма программы 'Таймер' на языке программирования C++
Департамент
образования и науки Приморского края
Краевое
государственное бюджетное образовательное учреждение
среднего
профессионального образования
«Находкинский
государственный гуманитарно-политехнический колледж»
КУРСОВАЯ
РАБОТА (ПРОЕКТ)
По
дисциплине: Системное программирования
На
тему: «Разработка алгоритма программы «Таймер» на языке программирования C++
Студента Соловьева
Евгения Андреевича
Группа 731 специальность 230115 Программирование
в компьютерных системах
Находка
2013
Содержание
Введение
Раздел
1. Теоретическая часть
1.1
Язык программирование C++
1.2
Среда программирования Embarcadero RAD Studio
Раздел
2. Практическая часть
2.1
Создание окна, которое отображает системную дату и время
2.2
Разработка приложения таймер с функциями
2.2.1
Выполнение выбранного действия в определенный промежуток времени заданный
пользователем
2.2.2Выполнение
выбранного действия через определенный промежуток времени заданный
пользователем
.
Руководство программиста
.
Руководство пользователя
Заключение
Список
использованных источников
Приложение
А. Программный Листинг
Введение
В современном мире язык программирования Си
(C++) широко используется для разработки программного обеспечения, а также это
язык программирования высокого уровня, который хорошо известный своей
эффективностью, экономичностью, и переносимостью. Ведь первые Операционные
системы были написаны именно на языке Си. Область его применения включает
создание операционных систем, разнообразных прикладных программ, драйверов
устройств, приложений для встраиваемых систем, высокопроизводительных серверов,
а также развлекательных приложений (игр).
Цель данной курсовой работы - является
систематизация, углубление и активное применение знаний по системному
программированию, закрепление знаний, полученных в лекционном курсе, а также на
практических занятиях.
Достижение цели обеспечивается решением
следующей задачи:
Разработка приложения «Таймер» при помощи
динамических библиотек С++
Использование полученных знаний на лекционном
курсе
Раздел 1. Теоретическая часть
.1 Язык программирование C++
Для разработки программы применялся язык
программирования C++ .
Язык программирования С++ был разработан на
основе языка Си Бьярном Страуструпом (Bjarne Stroustrup) и вышел за пределы его
исследовательской группы в начале 80-х годов. Язык С++ является надмножеством
языка Си, поэтому программы, написанные на языке Си могут обрабатываться
компилятором языка С++. В программах на языке С++ можно использовать тексты на
языке С и обращаться к библиотечным функциям языка Си. Язык С++ был создан с
учетом следующих целей: улучшить язык Си, поддержать абстракцию данных и
обеспечить объектно-ориентированное программирование.
Объектно-ориентированное программирование (ООП)
- это новый подход к созданию программ. ООП аккумулирует лучшие идеи,
воплощенные в структурном и модульном программировании, и сочетает их с новыми
мощными концепциями, которые позволяют оптимально организовывать программы. ООП
позволяет разложить проблему на составные части наиболее естественным способом
с учетом иерархии взаимосвязей. Каждая часть становится самостоятельным
объектом, содержащим свои собственные данные, операции и функции, которые
относятся к этому объекту. В результате процесс составления программ упрощается
и программист получает возможность оперировать с большими по объему
программами. Одна из главных особенностей ООП - это возможность определять
новые типы данных так, что их использование ничем не будет отличаться от
использования встроенных в язык типов данных. Новые типы данных должны в
большей мере соответствовать понятиям той прикладной области, для которой
разрабатывается программа, чем встроенные типы, ориентированные на архитектуру
компьютера.
Рассмотрим достоинства языка программирования
C++:
Высокая совместимость с языком Си
Поддержка различных стилей программирования
Вычислительная производительность
Недостатки:
Синтаксис, провоцирующий ошибки
Некоторые преобразования типов неинтуитивны
Плохая поддержка модульности
Основные среды
языка
C++: Visual C++, C++ Builder, Borland C++, Embarcadero RAD Studio.
Таким образом, для разработки программы была
выбрана среда программирования Embarcadero RAD Studio. Embarcadero RAD Studio
была выбрана последующим возможностям:
подключение к локальным базам данных InterBase®,
Blackfish™ SQL и MySQL в Delphi и C++Builder;
подключение к базам данных в VisualStudio с
помощью ADO.NET, включая подключение к локальным базам данных InterBase и
Blackfish в DelphiPrism;
развертывание Blackfish SQL в системах с одним
пользователем и размером базы данных 512 МБ;
веб-библиотеку VCL с ограничением числа
подключений (не более пяти);
набор характеристик и средств аудита кода
начального уровня, помогающих проанализировать стиль программирования и
состояние проекта;
визуализацию кода с использованием UML, упрощающую
анализ исходного кода благодаря визуальному представлению.
1.2 Среда программирования Embarcadero RAD
Studio
® RAD Studio 2010 - это комплексное решение для
быстрой разработки приложений Windows®, .NET, веб-приложений и приложений баз
данных. Оно включает в себя Delphi®, C++Builder® и Delphi ®Prism™, позволяя
создавать приложения для различных платформ Windows и баз данных до 5 раз
быстрее. Инструменты RAD Studio значительно ускоряют создание приложений для
настольных компьютеров, рабочих станций, сенсорных дисплеев, информационных
терминалов и Интернета, поэтому их использует уже более 2 миллионов
разработчиков. В состав этих средств входят быстрые компиляторы, визуальная
среда для разработки приложений с пользовательским интерфейсом, платформа визуальных
компонентов (VCL), а также обширные возможности для подключения к базам данных
и службам
Также RAD Studio работает со всеми типами баз
данных, архитектур и протоколов.
Платформа RAD Studio DataSnap® и драйверы
доступа к данным dbExpress™ позволяют создать одну систему и с ее помощью легко
получать доступ к различным источникам данных. При этом обеспечивается
поддержка специфических функций баз данных разных поставщиков без ухудшения их
производительности и управляемости. В то время как другие средства быстрой
разработки рассчитаны на определенную базу данных или архитектуру, либо
используют "универсальные" методы подключения к данным, которые
ограничивают производительность и возможности управления, открытая среда RAD
Studio обладает гибкостью и эффективностью, необходимыми для создания
высококачественных приложений.
Основные возможности для разработки приложений
Windows:
Интегрированная среда разработки Delphi и
C++Builder с функцией перетаскивания мышью
Более 250 компонентов в VCL (Библиотека визуальных
компонеентов (Visual Component Library) - объектно-ориентированная библиотека)
Встроенная поддержка касаний и жестов (более 30
готовых жестов)с поддержкой 9 основных баз данных, включая InterBase®
Многоуровневое промежуточное ПО DataSnap с
поддержкой JSON, REST, HTTP, COM и XML
Возможность отладки многопоточных
приложений/аудит кода и учет показателей
Единая система для работы с Windows 2000,
Windows Xp, Windows Vista и Windows 7
Основные возможности для разработки приложений
.NET:
Язык программирования Delphi Prism для .NET
Включена интегрированная среда разработки на
основе Visual Studio либо установка в Visual Studio
Поддержка новейших технологий .NET
Стандартное подключение к базам данных с помощью
ADO.NET, платформа dbExpress для баз данных InterBase и Blackfish SQL
Разработка клиентов DataSnap .NET
Разработка веб-приложений с помощью ASP.NET
Раздел 2. Практическая часть
.1 Создание окна, которое отображает системную
дату и время
Для создания этого окна использовались
компоненты GroupBox и Label.
Рисунок 2.1 Окно, отображающее системную дату и
время
Листинг 2.1 Отображение текущей даты и время
void __fastcall
TForm1::Timer1Timer(TObject *Sender)
{->Caption = TimeToStr(Time());
// показать
текущее
время->Caption
= DateToStr(Now()); //показать
дату(DayOfWeek(Now())
== 1) {Label7->Caption= "Воскресенье";}(DayOfWeek(Now())
== 2) {Label7->Caption = "Понедельник";}(DayOfWeek(Now())
== 3) {Label7->Caption = "Вторник";}(DayOfWeek(Now())
== 4) {Label7->Caption = "Среда";}(DayOfWeek(Now())
== 5) {Label7->Caption = "Четверг";}(DayOfWeek(Now())
== 6) {Label7->Caption = "Пятница";}(DayOfWeek(Now())
== 7) {Label7->Caption = "Суббота";}
2.2 Разработка приложения таймер с функциями
2.2.1 Выполнение выбранного действия в
определенный промежуток времени заданный пользователем
Для разработки окна этой функции использовались
компоненты GroupBox, button, label и timepicker. В этой функции задавался
определенный промежуток времени и выбиралось одно из представленных действий
(рисунок 2.2.1). После того как системное время совпадало с заданным, программа
выполняла выбранное действие и издавала звуковой сигнал.
Рисунок 2.2.1 Окно в котором выбирается действие
и задается время
Листинг 2.2.1 Выполнение выбранного действия в
определенный промежуток времени заданный пользователем
oid __fastcall
TForm1::Timer3Timer(TObject *Sender)
{=StrToInt(FormatDateTime("hh",
Time()));=StrToInt(FormatDateTime("nn",
Time()));=StrToInt(FormatDateTime("ss", Time()));
// …получим
текущее
время
системы
…=StrToInt(FormatDateTime("hh",
Form1->timepicker->Time));=StrToInt(FormatDateTime("nn",
Form1->timepicker->Time));=StrToInt(FormatDateTime("ss",
Form1->timepicker->Time));
// Время срабатывания будильника, которое задал
пользователь(Button2->Enabled == false) { //Если ктопка "Старт" не
видимая, то
if (iHours == iAlarmHours
&&== iAlarmMinutes &&
iSeconds == iAlarmSeconds)
{ // и если оно совпало с заданным временем
пользователем…
MediaPlayer1->Play(); // проигрываем
мелодию(RadioGroup1->ItemIndex)
{0: {ShellExecute(NULL, "open", "mspaint.exe", NULL, NULL,
SW_SHOWNORMAL);break;}1: {ShellExecute(NULL, "open",
"notepad.exe", NULL, NULL, SW_SHOWNORMAL);break;}2: {ShellExecute(NULL,
"open", "calc.exe", NULL, NULL, SW_SHOWNORMAL);break;}3:
{ShellExecute(NULL, "open", "wmplayer.exe", NULL, NULL,
SW_SHOWNORMAL);break;}4: {ShellExecute(NULL, "open",
"#"787598.files/image003.gif">
Рисунок 2.2.2 Окно в котором выбирается действие
и задается время
Листинг 2.2.2 Выполнение выбранного действия
через определенный промежуток времени заданный пользователем
void __fastcall
TForm1::Timer2Timer(TObject *Sender)
{(StrToInt(Edit5->Text)>0)
{->Text = IntToStr(StrToInt(Edit5->Text)-1);
}(Edit5->Text <= 0
&&(Edit4->Text)>0)
{->Text =
StrToInt(Edit4->Text)-1; //добавлено
StrToInt - было:
"59" is not valid date and time
Edit5->Text = 59; // Поле "секунды"
- без изменений
}
// Обратый отсчет, и проверка значения в
"Еdit4"
if (Edit4->Text <= 0
&&(Edit3->Text)>0)
{->Text =
StrToInt(Edit3->Text)-1; //добавлено
StrToInt // Поле "секунды"
Edit4->Text = 60; // было 59 - но 1 час = 60
минут, так и стартуем // Поле "минуты"
}(Edit3->Text == 0 && // Поле
"секунды"
Edit4->Text == 0 && // Поле
"минуты"->Text == 0) // Поле "секунды"
{ // если значения в таймере равны 0, то
Timer2->Enabled=false;->Play();
// проигрываем
мелодию(RadioGroup1->ItemIndex)
{0: {ShellExecute(NULL, "open", "mspaint.exe", NULL, NULL,
SW_SHOWNORMAL);break;}1: {ShellExecute(NULL, "open",
"notepad.exe", NULL, NULL, SW_SHOWNORMAL);break;}2:
{ShellExecute(NULL, "open", "calc.exe", NULL, NULL,
SW_SHOWNORMAL);break;}3: {ShellExecute(NULL, "open",
"wmplayer.exe", NULL, NULL, SW_SHOWNORMAL);break;}4:
{ShellExecute(NULL, "open", "#"787598.files/image004.gif">
Рисунок 3.1 Окно в котором выбрали действия и
задали время
А также если пользователь желает, чтобы действие
выполнилось через определенное время. То нужно выбрать действие и задать время,
через которое будет запускаться, как это показано на Рисунке 3.2
Рисунок 3.2 Окно в котором выбрали действия и
задали время
Заключение
При выполнении данной работы, потребовались
знания языка программирования. В ходе написания программы требовалось
обращаться к дополнительным источникам, чтобы разобраться с важными аспектами
программирования, которые помогли создать приложение.
В целом данная работа помогла лучше освоить язык
С++ и улучшить свои навыки программирования.
Список использованных источников
Б.
Пахомов - C/C++ и MS Visual C++ 2008 для начинающих; БХВ-Петербург; 2008 - 624с
Герберт
Шилдт
- C++ from the Ground Up; Вильямс;
2008 - 624 с
Давыдов
В.Г.
Visual C++. Разработка Windows-приложений с помощью MFC и
API-функций. - СПб: БХВ-Петербург, 2008.
Дж.
Коплиен - Программирование на C++; Питер; 2005 - 408 с
Дж.
Либерти - Освой самостоятельно C++; 2099 - 820 с
Дьюхерст
С.С. - C++. Священные знания. 2-е издание, исправленное; 2012 - 240 с
Зиборов
В.В - MS Visual C++ 2010 в среде .NET; 2012 - 320 с
Лаптев
В.В. - C++. Объектно-ориентированное программирование; Питер; 2008 - 464 с
Макс
Шлее - Профессиональное программирование на C++; БХВ - Петербург; 2009 - 896с
Мэтью
Уилсон - Расширение библиотеки STL для С++; ДМК Пресс, Б-П; 2008 - 608 с
Н.А.
Литвиненко - Технология программирования на C++. Win32 API-приложения;
БХВ-Петербург - 2010, 288с
Паола
Франка - С++. Учебный курс; Питер; 2012 - 496 с
Паола
Франка - С++. Учебный курс; Питер; 2012 - 496 с
Пахомов
Б - Самоучитель C/C++ и C++ Builder; БХВ-Петербург; 2008 - 670 с
Прохоренок
Н.А. - Программирование на C++ в VisualStudio 2010 Express; 2010 - 229 с
Роберт
Лафоре - Объектно - ориентированное программирование в С++; Питер; 2011 - 928 с
Роберт
Лафоре - Объектное - ориентированное программирование в С++; Питер; 2011 - 928
с
Саммерфилд
М. - Qt. Профессиональное программирование. Разработка кроссплатформенных
приложений на C++; 2011 - 560 с
Степаненко
О.Е. - Visual C++/NET. Классика программирования; 2010 - 768 с
Стефан
Рэнди Дэвис - С++ для «чайников»; Диалектика, Вильямс; 2009 - 336 с
Стивен
Прата - Язык программирования С++. Леции и упражнения; Вильямс; 2012 - 1248 с
Стивен
Прата - Язык программирования С++. Леции и упражнения; Вильямс; 2012 - 1248 с
Страуструп
Б - Язык программирования C++; Бином - 2011, 1136
Уоллес
Вонг - Основы программирования для «чайников»; М. - ООО "И.Д.
Вильямс"; 2008 - 336 с
Приложение А. Программный Листинг
.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------("Unit1.cpp",
Form1);
//---------------------------------------------------------------------------Win
Main(HINSTANCE, HINSTANCE, LPSTR, int)
{
{>Initialize();>CreateForm(__classid(TForm1),
&Form1);>Run();
}(Exception &exception)
{>ShowException(&exception);
}(...)
{
{Exception("");
}(Exception &exception)
{>ShowException(&exception);
}
}0;
}
//---------------------------------------------------------------------------.cpp
//---------------------------------------------------------------------------
#include <sys/timeb.h>
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*Form1;; // Таймер
включён;
// Текущий
час.;
// Текущая
минута.;
// Текущая
секунда;
// Час
оповещения.;
// Минута
оповещения.;
// Секунда
оповещения
//---------------------------------------------------------------------------
__fastcall
TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TForm1::FormCreate(TObject *Sender)
{->Position =
poDesktopCenter;->Width = 265;->Visible = false; // скрываем
плеер->FileName
= "alarm.mp3"; // указываем
плееру
файл
MediaPlayer1->Open(); // и открываем его для
проигрывания
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button2Click(TObject *Sender)
{->Enabled=false; // Кнопка
"Старт"
невидима
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button3Click(TObject *Sender)
{=false; // Выключить
будильник->Enabled=true;>Time=StrToTime("0:00:00");
// Сброс
на
ноль.
}
//---------------------------------------------------------------------------__fastcall
TForm1::Timer3Timer(TObject *Sender)
{=StrToInt(FormatDateTime("hh",
Time()));=StrToInt(FormatDateTime("nn",
Time()));=StrToInt(FormatDateTime("ss", Time()));
// …получим
текущее
время
системы
…=StrToInt(FormatDateTime("hh",
Form1->timepicker->Time));=StrToInt(FormatDateTime("nn",
Form1->timepicker->Time));=StrToInt(FormatDateTime("ss",
Form1->timepicker->Time));
// Время срабатывания срабатывания будильника,
которое задал пользователь(Button2->Enabled == false) { //Если кнопка
"Старт" не видимая, то
if (iHours ==
iAlarmHours&&== iAlarmMinutes&&
iSeconds == iAlarmSeconds)
{ // и если оно совпало с заданным временем
пользователем…
MediaPlayer1->Play(); // проигрываем
мелодию(RadioGroup1->ItemIndex)
{0: {ShellExecute(NULL, "open", "mspaint.exe", NULL, NULL,
SW_SHOWNORMAL);break;}1: {ShellExecute(NULL, "open",
"notepad.exe", NULL, NULL, SW_SHOWNORMAL);break;}2:
{ShellExecute(NULL, "open", "calc.exe", NULL, NULL,
SW_SHOWNORMAL);break;}3: {ShellExecute(NULL, "open",
"wmplayer.exe", NULL, NULL, SW_SHOWNORMAL);break;}4:
{ShellExecute(NULL, "open", "http://www.microsoft.com",
NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button1Click(TObject *Sender)
{(0); // Выход
с
программы
}
//---------------------------------------------------------------------------__fastcall
TForm1::Timer1Timer(TObject *Sender)
{->Caption = TimeToStr(Time());
// показать
текущее
время->Caption
= DateToStr(Now()); //показать
дату(DayOfWeek(Now())
== 1) {Label7->Caption= "Воскресенье";}(DayOfWeek(Now())
== 2) {Label7->Caption = "Понедельник";}(DayOfWeek(Now())
== 3) {Label7->Caption = "Вторник";}(DayOfWeek(Now())
== 4) {Label7->Caption = "Среда";}(DayOfWeek(Now())
== 5) {Label7->Caption = "Четверг";}(DayOfWeek(Now())
== 6) {Label7->Caption = "Пятница";}(DayOfWeek(Now())
== 7) {Label7->Caption = "Суббота";}
}
//---------------------------------------------------------------------------__fastcall
TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button)
{(Button == Comctrls::btNext)
{->Text = IntToStr(StrToInt(Edit3->Text)+1);
}(Button == Comctrls::btPrev)
{->Text = IntToStr(StrToInt(Edit3->Text)-1);
// Изменение значения в поле "Edit1"
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::UpDown4Click(TObject *Sender, TUDBtnType Button)
{(Button == Comctrls::btNext)
{->Text = IntToStr(StrToInt(Edit4->Text)+1);
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::UpDown5Click(TObject *Sender, TUDBtnType Button)
{(Button == Comctrls::btNext)
{->Text = IntToStr(StrToInt(Edit5->Text)+1);
}(Button == Comctrls::btPrev)
{->Text = IntToStr(StrToInt(Edit5->Text)-1);
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::Timer2Timer(TObject *Sender)
{(StrToInt(Edit5->Text)>0)
{->Text = IntToStr(StrToInt(Edit5->Text)-1);
}(Edit5->Text <= 0
&&(Edit4->Text)>0)
{->Text =
StrToInt(Edit4->Text)-1; //добавлено
StrToInt - было:
"59" is not valid date and time
Edit5->Text = 59; // Поле "секунды"
- без изменений
}
// Обратный отсчет, и проверка значения в
"Еdit4"
if (Edit4->Text <= 0
&&(Edit3->Text)>0)
{->Text = StrToInt(Edit3->Text)-1;
//добавлено
StrToInt // Поле "секунды"
Edit4->Text = 60; // было 59 - но 1 час = 60
минут, так и стартуем // Поле "минуты"
}(Edit3->Text == 0 && // Поле
"секунды"
Edit4->Text == 0 && // Поле
"минуты"->Text == 0) // Поле "секунды"
{ // если значения в таймере равны 0, то
Timer2->Enabled=false;->Play();
// проигрываем
мелодию(RadioGroup1->ItemIndex)
{0: {ShellExecute(NULL, "open", "mspaint.exe", NULL, NULL,
SW_SHOWNORMAL);break;}1: {ShellExecute(NULL, "open",
"notepad.exe", NULL, NULL, SW_SHOWNORMAL);break;}2:
{ShellExecute(NULL, "open", "calc.exe", NULL, NULL,
SW_SHOWNORMAL);break;}3: {ShellExecute(NULL, "open",
"wmplayer.exe", NULL, NULL, SW_SHOWNORMAL);break;}4:
{ShellExecute(NULL, "open", "http://www.microsoft.com",
NULL, NULL, SW_SHOWNORMAL);break;}
}
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button4Click(TObject *Sender)
{->Enabled = true; // Включить второй таймер
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button5Click(TObject *Sender)
{->Enabled = false; //Выключить
второй
таймер
Edit5->Text = "0"; // Значению в
поле "секунды" присвоить 0->Text = "0"; // Значению в
поле "минуты" присвоить 0->Text = "0"; // Значению в
поле "часы" присвоить 0
}
//---------------------------------------------------------------------------.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------TForm1
: public TForm
{
__published:// IDE-managed
Components*Button1;*GroupBox1;*Label2;*Label3;*Label4;*Label5;*Label6;*Label7;*GroupBox2;*Label8;*Button2;*Button3;*timepicker;*GroupBox3;*Label9;*Button4;*Button5;*RadioGroup1;*Timer1;*Timer2;*Timer3;*Edit3;*UpDown3;*Edit4;*UpDown4;*Edit5;*UpDown5;*MediaPlayer1;__fastcall
Button2Click(TObject *Sender);__fastcall Button3Click(TObject
*Sender);__fastcall Timer3Timer(TObject *Sender);__fastcall
Button1Click(TObject *Sender);__fastcall Timer1Timer(TObject
*Sender);__fastcall Timer2Timer(TObject *Sender);__fastcall
UpDown3Click(TObject *Sender, TUDBtnType Button);__fastcall
UpDown4Click(TObject *Sender, TUDBtnType Button);__fastcall
UpDown5Click(TObject *Sender, TUDBtnType Button);__fastcall
Button4Click(TObject *Sender);__fastcall Button5Click(TObject
*Sender);__fastcallFormCreate(TObject *Sender);:// User declarations:// User
declarations
__fastcallTForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------PACKAGE
TForm1 *Form1;
//---------------------------------------------------------------------------
#endif