Загрузить PDF
Загрузить PDF
Из этой статьи вы узнаете, как написать программу в стандартном приложении «Блокнот» для Windows. Если коротко, то вам нужно будет построчно ввести код программы в Блокнот, а затем сохранить файл в формате необходимого языка программирования.
-
1
Ознакомьтесь с ограничениями Блокнота. Формально в Блокноте можно написать программу на любом языке программирования, но чтобы ее запустить, программу нужно сохранить в правильном формате.
- Файлы Блокнота по умолчанию сохраняются в виде текстовых документов.
-
2
Найдите и запустите Блокнот. Наиболее простой способ запустить Блокнот — открыть меню «Пуск»
, ввести блокнот, а затем нажать на синюю иконку Блокнота в верхней части меню «Пуск».
-
3
Выберите язык программирования. Блокнот не имеет ограничений в языках программирования, но для корректной работы программы вам придется использовать один и тот же язык во всем документе.
- Если вы не знаете ни одного языка программирования, воспользуйтесь одним из примеров, указанных в статье.
-
4
Завершив строку кода, нажмите ↵ Enter. Как и в большинстве редакторов кода, отдельные строки кода должны располагаться на разных строках Блокнота.
-
5
Закройте все открытые фигурные и квадратные скобки. Если вы открыли квадратную или фигурную скобки (
{
или[
), ее обязательно нужно закрыть, чтобы завершить строку кода. Несоблюдение этого правила приведет к ошибкам в коде. -
6
Подумайте об использовании специальной программы для редактирования кода. Хотя в Блокноте, безусловно, можно писать целые программы, на деле же все не так просто. Поскольку в Блокноте нет подсветки синтаксиса и автоматической разметки, он плохо подходит для написания крупных фрагментов кода.
- Notepad ++ — бесплатный и более удобный вариант для работы с кодом.
Реклама
-
1
Запустите Блокнот. Блокнот позволяет создавать и сохранять любую программу, независимо от используемого языка программирования.
-
2
Введите код программы. Убедитесь, что во всем документе используется один и тот же язык программирования.
-
3
Нажмите на Файл в верхнем левом углу окна «Блокнот», чтобы раскрыть выпадающее меню.
-
4
Нажмите на Сохранить как… в верхней части выпадающего меню, чтобы открыть окно «Сохранение».
-
5
Укажите папку для сохранения. Нажмите на папку (например, «Рабочий стол») в левой части окна «Сохранение», чтобы выбрать ее в качестве места расположения программы.
-
6
Нажмите на поле «Тип файла» в нижней части окна «Сохранение», чтобы раскрыть выпадающее меню.
-
7
Выберите пункт Все файлы в выпадающем меню. Это позволит вам сохранить файл Блокнота в виде любого типа программ.
-
8
Введите имя будущей программы. Нажмите на текстовое поле «Имя файла» и введите имя для своей программы.
-
9
Добавьте расширение к имени программы. Чтобы правильно сохранить программу, добавьте точку и метку расширения языка программирования сразу после имени программы. Вот перечень наиболее распространенных языков программирования и их расширений:
- пакетный файл (BAT) — .bat;
- HTML — .htm;
- Python — .py;
- C++ — .cpp.
- К примеру, чтобы сохранить пакетный файл с именем «арбузы», введите арбузы.bat в поле «Имя файла».
-
10
Нажмите на Сохранить в нижнем правом углу окна, чтобы сохранить программу в указанном формате. Чтобы запустить программу, щелкните по ней дважды (возможно, вас попросят выбрать программу для открытия файла).
Реклама
-
1
Запустите Блокнот. Попробуйте создать программу, которая бы запускала другую программу на компьютере, используя скриптовый язык (BAT).
-
2
Введите имя исполняющего файла для выведения Командной строки. Введите cmd.exe в Блокнот.
-
3
Сохраните программу. Убедитесь, что в конце имени файла указано расширение .bat.
-
4
Дважды щелкните по пакетному файлу. Так вы откроете окно командной строки.
Реклама
-
1
Запустите Блокнот. Если вы хотите создать веб-страницу, отличным языком для этой работы будет HTML.
-
2
Укажите, что вы будете использовать именно язык HTML. Введите
!DOCTYPE html
и нажмите ↵ Enter. -
3
Добавьте метку HTML. Введите в Блокнот
html
и нажмите ↵ Enter. -
4
Определите текстовый раздел программы. Введите в Блокнот
body
и нажмите ↵ Enter. Эта строка указывает, что далее в документе будет идти раздел информации (в данном случае текст). -
5
Добавьте заголовок страницы. Введите в Блокнот
<h1>Текст</h1>
и нажмите ↵ Enter, заменив слово «Текст» заголовком страницы.- К примеру, чтобы создать страницу с заголовком «Привет!», введите в Блокнот
<h1>Привет!</h1>
.
- К примеру, чтобы создать страницу с заголовком «Привет!», введите в Блокнот
-
6
Добавьте текст на свою страницу. Введите
<p>текст</p>
и нажмите ↵ Enter, заменив слово «текст» текстовыми данными.- К примеру, если вы введете в Блокнот
<p>Как дела?</p>
, сразу после заголовка появится фраза «Как дела?».
- К примеру, если вы введете в Блокнот
-
7
Закройте текстовый раздел. Введите
</body>
и нажмите ↵ Enter. -
8
Укажите конец HTML программы. Введите
</html>
. -
9
Просмотрите код своей программы. Он должен выглядеть следующим образом:
<!DOCTYPE html>
<html>
<body>
<h1>Привет!</h1>
<p>Как дела?</p>
</body>
</html>
-
10
Сохраните программу. При сохранении убедитесь, что выбрали расширение .htm.
-
11
Дважды щелкните по HTML-файлу, чтобы открыть его в браузере по умолчанию. Возможно, сначала вам будет предложено выбрать программу. Заголовок и текст программы появятся в новой вкладке браузера.
Реклама
-
1
Запустите Блокнот. С помощью команды «print» в Python можно отобразить любой желаемый текст.
-
2
Введите команду «print». Введите в Блокнот
print("
. Убедитесь, что между символами нет пробелов. -
3
Добавьте текст, который хотите отобразить. Введите Привет!.
-
4
Закройте команду «print». Введите
")
, чтобы закрыть команду. -
5
Ваш код должен выглядеть следующим образом:
print("Привет!")
-
6
Сохраните программу. При сохранении убедитесь, что выбрали расширение .py. Теперь программу можно будет открыть в любом редакторе Python.
Реклама
-
1
Запустите Блокнот. В данном примере мы рассмотрим создание простой программы на C++, которая при запуске будет отображать на экране фразу «Hello World!».
-
2
Добавьте название программы. Введите
//
, а затем название программы (например, «Моя первая программа»). Любой текст в строке, идущий после двух косых черт, отобразится как обычный текст (не являясь частью программы).- К примеру, чтобы обозначить свою программу как «Программа 1», введите в Блокнот:
//Программа 1
.
- К примеру, чтобы обозначить свою программу как «Программа 1», введите в Блокнот:
-
3
Введите директиву препроцессора. Введите
# include <iostream>
и нажмите ↵ Enter. Эта команда сообщает C++, что следующие строки кода нужно запускать в виде программы. -
4
Объявите функцию программы. Введите
int main ()
и нажмите ↵ Enter. -
5
Добавьте открытую скобку. Введите в Блокнот
{
и нажмите ↵ Enter. Основной код программы будет заключен между этой открытой скобкой и ее закрывающей парой. -
6
Введите исполняющий код программы. Введите
std::cout << "Hello World!";
и нажмите ↵ Enter. -
7
Добавьте закрывающую скобку. Введите
}
, чтобы завершить исполняющий код программы. -
8
Просмотрите свою программу. Она должна выглядеть следующим образом:
//Название программы
#include <iostream>
int main ()
{
std::cout << "Hello World!";
}
Реклама
-
Сохраните программу. При этом не забудьте указать расширение .cpp. Сохраненную программу можно будет запустить в любом компиляторе C++.
9
Советы
- C++ и HTML — два из наиболее часто используемых языка программирования.
- Большинство программ можно написать практически на любом языке программирования, хотя некоторые языки лучше подходят для определенных задач (например, язык HTML идеально подходит для создания веб-страниц).
Предупреждения
- Всегда проверяйте код перед тем, как его сохранить. Сохранение неисправной программы может привести к проблемам со стандартным компилятором.
Об этой статье
Эту страницу просматривали 196 928 раз.
Была ли эта статья полезной?
В этой статье pассмотрим создание программы для Windows с использованием Win API с помощью NetBeans и набора инструментов MinGW.
Будет создана минимальная оконная Windows программа с функцией WinMain.
Подобный пример был рассмотрен в обзоре ещё одной специализированной С/С++ IDE – Dev CPP.
Подразумевается, что вы скачали и корректно установили пакет компилятоpов. Прочитайте подробное pуководство по установке MinGW в статье MinGW – С и С++ компилятор для Windows.
Создание нового Си проекта в NetBeans
Перейдите в меню “Файл” и кликните по пункту “Создать проект…”.
В появившемся диалоговом окне выберите рубрику “С/С++” и тип проекта “Приложение С/С++”, после чего нажимайте “Далее”.
На следующем шаге введите имя и расположение пpоекта пусть чекбокс “Create Main File” будет отмечен и из выпадающего списка выберите тип исходного файла “С”.
Нажмите “Завершить”.
Откроем файл в редакторе, удалим автоматически сгенерированное содержимое и вставим следуюший код, найти котоpый можно в файле main.zip.
Сохраните изменения, нажав клавиши Ctrl + C.
В предыдущей статье есть подробное описание процесса компилирования и запуска С++ проекта в NetBeans, настройка проекта там тоже частично pассмотрена.
Pекомендуется внимательно прочитать статью, так как далее эти действия будут описываться кратко.
Перед компиляцией перейдите в настройки проекта, выберите рубрику “Run” и в строке “Console Type” из выпадающего списка выберите опцию “Output Window”. Таким обpазом вы сможете выводить отладочную информацию на стандартный вывод и просматривать на панели “Output” в нижней области рабочего окна IDE.
Сохраните изменения и скомпилиpуйте проект, нажав клавишу F11. На панели “Output” можно просмотреть, что программа скомпилирована благополучно.
Исполняемый файл программы можно найти в папке проекта, путь к нему – “distDebugMinGW-Windows”. Однако, если вы его запустите, то работа программы будет сопровождаться консольным окном, что удобно при тестировании программы если вы добавите в неё специальный код, выводящий информацию о происходящих в прогpамме событиях.
Для cоздания рабочей веpсии программы, уберём ненужное консольное окно и создадим Release программы.
Перейдём в свойства проекта, далее в pаздел “Linker”. Вверху в диалоговом окне выберем “Release” из выпадающего списка.
Обратите внимание на нижнюю строку таблицы с настройками – “Command Line”, здесь можно ввести дополнительный аргумент командной строки для сборщика проекта, введите опцию
“-mwindows” без кавычек.
Cохраните настройки, нажав “ОК”.
Тепеpь можно найти иcполняемый файл в папке проекта по пути “distReleaseMinGW-Windows”. Запустив его вы убедитесь что создано настоящее оконное приложение для Windows. Добавив в программу необходимую функциональноcть, протестируйте пpограмму и cнова cкомпилируйте Release.
Теперь пpограмма готова для pаботы в pеальных жизненных уcловиях.
Первый опыт написания полноценной программы
Время на прочтение
17 мин
Количество просмотров 14K
Каждый начинающий программист мечтает реализовать свой собственный проект. Не написать простенький код, по заданию преподавателя, а воплотить в жизнь свои идеи. Так и я, изучая C++ 3-4 месяца, решился попробовать разработать макет электронного журнала для преподавателей.
Определившись с темой, приступил к определению необходимых функций программы. Для этого я провел анализ уже существующих сервисов, выполняющих похожие задачи.
По итогу, пришел к выводу, что в программе потребуется реализовать:
-
Регистрацию (Reg),
-
Авторизацию (Authon),
-
Выбор группы (GroupSelection),
-
Возможность выставлять оценки (Grades),
-
Возможность выставлять посещаемость (Attendance),
-
Возможность писать комментарии к датам (Comment),
-
Возможность устанавливать dedlin’ы (Deadline).
Для понимания логики работы программы, отражения принципов взаимодействия с ней, упрощения дальнейшего написания кода, была создана полная блок-схема.
Аналогично, были созданы блок схемы для каждой функции.
Написание кода программы
Первым шагом написания программы является добавления необходимых заголовочных файлов, а именно:
-
iostream — заголовочный файл с классами, функциями и переменными для организации ввода-вывода.
-
string – это заголовочный файл для взаимодействия с
классами string (строками). -
fstream – заголовочный файл, включающий набор классов, методов и функций, которые предоставляют интерфейс для чтения/записи данных из/в файл.
Далее была добавлена глобальная переменная, то есть переменная, область действия которой охватывает всю программу. Использование такой переменной потребовалось для реализации удобного взаимодействия с информацией.
std::string nameofgroup;
Чтобы удобно группировать данных в одной переменной для каждого объекта, который оперирует этими данными, мною было объявлено несколько классов, а именно:
Класс данных о преподавателе – DataofTeature.
class DataofTeature
{
public:
std::string name; //имя преподавателя
std::string surname; //фамилия преподавателя
std::string patronymic; //отчество преподавателя
std::string login; //логин преподавателя
std::string password; //пароль преподавателя
};
Класс данных о студенте – DataofStudent.
class DataofStudent
{
public:
std::string group; //название группы студента
std::string name; //имя студента
std::string surname; //фамилия студента
};
Основываясь на ранее представленных блок схемах, был написан код для всех функций. Разберемся с каждой функций подробнее.
Reg
Функция Reg реализует полноценную регистрацию, с записью данных о пользователе в текстовый файл.
В ходе выполнения функции, пользователю предлагается ввести ФИО, логин и пароль. После получения программой логина, проверяется его наличие в системе, если логин совпадает с ранее записанным в базу логинов, то пользователя предлагается ввести логин повторно. Как только программа получает ФИО, пароль и уникальный логин, происходит запись логина в базу для логинов (при открытие базы данных используется режим открытия ios_base::app, позволяющий открыть файл для записи в конец файла, при этом, сохраняя ранее записанные данные), создание специализированного файла для регистрационных данных пользователя, и запись в него ФИО, аналогично создается специальный файл для хранения логина и пароля конкретного пользователя. Формирования уникальных файлов происходит по принципу сложения строк. Например, path=path+teature1.login+txt, где path-путь к директории, в которой хранятся файлы программы, teature1.login – уникальный логин пользователя, txt- строка, хранящая в себе “.txt”.
void Reg()
{
std::string path = "C:\journal\regdata", datalog = "C:\journal\logdata.txt", txt = ".txt", user = "C:\journal\", delfile = "C:\journal\delfile.txt"; //объявление переменных типа string
bool flag = 1; //объявление переменной типа bool
DataofTeature teature1; //объявление переменной класса DataofTeature
std::ofstream fout; //объявление переменной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "tttРегистрация:n"; //ввод даных, необходимых для регистрации
std::cout << "Введите фамилию: ";
std::cin >> teature1.surname;
std::cout << "Введите имя: ";
std::cin >> teature1.name;
std::cout << "Введите отчество: ";
std::cin >> teature1.patronymic;
std::cout << "Введите логин: ";
std::cin >> teature1.login;
while (flag)
{
bool flag2 = 0;
fin.open(datalog);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (teature1.login == data) //проверка на существование данного логина в файле
{
flag2 = 1;
flag = 1;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Данный логин уже существует, придумайте другой логин: "; //прозьба ввести логин повторно, если введенный до этого уже существует
std::cin >> teature1.login;
flag = 1;
}
else
{
flag = 0; //изменение булевой переменной для выхода из цыкла
}
fin.close();
}
path = path + teature1.login + txt; //формирование пути, для создания файла с ФИО аккаунта
fout.open(path);
if (fout.is_open())
{
fout << teature1.surname << "n";
fout << teature1.name << "n"; //запись данных в файл
fout << teature1.patronymic << "n";
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fout.close();
std::cout << "Введите пароль: ";
std::cin >> teature1.password; //ввод пароля
fout.open(datalog, std::ios_base::app); //открыть файл для записи в конец файла
if (fout.is_open())
{
fout << teature1.login << "n"; //запись данных в файл
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fout.close();
user = user + teature1.login + txt; //формирование пути хранения логина и пароля
fout.open(user); //открытия файла
if (fout.is_open())
{
fout << teature1.login << "n";
fout << teature1.password << "n"; //запись данных в файл
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fout.close();
}
Authon
Функция Authon реализует авторизацию пользователя в программу.
В ходе выполнения функции, пользователю предлагается ввести логин и пароль. Следом идет проверка наличия логина в базе логинов, если логина в базе нет, пользователю
предлагается ввести логин повторно. Получив логин, программа открывает
специализированный файл пользователя, получая к нему путь, методом сложения
строк. В этом файле проверяется верность пароля, если пароль не совпадает, то
предлагается ввести пароль повторно. Как только все данные проверены, программа
открывает файл с ФИО пользователя и выводит на экран приветствие, используя ФИО
пользователя.
void Authon()
{
std::string path = "C:\journal\regdata", datalog = "C:\journal\logdata.txt", txt = ".txt", user = "C:\journal\", delfile = "C:\journal\delfile.txt", login, password, filelog = ""; //объявление переменных типа string
DataofTeature teature1; //объявление переменной класса DataofTeature
std::ifstream fin; //объявление переменной класса ifstream
bool flag = 1; //объявление переменной типа bool
std::cout << "tttАвторизация:n";
std::cout << "Введите логин: ";
std::cin >> login; //ввод логина
while (flag)
{
bool flag2 = 0;
fin.open(datalog); //проверка наличия логина в базе логинов
if (fin.is_open())
{
while (!fin.eof())
{
std::getline(fin, filelog);
if (login == filelog)
{
flag = 0;
flag2 = 0;
break;
}
else
{
flag2 = 1;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Такого логина не существует, введите логин повторно: n"; //просьба ввести логин повторно
std::cin >> login;
}
fin.close();
}
user = user + login + txt; //формирования пути нахождения файла с логинами и паролями
flag = 1;
std::cout << "Введите пароль: "; //ввод пароля
std::cin >> password;
while (flag)
{
bool flag2 = 0;
fin.open(user);
if (fin.is_open())
{
while (!fin.eof())
{
std::getline(fin, filelog);
if (password == filelog)
{ //проверка верности пароля
flag = 0;
flag2 = 0;
break;
}
else
{
flag2 = 1;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть//
}
if (flag2)
{
std::cout << "Пароль введен не верно, попробуйте еще раз: n"; //просьба ввести пароль повторно
std::cin >> password;
}
fin.close();
}
std::cout << "Добро пожаловать ";
path = path + login + txt;
fin.open(path);
if (fin.is_open())
{
std::string data = ""; //вывод приветствия на экран
while (!fin.eof())
{
std::getline(fin, data);
std::cout << data << " ";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
std::cout << "n";
}
GroupSelection
Функция реализует полноценный выбор группы в программе.
В ходе выполнения функции на экран выводится полный список групп, содержащихся в системе. Пользователю предоставляется возможность ввести название необходимой ему группы. После получения программой наименования, происходит проверка на наличие данной группы в списке групп, если такая группа отсутствует, то пользователю предлагается ввести название группы повторно. Как только проверка пройдена, название группы передается в глобальную переменную, для дальнейшего использования в других функциях.
void GroupSelection()
{
DataofStudent stud1; //объявление переменных класса DataofStudent
std::string allgroup = "", path = "C:\journal\allgroup\allgroup.txt", delfile = "C:\journal\allgroup\delfile.txt", path2 = "C:\journal\allgroup\", txt = ".txt", choice = ""; //объявление переменных типа string
bool flag = 1; //объявление переменных типа bool
std::ifstream fin; //объявление переменной класса ifstream
std::ofstream fout; //объявление переменной класса ofstream
std::cout << "Полный список групп: n";
fin.open(path);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data); //вывод а экран полного списка групп
std::cout << "ttt" << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть//
}
fin.close();
std::cout << "Введите название группы, которую хотите открыть: ";
std::cin >> stud1.group; //ввод название необходимой группы
while (flag)
{
bool flag2 = 1;
fin.open(path);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (stud1.group == data) //проверка на наличие введенной группы в списке групп
{
flag2 = 0;
flag = 0;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Данной группы не существует, введите другую группу: ";
std::cin >> stud1.group; //просьба ввести название группы повторно
flag = 1;
}
else
{
flag = 0; //изменение буливой переменной для выхода из цыкла
}
fin.close();
}
nameofgroup = stud1.group; //присваивание названия группы в глобальную переменную
}
Grades
Функция Grades реализует, простановку оценок студентам.
В ходе выполнения функции, пользователю предлагается ввести дату, за которую он хочет выставить оценку. После получения программой даты, происходит проверка на существование файла с оценками на данную дату. Если файл существует, то происходит его запись в специализированный промежуточный файл, это происходит для реализации корректной и органичной записи в файл отметок, без потерь данных. Если файл не существует, то программа копирует данные из файла со списком группы в промежуточный файл. Следом, на экран выводится полный список группы с отметками (если они есть). Пользователю предлагается ввести фамилию и имя студента, которому он хочет выставить оценку. Как только программа получает эти данные, происходит проверка на наличие данного студента в группе, если его нет, то пользователю предлагается ввести фамилию и имя повторно. После получения данных программой, происходит создание файла для оценок на данную дату (принцип нахождения пути файла и формирования его название – сложение строк). Следом, идет поиск данного студента в промежуточном файле. Принцип поиска и записи таков: если фамилия и имя не совпадает с введенными пользователем, то происходит запись этих данных в файл с оценками, если ФИ совпали, то пользователю предлагается ввести студенту оценку, полученная строчка записывается в файл с оценками. В конце работы функции, на экран выводится список группы с внесенными изменениями.
void Grades()
{
DataofStudent student1; //объявление переменных класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\grade", choice = ""; //объявление переменных типа string
bool flag = 0, flag2 = 1; //объявление переменных типа bool
std::ofstream fout; //объявление переменной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "Введите дату за которую вы хотите проставить оценки: ";
std::cin >> choice; //ввод даты
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
flag = 1; //проверка наличия файла с оценками на данную дату
}
fin.close();
if (flag)
{
fin.open(way + nameofgroup + attendance + choice + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof()) //запись данных существующего файла в специализированный файл
{
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
fout.close();
}
else
{
fin.open(way + nameofgroup + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{ //запись в специализированный файл списка группы
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
fout.close();
}
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof()) //вывод списка группы на экран
{
std::getline(fin, data);
std::cout << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
std::cout << "Введите фамилию и имя студента. которому вы хотите выставить оценку: " << std::endl;
std::cin >> student1.name; //ввод фамили и имени студента
while (flag2)
{
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name)
{
flag2 = 0; //проверка наличия данно ФИ в списке группы
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Такого студента не существует, повторите ввод фамилии и имени: "; //повторный ввод ФИ студента
std::cin >> student1.name;
}
fin.close();
}
fin.open(way + delfile);
fout.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name)
{
bool flag3 = 1;
for (int i = 0; i < data.length(); i++)
{ //процесс нахождения ФИ студента в файле
if (flag3 and data[i] != 't')
{
fout << data[i]; //запись данных в файл с оценками
}
else
{
flag3 = 0;
}
}
std::string choice2;
std::cout << "Введите оценку: "; //ввод оценки
std::cin >> choice2;
fout << "t" << choice2 << "n"; //запись данных в файл с оценками
}
else
{
fout << data << "n"; //запись данных в файл с оценками
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
fout.close();
std::cout << "n";
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
std::cout << "ttt" << data << "n"; //вывод измененных данных на экран
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Attendance
Функция Attendance реализует простановку посещаемости студентов с последующей записью в файл.
В ходе выполнения функции, пользователю предлагается ввести дату, за которую он хочет выставить посещаемость. После получения программой даты, происходит проверка на существование файла с посещаемостью на данную дату. Если файл существует, то происходит его запись в специализированный промежуточный файл, это происходит для реализации корректной и органичной записи в файл посещаемости, без потерь данных. Если файл не существует, то программа копирует данные из файла со списком группы в промежуточный файл. Следом, на экран выводится полный список группы с посещаемостью (если она есть). Пользователю предлагается ввести фамилию и имя студента, которому он хочет выставить посещаемость. Как только программа получает эти данные, происходит проверка на наличие данного студента в группе, если его нет, то пользователю предлагается ввести фамилию и имя повторно. После получения данных программой, происходит создание файла для посещаемости на данную дату (принцип нахождения пути файла и формирования его название – сложение строк). Следом, идет поиск данного студента в промежуточном файле. Принцип поиска и записи таков: если фамилия и имя не совпадает с введенными пользователем, то происходит запись этих данных в файл с оценками, если ФИ совпали, то пользователю предлагается ввести посещаемость студента, полученная строчка записывается в файл с посещаемостью. В конце работы функции, на экран выводится список группы с внесенными изменениями.
void Attendance()
{
DataofStudent student1; //объявление переменной класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\attendance", choice = "";//объявление переменных типа string
bool flag = 0, flag2 = 1; //объявление переменной типа bool
std::ofstream fout; //объявление пременной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "Введите дату за которую вы хотите проставить посещаемость: ";
std::cin >> choice; //ввод даты
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
flag = 1; //проверка на наличие файла
}
fin.close();
if (flag)
{
fin.open(way + nameofgroup + attendance + choice + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof()) //запись данных файла в промежуточный файл
{
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "EROR";
}
fin.close();
fout.close();
}
else
{
fin.open(way + nameofgroup + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{ //запись списка группы в промежуточный файл
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "EROR";
}
fin.close();
fout.close();
}
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
std::cout << data << "n"; //ввывод списка группы на экран
}
}
else
{
std::cout << "EROR";
}
fin.close();
std::cout << "Введите фамилию и имя студента. которому вы хотите выставить посещаемость: " << std::endl;
std::cin >> student1.name; //ввод фамили и имени студента
while (flag2)
{
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name) //проверка на наличие данного студента в группе
{
flag2 = 0;
}
}
}
else
{
std::cout << "EROR";
}
if (flag2)
{
std::cout << "Такого студента не существует, повторите ввод фамилии и имени: "; //повторный ввод ФИ студента
std::cin >> student1.name;
}
fin.close();
}
fin.open(way + delfile);
fout.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name)
{
bool flag3 = 1;
for (int i = 0; i < data.length(); i++)
{
if (flag3 and data[i] != 't')
{
fout << data[i]; //процесс нахождения студента в файле
}
else
{
flag3 = 0;
}
}
std::string choice2;
std::cout << "Введите посещаемость: ";
std::cin >> choice2; //ввод посещаемости
fout << "t" << choice2 << "n";
}
else
{
fout << data << "n";
}
}
}
else
{
std::cout << "EROR";
}
fin.close();
fout.close();
std::cout << "n";
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data); //вывод измененных данных на экран
std::cout << "ttt" << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Comment
Функция Comment реализует в программе написание комментария к дате.
В ходе выполнения функции, пользователю предлагается ввести дату, для которой он хочет написать комментарий. При получении программой даты, происходит открытие файла с режимом открытия ios_base::app (открыть файл для записи в конец файла). Наименование файла и путь его нахождения формируется, путем сложения строк. Пользователю предлагается ввести комментарий. Происходит запись данных в файл. После на экран выводятся изменённые данные файла.
void Comment()
{
DataofStudent student1;//объявление переменной класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\comment", choice = ""; //объявление переменнх типа string
std::ofstream fout;//объявление переменной класса ofstream
std::ifstream fin;//объявление переменной класса ifstream
std::cout << "Введите дату для которой вы хотите оставить коментарий: ";
std::cin >> choice; //ввод даты
fout.open(way + nameofgroup + attendance + choice + txt, std::ios_base::app);
if (fout.is_open())
{
std::string choice2;
std::cout << "Введите коментарий: "; //ввод коментария
std::cin >> choice2;
fout << choice2 << "n";
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
std::cout << "n";
fout.close();
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data); //вывод изменненных данных на экран
std::cout << "ttt" << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Deadline
Функция Deadline реализует в программе создание dedlin’а и комментария к нему, с записью этих данных в файл.
В ходе выполнения функции, пользователю предлагается ввести дату, на которую он хочет установить deadline. При получении программой даты, происходит открытие файла с режимом открытия ios_base::app (открыть файл для записи в конец файла). Наименование файла и путь его нахождения формируется, путем сложения строк. Пользователю предлагается ввести комментарий. Происходит запись данных в файл. После на экран выводятся изменённые данные файла.
void Deadline()
{
DataofStudent student1; //объявление переменной класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\deadline", choice = ""; //объявление переменной типа string
std::ofstream fout; //объявление переменной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "Введите дату на которую вы хотите установить deadline: ";
std::cin >> choice; //ввод даты
fout.open(way + nameofgroup + attendance + choice + txt, std::ios_base::app);
if (fout.is_open())
{
std::string choice2;
std::cout << "Введите коментарий к deadlin'у: "; //ввод коментария
std::cin >> choice2;
fout << choice2 << "n";
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
std::cout << "n";
fout.close();
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
std::cout << "ttt" << data << "n"; //вывод измененных данных на экран
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Main
Аналогично, основываясь на блок схеме, был написан код основной части программы.
В ходе выполнения программы, на экран выводится меню. Пользователю предлагается выбрать один из пунктов. При выборе пункта 1, вызывается функция Reg, а затем функция Authon; При выборе пункта 2, вызывается функция Authon; При выборе пункта 3 происходит выход из программы. После успешной авторизации вызывается функция GroupSelection. После выбора группы на экран выводится меню дальнейших действий. Пользователю предлагается выбрать один из пунктов. При выборе пункта 1 вызывается функция Grades; При выборе пункта 2 вызывается функция Attendance; При выборе пункта 3 вызывается функция Deadline; При выборе пункта 4 вызывается функция Comment; При выборе пункта 5 происходит выход из программы.
void main()
{
std::string choice = ""; //объявление переменной типа string
bool flag = 1; //объявление переменной типа bool
setlocale(0, ""); //установка языкового стандарта для яязыка
std::cout << "tttДобро пожаловать в электронный журналn"; //вывод меню на экран
std::cout << "tttЕсли вы ходите зарегистрироваться введите 1ntttЕсли выхотите авторизоваться введите 2ntttЕсли вы хотите закрыть программу введите 3n";
std::cin >> choice;//ввод символа, отвечающего за выбор пункта меню
if (choice == "3")
{
return; //выход из программы
}
while (flag)
{
if (choice == "1")
{
flag = 0;
Reg(); //регистрация
Authon();//авторизация
}
else
{
if (choice == "2" and flag)
{
Authon(); //авторизация
flag = 0;
}
else
{
std::cout << "Сделайте выбор повторно: ";
std::cin >> choice; //повторное осуществленеи выбора пункта меню
}
}
}
GroupSelection(); //выбор группы
std::cout << "ntttВыберете дальнейшее действие:n"; //вывод меню выбора дальнейших действий
std::cout << "tttЕсли вы хотите поставить оценку студенту, введите 1ntttЕсли проставить посещаемость, введите 2ntttЕсли вы хотите установить дату конца дедлайна, введите 3ntttЕсли вы хотите написать коментарий, введите 4ntttЕсли вы хотите закрыть программу введите 5n";
std::cin >> choice; // ввод символа, отвечающего за выбор пункта меню
flag = 1;
while (flag)
{
if (choice == "1")
{
flag = 0;
Grades(); //простанока оценки
}
if (choice == "2")
{
flag = 0;
Attendance(); //простановка посещаемости
}
if (choice == "3")
{
flag = 0;
Deadline(); //установка deadlin'a
}
if (choice == "4")
{
flag = 0;
Comment(); //написание комментария
}
if (choice == "5")
{
return; //выход из программы
}
if (choice != "1" and choice != "2" and choice != "3" and choice != "4" and choice != "5")
{
flag = 1;
std::cout << "Повторите ввод: ";
std::cin >> choice; //повторное осуществление выбора пункта меню
}
}
}
Для реализации полноценной работоспособности моей программы необходимо создать несколько текстовых файлов и директорий согласно диаграмме.
В файл allgroup.txt необходимо записать название группы. Также папке allgroup нужно создать папку с название группы и текстовый документ с названием группы, в который необходимо занести список группы.
Тестирование и отладка программы
Для проведения корректного и полного тестирования следует поставить несколько тест кейсов, а именно.
В ходе тестирования программы критических ошибок выявлено не было.
Заключение
По итогу у меня получилось разработать макет электронного журнала для преподавателей, содержащий следующие компоненты:
-
Класс DataofTeature, хранящий в себе информацию о преподавателе.
-
Класс DataofStudent, хранящий в себе информацию о студенте.
-
Функция Reg, реализующая регистраци.
-
Функцию Authon, реализующая авторизацию в программу.
-
Функция GroupSelection, реализующая выбор группы.
-
Функция Grades, реализующая простановку оценок.
-
Функция Attendance, реализующая простановку посещаемости.
-
Функция Comment, отвечающая за возможность написания комментария к дате.
-
Функция Deadline, дающая возможность установить дэдлайн и написать к нему комментарий.
-
Функция main, в которой реализовано основное взаимодействие пользователя с программой (меню и т.д.).
Весь код программы был написан в среде разработки Visual Studio 2022. Суммарный объем строк в тексте программы составляет 724.
Содержание
- Как писать компьютерные программы
- Как с нуля написать приложение? С чего начать новичку? Flutter / Программирование
- 1. Выбрать тему приложения
- 2. На каком языке писать?
- 3. Несколько советов
- 4. В заключение
- 10 лет практики. Часть 1: построение программы
- Windows: Как создать программу
- Оглавление к статье
- Сделаем что-нибудь посложнее, чем просто вывод текста на экран
- Назначим обработчики событий нажатия кнопок
- Как создавать софт, который действительно работает?
- Научитесь создавать продукт для людей
- Освойте и используйте несколько языков
- Не ведитесь на рекламу
- Придерживайтесь одного стиля
- Внедряйте минимально жизнеспособное решение
- Избегайте сложностей
- Кодирование > Конфигурация
- Не забывайте, что вы программист, а не конфигуратор
- Никогда не переставайте учиться
Как писать компьютерные программы
Соавтор(ы): Archana Ramamoorthy, MS. Арчана Рамамурти — технический директор Workday (Северная Америка). Высококлассный специалист по продуктам, поборница безопасности, сторонница большего распространения интеграции на равных для всех условиях в индустрии технологий. Получила степень бакалавра в Университете SRM и магистра в Университете Дьюка. Работает в области продакт-менеджмента более восьми лет.
Количество просмотров этой статьи: 66 208.
По мере того как технология становится все более и более доступной широкой публике, растет и потребность в программистах. Написание компьютерных кодов и программ, оно же кодинг (от английского «сoding») — это навык, который приобретается и совершенствуется на протяжении долгого времени, но даже самый опытный программист когда-то был новичком. Существует большое разнообразие языков программирования, которые великолепно подходят для начинающих программистов, вне зависимости от того, в какой сфере деятельности вы хотите применять ваши навыки (например, JavaScript довольно сложен, так что лучше начать с HTML или CSS). Узнайте, как научиться писать компьютерные программы, прочитав эту статью.
Технический директор Workday
Наш специалист делится своей историей:: «Я пришла к написанию кодов, не зная ничего ни о компьютерном дизайне, ни о программировании. Когда я захотела научиться писать программы, я начала с чтения книг по языку и с использования информации из интернета. Сегодня в мире доступно так много ресурсов, что научиться новым навыкам очень легко!»
Источник
Как с нуля написать приложение? С чего начать новичку? Flutter / Программирование
Пол года назад я сама искала такую статью и теперь я очень хочу посоветовать себе в прошлом с чего можно начать.
1. Выбрать тему приложения
Не нужно долгих мук выбора, просто начните делать то, что вам пригодилось бы. Лучше что-то простое. Нужно понимать, что мы пока не стремимся быть Биллом Гейтсом. Это наше первое приложение, наш первый шаг.
Я уже как лет 7-8 болею спортом, потому идеей моего первого приложения было — база тренировок для поддержания себя в тонусе, с упражнениями для спины, рук, попы, ну и в целом, чтобы не скучно было.
2. На каком языке писать?
Я перепробовала несколько разных языков и разных SDK, мой выбор пал на Flutter и, собственно, язык на котором он обслуживается — dart, потому что:
Грубо говоря, те, которым можно задать состояние и те, кому нет.
Пример создания StatelessWidget:
Скопировать код можно тут
В данном виджете мы создаем колонну Column, элементы которой размещаются по центру (mainAxisAlignment: MainAxisAlignment.center), внутри которой лежат два контейнера.
В первом контейнере текст ‘Hello, World!’ синего цвета, с подчеркиванием линией в стиле dottet.
Во втором синяя кнопка ‘Touch me’ с закругленными углами и белыми буквами.
Если код сложен для понимания, почитайте статьи с этого сайта, особенно «Основы Dart 2.x (Классы и объекты)».
Если непонятно про виджеты, прочтите тут(на английском)
3. Несколько советов
У Flutter достаточно объемная библиотека package. Не бойтесь их юзать. Например, я за несколько минут до отправки приложения в стор вспомнила, что у меня не работает отправка фидбека. За секунды я нашла package flutter_email_sender, прописала его в pubspec.yaml и набросала код, писать который обычно помогают в Example. Ссылка.
Смотря туториалы, настороженно относитесь к объему кода. Если задача простая. Часто то, что расписывают на три страницы правильнее решить парой строчек кода. Если вы понимаете, что решение слишком сложное, поищите другой путь. Хороший код — короткий код.
В моем приложении есть возможность посмотреть насколько вы были активны на этой неделе и я долго не могла понять как привязываться к датам и как заставить его работать. Оказалось все достаточно легко, даю вам ссылку на то, как работать с датами во Flutter.
4. В заключение
Flutter – это отличный новый инструмент, на который переходят многие специалисты и который настолько прост, что поможет и нам новичкам добиться желаемых целей.
Мой рабочий процесс строился по схеме: я не знаю как это делать — значит я учусь/ищу примеры/спрашиваю в тематических группах.
Если я все равно не понимаю, как это работает — я убираю эту возможность из своего проекта.
Часто решение приходит в голову позже.
Если оно не пришло, делайте то, что можете. Это ваш первый проект, пусть он выйдет таким, каким выйдет.
То, что у меня получилось после отсеивания всего мною неподъемного, можно посмотреть тут.
Начальное знание dart: 0.
Срок написания этого приложения: 5 месяцев.
Персонал: 1 человек (я).
Буду очень благодарна вам за обратную связь и за поддержку меня, как начинающего кодописателя. Надеюсь, я тоже помогла вам информацией. Хорошего всем дня.
Источник
10 лет практики. Часть 1: построение программы
Десять лет я пишу на С++. Первые пять лет моей задачей было писать эффективный код для компьютерных игр, потом основным требованием была стабильность, так как речь шла об автоматизации промышленных объектов. Я бы хотел поделиться своим личным опытом и практическими наработками, которые помогут создавать эффективные и в то же время стабильно работающие программы.
Материал разбит на части, от самых общих практических правил, интересных начинающим, до конкретных вопросов, актуальных опытным программистам.
В первой части я на практике дам свой ответ на самые базовые вопросы. Как вообще писать программу, в особенности — сложную программу? Что следует сделать в самом начале, чтобы потом не переделывать с нуля? Как создать оптимальную структуру программы?
Итак, коллеги, мы пишем на С++. Как правило, это значит что наши программы сложны. Некоторые — очень сложны. Чтобы программа работала как нужно мне, её создателю, требуется держать в уме то как она работает, вплоть до мельчайших деталей. Это необходимое условие, так как всё что не удалось полностью продумать — это гарантированные баги.
Удержать в голове всю картину на всех уровнях абстракции одновременно, невозможно. Поэтому я делю сложную систему на куски попроще. Каждый из них хорошо понятен и очевиден, как гвоздь. Всё что сложнее, собирается из более простых элементов. Очевидно? Конечно! Но выполнять это правило нужно неукоснительно.
Если я пишу программу, которая использует неотработанную технологию или элемент, я сначала делаю этюд. Небольшую консольную программку, которая содержит в себе нужный кусок. Этот этюд я мучаю до посинения, пока чётко не пойму как и чего работает, какие ограничения на вводные данные, какие особенности и подводные камни. Да, у меня целая директория из нескольких сотен этюдов. Каждый в конечном итоге доводится до независимого куска кода (чаще всего, класса или связки классов), который я вставляю в программу как батарейку: вытащил старую версию — воткнул новую.
«Склейка» элементов иногда представляет собой довольно сложный механизм сама по себе, а потому требует отдельного этюда. Но этого мало, когда речь идёт о сложных механизмах. Все сложные алгоритмы я записываю на бумагу. Невозможно написать на С++ то, что не можешь описать простым русским языком. Когда описываешь что-то словами, мозг натыкается на подводные камни и нестыковки. Они становятся видны в самом начале, а не в конце, когда код уже написан. Сам текст должен быть отшлифован, тонкие места — упомянуты. Ещё плюс: можно вернуться к проекту через год и не тратить недели на вспоминание почему это сделано именно так.
Для каждого заказчика я завёл по тетради. В них — все нетривиальные моменты, от создания реалистичной пены вокруг парусного фрегата, до вычисления оптимальных траекторий подъёмных кранов на узком пятачке вокруг раскалённых металлов и кислот. Если мне встречается похожая задача, я просто заглядываю в тетрадь. Там, среди перечёркнутых текстов и схемок, за 10-15 минут я воспроизвожу в памяти весь ход создания алгоритма со всеми его особенностями. Как правило, задачи не повторяются полностью, но какая-то идея оказывается нужной через три-четыре года.
Очевидно? Отлично! Чуть усложним и заглянем внутрь элементов, о которых я говорил выше…
С++ очень прост в том смысле, что классы С++ зачастую повторяют описание объектов реального мира (не в смысле прямого копирования, а в смысле названий, частично — функциональности и взаимоотношений, кроме того, в С++ бывают синтетические вспомогательные классы). Когда объект реального мира является или содержит другой объект реального мира (только один), в С++ применяется наследование классов. Если объект-потомок может содержать нескольких однотипных — применяем включение объектов в класс потомка. Однотипное поведение классов выделяем в отдельный класс (который я буду называть классом подмешивания). Всё это отлично расписано у Алена Голуба [2], так что не буду повторять мастерски написанный текст. Скажу только что это простое мнемоническое правило следует запомнить и применять на автомате.
Гораздо менее канонический вопрос в распределении прав доступа к членам и функциям-членам класса. Все конечно знают про инкапсуляцию, все читали книжки. Что со всем этим делать на практике?
На практике происходит следующее. Я делаю класс Бункер, который описывает реальный бункер, к которому подключены датчики. Бункеры объединяются в цеха, всё это выводится в красивый интерфейс, как-то взаимодействует между собой и с человеком.
Спрашивается, сколько внутренней информации о Бункере я открыл другим классам? Отвечаю: вообще ничего. Понимаете? Все члены класса — приватные. Никто извне не должен знать что у класса внутри. Причина ясна: поменял что-то в классе — и цепочка изменений потянулась по всему коду, который за секунду до этого был чист и отлажен как швейцарские часы.
Итак, Бункер не выдаёт наружу подробности своей реализации. При этом, он сам выводит себя в интерфейс, сам обрабатывает нажатия на свои контролы, сам выполняет всю работу, которая требует знания о том, как он устроен. Наружу открываются функции-члены, которые просят класс выполнить ту или иную работу: выведи себя в интерфейс, обработай нажатие мышки, сохрани себя в XML и т.д.
Вы наверное спросите: может не стоило так усложнять, почему бы не сделать классы более открытыми и дружелюбными? «Ни в коем случае» — отвечу я,- и вот почему.
Проходит два месяца работы программы, и заказчик просит меня сделать удалённое управление бункером. Потом удалённое управление требуется по разным каналам связи — от Интернет до сотовой сети и последовательного порта, причём каналы связи должны дублироваться. Время идёт, программа работает, и постепенно выясняется необходимость в удалённой синхронизации журналов действий операторов. А ещё через пару месяцев я выясняю что необходимо делать инкрементальную синхронизацию состояния бункеров и журнала при плохой связи (например, зашумлённый RS-485 или Wi-Fi на больших расстояниях).
Что я сделал? Я усложнил класс Бункер, который теперь работает либо локально, либо удалённо. Добавил ещё кое-какой код, который подхватывает настройки GSM/Ethernet/RS-232. И главное: всё остальное осталось как было. Все месяцы работы по тонкой настройке алгоритмов управления остались со мной! То же самое относилось и к журналу, и ко всему остальному.
Если бы я вынес наружу хотя бы что-то из внутренней кухни Бункера, я даже боюсь представить сколько всего мне пришлось бы переписывать из 250 кБ управляющего кода.
Ещё раз повторю важный момент: структура программы на С++ отличается от С с точностью до наоборот. Там у нас были структуры и общие переменные. Здесь у нас объекты, которые суть чёрные ящики. Каждый объект — сам себе жнец, швец, на дуде игрец.
С другой стороны, сам код класса должен быть простым. Если требуется сложный функционал, я реализую его включением в класс внутренних объектов-помощников, либо использую классы подмешивания (но более осторожно, поскольку наследование является более сильной формой сцепления, чем включение).
Напоминаю, что get/set доступ — это чуть более завуалированный вариант открытого члена класса. С этим подходом нам не по пути.
Правильный способ взаимодействия с объектом — попросить его сделать то или иное действие.
Вместо того чтобы запрашивать данные, просим объект сделать нужное действие самостоятельно. Это необходимое условие стабильности больших проектов на С++. В некоторых случаях реализация какого-то действия — просто вернуть значение члена класса (то самое исключение, которое подтверждает правило).
И последнее. Любая структура имеет ограниченный потенциал роста. Возможно, заказчик затребует такие глобальные изменения, что потребуется менять интерфейс взаимодействия между классами. Более того, может потребоваться менять структуру классов. Но и это ещё не всё: есть объективные временные рамки на обкатку программы, в ходе которых становится очевидной необходимость создать новую структуру классов.
Хочу успокоить: всё это совершенно нормально. Программой пользуются — значит программа живёт, а значит меняется и развивается её структура. Прежде чем программа станет действительно хорошей, её, почти наверняка, придётся несколько раз переписать (мои самые серьёзные программы, как правило, переписываются дважды или трижды). Такая программа обладает отличным потенциалом роста, она больше не страдает «детскими болезнями» и, как правило, работает как те самые швейцарские часы. А все наработки из прошлой версии переносятся тем проще, чем более изолированными были изначальные классы.
Источник
Windows: Как создать программу
Cоздать программу самому? Это очень просто! Не верите? Давайте сделаем небольшую программу, которая станет вашей отправной точкой в мир программирования.
Не буду рассуждать на тему зачем может потребоваться писать самостоятельно программу, у каждого свои причины. Оговорюсь сразу, что в данной статье будет использоваться язык программирования C# и среда разработки Microsoft Visual Studio, у которой имеется бесплатная редакция, возможностей которой хватит «за глаза» любому.
Оглавление к статье
Писать программу ради написания программы является не совсем хорошей идеей. Целью написания программы должно быть решение определенной задачи, с которой написанная программа должна помочь вам справиться.
Из выше сказанного, написание программы можно разделить на следующие этапы:
Так как большинство из нас не гениальные мальчики и девочки, родившиеся с клавиатурой в руках и не впитали языки программирования с молоком матери, нам понадобится текстовый редактор более функциональный и наглядный чем блокнот.
Из ключевых возможностей Visual Studio хочется отметить:
Примечание.
Ранее, когда Visual Studio не была бесплатной, как альтернативу можно было рассматривать SharpDevelop, бесплатную IDE с открытым исходным кодом, которая предоставляла функционал сходный с Visual Studio и в некоторых случаях его было достаточно для создания проэктов любой сложности. Но теперь, в виду стагнации процесса разработки SharpDevelop, и стремительного развития Visual Studio, альтернативы продукту от Microsoft просто нет.
Загрузите и установите последнюю версию, которая доступна для загрузки на сайте разработчика. С этим не должно возникнуть сложностей. После установки запустите среду разработки.
Как уже оговаривалось выше, язык программирования будет использован C#,
Открылось главное окно Visual Studio,
Перетащите кнопку Button на форму главного окна, только что созданного проекта.
Настройте только что добавленную кнопку в панели свойств:
Добавьте обработчик события нажатия кнопки: делаем двойное нажатие на кнопке, программа автоматически создаст необходимый метод bnClose_Click. Внутри метода пишем: this.Close();
При нажатии кнопки Close, окно программы закроется, в след за этим завершит работу и сама программа.
Примечание
За всеми проделанными выше действиями с созданием конпки и редактирования ее свойств, лежит создание кода программы средой разработки VisualStudio.
Откойте файл Form1.Designer.cs. Как видите, все те действия, что вы делали в настройках, отображены здесь в виде кода программы:
То-есть для среды разработки, элементы управления окна выглядят в виде кода, но для удобства, настройки графического интерфейса создаваемой программы в VisualStudio можно делать в наглядном визуальном представлении.
Сделаем что-нибудь посложнее, чем просто вывод текста на экран
В большинстве учебников для начинающих программистов первая программа выводит простое сообщение «Hello world!». Мне кажется это немного тупо, так как для того, чтоб заинтересовать начинающего программиста, нужно показать нечто большее и полезное, нежели просто окно с текстом.
Итак, давайте создадим следующие элементы интерфейса программы
Примечание: Очень удобно использовать копирование элементов пользовательского интерфейса. Для того, чтоб это сделать, нужно выделить элементы, которые нужно скопировать и при нажатой кнопке Ctrl, потянуть мышью выделенные элементы в сторону.
Попробуйте закончить настройку внешнего вида программы, чтоб она стала выглядеть так:
Высота текстового поля tbResult регулируется за счет изменения размера шрифта.
Назначим обработчики событий нажатия кнопок
Пишем код обработчика
Как видите, все методы-обработчики отличаются только одним символом. Это не есть красиво, но наведением порядка в коде мы займемся немножко позже. Сейчас для наглядности путь обработчики событий нажатия кнопки остаются как есть.
Давайте на примере операции сложения разберем как работает наша программа.
Из курса школьной программы математики мы знаем, что действия, заключенные в скобки выполняются в первую очередь. В программировании то-же самое:
Более сложные типы, такие как DateTime, могут иметь несколько мeтодов ToString().
Проверяем работу программы
Нажмите кнопку Пуск на панели инструментов, или нажмите клавишу F5
Программа работает и делает то, что от нее требовалось:
Давайте теперь перепишем программу, чтоб она могла выводить предупреждение, в случае, если было введено некорректное значение одного из операторов. Скопируйте следующий метод к себе в файл Form1.cs, там где находятся остальные обработчики *_Click:
Теперь перейдите в конструктор формы (Shift + F7) и для каждой кнопки, в качестве обработчика события Click выберите метод bnMathAction_Click.
В итоге вы должны получить файл Form1.cs следующего вида:
Источник
Как создавать софт, который действительно работает?
Вы на самом деле думаете, что у вас есть все для создания классного софта? Я открою вам один секрет: это нелегко и требует больших усилий, но всему этому можно научиться.
Вот мой список того, что необходимо для разработки проектов программного обеспечения, которое действительно хорошо продается и хорошо работает:
Научитесь создавать продукт для людей
Создание продукта для людей – это такое же умение, как и многие другие, и ему можно научиться. Я не имею ввиду визуальный дизайн (хотя это тоже является частью процесса). Я говорю скорее о том, чтобы распознать проблему и понять, как обеспечить такое взаимодействие человека с компьютером, которое гарантирует пользователю успешное решение проблем без каких-либо затруднений, вместо того, чтобы просто создавать самое что ни на есть стандартное CRUD-приложение для работы с базами данных, которое включает несколько типичных UI-компонентов.
Для этого на первых порах можно делать следующее: анализировать софт других разработчиков и то, какие задачи вам нужно решить с помощью данных программ, и что вам нужно сделать, чтобы решить их. Например, как много кликов мышкой мне нужно сделать в программе для работы с электронной почтой для того, чтобы написать ответ? Сколько мне нужно прочитать меток? Как часто мне нужно переключаться между мышью и клавиатурой? Помогает ли мне это в решении общеизвестных задач. Как насчет поиска всех вложений из писем от определенного человека – вы будете удивлены тем, как трудно это сделать с использованием ПО!
Освойте и используйте несколько языков
Если другой язык (или другая среда разработки) является лучшим решением или дает вам большие преимущества, то используйте его. Часто овладение очередным инструментом не стоит дополнительных усилий.
Не стоит недооценивать значение чего-то нового для рабочей среды: все новинки должны быть проверены, задействованы, защищены, должен быть произведен контроль – а это может занять годы.
Не ведитесь на рекламу
Используйте то, что является для вас наилучшим. Если ваша продуктивность высока на PHP, то и работайте с PHP. Конечно, иногда технологии на самом деле способны увеличить продуктивность или дать другие существенные преимущества, но я не преувеличу, если скажу о том, что это огромная редкость – такое встречается, пожалуй, раз или два в десятилетие.
Не попадитесь на крючок, поверив, что основная идея хороша только потому, что существует множество вариаций конкретной технологии. На самом деле это может указывать на то, что люди отчаянно ищут технологическое решение для неправильного подхода.
Для примера, MVC на стороне клиента для практически любого типа функциональности веб-приложения добавляет оверхэд (потому что при большем количестве слоев и необходимо больше интерфейсов между ними), уменьшает продуктивность (нужно писать больше кода, а слои усложняют процесс устранения ошибок) и на деле не улучшает пользовательский опыт.
Дизайн пользовательского интерфейса – это тяжелая работа, и использование MVC на стороне клиента не сотворит для вас магии.
Придерживайтесь одного стиля
Вместе с языками, фреймворками, библиотеками меняется и то, как вы используете язык – подобно сезонам. Один месяц вы вовсю использовали замыкания (closure), а в следующем узнаете, что это уже устарело.
Попробуйте уменьшить когнитивный стресс во время написания кода и отладки, чтобы вы могли спокойно думать над решением проблем, которые вам действительно надо решить.
Внедряйте минимально жизнеспособное решение
С этим нельзя переборщить: во время написания кода не пишите ничего, в чем код на самом деле не нуждается для нормальной работы. Не думайте заранее о том, как вы сможете расширить его в будущем. Все равно вся будет так, как вы не предполагали. Сосредоточьтесь на коде, который работает, и лучше пишите тесты, нежели тратить время на абстрактные предположения.
И не забывайте: код не высечен в камне. Его несложно реорганизовать или переписать позже, когда вам действительно нужно будет изменить или расширить его, и когда вы будете знать реальные требования.
Избегайте сложностей
Я не использую такие препроцессоры CSS или HTML, как HAML или Sass (если вам удобно с ними работать, то используйте их на здоровье и повышайте свою продуктивность!) – мой стиль написания кода и «полировки» приложений требует много возни и переделок, и для меня намного проще возиться с кодом на низшем уровне (например, просто копируя и вставляя стили и работая со средствами разработки в браузере напрямую в файле CSS).
И хотя мне очень нравится CoffeeScript, для меня все же легче просто полностью написать JavaScript. Для меня недостаточны преимущества в виде немного более чистой синтаксической конструкции и лучших языковых возможностей, чтобы потом разбираться с дополнительными шагами компиляции, более сложными настройками и дополнительным уровнем абстракции при отладке.
Все эти сложности – относительны. То, что мне кажется ужасно сложным, вы можете воспринимать как простое и естественное. Чтобы понять, какие виды работ являются для вас наилучшими, потребуется время.
Будьте честны с собой – если вы чувствуете неудобство в использовании того или иного инструмента, то, возможно, не стоит пытаться приспособить это к вашему стилю работы. Просто найдите то, что вам лучше подходит.
Кодирование > Конфигурация
Легко попасть впросак, чрезмерно полагаясь на код, написанный другими людьми. Должно быть (как вы полагаете), если многие используют этот код, то он должен быть качественным. Ведь правда? Между прочим, именно поэтому большинство людей пользуются Windows. Это то, что называется «разумной достаточностью» (satisficing), или стремление к чему-то, что кажется для достаточным для человека.
Ваш мозг всегда старается найти самое легкое решение. Он скажет вам забыть о каком-либо компоненте или библиотеки, и большинство программистов согласятся с этим. Зачем заново изобретать велосипед и страдать от известного синдрома «Придумано не нами» (Not Invented Here)?
Выбор уже готового компонента – это практически всегда не самый оптимальный путь для решения проблемы. Подобные инструменты решат вашу проблему на 80%. А затем внезапно обнаружится, что для этой простой, казалось бы, вещи, которая выглядела такой простой, нет возможности конфигурации. И теперь вам нужно заняться реорганизацией исходного кода и исправлением ошибок в выбранной библиотеке, и в конечном итоге сделать разветвление кода. После этого вам нужно понять, как правильно выполнить тесты, и здесь вдруг выясняется, что возможность проведения тестов просто-напросто отсутствует. А затем… И все в том же духе.
Не забывайте, что вы программист, а не конфигуратор
Попробуйте отслеживать время и то, чем именно вы занимаетесь во время программирования. Сюда входят: размышления о способе внедрения специфической фичи, разработка человеко-машинных интерфейсов и обеспечения взаимодействия, создание планов и списков задач для внедрения определенной функции, выбор инструментов и библиотек, облегчающих работу, создание прототипов, написание самого кода, тестирование и выполнение итераций для поиска ошибок и обеспечения должной функциональности.
Вы будете удивлены тем, как мало времени вы потратили на само написание кода по сравнению с тем, сколько ушло на выбор и настройку библиотек.
Вы могли бы сэкономить кучу времени, если будете просто писать код с нуля. Я выяснил, что написание кода часто помогает мне лучше понять область проблемы, заставляю думать о пограничных случаях. Ничего подобного никогда бы не произошло, если бы я выбрал уже готовую библиотеку, которая сделает всю работу за меня.
Никогда не переставайте учиться
Возможно, наилучший способ быть всегда в теме, это время от времени выполнять различные сайд-проекты. Это отличный вариант для того, чтобы насладиться знакомством с новыми штуками без внесения «технологического беспорядка» в свой рабочий проект.
Например, напишите микробиблиотеку с открытым исходным кодом (или даже две) и используйте ее для того, чтобы делиться с другими людьми вещами, которые вы научились использовать в работе.
Экспериментируйте и переделывайте те или иные элементы, чтобы не утратить радость программирования – создания различных вещей из ничего.
Источник
#Руководства
- 1 июн 2020
-
16
Разбираемся, как устроен язык программирования C++, что такое программы и как научиться их писать.
vlada_maestro / shutterstock
Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Чтобы научиться программировать с нуля, нужно только уметь пользоваться компьютером, устанавливать программы, создавать папки и файлы. Это первая статья из серии «Глубокое погружение в C++», с помощью которой вы сделаете первые шаги в профессии разработчика серверных приложений и игр.
Не пугайтесь большого объёма информации: чем больше вы будете знать, тем лучше сможете программировать. Это особенно важно, если вы выбрали C++, потому что на этом языке невозможно без хорошей теоретической базы написать высокопроизводительный код.
Внимание! В следующих разделах информация сильно упрощена.
Компьютер — это бесполезный кусок железа, который ни с чем не может справиться самостоятельно. И чтобы получить какой-то результат, нужно написать для него программу — подробный набор инструкций.
Компьютер понимает только машинный код — специальный язык, который очень сложно изучить. Вот как выглядит вывод на экран надписи «Hello, World!» на машинном коде (в шестнадцатеричном представлении):
BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Чтобы упростить разработку, были созданы языки программирования — с их помощью пишут инструкции для компьютера, которые понятны и человеку. Одним из первых был язык ассемблера. Вот как на нём выглядит вывод надписи «Hello, World!»:
Всё равно достаточно сложно, да? В результате человечество создало более понятные языки программирования, на которых гораздо быстрее писать программы. А чтобы они потом запускались, код переводится в машинный или какой-нибудь промежуточный язык — этот процесс называется компиляцией.
Если язык похож на машинный код, то его называют низкоуровневым. Если же он больше понятен человеку, то — высокоуровневым. C++ сочетает в себе свойства и того, и другого.
Любая программа работает с данными: она их получает, обрабатывает, а потом возвращает результат обработки. Данные могут быть переданы пользователем, считаны из файла или записаны в самом коде.
Например, браузер получает текст из адресной строки, который ввёл пользователь, отправляет адрес на сервер, а потом выводит ответ в виде страницы.
Также программа может состоять из других подпрограмм — наборов инструкций. Обработка запроса пользователя, отправка данных на сервер, получение ответа, вывод страницы — всё это подпрограммы.
Вот пример логики такой подпрограммы:
Можно вернуть данные пользователю, записать их в файл или передать другой подпрограмме. Вот ещё один пример использования программы:
Эта команда запускает программу в ОС Linux, которая конвертирует изображение img.jpg в другой формат, а потом сохраняет в файл img.png.
Сейчас слово «подпрограмма» встречается редко — вместо него используют слова «функция», «процедура» или «метод».
По традиции программистов первая программа, написанная на изучаемом языке, должна выводить на экран надпись «Hello, World!».
В C++ такой код будет выглядеть так:
#include <iostream>
int main()
{
std::cout << "Hello, World! n";
}
Попробуем его запустить, а потом разберём, как он работает.
Самый простой вариант — зайти на сайт repl.it. На главной странице нажмите Start Coding, выберите C++ и нажмите Create Repl.
У вас откроется следующая страница:
Слева — менеджер файлов, в центре — текстовый редактор, где уже введён нужный нам код, а справа — консоль, в которой выводится результат. Чтобы запустить программу, нажмите Run.
Если же вы хотите компилировать код на своём компьютере, то установите компилятор. Я пользуюсь G++, его и вам рекомендую.
- Установщик для Windows.
- Название пакета для Linux: gcc.
После установки компилятора создайте отдельную папку для кода, а в ней — файл hello.cpp (это расширение для файлов с командами на C++). Желательно, чтобы путь к папке состоял из латинских символов и был написан без пробелов.
Откройте hello.cpp с помощью любого блокнота или редактора кода (например, Sublime text или VS Code) и вставьте в него код, указанный выше. Теперь откройте терминал с помощью инструкции ниже.
Windows | Linux |
---|---|
1. Нажмите Win + R, введите cmd и нажмите Enter. | 1. Нажмите Ctrl + Alt + t. Если не помогло, то подходящий способ можно найти в этой статье. |
2. Введите команду cd [путь]. Например, cd projectscpp1, если ваша папка находится по адресу c:projectscpp1. | 2. Введите команду cd [путь]. Например: cd ~/projects/cpp1 |
3. Если папка находится не на системном диске, то команду нужно изменить: cd /D [диск:][путь]. Например: cd /D d:projectscpp1 |
Затем введите следующую команду:
Эта команда скажет компьютеру, что нужно скомпилировать код из файла hello.cpp и сохранить результат в файл hello (или hello.exe в Windows).
После этого запустите скомпилированную программу, и вы увидите, что всё работает:
Теперь, когда мы смогли запустить программу, разберёмся в ней.
Начнём с самой первой строчки:
С помощью языка программирования можно:
- писать условия;
- работать с памятью;
- создавать подпрограммы;
- работать с классами, структурами и объектами;
- выполнять базовые математические операции и так далее.
Но чтобы получить больше возможностей, программе нужно как-то взаимодействовать с операционной системой. Писать код, который будет отправлять команды ОС, достаточно сложно, но нам и не придётся — всё уже написано другими разработчиками и помещено в специальную библиотеку.
Одна из таких библиотек, iostream, позволяет запрашивать пользовательский ввод или выводить что-то в консоли.
Есть и другие библиотеки, которые помогают работать с графикой, отправлять запросы через интернет, воспроизводить звук и так далее. В будущем вы научитесь самостоятельно писать свои собственные библиотеки.
Вернёмся к коду:
main () — это подпрограмма (функция), с которой начинается выполнение любой программы на C++. Её также называют точкой входа.
Подробнее подпрограммы мы разберём в следующих статьях. Сейчас нужно знать только то, что все команды записывают в тело функции.
Настало время понять, как работают команды:
Команда cout говорит компьютеру о том, что нужно вывести определённый текст в консоли. В нашем случае — Hello, World!. Любой текст должен быть в кавычках, иначе компилятор воспримет его как идентификатор, то есть имя команды, функции, переменной и так далее. Поэкспериментируйте с текстом, запустите программу и посмотрите, что изменится.
После каждой команды должна стоять точка с запятой — она говорит компилятору, что это конец инструкции и нужно переходить к следующей.
Пространства имён (например, std) относятся к библиотекам, и их мы рассмотрим в следующих статьях.
Изучая C++, подготовьтесь к большому объёму информации. В следующий раз мы также подробно разберём ввод и хранение информации.
Листая дальше, вы перейдете на страницу курса
Научитесь: Профессия Разработчик на C++
Узнать больше