КУРСОВАЯ РАБОТА
Цель работы : закрепление теоретических знаний и практических навыков по умению разрабатывать программных приложений.
Тематика : разработка приложения на языках программирования высокого уровня, например, C++.
СОДЕРЖАНИЕ ОТЧЕТА ПО КУРСОВОЙ РАБОТЕ
Отчет по курсовой работе должен содержать следующие разделы:
1) титульный лист;
2) оглавление;
3) постановку задачи;
4) описание структуры программы;
5) спецификация процедур и функций;
6) схемы алгоритмов;
7) текст программы с комментариями;
8) тестовый пример и результаты работы программы.
Отчёт оформляется на листах формата A4 с обязательным титульным
листом, на котором указываются названием работы; ФИО исполнителя; ФИО
преподавателя и т.д.
Вторым листом идет лист задания на курсовую работу
Постановка задачи
Постановка задачи указывает, какая цель должна быть достигнута при разработке программы. Какую задачу должна решать программа, и в каких условиях будет функционировать. Сначала приводится задание согласно варианту. После чего описываются основные функции программы, строится
дерево функций и формируются требования к входным и выходным данным.
Функции программы желательно описать в виде дерева функций. Также дается эскиз интерфейса программы в графическом виде.
Структура программы
Необходимо описать структурные типы данных, которые используются в парограмме.Необходимо составить структурную схему программы, в которой будут указаны все подпрограммы анной программы, причем указаны так как они
вызываются внутри программы, т.е. если процедура А вызывает процедуру
В, то сначала рисуется процедура А, а под ней процедура В, после чего они
соединяются линией.
Спецификация процедур и функций
Все процедуры и функции программы должны быть подробно описаны в спецификации в виде таблицы.
Схемы алгоритмов
Приводятся схемы алгоритмов для каждой процедуры и функции и для основной программы.
Описание интерфейса взаимодействия с пользователем
содержит результаты работы программ.
Исходный текст программы
Исходный текст программы распечатывается и прилагается к отчёту.
Документирование и комментирование исходного текста
1. Все пользовательские типы данных должны быть
прокомментированы.
2 Все функции, классы и модули должны быть прокомментированы.
3 Каждый модуль (h или cpp) должен начинаться с
комментария, указывающего его назначение, автора, используемые алгоритмы.
4 Каждая нетривиальная функция должна предваряться комментарием, описывающим:
• назначение;
• входные данные;
• результаты.
5 В функциях, где соответствующее описание будет полезным, также
следует описать:
• предусловия;
• постусловия;
• инварианты.
ТИТУЛЬНИЙ ЛИСТ ТА ЗАВДАННЯ НА КУРОВУ РОБОТУ ПОВИННІ БУТИ ОБОВ‘ЯЗКОВО ОФРМЛЕНІ ЗГІДНО ВИМОГ, ЯКІ НАВЕДЕНІ НА САЙТІ.
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
Необходимо написать программу на языке С++ для табулирования функции и построения ее графика. Функция выбирается согласно варианту. При этом желательно использовать Windows Forms. Программа должна иметь следующие функциональные возможности:
1. Табулирование функции
2. Расчет функции при помощи ряда
3. Расчет функции при помощи рекурсии
4. Вывод результатов работы в таблицу
5. Построение графиков каждой из функций
6. Сохранение результатов в файл
7. Чтение результатов из файла
НА ОЦЕНКУ «А» НЕОБХОДИМО РЕАЛИЗОВАТЬ ВСЕ ОПИСАННЫЕ ПУНКТЫ.
НА ОЦЕНКУ «В» МОЖНО НЕ РЕАЛИЗОВЫВАТЬ ОДИН ИЗ ПУНКТОВ 2-3 ИЛИ 6,7.
НА ОЦЕНКУ «С» МОЖНО НЕ РЕАЛИЗОВЫВАТЬ ДВА ИЗ ПУНКТОВ 2-3 ИЛИ 6,7.
НА ОЦЕНКУ «D» МОЖНО НЕ РЕАЛИЗОВЫВАТЬ ТРИ ИЗ ПУНКТОВ 2-3 ИЛИ 6,7.
НА ОЦЕНКУ «Е» НУЖНО РЕАЛИЗОВАТЬ ПУНКТЫ 1,4,5.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНЬЯ
Основы работы с Visual Studio .NET
Microsoft Visual Studio .NET - это интегрированная среда разработки (Integrated Development Environment (IDE)) для создания, документирования, запуска и отладки программ, написанных на языках .NET. Это мощный инструмент профессиональной разработки сложных приложений, один из лучших во всем мире. Набор его функций чрезвычайно велик, сейчас мы рассмотрим его основные элементы. Другие пункты меню и управляющие окна будут описаны в тексте следующих лекций.
Когда мы запускаем Visual Studio .NET, то видим следующее окно
Начальная страница (Start Page) содержит следующие вкладки: Projects, Online Resources и My Profile. По умолчанию мы находимся на вкладке Projects, на которой расположен список недавних проектов. Мы можем перейти по гиперссылке от названия проекта и сразу продолжить работу над ним. На этой же вкладке расположены кнопки New Project и Open Project , по нажатию на которые мы запустим диалоговые окна создания нового или открытия существующего документа соответственно.
На вкладке Online Resources отображаются группы новостей, заголовки и ссылки ресурсов разработчиков. Эта опция доступна, когда компьютер подключен к Интернету.
Скрывающиеся панели, расположенные по бокам окна, — такие
как изображенные на Server Explorer или Toolbox, — можно выдвинуть, просто
щелкнув на них. Мы можем закрепить их на экране, нажав на значок, или совсем убрать с экрана, а затем снова отобразить,
используя соответствующий пункт меню View (или эквивалентное сочетание клавиш).
Главное окно Visual Studio.NET, подобно другим приложениям Windows, содержит строку меню, включающую в себя следующие категории (когда мы находимся на Start Page, часть категорий не видна – она появится позднее, когда будет создан проект) (рис. 1.3):
В этих категориях расположены следующие команды:
- File — открытие, создание, добавление, закрывание, печать и проч.
- Edit — стандартные команды правки: копирование, вставка, вырезание и проч.
- View — команды для скрытия и отображения всех окон и панелей инструментов.
- Project — команды для работы с проектом: добавление элементов, форм, ссылок и проч.
- Build — команды компиляции программы.
- Debug — команды для отладки программы.
- Data — команды для работы с данными.
- Format — команды форматирования располагаемых элементов (выравнивание, интервал и проч.).
- Tools — команды дополнительных инструментов и настройки Visual Studio .NET.
- Window — управление расположением окон.
- Help — справка.
Детальная работа с пунктами меню будет рассматриваться по мере использования соответствующих опций.
Формы
Что такое форма?
Всякий раз, когда вы работаете с какой-либо программой, вы видите на экране прямоугольное окно. В этом окне и располагается вся информация, которая вам нужна. Формы могут иметь стандартный вид, такой, например, как у программы Microsoft Word, или причудливый — как у Winamp. Итак, форма — это экранный объект, обеспечивающий функциональность программы.
Мы с вами приступаем к созданию Windows-приложений, поэтому первое, чему нам предстоит научиться, — создавать проекты, которые будут содержать наши собственные формы.
Запускаем Visual Studio .NET, выбираем File/New/Project — появляется диалоговое окно (Ctrl+Shift+N приводит к тому же результату), в котором выбираем Visual C++ Project и Windows Application (рис. 1.4).
После того как мы создали новый проект, можно видеть основные части среды разработки
SolutionExplorer(обозреватель решений)
Окно Solution Explorer (проводник проекта, View —> Solution Explorer, или сочетание клавиш Ctrl+Alt +L) содержит компоненты, входящие в состав проекта. Пункты контекстного меню этого окна (вызывающегося нажатием правой кнопки мыши) позволяют изменять содержимое проекта, а также добавлять новые компоненты
Properties Window
Окно свойств Properties — основной инструмент настройки формы и ее компонентов. Содержимое этого окна представляет собой весь список свойств выбранного в данный момент компонента или формы. Вызывается это окно несколькими способами — в меню View выбираем пункт Properties Window (или используем клавишу F4), на выбранном объекте щелкаем правой кнопкой мыши и в контекстном меню пункт Properties выбираем объект и нажимаем F4 или просто выбираем объект и переходим в окно Properties. Когда вы только создали проект, в окне Properties отображаются свойства самой формы.
Окно Properties позволяет определять в первую очередь дизайн формы и ее элементов управления. дизайна. При выборе значения свойства, отличного от принятого по умолчанию, оно выделяется жирным шрифтом, что облегчает в дальнейшем определение изменений.
Toolbox
Окно Toolbox (панель инструментов, View —> Toolbox, или сочетание клавиш Ctrl+Alt+X) содержит компоненты Windows-форм, называемые также элементами управления, которые размещаются на форме. Оно состоит из нескольких закладок: My User Controls, Components, Data, Windows Forms и General
Режимы дизайна и кода
При создании нового проекта запускается режим дизайна — форма представляет собой основу для расположения элементов управления. Для работы с программой следует перейти в режим кода. Это можно сделать нескольким способами: щелкнуть правой кнопкой мыши в любой части формы и в появившемся меню выбрать View Code, в окне Solution Explorer сделать то же самое на компоненте Form 1.cs или просто дважды щелкнуть на форме — при этом сгенерируется метод Form1_Load. После хотя бы однократного перехода в режим кода в этом проекте появится вкладка Form1.cs* , нажимая на которую, тоже можно переходить в режим кода. Для перехода в режим кода также можно использовать клавишу F7, а для возврата в режим дизайна — сочетание Shift+F7.
Переключимся в режим кода и рассмотрим некоторые блоки.
Данный блок определяет, какие пространства имен используются в этом проекте:
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
Класс формы Form1, наследуемый от System.Windows.Forms.Form, содержит в себе почти весь код:
public ref class Form1 : public System::Windows::Forms::Form
{
…
}
Внутри этого класса находится конструктор формы:
public:
Form1(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
Событие Initiliaze происходит в момент запуска приложения; код, добавляемый после InitializeComponent, может изменять содержимое формы или элементы управления в момент запуска.
Область Windows Form Designer generated code содержит код графического интерфейса элементов управления и формы, автоматически генерируемый средой. Пустая форма содержит описание размеров и заголовка. Щелкните на знак (+) для просмотра этой области.
Свойства проекта
Рассмотрим свойства проекта. В окне Solution Explorer выделяем название проекта — FirstForm, щелкаем правой кнопкой мыши и выбираем в меню пункт Properties. В появившемся окне содержатся все свойства текущего проекта .
Компиляция и запуск
Для проверки программы используются два способа отладки. Первый способ — Build Solution, который проверяет код и компилирует программу, не запуская ее Это очень удобно, когда вы работаете над отдельным модулем большой разработки, и нет возможности проверять весь продукт в целом. Для запуска этого способа выбираем в главном меню пункт Build —> Build Solution(Потроениеа – Построить решение) (или сочетание клавиш F6) .
При этом появляется окно Output, в котором выводится информация о всех стадиях компиляции
Если в коде имеются ошибки, окно Output выведет сообщение об ошибках, затем появится их список, причем для отладки достаточно дважды щелкнуть на соответствующей ошибке для перехода к нужному участку кода
Другой способ компиляции программы — Debug,(Начать отладку F5) при котором проверяется код, компилируется программа и формируется пользовательский интерфейс .
При запуске приложения в папке binDebug внутри папки проекта возникает файл FirstForm.exe и файлы, необходимые для отладки. Файл FirstForm.exe и представляет собой готовое приложение. Готовое приложение для распространения необходимо скомпилировать в режиме Release — тогда появится папка binRelease, которая будет содержать только FirstForm.exe. Вы можете просто скопировать его на другой компьютер, и если там имеется .NET Framework, все будет работать.
В меню Debug также расположены все средства для пошаговой отладки кода, которые вы уже встречали при работе с консольными приложениями.
Какова разница между компиляциями Build и Debug? Предположим, что вы разрабатываете приложение, которое будет подключаться к базе данных на удаленном компьютере, недоступном в момент разработки. Приложение будет получать данные сразу же при запуске. Для отладки кода программы удобнее использовать режим Build, поскольку отладка в режиме Debug будет сопровождаться сообщениями об ошибках, возникающих из-за невозможности подключения к другому компьютеру. Само подключение также будет занимать некоторое время.
Если же вы разрабатываете локальное приложение, режим отладки Debug является более удобным. Далее, когда мы будем запускать приложения, подразумеваться будет именно этот режим.
Интерфейсные элементы Windows-приложений
Общие свойства, события и методы
Базовым классом всех интерфейсных элементов Windows-приложений в .NET Framework является класс System. Windows.Forms.Control, содержащийся в пространстве имен System. Windows.Forms. Именно в этом классе определены общие для всех интерфейсных элементов свойства, события и методы. Перечислим наиболее важные из них:
- Cursor, Font, BackColor, ForeColor (так называемые Ambient properties) - свойства, значения которых элемент управления наследует от содержащего его контейнера, если значение этого свойства в явном виде не установлено и не определено в родительском классе;
- Top, Left, Width, Height, Size, Location - свойства, отвечающие за размер и местоположение элемента относительно контейнера (для формы контейнером в этом случае является экран);
- Anchor и Dock - свойства, определяющие, согласно каким принципам перемещается и меняет размеры интерфейсный элемент при изменении размеров контейнера;
- Text, ImeMode, RightToLeft - свойства, определяющие надпись или текст в элементе управления, а также направление текста и способ его редактирования (последние два свойства, впрочем, не слишком актуальны для европейских языков, в том числе и для русского);
- Enabled, Visible - свойства, определяющие, доступен ли пользователю интерфейсный элемент и отображается ли он;
- Parent - свойство, указывающее, какой из интерфейсных элементов является контейнером для данного элемента.
Из наиболее важных методов этого класса следует отметить методы BringToFront, SendToBack, Show, Hide, Contains, Refresh, Update, а из событий - события, связанные с перемещением мыши и нажатием на клавиши MouseDown, MouseMove, MouseUp, MouseLeave, MouseHover, MouseEnter, MouseWheel, KeyDown, KeyPress, KeyUp, Click, с применением операции drag-and-drop: DragDrop, DragEnter, DragLeave, DragOver, а также связанные с изменением размера элемента - Resize - и его перерисовкой - Paint.
Элемент управления GroupBox и PictureBox
GroupBox используют, чтобы обеспечить разделение компонентов на различные группы, которые становятся для них родителями, для того чтобы компоненты унаследовали некоторые свойства своих родителей. Обычно так делают, чтобы подразделить форму на несколько функций и дизайн осуществлять удобнее: перемещая только GroupBox , мы одновременно перемещаем все компоненты, которые в нем находятся.
Основные свойства GroupBox
Методы элемента управления GroupBox
События элемента управления GroupBox
PictureBox
• Через этот компонент в форму выводится графическое изображение.
• Компонент содержит в себе свойства, определяющие, как выводить изображение внутри границ самого этого объекта (в форме PictureBoxотображается в виде пустого квадрата).
• Свойство Image – задает изображение, загружаемое в компонент (в поле этого свойства имеется кнопка с многоточием, с помощью которой открывается диалоговое окно для загрузки изображения).
• Можно загружать и сохранять изображение также и в режиме исполнения приложения с помощью методов класса PictureBox.
Компонент DatagriedView
Помимо базисных элементов и базисного внешнего вида у этого control-а есть базовое поведение. Иными словами, если поместить новый DataGridView на форму и не производить никаких спецнастроек, то control будет:
• Автоматически показывать заголовки колонок и заголовки строк. И те, и другие остаются видимыми при любом скроллинге.
• Ставить на одном из заголовков строк маркер (черный треугольничек) текущей строки.
• Выбирать целую строку, если пользователь щелкнет по заголовку строки.
• Выбирать сразу несколько строк, если щелчок по заголовку строки производится с зажатым Ctrl или Shift. При этом текущая строка (помеченная треугольничком) всегда будет единственной.
• Удалять все выбранные строки по нажатию на Delete.
• Отображать ячейку, имеющую фокус ввода, особым образом.
• Если пользователь выполнит двойной щелчок по разделителю колонок, будет произведена автоподборка ширины левой колонки.
• Если в методе Main приложения был вызван метод EnableVisualStyles, будет применяться стиль Windows XP, выбранный в настройках рабочего стола.
Помимо этого control будет поддерживать редактирование содержимого:
• Если пользователь выполнит двойной щелчок по ячейке (или нажмет на ней F2), данная ячейка будет переведена в режим редактирования.
• Если пользователь изменит хотя бы один символ в редактируемой ячейке, на заголовке соответствующей строки появится спецсимвол (пишущий карандашик), и будет отображаться до тех пор, пока фокус ввода не покинет редактируемую ячейку, или пока пользователь не нажмет Esc. Последнее действие восстановит то значение ячейки, которое она содержала до входа в режим редактирования.
• Если пользователь прокрутит control вниз до последней строчки, будет отображена дополнительная, специальная строчка для внесения новой записи. Такая строчка всегда помечена символом звездочки на заголовке. Когда пользователь любым способом перемещается в эту строку, DataGridView добавляет новую запись со значениями по умолчанию. Если фокус ввода находится в этой строке, и пользователь нажимает Esc, новая запись пропадает, а фокус ввода перемещается на строчку выше.
Компоненты MenuStrip, Chart.
MenuStrip
• Этот компонент создает главное меню приложения, с помощью которого управляют всей работой приложения и его частей. Разные части приложения запускаются на выполнение отдельными командами, собранными в эту структуру. Выход из приложения тоже происходит через меню.
• Меню формируется в форме после того, как его значок перенесен из палитры компонентов в форму. С этой формой меню будет связано через свойство формы MainMenuStrip, в окне которого и появляется имя компонента.
• Когда меню сформировано, то после запуска приложения на выполнение в левой верхней части формы будет расположена строка, содержащая главные опции этого меню. Главные опции могут распадаться на более детальные команды (если таковые заданы), располагающиеся на этот раз уже в столбик (сверху вниз). При переносе значка меню из палитры в форму значок располагается не в самой форме, а в нижней части рабочего стола (на специальной полосе под формой). В то же время в форме (в ее верхней части) появляется полоса для отображения будущих опций меню
ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ
Постановка задачи
Необходимо написать программу на языке С++ для табулирования функции и построения ее графика. Функция имеет следующий вид:
Программа должна иметь следующие функциональные возможности:
1. Табулирование функции.
2. Расчет функции при помощи ряда.
3. Расчет функции при помощи рекурсии.
4. Вывод результатов работы в таблицу.
5. Построение графиков каждой из функций.
6. Сохранение результатов в файл.
7. Чтение результатов из файла.
Таким образом, дерево функций будет иметь следующий вид (рис. 1).
Рисунок 1. Дерево функций
Для разработки программы будет использоваться Windows Forms. Интерфейс будет располагаться на одной форме, которая будет иметь две закладки. Закладка 1 – для ввода данных и вывода результатов табулирования и Закладка 2 – для построения графика интерфейс показан на рис. 2 и рис. 3. Интерфейс разработан при помощи программы Pencil.
Рисунок 2. интерфейс формы закладка для ввода данных
Рисунок 3. Интерфейс формы закладка для построения графика
Структура главного меню показана на рис.4.
Рисунок 4. Структура главного меню
Структура программы
В программе разработана структура для хранения информации о результатах табулирования. Структура имеет следующий вид (табл. 1).
Таблица 1. Описание структуры
struct xy |
|
x |
y |
double |
double |
Также в программе объявлены две переменных данной структуры и три списка для хранения результатов табулирования. Объявление имеет следующий вид:
struct xy
{
double x,y;
} obj,obj1;
list
Программа состоит из одного модуля и имеет следующую структуру(рис.5).
Рисунок 5. Структура программы
Проведем спецификацию всех функций программы (табл.2)
Таблица 2. Спецификация функций
Функция |
Описание |
Void button1_Click (System::Object^ sender, System::EventArgs^ e) |
Функция расчета. Вызывается при нажатии кнопки «Расчет». В ней решаются следующие задачи: 1. Инициализация начальных значений переменных 2. Вызов функции для очистки таблицы и графика 3. Вызов функций расчета 4. Вызов функции вывода Входные данные: System::Object^
sender – объект вызвавший событие (кнопка). Выходные данные: - |
System::Void записьВФайлToolStripMenuItem_Click (System::Object^ sender, System::EventArgs^ e) |
Функция записи в файл. Вызывается при нажатии на пункт меню «Запись в файл» Входные данные: System::Object^
sender – объект вызвавший событие (кнопка). list list list Выходные данные: sin.txt – файл с данными табулирования эталонной функции sin(x)/x sin1.txt - файл с данными табулирования при помощи ряда sin2.txt txt - файл с данными табулирования при помощи рекурсии. |
System::Void чтениеИзФайлаToolStripMenuItem_Click |
Функция чтения из файла. Вызывается при нажатии на пункт меню «Чтение из файла» Входные данные: System::Object^
sender – объект вызвавший событие (кнопка). Выходные данные: list list list |
int count |
Функция для расчета количества строк в файле Входные данные: - Выходные данные: количество строк |
void vivod() |
Функция для вывода данных в таблицу и построения графика Входные данные: - Выходные данные: - |
void clear() |
Функция для очистки данных в таблице и графике Входные данные: - Выходные данные: - |
void func3(double xn,double xk,double h) |
Функция для табулирования при помощи рекурсии Входные данные: double xn – начало интервала double xk – конец интервала double h – шаг табулирования Выходные данные: list |
void rec (double x,double mem,double mul,double n,double* sum) |
Функция для расчета суммы рекурсией Входные данные: double x – текущее значение х double mem – текущее значение множителя double mul – текущее значение знака (+ или -) double n – текущее значение n Входные данные: double* sum – текущее значение суммы ряда |
void func2(double xn,double xk,double h) |
Функция для табулирования при помощи рядя Входные данные: double xn – начало интервала double xk – конец интервала double h – шаг табулирования Выходные данные: list |
void ryd(double x) |
Функция для расчета суммы ряда Входные данные: double x –значение х Входные данные: double sum – значение суммы ряда |
void func(double xn,double xk,double h) |
Функция для табулирования при помощи рядя Входные данные: double xn – начало интервала double xk – конец интервала double h – шаг табулирования Выходные данные: list |
Схемы алгоритмов
Рассмотрим схемы алгоритмов для каждой функции
….
Описание интерфейса взаимодействия с пользователем
При запуске программы появляется главная форма рис.6. На которой можно ввести данные и при нажатии на кнопку расчет будет произведен расчет, результаты которого отобразиться в таблице (рис. 7) и построится график по полученным данным рис. 8.
Рисунок 6. Главное окно
программы
Рисунок 7. Главное окно программы с результатом расчета
Рисунок 8. Главное окно программы графиком
При нажатии на пункт меню «Запись в файл » результаты запишутся в файлы sin.txt – файл с данными табулирования эталонной функции sin(x)/x, sin1.txt - файл с данными табулирования при помощи ряда, sin2.txt txt - файл с данными табулирования при помощи рекурсии. Пример файла показан на рис. 9. При выборе кнопки меню чтения из файла результаты будут прочтены из файла запишутся в таблицу рис. 10 и отобразятся на графике рис.10.
Рисунок 9. Пример текстового файла с записанными данными
Рисунок 10. Результаты чтения из файла
Исходный текст программы
…
Варианты заданий
Варианты 1-19 - Вычисление суммы степенного ряда
Варианты 20-21 - Вычисление значения цепной дроби