
Курсовой Проект C++
.pdf
|
пп |
пп |
Рисунок 41 - схема алгоритма получения размера |
Рисунок 40 - Схема |
калькулятора по размерам экрана. |
|
|
алгоритма вывода |
|
вертикальной границы |
|
калькулятора. |
|
21

3 - ОСОБЕННОСТИ РАЗРАБОТКИ ПРОГРАММЫ
Программа была написана на языке программирования C++ с использованием возможностей Windows API в среде программирования Visual Studio 2019 с пакетом Windows SDK 10.0.18362.0. Состоит из 5 классов, каждый из которых выполняет свою задачу. Проект содержит 11 файлов из которых 5 файлы исходного кода “.cpp” и еще 6 заголовочные файлы классов “.h”.
Структура проекта:
main.cpp
menu.h
menu.cpp
Author.h
Author.cpp
animation.h
animation.cpp
kinematicscalc.h
kinematicscalc.cpp
matchcalcs.h
matchcalcs.cpp
1.Главная функция “main.cpp” - вызов остальных подпрограмм.
2.Класс “menu” - Содержит алгоритмы главного и вложенного меню.
3.Класс “Author” - Содержит меню об авторе; родительский класс “menu”.
4.Класс “animation” - Заставка программы.
5.Класс “kinematicscalc” - Выполняет расчет и построение траектории шара.
6.Класс “matchcalcs” - Содержит подпрограмму “Калькулятор”.
22
4 - ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
Входные данные калькулятора траектории: Время полета шара; Дальность полета; Высота точки назначения;
Выходные данные калькулятора траектории: Таблица точек; Анимация полета шара;
Входные данные калькулятора: 1 или 2 числа double;
Проводимая операция; Выходные данные калькулятора траектории:
1 число double (Ответ);
Ввод данных вводимые в программу данные проверяются. Ошибки обрабатываются или игнорируются, в зависимости от вида ошибки ввода.
Вычисления выполняются с типом “double”, следовательно входные и выходные значения могут принимать значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Кроме того, время и высота калькулятора полета шара должно быть больше нуля, вводимые в калькулятор значения не должны вызывать алгебраическую ошибку (будут выведены сообщения об ошибках).
5 - ХАРАКТЕРИСТИКИ ПРОГРАММЫ
Требования:
Оперативная память 500 кб, а также память под консоль вывода от 8 мб. Операционная система “Windows XP” и старше.
Свободная память - 36 864 байт на диске .
23

6 - ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ
Запустите исполняемый файл “project.exe”. Откроется главное меню программы(рис.42).
Рисунок 42 - Главное меню программы Используя стрелки клавиатуры, необходимо выбрать интересующий пункт,
а затем нажать Enter для перехода.
Чтобы открыть калькулятор траектории полета шара, войдите во вложенное меню “Калькуляторы”, Выберете пункт “Кинематика”. Перед вами откроется меню запроса данных (Рис. 43). Введите реальные данные. Высота и время полета шара должны быть положительны.
Рисунок 43 - меню запроса данных для расчета траектории
24

