Си++
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
Ошский Технологический Университет им. академика Адышева М.М.
Факультет Кибернетики и Информационных Технологий
Кафедра ПОВТАС
На тему: Обучающая программа по С++
Подготовил:
Приняла: _________________
Оглавление
- Введение
- Краткое описание теоретической части
- Постановка задачи
- Метод решения задачи
- Практическая часть
- Заключение
- Список используемых источников
Си++ (англ. C++) — компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования.
Разработка языка началась в 1979 году. Целью создания C++ было дополнение C возможностями, удобными для масштабной разработки ПО, с сохранением гибкости, скорости и портабельности C. Вместе с тем создатели C++ стремились сохранить совместимость с C: синтаксис первого основан на синтаксисе последнего, и большинство программ на C будут работать и как C++. Изначально новый язык назывался “C с классами”, но затем имя было изменено на C++ — это должно было подчеркнуть как его происходжение от C, так и его превосходство над последним.
Первый выпуск C++ для коммерческого использования состоялся в 1985 году, вместе с публикацией книги “The C++ Programming Language”, которая на долгое время стала его неофициальным стандартом. В 1989 году вышла вторая версия языка в сопровождении книги “The Annotated C++ Reference Manual”.
В 1990-х годах язык стал одним из наиболее широко используемых языков программирования общего назначения. Первым официальным стандартом языка стал ISO/IEC 14882:1998, более известный как C++98. В 2003 году была принята его дополненная версия, C++03, а в 2005 году был опубликован “Library Technical Report 1” (сокращенно TR1) — документ, описывающий расширения стандартной библиотеки. TR1 не является стандартом, но большинство актуальных компиляторов C++ поддерживает его. Наконец, в 2011 году был принят текущий стандарт, C++11.
Нововведениями C++ в сравнении с C являются:
- поддержка объектно-ориентированного программирования через классы. C++ предоставляет все четыре возможности ООП — абстракцию, инкапсуляцию, наследование (в том числе и множественное) и полиморфизм.
- поддержка обобщённого программирования через шаблоны функций и классов;
- стандартная библиотека C++ состоит из стандартной библиотеки C (с некоторыми модификациями) и библиотеки шаблонов (Standard Template Library, STL), которая предоставляет обширный набор обобщенных контейнеров и алгоритмов;
- дополнительные типы данных;
- обработка исключений;
- виртуальные функции;
- пространства имён;
- встраиваемые (inline) функции;
- перегрузка (overloading) операторов;
- перегрузка имён функций;
- ссылки и операторы управления свободно распределяемой памятью.
Элементы синтаксиса:
Комментарий до конца строки |
// |
Комментарии, которые не могут быть вложенными |
/* ... */ |
Регистрозависимость |
да |
Регулярное выражение идентификатора переменной |
[_a-zA-Z][_a-zA-Z0-9]* |
Регулярное выражение идентификатора функции |
[_a-zA-Z][_a-zA-Z0-9]* |
Присваивание значения переменной |
varname = value |
Объявление переменной |
type varname |
Объявление переменной с присваиванием значения |
type varname = value |
Группировка выражений |
( ... ) |
Блок |
{ ... } |
Равенство |
a == b |
Неравенство |
a != b |
Тождественное равенство |
*a == *b (a и b - указатели) |
Тождественное неравенство |
*a != *b (a и b - указатели) |
Сравнение |
< > <= >= |
Определение функции |
returntype functionName (argtype1 argname1, ..., argtypeN argnameN) |
Вызов функции |
functionName(arg1, ..., argN) |
Вызов функции без параметров |
functionName() |
Последовательность |
; |
Если - то |
if (condition) trueBlock |
Если - то - иначе |
if (condition) trueBlock else falseBlock |
Бесконечный цикл |
while (true) loopBody |
Цикл с предусловием |
while (condition) loopBody |
Цикл с постусловием |
do loopBody while (!condition) |
Цикл for - next для
диапазона целых чисел с |
for (int i = first; i <= last ; i++) |
Цикл for - next для
диапазона целых чисел с |
for (int i = last; i >= first; i--) |
Краткое описание теоретической части
Microsoft Visual Studio — линейка продуктов компании Майкрософт, включающих интегрированную
среду разработки программного обеспечения и ряд других
инструментальных средств. Данные продукты
позволяют разрабатывать как консольныеприложения, так и приложения с графическим
интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программированияили инструментов для прочих аспектов цикла разработки программного обеспечения(например, клиент Team Explorer для работы с Team Foundation Server).
Компоненты
Visual Studio включает один или несколько компонентов из следующих:
- Visual Basic .NET, а до его появления — Visual Basic
- Visual C++
- Visual C#
- Visual F# (включён начиная с Visual Studio 2010)
Многие варианты поставки также включают:
- Microsoft SQL Server либо Microsoft SQL Server Express
В прошлом, в состав Visual Studio также входили продукты:
- Visual InterDev
- Visual J++
- Visual J#
- Visual FoxPro
- Visual Source Safe — файл-серверная система управления версиями
Создание обучающей программы, включающей в себя весь набор лекций и лабораторных работ по предмету «Программирование на языке С++», а так же оформление графического интерфейса при помощи технологии Windows Forms. По желанию студента возможно включение дополнительного ПО: компиляторы и библиотека .NET Framework.
Для осуществления поставленной задачи воспользуюсь продукцией Microsoft Visual Studio 2012, включающую интегрированную среду разработки программного обеспечения. В данной сборке имеются две подходящие мне среды Visual C++ и Visual C#. Я буду использовать Visual C#, поскольку считаю её более подходящей для разработки приложений, использующих компоненты Windows Forms, да и, по правде говоря, с Visual C++ я немного не разобрался, и, так сказать, не дружу.
Так как я ещё новичок, воспользуюсь самым наверное простым способом решения моих задач, а именно включением и отключением компонентов по нажатии на ссылку (linkLabel) или на кнопку (Button).
Для начала создаём проект, для создания приложений с пользовательским интерфейсом Windows Forms. Задаём ему имя и сохраняем в нужную нам папку. Перед нами открывается форма проекта. В правой части экрана внизу в свойствах задаём нужные нам параметры: значок, текс, ширина и высота, рисунок заднего фона, который мы заранее создали в Photoshop, и др.
В исходном коде это выглядит так:
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScale
this.BackgroundImage = ((System.Drawing.Image)(
this.BackgroundImageLayout = System.Windows.Forms.ImageLayo
this.ClientSize = new System.Drawing.Size(1069, 649);
this.FormBorderStyle = System.Windows.Forms.FormBorde
this.Icon = ((System.Drawing.Icon)(
this.MaximizeBox = false;
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStart
this.Text = "C++";
Затем мы выбираем в панели компонентов компонент button и создаём 5 кнопок главного меню будущей программы. Назовём их button1, button2 и т.д. Также выбираем компонент groupBox – это так называемый контейнер в котором будут наши ссылки. В дальнейшем для отображения той или иной ссылки нам необязательно будет обращаться к ней на прямую, а достаточно будет работать с данным контейнером. Создаём столько же сколько и кнопок, то бишь 5, и условно закрепим каждый контейнер за своей кнопкой. Кнопки расположим справа сверху вниз, а контейнеры в центре, накладывая друг на друга.
В исходном коде задаём параметры каждой кнопке и её действия: включение своего контейнера и отключение всех остальных.
// button1
//
this.button1.Cursor = System.Windows.Forms.Cursors.
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.
this.button1.Location = new System.Drawing.Point(12, 108);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(225, 47);
this.button1.TabIndex = 0;
this.button1.Text = "Лекции";
this.button1.
this.button1.Click += new System.EventHandler(this.
//
// button2
//
this.button2.Cursor = System.Windows.Forms.Cursors.
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.
this.button2.Location = new System.Drawing.Point(12, 184);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(225, 61);
this.button2.TabIndex = 1;
this.button2.Text = "Лабораторные \r\n работы";
this.button2.
this.button2.Click += new System.EventHandler(this.
// button3
//
this.button3.Cursor = System.Windows.Forms.Cursors.
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.
this.button3.Location = new System.Drawing.Point(12, 275);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(225, 47);
this.button3.TabIndex = 2;
this.button3.Text = "Тесты";
this.button3.
this.button3.Click += new System.EventHandler(this.
//
// button4
//
this.button4.Cursor = System.Windows.Forms.Cursors.
this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.
this.button4.Location = new System.Drawing.Point(12, 353);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(225, 64);
this.button4.TabIndex = 3;
this.button4.Text = "Дополнительное\r\nПО";
this.button4.
this.button4.Click += new System.EventHandler(this.
//
// button5
//
this.button5.Cursor = System.Windows.Forms.Cursors.
this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.
this.button5.Location = new System.Drawing.Point(12, 451);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(225, 47);
this.button5.TabIndex = 4;
this.button5.Text = "Главная";
this.button5.
this.button5.Click += new System.EventHandler(this.
//
// groupBox1
//
this.groupBox1.BackColor = System.Drawing.Color.
this.groupBox1.
this.groupBox1.Controls.Add(th
this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.
this.groupBox1.ForeColor = System.Drawing.Color.FromArgb(
this.groupBox1.Location = new System.Drawing.Point(313, 92);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(700, 396);
this.groupBox1.TabIndex = 4;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Добро пожаловать";
//
// groupBox2
//
this.groupBox2.BackColor = System.Drawing.Color.
this.groupBox2.
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Controls.Add(th
this.groupBox2.Enabled = false;
this.groupBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.
this.groupBox2.Location = new System.Drawing.Point(313, 92);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(700, 397);
this.groupBox2.TabIndex = 5;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Лекции";
this.groupBox2.Visible = false;
//
// groupBox3
//
this.groupBox3.BackColor = System.Drawing.Color.
this.groupBox3.
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Controls.Add(th
this.groupBox3.Enabled = false;
this.groupBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.
this.groupBox3.Location = new System.Drawing.Point(313, 92);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(700, 396);
this.groupBox3.TabIndex = 6;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Лабораторные работы";
this.groupBox3.Visible = false;
//
// groupBox4
//
this.groupBox4.BackColor = System.Drawing.Color.
this.groupBox4.
this.groupBox4.Controls.Add(th
this.groupBox4.Controls.Add(th
this.groupBox4.Controls.Add(th
this.groupBox4.Enabled = false;
this.groupBox4.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.
this.groupBox4.Location = new System.Drawing.Point(313, 92);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(700, 396);
this.groupBox4.TabIndex = 7;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Дополнительное ПО";
this.groupBox4.Visible = false;
Ну а для пятой кнопки параметры будут практически такие, но назначение у неё будет другое. Данная кнопка должна запускать другую программу – тест, сделанный моим однокурсником Скочелясом Болеславом. В исходный код мы вписываем функцию, которая и будет выполнять желаемое, то бишь запуск программы-теста входящую в директорию моей программы.
System.Diagnostics.Process.
После всего выше проделанного, необходимо откомпилировать программу, и исправить недостатки и ошибки. Программа работает, как это видно на рисунке выше. На каждую кнопку появляется соответствующий контейнер.
Настало время добавить в каждый контейнер ссылки, которые будут делать определённые действие. Например, большинство из них будут открывать лекции и лабораторные работы. Для начала необходимо написать все эти лекции и лабораторные в Microsoft World, при чём лишь одну тему в каждом файле – 16лекций и 10 лабораторных (26 файлов) с именами lk1 – lk16 (лекции) и lb1 - lb10 (лабы) с расширением rtf. Поместить всей файлы в папку под названием resources. Затем в панели инструментов выбираем инструмент LinkLabel и вставляем в контейнер например с лекциями. Путём копирования достигаем нужного нам количества ссылок в данном контейнере. В свойствах мы задаём им текс, а так же его шрифт и цвет.
Затем для отображения текста вообще внутри, именно внутри нашей программы, нам необходимо какое-то текстовое поле. Воспользуемся мы инструментом RichTexBox. Никаких таких параметров нам необходимости настраивать нет, за исключением, разве что возможность редактирования текста и мы его просто отключим, поскольку вначале нам данное поле не нужно. Данный компонент мы помещаем в центре поверх остального.
После этого в исходном коде каждой ссылке мы прописываем функцию, которая будет открывать ранее созданные нами rtf файлы в данном окне, но при этом всей файлы должны находиться в директории программы, в казанной нами папке (resources). Например для ссылки на Лекцию 1 это будет выглядеть так:
private void linkLabel11_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.groupBox2.Visible = false;
this.richTextBox1.Visible = true;
this.richTextBox1.Enabled = true;
this.richTextBox1.LoadFile("
}
Аналогично будет выглядеть код и для других ссылок, только будет меняться название файла с нужной лекцией.
Открыв контейнер с
Исходный код будет выглядеть так же. Вот пример для первой лабораторной.
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.groupBox3.Visible = false;
this.richTextBox1.Visible = true;
this.richTextBox1.Enabled = true;
this.richTextBox1.LoadFile("
}
В меню Дополнительное ПО будут всего 3 ссылки, которые аналогично кнопки Тесты будут открывать другие приложения (программы). Только на сей раз это буду программы и компиляторы Dev-C++, Turbo C++ 3.0 и Microsoft .NET Framework 4.5. Создаём 3 ссылки (LinkLabel).
Для каждой ссылки в исходном коде
прописываем функцию
private void linkLabel27_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.
}
private void linkLabel28_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.
}
private void linkLabel29_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.
}
В меню Главная ничего собственно и нет, только небольшой текст. При создании этого текста мы пользовались простым компонентом Label, а в свойствах мы лишь задали текс, его шрифт и цвет.
Теперь осталось добавить маленькие штрихи. Выбираем элемент Label и в тексте прописываем автора программы, то бишь меня. Вы можете увидеть данную надпись на рисунке выше в самом низу программы.
Также можно внести некоторые корректировки в настройках будущей программы. Для этого нужно дважды щёлкнуть мышью на компонент Properties справа от программы Visual Studio.
Появиться данное окно.
Здесь я не буду подробно останавливаться на каждом элементе, так как это займёт много сил и времени, да и на скриншоте выше я думаю всё и так понятно.
Ну и теперь после подробного описания моих действий считаю необходимым предоставить полный исходный код моей программы, ну а результат её вы видели по ходу моих изъяснения, то есть во вложенных скриншотах.
namespace Обучающая
{
partial class Form1
{
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
private System.ComponentModel.IContain
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.Componen
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox(
this.label1 = new System.Windows.Forms.Label();
this.groupBox2 = new System.Windows.Forms.GroupBox(
this.linkLabel26 = new System.Windows.Forms.LinkLabel
this.linkLabel25 = new System.Windows.Forms.LinkLabel
this.linkLabel24 = new System.Windows.Forms.LinkLabel
this.linkLabel23 = new System.Windows.Forms.LinkLabel
this.linkLabel22 = new System.Windows.Forms.LinkLabel
this.linkLabel21 = new System.Windows.Forms.LinkLabel
this.linkLabel20 = new System.Windows.Forms.LinkLabel
this.linkLabel19 = new System.Windows.Forms.LinkLabel
this.linkLabel18 = new System.Windows.Forms.LinkLabel
this.linkLabel17 = new System.Windows.Forms.LinkLabel
this.linkLabel16 = new System.Windows.Forms.LinkLabel
this.linkLabel15 = new System.Windows.Forms.LinkLabel
this.linkLabel14 = new System.Windows.Forms.LinkLabel
this.linkLabel13 = new System.Windows.Forms.LinkLabel
this.linkLabel12 = new System.Windows.Forms.LinkLabel
this.linkLabel11 = new System.Windows.Forms.LinkLabel
this.groupBox3 = new System.Windows.Forms.GroupBox(
this.linkLabel10 = new System.Windows.Forms.LinkLabel
this.linkLabel9 = new System.Windows.Forms.LinkLabel
this.linkLabel8 = new System.Windows.Forms.LinkLabel
this.linkLabel7 = new System.Windows.Forms.LinkLabel
this.linkLabel6 = new System.Windows.Forms.LinkLabel
this.linkLabel5 = new System.Windows.Forms.LinkLabel
this.linkLabel4 = new System.Windows.Forms.LinkLabel
this.linkLabel3 = new System.Windows.Forms.LinkLabel
this.linkLabel2 = new System.Windows.Forms.LinkLabel
this.linkLabel1 = new System.Windows.Forms.LinkLabel
this.groupBox4 = new System.Windows.Forms.GroupBox(
this.linkLabel29 = new System.Windows.Forms.LinkLabel
this.linkLabel28 = new System.Windows.Forms.LinkLabel
this.linkLabel27 = new System.Windows.Forms.LinkLabel
this.richTextBox1 = new System.Windows.Forms.RichTextB
this.button5 = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.button3 = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout()
this.groupBox2.SuspendLayout()
this.groupBox3.SuspendLayout()
this.groupBox4.SuspendLayout()
this.SuspendLayout();
//
// button1
//
this.button1.Cursor = System.Windows.Forms.Cursors.
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.
this.button1.Location = new System.Drawing.Point(12, 108);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(225, 47);
this.button1.TabIndex = 0;
this.button1.Text = "Лекции";
this.button1.
this.button1.Click += new System.EventHandler(this.
//
// button2
//
this.button2.Cursor = System.Windows.Forms.Cursors.
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.
this.button2.Location = new System.Drawing.Point(12, 184);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(225, 61);
this.button2.TabIndex = 1;
this.button2.Text = "Лабораторные \r\n работы";
this.button2.
this.button2.Click += new System.EventHandler(this.
//
// button4
//
this.button4.Cursor = System.Windows.Forms.Cursors.
this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.
this.button4.Location = new System.Drawing.Point(12, 353);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(225, 64);
this.button4.TabIndex = 3;
this.button4.Text = "Дополнительное\r\nПО";
this.button4.
this.button4.Click += new System.EventHandler(this.