После воспроизведения анимации перед вами откроется меню. Из 4 пунктов (Рис.44). Нажав соответствующую кнопку вы можете повторить анимацию, задать новые параметры , вывести таблицу точек или выйти в меню.
Рисунок 44 - Меню калькулятора кинематики.
Чтобы открыть калькулятор траектории полета шара, войдите во вложенное меню “Калькуляторы”, Выберете пункт “Калькулятор”. Перед вами откроется калькулятор (Рис. 45). Используйте стрелки и enter для управления.
Рисунок 45 - Калькулятор
25
8 - РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ
Программа расчета траектории протестирована, и результаты тестирования сведены в таблице ниже.
Таблица – Тестирование калькулятора траектории.
x |
y |
t |
Результат |
|
|
|
|
0 |
0 |
0 |
Сообщение о |
|
|
|
неверных данных |
|
|
|
|
1 |
1 |
1 |
Анимация полета |
|
|
|
|
0 |
0 |
10 |
Анимация полета |
|
|
|
|
-10000 |
0 |
30 |
Анимация полета |
|
|
|
|
0 |
-10 |
5 |
Сообщение о |
|
|
|
неверных данных |
|
|
|
|
Калькулятор протестирован, и результаты тестирования сведены в таблице
ниже.
Таблица – Тестирование калькулятора.
число 1 |
число 2 |
операция |
Результат |
|
|
|
|
1 |
0 |
деление |
Сообщение об |
|
|
|
ошибке |
|
|
|
|
10 |
10 |
умножение |
100 |
|
|
|
|
25 |
- |
корень |
5 |
|
|
квадратный |
|
|
|
|
|
10 |
- |
sin |
-0.544021 |
|
|
|
|
- |
- |
сброс |
пустое поле |
|
|
|
|
1000 |
2 |
деление |
500 |
|
|
|
|
26
ЗАКЛЮЧЕНИЕ
В данной курсовой работе разработаны алгоритмы консольного калькулятора и программы для расчета и демонстрации полета шара в указанную точку. Программа была реализована на языке C++ с использованием возможностей “Windows API”. Помимо этого, в программе присутствуют меню, информация об авторе и заставка. Цель курсового проекта была достигнута, все критерии соблюдены. В программе выполняются все необходимые функции.
Данная программа может быть полезна для проверки решения баллистических задач в физике.
27
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.Восходящее и нисходящее программирование: метод. указания /
ОмГТУ ;сост. О. П. Шафеева.– Омск : Изд-во ОмГТУ, 2015. – 1 эл. опт.
диск (CD-ROM).
2.Программирование на языке Си: Метод. указания / Сост. О. П. Шафеева,
Ю.Г. Каворина, Шукурова Г.С.: Изд-во ОмГТУ, 2008. - 72 с.
3.Системы программирования: Метод. указания / Сост. О.П. Шафеева, И.А.
Волчкова, С.А.Гончаров. - Омск: ОмГТУ, 2012. – 32 с.
28
ПРИЛОЖЕНИЕ A
void main()
{
menu menu; Author author;
animation animation; matchcalcs calc; kinematicscalc fiz; setlocale(LC_ALL, "");
HANDLE hwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hwnd, FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY); do {
system("cls");
menu.CursorVisible(false); switch (menu.screen)
{
case 0://главное меню menu.DrawMainMenu(); break;
case 1://доп меню menu.DrawSubMenu(); break;
case 2://об авторе author.AuthorMenu(); menu.screen = 0; break;
case 3://заставка animation.playAnimation(); menu.screen = 0;
break;
case 4://калькулятор calc.calc();
menu.screen = 1; break;
case 5://калькулятор кинематики menu.CursorVisible(true);
fiz.input(); menu.screen = 1; break;
}
} while (!menu.stopping);
}
void animation::motion()
{
switch (napr) //точка к которой стремится шар
{
case 1: //низ право Elipsposition.Y += 1; Elipsposition.X += 1;
if (Elipsposition.X >= window.right)
{
napr = 3; Beep(1000, 3);
}
if (Elipsposition.Y >= window.bottom)
{
napr = 2; Beep(1000, 3);
}
29
break;
case 2: //верх право
Elipsposition.X += 1; Elipsposition.Y -= 1;
if (Elipsposition.X >= window.right)
{
napr = 4; Beep(1000, 2);
}
if (Elipsposition.Y <= 0)
{
napr = 1; Beep(1000, 2);
}
break;
case 3: //низ лево Elipsposition.Y += 1; Elipsposition.X -= 1;
if (Elipsposition.X <= 0)
{
napr = 1; Beep(1000, 2);
}
if (Elipsposition.Y >= window.bottom)
{
napr = 4; Beep(1000, 2);
}
break;
case 4: //верх лево Elipsposition.X -= 1; Elipsposition.Y -= 1;
if (Elipsposition.X <= 0)
{
napr = 2; Beep(1000, 2);
}
if (Elipsposition.Y <= 0)
{
napr = 3; Beep(1000, 2);
}
break;
}
}
void animation::playAnimation()
{
system("cls"); do {
GetClientRect(hwnd, &window); motion();
SelectObject(hdc, pen);
Ellipse(hdc, Elipsposition.X - 20, Elipsposition.Y + 20, Elipsposition.X + 20, Elipsposition.Y - 20); Sleep(3);
} while (!_kbhit());
while (_kbhit()) _getch();
}
30